From 7874c72ffb9e9bf2bbbd3113b5581aeadf5c69aa Mon Sep 17 00:00:00 2001 From: ruzniaievdm Date: Mon, 4 Sep 2023 14:45:38 +0300 Subject: [PATCH] fix: reworked grading deadline --- codecov.yml | 2 + package-lock.json | 10 - package.json | 1 - src/constants.js | 2 + src/grading-settings/GradingSettings.test.jsx | 4 +- .../assignment-section/messages.js | 2 +- .../assignment-section/utils/enum.js | 2 +- src/grading-settings/data/api.js | 4 +- .../deadline-section/DeadlineSection.test.jsx | 29 +- .../deadline-section/index.jsx | 60 ++- .../deadline-section/messages.js | 4 + .../deadline-section/utils.js | 27 ++ .../deadline-section/utils.test.js | 42 ++ .../grading-scale/GradingScale.jsx | 5 +- .../grading-scale/GradingScale.test.jsx | 4 +- .../grading-scale/messages.js | 4 + .../grading-scale/react-ranger.js | 359 ++++++++++++++++++ src/grading-settings/grading-scale/utils.js | 4 +- src/i18n/messages/ar.json | 40 -- src/i18n/messages/de.json | 39 -- src/i18n/messages/de_DE.json | 39 -- src/i18n/messages/es_419.json | 39 -- src/i18n/messages/fr.json | 39 -- src/i18n/messages/fr_CA.json | 39 -- src/i18n/messages/hi.json | 39 -- src/i18n/messages/it.json | 39 -- src/i18n/messages/it_IT.json | 39 -- src/i18n/messages/pt.json | 39 -- src/i18n/messages/pt_PT.json | 39 -- src/i18n/messages/ru.json | 3 - src/i18n/messages/uk.json | 39 -- src/i18n/messages/zh_CN.json | 39 -- src/utils.js | 23 +- 33 files changed, 538 insertions(+), 561 deletions(-) create mode 100644 src/grading-settings/deadline-section/utils.js create mode 100644 src/grading-settings/deadline-section/utils.test.js create mode 100644 src/grading-settings/grading-scale/react-ranger.js diff --git a/codecov.yml b/codecov.yml index c41479bad7..c2960b62a3 100644 --- a/codecov.yml +++ b/codecov.yml @@ -8,3 +8,5 @@ coverage: default: target: auto threshold: 0% +ignore: + - "src/grading-settings/grading-scale/react-ranger.js" diff --git a/package-lock.json b/package-lock.json index bfe7cf8d03..421232d9b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,6 @@ "react-datepicker": "^4.13.0", "react-dom": "16.14.0", "react-helmet": "^6.1.0", - "react-ranger": "^2.1.0", "react-redux": "7.1.3", "react-responsive": "8.1.0", "react-router": "5.2.0", @@ -17902,15 +17901,6 @@ "version": "1.0.4", "license": "MIT" }, - "node_modules/react-ranger": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-ranger/-/react-ranger-2.1.0.tgz", - "integrity": "sha512-d8ezhyX3v/KlN8SkyoE5e8Dybsdmn94eUAqBDsAPrVhZde8sVt6pLJw4fC784KiMmS4LyAjvtjGxhAEqjjGYgw==", - "hasInstallScript": true, - "peerDependencies": { - "react": "^16.6.3" - } - }, "node_modules/react-redux": { "version": "7.1.3", "license": "MIT", diff --git a/package.json b/package.json index 3524e700d5..c1f34edcaf 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,6 @@ "react-datepicker": "^4.13.0", "react-dom": "16.14.0", "react-helmet": "^6.1.0", - "react-ranger": "^2.1.0", "react-redux": "7.1.3", "react-responsive": "8.1.0", "react-router": "5.2.0", diff --git a/src/constants.js b/src/constants.js index a8c3742e1a..39ddc22171 100644 --- a/src/constants.js +++ b/src/constants.js @@ -23,3 +23,5 @@ export const NOTIFICATION_MESSAGES = { duplicating: 'Duplicating', deleting: 'Deleting', }; + +export const DEFAULT_TIME_STAMP = '00:00'; diff --git a/src/grading-settings/GradingSettings.test.jsx b/src/grading-settings/GradingSettings.test.jsx index d2de6a0df6..955b33d016 100644 --- a/src/grading-settings/GradingSettings.test.jsx +++ b/src/grading-settings/GradingSettings.test.jsx @@ -61,7 +61,7 @@ describe('', () => { expect(segmentInputs).toHaveLength(5); const segmentInput = segmentInputs[1]; fireEvent.change(segmentInput, { target: { value: 'Test' } }); - expect(segmentInput).toHaveValue('TEST'); + expect(segmentInput).toHaveValue('Test'); expect(getByTestId('grading-settings-save-alert')).toBeVisible(); }); }); @@ -73,7 +73,7 @@ describe('', () => { const segmentInput = segmentInputs[1]; fireEvent.change(segmentInput, { target: { value: 'Test' } }); fireEvent.click(getByText(messages.buttonCancelText.defaultMessage)); - expect(segmentInput).toHaveValue('A'); + expect(segmentInput).toHaveValue('a'); }); }); it('should save segment input changes and display saving message', async () => { diff --git a/src/grading-settings/assignment-section/messages.js b/src/grading-settings/assignment-section/messages.js index 5c1280694b..29d75447d7 100644 --- a/src/grading-settings/assignment-section/messages.js +++ b/src/grading-settings/assignment-section/messages.js @@ -15,7 +15,7 @@ const messages = defineMessages({ }, assignmentTypeNameErrorMessage2: { id: 'course-authoring.grading-settings.assignment.type-name.error.message-2', - defaultMessage: 'For grading to work, you must change all {initialAssignmentName} subsections to {value}', + defaultMessage: 'For grading to work, you must change all {initialAssignmentName} subsections to {value}.', }, assignmentTypeNameErrorMessage3: { id: 'course-authoring.grading-settings.assignment.type-name.error.message-3', diff --git a/src/grading-settings/assignment-section/utils/enum.js b/src/grading-settings/assignment-section/utils/enum.js index d145ad3784..694fd543ad 100644 --- a/src/grading-settings/assignment-section/utils/enum.js +++ b/src/grading-settings/assignment-section/utils/enum.js @@ -15,5 +15,5 @@ export const defaultAssignmentsPropTypes = { dropCount: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), shortLabel: PropTypes.string, weight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - id: PropTypes.number, + id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), }; diff --git a/src/grading-settings/data/api.js b/src/grading-settings/data/api.js index 93119d946f..e4400ca47d 100644 --- a/src/grading-settings/data/api.js +++ b/src/grading-settings/data/api.js @@ -2,7 +2,7 @@ import { camelCaseObject, getConfig } from '@edx/frontend-platform'; import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth'; -import { deepConvertingKeysToSnakeCase } from '../../utils'; +import { deepConvertingKeysToCamelCase, deepConvertingKeysToSnakeCase } from '../../utils'; const getApiBaseUrl = () => getConfig().STUDIO_BASE_URL; export const getGradingSettingsApiUrl = (courseId) => `${getApiBaseUrl()}/api/contentstore/v1/course_grading/${courseId}`; @@ -16,7 +16,7 @@ export const getCourseSettingsApiUrl = (courseId) => `${getApiBaseUrl()}/api/con export async function getGradingSettings(courseId) { const { data } = await getAuthenticatedHttpClient() .get(getGradingSettingsApiUrl(courseId)); - return camelCaseObject(data); + return deepConvertingKeysToCamelCase(data); } /** diff --git a/src/grading-settings/deadline-section/DeadlineSection.test.jsx b/src/grading-settings/deadline-section/DeadlineSection.test.jsx index e7c6e92b3b..f308bcbb3c 100644 --- a/src/grading-settings/deadline-section/DeadlineSection.test.jsx +++ b/src/grading-settings/deadline-section/DeadlineSection.test.jsx @@ -2,8 +2,9 @@ import React from 'react'; import { fireEvent, render, waitFor } from '@testing-library/react'; import { IntlProvider } from '@edx/frontend-platform/i18n'; -import DeadlineSection from '.'; +import { DEFAULT_TIME_STAMP, TIME_FORMAT } from '../../constants'; import messages from './messages'; +import DeadlineSection from '.'; const testObj = {}; @@ -19,7 +20,6 @@ const RootWrapper = (props = {}) => ( ( describe('', () => { it('checking deadline label and description text', async () => { - const { getByText } = render(); + const { getByText } = render(); await waitFor(() => { expect(getByText(messages.gracePeriodOnDeadlineLabel.defaultMessage)).toBeInTheDocument(); expect(getByText(messages.gracePeriodOnDeadlineDescription.defaultMessage)).toBeInTheDocument(); }); }); it('checking deadline input value', async () => { - const { getByTestId } = render(); + const { getByTestId } = render(); await waitFor(() => { const inputElement = getByTestId('deadline-period-input'); expect(inputElement.value).toBe('12:12'); @@ -45,4 +48,22 @@ describe('', () => { expect(testObj.gracePeriod.minutes).toBe(13); }); }); + it('checking deadline input value if grace Period equal null', async () => { + const { getByTestId } = render(); + await waitFor(() => { + const inputElement = getByTestId('deadline-period-input'); + expect(inputElement.value).toBe(DEFAULT_TIME_STAMP); + }); + }); + it('checking deadline input validation error', async () => { + const { getByPlaceholderText, getByText } = render(); + await waitFor(() => { + const inputElement = getByPlaceholderText(TIME_FORMAT.toUpperCase()); + fireEvent.change(inputElement, { target: { value: 'wrong:input format' } }); + expect(getByText(`Grace period must be specified in ${TIME_FORMAT.toUpperCase()} format.`)).toBeInTheDocument(); + }); + }); }); diff --git a/src/grading-settings/deadline-section/index.jsx b/src/grading-settings/deadline-section/index.jsx index ba27a61267..398f1f06ee 100644 --- a/src/grading-settings/deadline-section/index.jsx +++ b/src/grading-settings/deadline-section/index.jsx @@ -1,46 +1,66 @@ -import React from 'react'; +import React, { useState, useEffect } from 'react'; import PropTypes from 'prop-types'; import { Form } from '@edx/paragon'; import { injectIntl, intlShape } from '@edx/frontend-platform/i18n'; +import classNames from 'classnames'; +import { DEFAULT_TIME_STAMP, TIME_FORMAT } from '../../constants'; +import { formatTime, timerValidation } from './utils'; import messages from './messages'; -const DEFAULT_TIME_STAMP = '00:00'; - const DeadlineSection = ({ intl, setShowSavePrompt, gracePeriod, setGradingData, setShowSuccessAlert, }) => { - const formatTime = (time) => (time >= 10 ? time.toString() : `0${time}`); const timeStampValue = gracePeriod - ? `${formatTime(gracePeriod.hours) }:${ formatTime(gracePeriod.minutes)}` : DEFAULT_TIME_STAMP; + ? gracePeriod.hours && `${formatTime(gracePeriod.hours)}:${formatTime(gracePeriod.minutes)}` + : DEFAULT_TIME_STAMP; + const [newDeadlineValue, setNewDeadlineValue] = useState(timeStampValue); + const [isError, setIsError] = useState(false); + + useEffect(() => { + setNewDeadlineValue(timeStampValue); + }, [gracePeriod]); const handleDeadlineChange = (e) => { - const hoursAndMinutes = e.target.value.split(':'); - setShowSavePrompt(true); - setGradingData(prevData => ({ - ...prevData, - gracePeriod: { - hours: Number(hoursAndMinutes[0]), - minutes: parseInt(hoursAndMinutes[1] ?? 0, 10), - }, - })); - setShowSuccessAlert(false); + const { value } = e.target; + const [hours, minutes] = value.split(':'); + + setNewDeadlineValue(value); + + if (timerValidation(value, setShowSavePrompt, setIsError)) { + setGradingData(prevData => ({ + ...prevData, + gracePeriod: { + hours: +hours, + minutes: +minutes, + }, + })); + setShowSuccessAlert(false); + } }; return ( - + {intl.formatMessage(messages.gracePeriodOnDeadlineLabel)} {intl.formatMessage(messages.gracePeriodOnDeadlineDescription)} + {isError && ( + + {intl.formatMessage(messages.gracePeriodOnDeadlineErrorMsg, { timeFormat: TIME_FORMAT.toUpperCase() })} + + )} ); }; @@ -55,8 +75,8 @@ DeadlineSection.propTypes = { setGradingData: PropTypes.func.isRequired, setShowSuccessAlert: PropTypes.func.isRequired, gracePeriod: PropTypes.shape({ - hours: PropTypes.number, - minutes: PropTypes.number, + hours: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + minutes: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), }), }; diff --git a/src/grading-settings/deadline-section/messages.js b/src/grading-settings/deadline-section/messages.js index e47031228a..07230420ec 100644 --- a/src/grading-settings/deadline-section/messages.js +++ b/src/grading-settings/deadline-section/messages.js @@ -9,6 +9,10 @@ const messages = defineMessages({ id: 'course-authoring.grading-settings.deadline.description', defaultMessage: 'Leeway on due dates', }, + gracePeriodOnDeadlineErrorMsg: { + id: 'course-authoring.grading-settings.deadline.error.message', + defaultMessage: 'Grace period must be specified in {timeFormat} format.', + }, }); export default messages; diff --git a/src/grading-settings/deadline-section/utils.js b/src/grading-settings/deadline-section/utils.js new file mode 100644 index 0000000000..a7d0b439fc --- /dev/null +++ b/src/grading-settings/deadline-section/utils.js @@ -0,0 +1,27 @@ +/** + * Time format conversions for values (hours or minutes) that are less than 10. + * + * @param {number} time - incoming time data. + * @returns {string} - formatted time string. + */ +export function formatTime(time) { + return (time >= 10 ? time.toString() : `0${time}`); +} + +/** + * Validates inputStr as a time in HH:MM format. + * + * @param {string} inputStr - the input string to validate. + * @param {function} setShowSavePrompt - a function to control save prompt display. + * @param {function} setIsError - a function to set error state. + * @returns {boolean} - returns `true` if `inputStr` is a valid time, else `false`. + */ +export function timerValidation(inputStr, setShowSavePrompt, setIsError) { + const timePattern = /^\d{2,3}:\d{2}$/; + + const isValid = timePattern.test(inputStr); + setShowSavePrompt(isValid); + setIsError(!isValid); + + return isValid; +} diff --git a/src/grading-settings/deadline-section/utils.test.js b/src/grading-settings/deadline-section/utils.test.js new file mode 100644 index 0000000000..74268de64c --- /dev/null +++ b/src/grading-settings/deadline-section/utils.test.js @@ -0,0 +1,42 @@ +import { formatTime, timerValidation } from './utils'; + +const setShowSavePrompt = jest.fn(); +const setIsError = jest.fn(); + +describe('formatTime', () => { + it('formats single-digit time values correctly', () => { + expect(formatTime(5)).toBe('05'); + expect(formatTime(9)).toBe('09'); + }); + + it('does not modify double-digit time values', () => { + expect(formatTime(10)).toBe('10'); + expect(formatTime(45)).toBe('45'); + }); +}); + +describe('timerValidation', () => { + it('handles empty input', () => { + const result = timerValidation('', setShowSavePrompt, setIsError); + + expect(result).toBe(false); + expect(setShowSavePrompt).toHaveBeenCalledWith(false); + expect(setIsError).toHaveBeenCalledWith(true); + }); + + it('validates correct HH:MM input', () => { + const result = timerValidation('12:34', setShowSavePrompt, setIsError); + + expect(result).toBe(true); + expect(setShowSavePrompt).toHaveBeenCalledWith(true); + expect(setIsError).toHaveBeenCalledWith(false); + }); + + it('handles invalid input', () => { + const result = timerValidation('abc', setShowSavePrompt, setIsError); + + expect(result).toBe(false); + expect(setShowSavePrompt).toHaveBeenCalledWith(false); + expect(setIsError).toHaveBeenCalledWith(true); + }); +}); diff --git a/src/grading-settings/grading-scale/GradingScale.jsx b/src/grading-settings/grading-scale/GradingScale.jsx index 2d9ee3462c..2f1330279c 100644 --- a/src/grading-settings/grading-scale/GradingScale.jsx +++ b/src/grading-settings/grading-scale/GradingScale.jsx @@ -1,15 +1,16 @@ import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; -import { useRanger } from 'react-ranger'; import { Icon, IconButton } from '@edx/paragon'; import { Add as IconAdd } from '@edx/paragon/icons'; import { injectIntl, intlShape } from '@edx/frontend-platform/i18n'; +import { useRanger } from './react-ranger'; import messages from './messages'; import { convertGradeData, MAXIMUM_SCALE_LENGTH } from './utils'; import { GradingScaleTicks, GradingScaleHandle, GradingScaleSegment } from './components'; const DEFAULT_LETTERS = ['A', 'B', 'C', 'D']; +const getDefaultPassText = intl => intl.formatMessage(messages.defaultPassText); const GradingScale = ({ intl, @@ -144,7 +145,7 @@ const GradingScale = ({ const updatedLetters = [...prevLetters]; updatedLetters.splice(updatedLetters.length - 1, 1); - return updatedLetters.length === 1 ? ['pass'] : updatedLetters; + return updatedLetters.length === 1 ? [getDefaultPassText(intl)] : updatedLetters; }); }; diff --git a/src/grading-settings/grading-scale/GradingScale.test.jsx b/src/grading-settings/grading-scale/GradingScale.test.jsx index 3a4a662311..f311c1757f 100644 --- a/src/grading-settings/grading-scale/GradingScale.test.jsx +++ b/src/grading-settings/grading-scale/GradingScale.test.jsx @@ -90,7 +90,7 @@ describe('', () => { expect(segmentInputs).toHaveLength(5); const segmentInput = segmentInputs[1]; fireEvent.change(segmentInput, { target: { value: 'Test' } }); - expect(segmentInput).toHaveValue('TEST'); + expect(segmentInput).toHaveValue('Test'); }); }); @@ -120,7 +120,7 @@ describe('', () => { const segmentInputs = getAllByTestId('grading-scale-segment-input'); expect(segmentInputs[0]).toHaveValue('Fail'); fireEvent.change(segmentInputs[1], { target: { value: 'Test' } }); - expect(segmentInputs[1]).toHaveValue('TEST'); + expect(segmentInputs[1]).toHaveValue('Test'); }); }); }); diff --git a/src/grading-settings/grading-scale/messages.js b/src/grading-settings/grading-scale/messages.js index 10f44d1f2c..e567d293fb 100644 --- a/src/grading-settings/grading-scale/messages.js +++ b/src/grading-settings/grading-scale/messages.js @@ -13,6 +13,10 @@ const messages = defineMessages({ id: 'course-authoring.grading-settings.fail-segment.text', defaultMessage: 'Fail', }, + defaultPassText: { + id: 'course-authoring.grading-settings.default.pass.text', + defaultMessage: 'Pass', + }, }); export default messages; diff --git a/src/grading-settings/grading-scale/react-ranger.js b/src/grading-settings/grading-scale/react-ranger.js new file mode 100644 index 0000000000..ec9a224f9f --- /dev/null +++ b/src/grading-settings/grading-scale/react-ranger.js @@ -0,0 +1,359 @@ +/* eslint-disable */ +import React from 'react'; + +function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) { return {}; } + const target = {}; + const sourceKeys = Object.keys(source); + let key; let + i; + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) { continue; } + target[key] = source[key]; + } + + return target; +} + +const getBoundingClientRect = function getBoundingClientRect(element) { + const rect = element.getBoundingClientRect(); + return { + left: Math.ceil(rect.left), + width: Math.ceil(rect.width), + }; +}; + +const sortNumList = function sortNumList(arr) { + return [].concat(arr).sort((a, b) => Number(a) - Number(b)); +}; + +const useGetLatest = function useGetLatest(val) { + const ref = React.useRef(val); + ref.current = val; + return React.useCallback(() => ref.current, []); +}; + +const linearInterpolator = { + getPercentageForValue: function getPercentageForValue(val, min, max) { + return Math.max(0, Math.min(100, (val - min) / (max - min) * 100)); + }, + getValueForClientX: function getValueForClientX(clientX, trackDims, min, max) { + const { left } = trackDims; + const { width } = trackDims; + const percentageValue = (clientX - left) / width; + const value = (max - min) * percentageValue; + return value + min; + }, +}; +function useRanger(_ref) { + const _ref$interpolator = _ref.interpolator; + const interpolator = _ref$interpolator === void 0 ? linearInterpolator : _ref$interpolator; + const _ref$tickSize = _ref.tickSize; + const tickSize = _ref$tickSize === void 0 ? 10 : _ref$tickSize; + const { values } = _ref; + const { min } = _ref; + const { max } = _ref; + const controlledTicks = _ref.ticks; + const { steps } = _ref; + const { onChange } = _ref; + const { onDrag } = _ref; + const { stepSize } = _ref; + + const _React$useState = React.useState(null); + const activeHandleIndex = _React$useState[0]; + const setActiveHandleIndex = _React$useState[1]; + + const _React$useState2 = React.useState(); + const tempValues = _React$useState2[0]; + const setTempValues = _React$useState2[1]; + + const getLatest = useGetLatest({ + activeHandleIndex, + onChange, + onDrag, + values, + tempValues, + }); + const trackElRef = React.useRef(); + const getValueForClientX = React.useCallback((clientX) => { + const trackDims = getBoundingClientRect(trackElRef.current); + return interpolator.getValueForClientX(clientX, trackDims, min, max); + }, [interpolator, max, min]); + const getNextStep = React.useCallback((val, direction) => { + if (steps) { + const currIndex = steps.indexOf(val); + const nextIndex = currIndex + direction; + + if (nextIndex >= 0 && nextIndex < steps.length) { + return steps[nextIndex]; + } + return val; + } + if (process.env.NODE_ENV !== 'production') { + if (typeof stepSize === 'undefined') { + throw new Error('Warning: The option `stepSize` is expected in `useRanger`, but its value is `undefined`'); + } + } + + const nextVal = val + stepSize * direction; + + if (nextVal >= min && nextVal <= max) { + return nextVal; + } + return val; + }, [max, min, stepSize, steps]); + const roundToStep = React.useCallback((val) => { + let left = min; + let right = max; + + if (steps) { + steps.forEach((step) => { + if (step <= val && step > left) { + left = step; + } + + if (step >= val && step < right) { + right = step; + } + }); + } else { + if (process.env.NODE_ENV !== 'production') { + if (typeof stepSize === 'undefined') { + throw new Error('Warning: The option `stepSize` is expected in `useRanger`, but its value is `undefined`'); + } + } + + while (left < val && left + stepSize < val) { + left += stepSize; + } + + right = Math.min(left + stepSize, max); + } + + if (val - left < right - val) { + return left; + } + + return right; + }, [max, min, stepSize, steps]); + const handleDrag = React.useCallback((e) => { + const _getLatest = getLatest(); + const { activeHandleIndex } = _getLatest; + const { onDrag } = _getLatest; + + const clientX = e.type === 'touchmove' ? e.changedTouches[0].clientX : e.clientX; + const newValue = getValueForClientX(clientX); + const newRoundedValue = roundToStep(newValue); + const newValues = [] + .concat(values.slice(0, activeHandleIndex), [newRoundedValue], values.slice(activeHandleIndex + 1)); + + if (onDrag) { + onDrag(newValues); + } else { + setTempValues(newValues); + } + }, [getLatest, getValueForClientX, roundToStep, values]); + const handleKeyDown = React.useCallback((e, i) => { + const _getLatest2 = getLatest(); + const { values } = _getLatest2; + const _getLatest2$onChange = _getLatest2.onChange; + const onChange = _getLatest2$onChange === void 0 + ? function () {} : _getLatest2$onChange; // Left Arrow || Right Arrow + + if (e.keyCode === 37 || e.keyCode === 39) { + setActiveHandleIndex(i); + const direction = e.keyCode === 37 ? -1 : 1; + const newValue = getNextStep(values[i], direction); + const newValues = [].concat(values.slice(0, i), [newValue], values.slice(i + 1)); + const sortedValues = sortNumList(newValues); + onChange(sortedValues); + } + }, [getLatest, getNextStep]); + const handlePress = React.useCallback((e, i) => { + setActiveHandleIndex(i); + + const handleRelease = function handleRelease(e) { + const _getLatest3 = getLatest(); + const { tempValues } = _getLatest3; + const { values } = _getLatest3; + const _getLatest3$onChange = _getLatest3.onChange; + const onChange = _getLatest3$onChange === void 0 ? function () {} : _getLatest3$onChange; + const _getLatest3$onDrag = _getLatest3.onDrag; + const onDrag = _getLatest3$onDrag === void 0 ? function () {} : _getLatest3$onDrag; + + document.removeEventListener('mousemove', handleDrag); + document.removeEventListener('touchmove', handleDrag); + document.removeEventListener('mouseup', handleRelease); + document.removeEventListener('touchend', handleRelease); + const sortedValues = sortNumList(tempValues || values); + onChange(sortedValues); + onDrag(sortedValues); + setActiveHandleIndex(null); + setTempValues(); + }; + + document.addEventListener('mousemove', handleDrag); + document.addEventListener('touchmove', handleDrag); + document.addEventListener('mouseup', handleRelease); + document.addEventListener('touchend', handleRelease); + }, [getLatest, handleDrag]); + const getPercentageForValue = React.useCallback((val) => + interpolator.getPercentageForValue(val, min, max), [interpolator, max, min]); // Build the ticks + + const ticks = React.useMemo(() => { + let ticks = controlledTicks || steps; + + if (!ticks) { + ticks = [min]; + + while (ticks[ticks.length - 1] < max - tickSize) { + ticks.push(ticks[ticks.length - 1] + tickSize); + } + + ticks.push(max); + } + + return ticks.map((value, i) => ({ + value, + getTickProps: function getTickProps(_temp) { + const _ref2 = _temp === void 0 ? {} : _temp; + const _ref2$key = _ref2.key; + const key = _ref2$key === void 0 ? i : _ref2$key; + const _ref2$style = _ref2.style; + const style = _ref2$style === void 0 ? {} : _ref2$style; + const rest = _objectWithoutPropertiesLoose(_ref2, ['key', 'style']); + + return { + key, + style: { + position: 'absolute', + width: 0, + left: `${getPercentageForValue(value) }%`, + transform: 'translateX(-50%)', + ...style, + }, + ...rest, + }; + }, + })); + }, [controlledTicks, getPercentageForValue, max, min, steps, tickSize]); + const segments = React.useMemo(() => { + const sortedValues = sortNumList(tempValues || values); + return [].concat(sortedValues, [max]).map((value, i) => ({ + value, + getSegmentProps: function getSegmentProps(_temp2) { + const _ref3 = _temp2 === void 0 ? {} : _temp2; + const _ref3$key = _ref3.key; + const key = _ref3$key === void 0 ? i : _ref3$key; + const _ref3$style = _ref3.style; + const style = _ref3$style === void 0 ? {} : _ref3$style; + const rest = _objectWithoutPropertiesLoose(_ref3, ['key', 'style']); + + const left = getPercentageForValue(sortedValues[i - 1] ? sortedValues[i - 1] : min); + const width = getPercentageForValue(value) - left; + return { + key, + style: { + position: 'absolute', + left: `${left }%`, + width: `${width }%`, + ...style, + }, + ...rest, + }; + }, + })); + }, [getPercentageForValue, max, min, tempValues, values]); + const handles = React.useMemo(() => (tempValues || values).map((value, i) => ({ + value, + active: i === activeHandleIndex, + getHandleProps: function getHandleProps(_temp3) { + const _ref4 = _temp3 === void 0 ? {} : _temp3; + const _ref4$key = _ref4.key; + const key = _ref4$key === void 0 ? i : _ref4$key; + const { ref } = _ref4; + const _ref4$innerRef = _ref4.innerRef; + const _onKeyDown = _ref4.onKeyDown; + const _onMouseDown = _ref4.onMouseDown; + const _onTouchStart = _ref4.onTouchStart; + const _ref4$style = _ref4.style; + const style = _ref4$style === void 0 ? {} : _ref4$style; + const rest = _objectWithoutPropertiesLoose(_ref4, [ + 'key', 'ref', 'innerRef', 'onKeyDown', 'onMouseDown', 'onTouchStart', 'style', + ]); + + return { + key, + onKeyDown: function onKeyDown(e) { + e.persist(); + handleKeyDown(e, i); + if (_onKeyDown) { _onKeyDown(e); } + }, + onMouseDown: function onMouseDown(e) { + e.persist(); + handlePress(e, i); + if (_onMouseDown) { _onMouseDown(e); } + }, + onTouchStart: function onTouchStart(e) { + e.persist(); + handlePress(e, i); + if (_onTouchStart) { _onTouchStart(e); } + }, + role: 'slider', + 'aria-valuemin': min, + 'aria-valuemax': max, + 'aria-valuenow': value, + style: { + position: 'absolute', + top: '50%', + left: `${getPercentageForValue(value) }%`, + zIndex: i === activeHandleIndex ? '1' : '0', + transform: 'translate(-50%, -50%)', + ...style, + }, + ...rest, + }; + }, + })), [activeHandleIndex, getPercentageForValue, handleKeyDown, handlePress, min, max, tempValues, values]); + + const getTrackProps = function getTrackProps(_temp4) { + const _ref5 = _temp4 === void 0 ? {} : _temp4; + const _ref5$style = _ref5.style; + const style = _ref5$style === void 0 ? {} : _ref5$style; + const _ref6 = _ref5.ref; + const rest = _objectWithoutPropertiesLoose(_ref5, ['style', 'ref']); + + return { + ref: function ref(el) { + trackElRef.current = el; + + if (_ref6) { + if (typeof _ref6 === 'function') { + _ref6(el); + } else { + _ref6.current = el; + } + } + }, + style: { + position: 'relative', + userSelect: 'none', + ...style, + }, + ...rest, + }; + }; + + return { + activeHandleIndex, + getTrackProps, + ticks, + segments, + handles, + }; +} + +export { useRanger }; +// # sourceMappingURL=react-ranger.mjs.map diff --git a/src/grading-settings/grading-scale/utils.js b/src/grading-settings/grading-scale/utils.js index b04dd004c6..c395db3c8f 100644 --- a/src/grading-settings/grading-scale/utils.js +++ b/src/grading-settings/grading-scale/utils.js @@ -51,7 +51,7 @@ export const getLettersOnLongScale = (idx, letters, gradingSegments) => { return END_OF_SCALE_NAME; } - return letters[idx - 1].toUpperCase(); + return letters[idx - 1]; }; /** @@ -64,7 +64,7 @@ export const getLettersOnLongScale = (idx, letters, gradingSegments) => { export const getLettersOnShortScale = (idx, letters, intl) => { const END_OF_SCALE_NAME = intl.formatMessage(messages.segmentFailGradingText); - return (idx === 1 ? letters[idx - 1].toUpperCase() : END_OF_SCALE_NAME); + return (idx === 1 ? letters[idx - 1] : END_OF_SCALE_NAME); }; /** diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index 2b817efded..3911a9ecb9 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -605,44 +605,6 @@ "course-authoring.schedule-section.license.creative-commons.option.SA.label": "Share alike", "course-authoring.schedule-section.license.creative-commons.option.SA.description": "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with 'No Derivatives'.", "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.advanced-settings.alert.button.saving": "Saving", - "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", - "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", - "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", - "course-authoring.grading-settings.deadline.label": "Grace period on deadline:", - "course-authoring.grading-settings.deadline.description": "Leeway on due dates", - "course-authoring.grading-settings.alert.button.saving": "Saving", - "course-authoring.grading-settings.add-new-assignment-type.btn": "New assignment type", - "course-authoring.grading-settings.assignment-type.description": "Categories and labels for any exercises that are gradable", - "course-authoring.grading-settings.assignment-type.title": "Assignment types", - "course-authoring.grading-settings.grading-rules-policies.description": "Deadlines, requirements, and logistics around grading student work", - "course-authoring.grading-settings.grading-rules-policies.title": "Grading rules & policies", - "course-authoring.grading-settings.credit-eligibility.description": "Settings for course credit eligibility", - "course-authoring.grading-settings.credit-eligibility.title": "Credit eligibility", - "course-authoring.grading-settings.assignment.type-name.title": "Assignment type name", - "course-authoring.grading-settings.assignment.type-name.description": "The general category for this type of assignment, for example, Homework or Midterm Exam. This name is visible to learners.", - "course-authoring.grading-settings.assignment.type-name.error.message-1": "The assignment type must have a name.", - "course-authoring.grading-settings.assignment.type-name.error.message-3": "There's already another assignment type with this name.", - "course-authoring.grading-settings.assignment.abbreviation.title": "Abbreviation", - "course-authoring.grading-settings.assignment.abbreviation.description": "This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.title": "Weight of total grade", - "course-authoring.grading-settings.assignment.weight-of-total-grade.description": "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.error.message": "Please enter an integer between 0 and 100.", - "course-authoring.grading-settings.assignment.total-number.title": "Total number", - "course-authoring.grading-settings.assignment.total-number.description": "The number of subsections in the course that contain problems of this assignment type.", - "course-authoring.grading-settings.assignment.total-number.error.message": "Please enter an integer greater than 0.", - "course-authoring.grading-settings.assignment.number-of-droppable.title": "Number of droppable", - "course-authoring.grading-settings.assignment.number-of-droppable.description": "The number of assignments of this type that will be dropped. The lowest scoring assignments are dropped first.", - "course-authoring.grading-settings.assignment.number-of-droppable.error.message": "Please enter non-negative integer.", - "course-authoring.grading-settings.assignment.alert.warning.description": "There are no assignments of this type in the course.", - "course-authoring.grading-settings.assignment.delete.button": "Delete", - "course-authoring.grading-settings.assignment.number-of-droppable.second.error.message": "Cannot drop more {type} assignments than are assigned.", - "course-authoring.grading-settings.assignment.alert.warning.usage.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.warning.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.success.title": "The number of {type} assignments in the course matches the number defined here.", - "course-authoring.grading-settings.assignment.type-name.error.message-2": "For grading to work, you must change all {initialAssignmentName} subsections to {value}", - "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-team.headingTitle": "Course team", "course-authoring.course-team.subTitle": "Settings", "course-authoring.course-team.button.new-team-member": "New team member", @@ -677,7 +639,6 @@ "course-authoring.course-team.warning-modal.title": "Already a course team member", "course-authoring.course-team.warning-modal.message": "{email} is already on the {courseName} team. Recheck the email address if you want to add a new member.", "course-authoring.course-team.warning-modal.button.return": "Return to team listing", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-updates.header.title": "Course updates", "course-authoring.course-updates.header.subtitle": "Content", "course-authoring.course-updates.section-info": "Use course updates to notify students of important dates or exams, highlight particular discussions in the forums, announce schedule changes, and respond to student questions. You add or edit updates in HTML.", @@ -699,7 +660,6 @@ "course-authoring.course-updates.update-modal.inValid": "Action required: Enter a valid date.", "course-authoring.course-updates.update-modal.error-alt-text": "Error icon", "course-authoring.course-updates.update-modal.calendar-alt-text": "Calendar for datepicker input", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index 77f0fb751a..caf3630337 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -606,43 +606,6 @@ "course-authoring.schedule-section.license.creative-commons.option.SA.label": "Share alike", "course-authoring.schedule-section.license.creative-commons.option.SA.description": "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with 'No Derivatives'.", "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", - "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", - "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", - "course-authoring.grading-settings.deadline.label": "Grace period on deadline:", - "course-authoring.grading-settings.deadline.description": "Leeway on due dates", - "course-authoring.grading-settings.alert.button.saving": "Saving", - "course-authoring.grading-settings.add-new-assignment-type.btn": "New assignment type", - "course-authoring.grading-settings.assignment-type.description": "Categories and labels for any exercises that are gradable", - "course-authoring.grading-settings.assignment-type.title": "Assignment types", - "course-authoring.grading-settings.grading-rules-policies.description": "Deadlines, requirements, and logistics around grading student work", - "course-authoring.grading-settings.grading-rules-policies.title": "Grading rules & policies", - "course-authoring.grading-settings.credit-eligibility.description": "Settings for course credit eligibility", - "course-authoring.grading-settings.credit-eligibility.title": "Credit eligibility", - "course-authoring.grading-settings.assignment.type-name.title": "Assignment type name", - "course-authoring.grading-settings.assignment.type-name.description": "The general category for this type of assignment, for example, Homework or Midterm Exam. This name is visible to learners.", - "course-authoring.grading-settings.assignment.type-name.error.message-1": "The assignment type must have a name.", - "course-authoring.grading-settings.assignment.type-name.error.message-3": "There's already another assignment type with this name.", - "course-authoring.grading-settings.assignment.abbreviation.title": "Abbreviation", - "course-authoring.grading-settings.assignment.abbreviation.description": "This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.title": "Weight of total grade", - "course-authoring.grading-settings.assignment.weight-of-total-grade.description": "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.error.message": "Please enter an integer between 0 and 100.", - "course-authoring.grading-settings.assignment.total-number.title": "Total number", - "course-authoring.grading-settings.assignment.total-number.description": "The number of subsections in the course that contain problems of this assignment type.", - "course-authoring.grading-settings.assignment.total-number.error.message": "Please enter an integer greater than 0.", - "course-authoring.grading-settings.assignment.number-of-droppable.title": "Number of droppable", - "course-authoring.grading-settings.assignment.number-of-droppable.description": "The number of assignments of this type that will be dropped. The lowest scoring assignments are dropped first.", - "course-authoring.grading-settings.assignment.number-of-droppable.error.message": "Please enter non-negative integer.", - "course-authoring.grading-settings.assignment.alert.warning.description": "There are no assignments of this type in the course.", - "course-authoring.grading-settings.assignment.delete.button": "Delete", - "course-authoring.grading-settings.assignment.number-of-droppable.second.error.message": "Cannot drop more {type} assignments than are assigned.", - "course-authoring.grading-settings.assignment.alert.warning.usage.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.warning.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.success.title": "The number of {type} assignments in the course matches the number defined here.", - "course-authoring.grading-settings.assignment.type-name.error.message-2": "For grading to work, you must change all {initialAssignmentName} subsections to {value}", - "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-team.headingTitle": "Course team", "course-authoring.course-team.subTitle": "Settings", "course-authoring.course-team.button.new-team-member": "New team member", @@ -677,7 +640,6 @@ "course-authoring.course-team.warning-modal.title": "Already a course team member", "course-authoring.course-team.warning-modal.message": "{email} is already on the {courseName} team. Recheck the email address if you want to add a new member.", "course-authoring.course-team.warning-modal.button.return": "Return to team listing", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-updates.header.title": "Course updates", "course-authoring.course-updates.header.subtitle": "Content", "course-authoring.course-updates.section-info": "Use course updates to notify students of important dates or exams, highlight particular discussions in the forums, announce schedule changes, and respond to student questions. You add or edit updates in HTML.", @@ -699,7 +661,6 @@ "course-authoring.course-updates.update-modal.inValid": "Action required: Enter a valid date.", "course-authoring.course-updates.update-modal.error-alt-text": "Error icon", "course-authoring.course-updates.update-modal.calendar-alt-text": "Calendar for datepicker input", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", diff --git a/src/i18n/messages/de_DE.json b/src/i18n/messages/de_DE.json index bf1703b9bc..e53aaa9a20 100644 --- a/src/i18n/messages/de_DE.json +++ b/src/i18n/messages/de_DE.json @@ -606,43 +606,6 @@ "course-authoring.schedule-section.license.creative-commons.option.SA.label": "Share alike", "course-authoring.schedule-section.license.creative-commons.option.SA.description": "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with 'No Derivatives'.", "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", - "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", - "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", - "course-authoring.grading-settings.deadline.label": "Grace period on deadline:", - "course-authoring.grading-settings.deadline.description": "Leeway on due dates", - "course-authoring.grading-settings.alert.button.saving": "Saving", - "course-authoring.grading-settings.add-new-assignment-type.btn": "New assignment type", - "course-authoring.grading-settings.assignment-type.description": "Categories and labels for any exercises that are gradable", - "course-authoring.grading-settings.assignment-type.title": "Assignment types", - "course-authoring.grading-settings.grading-rules-policies.description": "Deadlines, requirements, and logistics around grading student work", - "course-authoring.grading-settings.grading-rules-policies.title": "Grading rules & policies", - "course-authoring.grading-settings.credit-eligibility.description": "Settings for course credit eligibility", - "course-authoring.grading-settings.credit-eligibility.title": "Credit eligibility", - "course-authoring.grading-settings.assignment.type-name.title": "Assignment type name", - "course-authoring.grading-settings.assignment.type-name.description": "The general category for this type of assignment, for example, Homework or Midterm Exam. This name is visible to learners.", - "course-authoring.grading-settings.assignment.type-name.error.message-1": "The assignment type must have a name.", - "course-authoring.grading-settings.assignment.type-name.error.message-3": "There's already another assignment type with this name.", - "course-authoring.grading-settings.assignment.abbreviation.title": "Abbreviation", - "course-authoring.grading-settings.assignment.abbreviation.description": "This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.title": "Weight of total grade", - "course-authoring.grading-settings.assignment.weight-of-total-grade.description": "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.error.message": "Please enter an integer between 0 and 100.", - "course-authoring.grading-settings.assignment.total-number.title": "Total number", - "course-authoring.grading-settings.assignment.total-number.description": "The number of subsections in the course that contain problems of this assignment type.", - "course-authoring.grading-settings.assignment.total-number.error.message": "Please enter an integer greater than 0.", - "course-authoring.grading-settings.assignment.number-of-droppable.title": "Number of droppable", - "course-authoring.grading-settings.assignment.number-of-droppable.description": "The number of assignments of this type that will be dropped. The lowest scoring assignments are dropped first.", - "course-authoring.grading-settings.assignment.number-of-droppable.error.message": "Please enter non-negative integer.", - "course-authoring.grading-settings.assignment.alert.warning.description": "There are no assignments of this type in the course.", - "course-authoring.grading-settings.assignment.delete.button": "Delete", - "course-authoring.grading-settings.assignment.number-of-droppable.second.error.message": "Cannot drop more {type} assignments than are assigned.", - "course-authoring.grading-settings.assignment.alert.warning.usage.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.warning.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.success.title": "The number of {type} assignments in the course matches the number defined here.", - "course-authoring.grading-settings.assignment.type-name.error.message-2": "For grading to work, you must change all {initialAssignmentName} subsections to {value}", - "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-team.headingTitle": "Course team", "course-authoring.course-team.subTitle": "Settings", "course-authoring.course-team.button.new-team-member": "New team member", @@ -677,7 +640,6 @@ "course-authoring.course-team.warning-modal.title": "Already a course team member", "course-authoring.course-team.warning-modal.message": "{email} is already on the {courseName} team. Recheck the email address if you want to add a new member.", "course-authoring.course-team.warning-modal.button.return": "Return to team listing", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-updates.header.title": "Course updates", "course-authoring.course-updates.header.subtitle": "Content", "course-authoring.course-updates.section-info": "Use course updates to notify students of important dates or exams, highlight particular discussions in the forums, announce schedule changes, and respond to student questions. You add or edit updates in HTML.", @@ -699,7 +661,6 @@ "course-authoring.course-updates.update-modal.inValid": "Action required: Enter a valid date.", "course-authoring.course-updates.update-modal.error-alt-text": "Error icon", "course-authoring.course-updates.update-modal.calendar-alt-text": "Calendar for datepicker input", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", diff --git a/src/i18n/messages/es_419.json b/src/i18n/messages/es_419.json index 89b2cd2cfc..527bb5ceda 100644 --- a/src/i18n/messages/es_419.json +++ b/src/i18n/messages/es_419.json @@ -606,43 +606,6 @@ "course-authoring.schedule-section.license.creative-commons.option.SA.label": "Share alike", "course-authoring.schedule-section.license.creative-commons.option.SA.description": "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with 'No Derivatives'.", "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", - "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", - "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", - "course-authoring.grading-settings.deadline.label": "Grace period on deadline:", - "course-authoring.grading-settings.deadline.description": "Leeway on due dates", - "course-authoring.grading-settings.alert.button.saving": "Saving", - "course-authoring.grading-settings.add-new-assignment-type.btn": "New assignment type", - "course-authoring.grading-settings.assignment-type.description": "Categories and labels for any exercises that are gradable", - "course-authoring.grading-settings.assignment-type.title": "Assignment types", - "course-authoring.grading-settings.grading-rules-policies.description": "Deadlines, requirements, and logistics around grading student work", - "course-authoring.grading-settings.grading-rules-policies.title": "Grading rules & policies", - "course-authoring.grading-settings.credit-eligibility.description": "Settings for course credit eligibility", - "course-authoring.grading-settings.credit-eligibility.title": "Credit eligibility", - "course-authoring.grading-settings.assignment.type-name.title": "Assignment type name", - "course-authoring.grading-settings.assignment.type-name.description": "The general category for this type of assignment, for example, Homework or Midterm Exam. This name is visible to learners.", - "course-authoring.grading-settings.assignment.type-name.error.message-1": "The assignment type must have a name.", - "course-authoring.grading-settings.assignment.type-name.error.message-3": "There's already another assignment type with this name.", - "course-authoring.grading-settings.assignment.abbreviation.title": "Abbreviation", - "course-authoring.grading-settings.assignment.abbreviation.description": "This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.title": "Weight of total grade", - "course-authoring.grading-settings.assignment.weight-of-total-grade.description": "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.error.message": "Please enter an integer between 0 and 100.", - "course-authoring.grading-settings.assignment.total-number.title": "Total number", - "course-authoring.grading-settings.assignment.total-number.description": "The number of subsections in the course that contain problems of this assignment type.", - "course-authoring.grading-settings.assignment.total-number.error.message": "Please enter an integer greater than 0.", - "course-authoring.grading-settings.assignment.number-of-droppable.title": "Number of droppable", - "course-authoring.grading-settings.assignment.number-of-droppable.description": "The number of assignments of this type that will be dropped. The lowest scoring assignments are dropped first.", - "course-authoring.grading-settings.assignment.number-of-droppable.error.message": "Please enter non-negative integer.", - "course-authoring.grading-settings.assignment.alert.warning.description": "There are no assignments of this type in the course.", - "course-authoring.grading-settings.assignment.delete.button": "Delete", - "course-authoring.grading-settings.assignment.number-of-droppable.second.error.message": "Cannot drop more {type} assignments than are assigned.", - "course-authoring.grading-settings.assignment.alert.warning.usage.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.warning.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.success.title": "The number of {type} assignments in the course matches the number defined here.", - "course-authoring.grading-settings.assignment.type-name.error.message-2": "For grading to work, you must change all {initialAssignmentName} subsections to {value}", - "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-team.headingTitle": "Course team", "course-authoring.course-team.subTitle": "Settings", "course-authoring.course-team.button.new-team-member": "New team member", @@ -677,7 +640,6 @@ "course-authoring.course-team.warning-modal.title": "Already a course team member", "course-authoring.course-team.warning-modal.message": "{email} is already on the {courseName} team. Recheck the email address if you want to add a new member.", "course-authoring.course-team.warning-modal.button.return": "Return to team listing", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-updates.header.title": "Course updates", "course-authoring.course-updates.header.subtitle": "Content", "course-authoring.course-updates.section-info": "Use course updates to notify students of important dates or exams, highlight particular discussions in the forums, announce schedule changes, and respond to student questions. You add or edit updates in HTML.", @@ -699,7 +661,6 @@ "course-authoring.course-updates.update-modal.inValid": "Action required: Enter a valid date.", "course-authoring.course-updates.update-modal.error-alt-text": "Error icon", "course-authoring.course-updates.update-modal.calendar-alt-text": "Calendar for datepicker input", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index 64a333ca3b..15f9884a18 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -606,43 +606,6 @@ "course-authoring.schedule-section.license.creative-commons.option.SA.label": "Share alike", "course-authoring.schedule-section.license.creative-commons.option.SA.description": "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with 'No Derivatives'.", "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", - "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", - "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", - "course-authoring.grading-settings.deadline.label": "Grace period on deadline:", - "course-authoring.grading-settings.deadline.description": "Leeway on due dates", - "course-authoring.grading-settings.alert.button.saving": "Saving", - "course-authoring.grading-settings.add-new-assignment-type.btn": "New assignment type", - "course-authoring.grading-settings.assignment-type.description": "Categories and labels for any exercises that are gradable", - "course-authoring.grading-settings.assignment-type.title": "Assignment types", - "course-authoring.grading-settings.grading-rules-policies.description": "Deadlines, requirements, and logistics around grading student work", - "course-authoring.grading-settings.grading-rules-policies.title": "Grading rules & policies", - "course-authoring.grading-settings.credit-eligibility.description": "Settings for course credit eligibility", - "course-authoring.grading-settings.credit-eligibility.title": "Credit eligibility", - "course-authoring.grading-settings.assignment.type-name.title": "Assignment type name", - "course-authoring.grading-settings.assignment.type-name.description": "The general category for this type of assignment, for example, Homework or Midterm Exam. This name is visible to learners.", - "course-authoring.grading-settings.assignment.type-name.error.message-1": "The assignment type must have a name.", - "course-authoring.grading-settings.assignment.type-name.error.message-3": "There's already another assignment type with this name.", - "course-authoring.grading-settings.assignment.abbreviation.title": "Abbreviation", - "course-authoring.grading-settings.assignment.abbreviation.description": "This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.title": "Weight of total grade", - "course-authoring.grading-settings.assignment.weight-of-total-grade.description": "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.error.message": "Please enter an integer between 0 and 100.", - "course-authoring.grading-settings.assignment.total-number.title": "Total number", - "course-authoring.grading-settings.assignment.total-number.description": "The number of subsections in the course that contain problems of this assignment type.", - "course-authoring.grading-settings.assignment.total-number.error.message": "Please enter an integer greater than 0.", - "course-authoring.grading-settings.assignment.number-of-droppable.title": "Number of droppable", - "course-authoring.grading-settings.assignment.number-of-droppable.description": "The number of assignments of this type that will be dropped. The lowest scoring assignments are dropped first.", - "course-authoring.grading-settings.assignment.number-of-droppable.error.message": "Please enter non-negative integer.", - "course-authoring.grading-settings.assignment.alert.warning.description": "There are no assignments of this type in the course.", - "course-authoring.grading-settings.assignment.delete.button": "Delete", - "course-authoring.grading-settings.assignment.number-of-droppable.second.error.message": "Cannot drop more {type} assignments than are assigned.", - "course-authoring.grading-settings.assignment.alert.warning.usage.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.warning.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.success.title": "The number of {type} assignments in the course matches the number defined here.", - "course-authoring.grading-settings.assignment.type-name.error.message-2": "For grading to work, you must change all {initialAssignmentName} subsections to {value}", - "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-team.headingTitle": "Course team", "course-authoring.course-team.subTitle": "Settings", "course-authoring.course-team.button.new-team-member": "New team member", @@ -677,7 +640,6 @@ "course-authoring.course-team.warning-modal.title": "Already a course team member", "course-authoring.course-team.warning-modal.message": "{email} is already on the {courseName} team. Recheck the email address if you want to add a new member.", "course-authoring.course-team.warning-modal.button.return": "Return to team listing", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-updates.header.title": "Course updates", "course-authoring.course-updates.header.subtitle": "Content", "course-authoring.course-updates.section-info": "Use course updates to notify students of important dates or exams, highlight particular discussions in the forums, announce schedule changes, and respond to student questions. You add or edit updates in HTML.", @@ -699,7 +661,6 @@ "course-authoring.course-updates.update-modal.inValid": "Action required: Enter a valid date.", "course-authoring.course-updates.update-modal.error-alt-text": "Error icon", "course-authoring.course-updates.update-modal.calendar-alt-text": "Calendar for datepicker input", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", diff --git a/src/i18n/messages/fr_CA.json b/src/i18n/messages/fr_CA.json index 0106fb8fb1..ada6d7c633 100644 --- a/src/i18n/messages/fr_CA.json +++ b/src/i18n/messages/fr_CA.json @@ -606,43 +606,6 @@ "course-authoring.schedule-section.license.creative-commons.option.SA.label": "Share alike", "course-authoring.schedule-section.license.creative-commons.option.SA.description": "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with 'No Derivatives'.", "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", - "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", - "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", - "course-authoring.grading-settings.deadline.label": "Grace period on deadline:", - "course-authoring.grading-settings.deadline.description": "Leeway on due dates", - "course-authoring.grading-settings.alert.button.saving": "Saving", - "course-authoring.grading-settings.add-new-assignment-type.btn": "New assignment type", - "course-authoring.grading-settings.assignment-type.description": "Categories and labels for any exercises that are gradable", - "course-authoring.grading-settings.assignment-type.title": "Assignment types", - "course-authoring.grading-settings.grading-rules-policies.description": "Deadlines, requirements, and logistics around grading student work", - "course-authoring.grading-settings.grading-rules-policies.title": "Grading rules & policies", - "course-authoring.grading-settings.credit-eligibility.description": "Settings for course credit eligibility", - "course-authoring.grading-settings.credit-eligibility.title": "Credit eligibility", - "course-authoring.grading-settings.assignment.type-name.title": "Assignment type name", - "course-authoring.grading-settings.assignment.type-name.description": "The general category for this type of assignment, for example, Homework or Midterm Exam. This name is visible to learners.", - "course-authoring.grading-settings.assignment.type-name.error.message-1": "The assignment type must have a name.", - "course-authoring.grading-settings.assignment.type-name.error.message-3": "There's already another assignment type with this name.", - "course-authoring.grading-settings.assignment.abbreviation.title": "Abbreviation", - "course-authoring.grading-settings.assignment.abbreviation.description": "This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.title": "Weight of total grade", - "course-authoring.grading-settings.assignment.weight-of-total-grade.description": "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.error.message": "Please enter an integer between 0 and 100.", - "course-authoring.grading-settings.assignment.total-number.title": "Total number", - "course-authoring.grading-settings.assignment.total-number.description": "The number of subsections in the course that contain problems of this assignment type.", - "course-authoring.grading-settings.assignment.total-number.error.message": "Please enter an integer greater than 0.", - "course-authoring.grading-settings.assignment.number-of-droppable.title": "Number of droppable", - "course-authoring.grading-settings.assignment.number-of-droppable.description": "The number of assignments of this type that will be dropped. The lowest scoring assignments are dropped first.", - "course-authoring.grading-settings.assignment.number-of-droppable.error.message": "Please enter non-negative integer.", - "course-authoring.grading-settings.assignment.alert.warning.description": "There are no assignments of this type in the course.", - "course-authoring.grading-settings.assignment.delete.button": "Delete", - "course-authoring.grading-settings.assignment.number-of-droppable.second.error.message": "Cannot drop more {type} assignments than are assigned.", - "course-authoring.grading-settings.assignment.alert.warning.usage.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.warning.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.success.title": "The number of {type} assignments in the course matches the number defined here.", - "course-authoring.grading-settings.assignment.type-name.error.message-2": "For grading to work, you must change all {initialAssignmentName} subsections to {value}", - "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-team.headingTitle": "Course team", "course-authoring.course-team.subTitle": "Settings", "course-authoring.course-team.button.new-team-member": "New team member", @@ -677,7 +640,6 @@ "course-authoring.course-team.warning-modal.title": "Already a course team member", "course-authoring.course-team.warning-modal.message": "{email} is already on the {courseName} team. Recheck the email address if you want to add a new member.", "course-authoring.course-team.warning-modal.button.return": "Return to team listing", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-updates.header.title": "Course updates", "course-authoring.course-updates.header.subtitle": "Content", "course-authoring.course-updates.section-info": "Use course updates to notify students of important dates or exams, highlight particular discussions in the forums, announce schedule changes, and respond to student questions. You add or edit updates in HTML.", @@ -699,7 +661,6 @@ "course-authoring.course-updates.update-modal.inValid": "Action required: Enter a valid date.", "course-authoring.course-updates.update-modal.error-alt-text": "Error icon", "course-authoring.course-updates.update-modal.calendar-alt-text": "Calendar for datepicker input", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", diff --git a/src/i18n/messages/hi.json b/src/i18n/messages/hi.json index 77f0fb751a..caf3630337 100644 --- a/src/i18n/messages/hi.json +++ b/src/i18n/messages/hi.json @@ -606,43 +606,6 @@ "course-authoring.schedule-section.license.creative-commons.option.SA.label": "Share alike", "course-authoring.schedule-section.license.creative-commons.option.SA.description": "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with 'No Derivatives'.", "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", - "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", - "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", - "course-authoring.grading-settings.deadline.label": "Grace period on deadline:", - "course-authoring.grading-settings.deadline.description": "Leeway on due dates", - "course-authoring.grading-settings.alert.button.saving": "Saving", - "course-authoring.grading-settings.add-new-assignment-type.btn": "New assignment type", - "course-authoring.grading-settings.assignment-type.description": "Categories and labels for any exercises that are gradable", - "course-authoring.grading-settings.assignment-type.title": "Assignment types", - "course-authoring.grading-settings.grading-rules-policies.description": "Deadlines, requirements, and logistics around grading student work", - "course-authoring.grading-settings.grading-rules-policies.title": "Grading rules & policies", - "course-authoring.grading-settings.credit-eligibility.description": "Settings for course credit eligibility", - "course-authoring.grading-settings.credit-eligibility.title": "Credit eligibility", - "course-authoring.grading-settings.assignment.type-name.title": "Assignment type name", - "course-authoring.grading-settings.assignment.type-name.description": "The general category for this type of assignment, for example, Homework or Midterm Exam. This name is visible to learners.", - "course-authoring.grading-settings.assignment.type-name.error.message-1": "The assignment type must have a name.", - "course-authoring.grading-settings.assignment.type-name.error.message-3": "There's already another assignment type with this name.", - "course-authoring.grading-settings.assignment.abbreviation.title": "Abbreviation", - "course-authoring.grading-settings.assignment.abbreviation.description": "This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.title": "Weight of total grade", - "course-authoring.grading-settings.assignment.weight-of-total-grade.description": "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.error.message": "Please enter an integer between 0 and 100.", - "course-authoring.grading-settings.assignment.total-number.title": "Total number", - "course-authoring.grading-settings.assignment.total-number.description": "The number of subsections in the course that contain problems of this assignment type.", - "course-authoring.grading-settings.assignment.total-number.error.message": "Please enter an integer greater than 0.", - "course-authoring.grading-settings.assignment.number-of-droppable.title": "Number of droppable", - "course-authoring.grading-settings.assignment.number-of-droppable.description": "The number of assignments of this type that will be dropped. The lowest scoring assignments are dropped first.", - "course-authoring.grading-settings.assignment.number-of-droppable.error.message": "Please enter non-negative integer.", - "course-authoring.grading-settings.assignment.alert.warning.description": "There are no assignments of this type in the course.", - "course-authoring.grading-settings.assignment.delete.button": "Delete", - "course-authoring.grading-settings.assignment.number-of-droppable.second.error.message": "Cannot drop more {type} assignments than are assigned.", - "course-authoring.grading-settings.assignment.alert.warning.usage.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.warning.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.success.title": "The number of {type} assignments in the course matches the number defined here.", - "course-authoring.grading-settings.assignment.type-name.error.message-2": "For grading to work, you must change all {initialAssignmentName} subsections to {value}", - "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-team.headingTitle": "Course team", "course-authoring.course-team.subTitle": "Settings", "course-authoring.course-team.button.new-team-member": "New team member", @@ -677,7 +640,6 @@ "course-authoring.course-team.warning-modal.title": "Already a course team member", "course-authoring.course-team.warning-modal.message": "{email} is already on the {courseName} team. Recheck the email address if you want to add a new member.", "course-authoring.course-team.warning-modal.button.return": "Return to team listing", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-updates.header.title": "Course updates", "course-authoring.course-updates.header.subtitle": "Content", "course-authoring.course-updates.section-info": "Use course updates to notify students of important dates or exams, highlight particular discussions in the forums, announce schedule changes, and respond to student questions. You add or edit updates in HTML.", @@ -699,7 +661,6 @@ "course-authoring.course-updates.update-modal.inValid": "Action required: Enter a valid date.", "course-authoring.course-updates.update-modal.error-alt-text": "Error icon", "course-authoring.course-updates.update-modal.calendar-alt-text": "Calendar for datepicker input", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json index 77f0fb751a..caf3630337 100644 --- a/src/i18n/messages/it.json +++ b/src/i18n/messages/it.json @@ -606,43 +606,6 @@ "course-authoring.schedule-section.license.creative-commons.option.SA.label": "Share alike", "course-authoring.schedule-section.license.creative-commons.option.SA.description": "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with 'No Derivatives'.", "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", - "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", - "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", - "course-authoring.grading-settings.deadline.label": "Grace period on deadline:", - "course-authoring.grading-settings.deadline.description": "Leeway on due dates", - "course-authoring.grading-settings.alert.button.saving": "Saving", - "course-authoring.grading-settings.add-new-assignment-type.btn": "New assignment type", - "course-authoring.grading-settings.assignment-type.description": "Categories and labels for any exercises that are gradable", - "course-authoring.grading-settings.assignment-type.title": "Assignment types", - "course-authoring.grading-settings.grading-rules-policies.description": "Deadlines, requirements, and logistics around grading student work", - "course-authoring.grading-settings.grading-rules-policies.title": "Grading rules & policies", - "course-authoring.grading-settings.credit-eligibility.description": "Settings for course credit eligibility", - "course-authoring.grading-settings.credit-eligibility.title": "Credit eligibility", - "course-authoring.grading-settings.assignment.type-name.title": "Assignment type name", - "course-authoring.grading-settings.assignment.type-name.description": "The general category for this type of assignment, for example, Homework or Midterm Exam. This name is visible to learners.", - "course-authoring.grading-settings.assignment.type-name.error.message-1": "The assignment type must have a name.", - "course-authoring.grading-settings.assignment.type-name.error.message-3": "There's already another assignment type with this name.", - "course-authoring.grading-settings.assignment.abbreviation.title": "Abbreviation", - "course-authoring.grading-settings.assignment.abbreviation.description": "This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.title": "Weight of total grade", - "course-authoring.grading-settings.assignment.weight-of-total-grade.description": "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.error.message": "Please enter an integer between 0 and 100.", - "course-authoring.grading-settings.assignment.total-number.title": "Total number", - "course-authoring.grading-settings.assignment.total-number.description": "The number of subsections in the course that contain problems of this assignment type.", - "course-authoring.grading-settings.assignment.total-number.error.message": "Please enter an integer greater than 0.", - "course-authoring.grading-settings.assignment.number-of-droppable.title": "Number of droppable", - "course-authoring.grading-settings.assignment.number-of-droppable.description": "The number of assignments of this type that will be dropped. The lowest scoring assignments are dropped first.", - "course-authoring.grading-settings.assignment.number-of-droppable.error.message": "Please enter non-negative integer.", - "course-authoring.grading-settings.assignment.alert.warning.description": "There are no assignments of this type in the course.", - "course-authoring.grading-settings.assignment.delete.button": "Delete", - "course-authoring.grading-settings.assignment.number-of-droppable.second.error.message": "Cannot drop more {type} assignments than are assigned.", - "course-authoring.grading-settings.assignment.alert.warning.usage.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.warning.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.success.title": "The number of {type} assignments in the course matches the number defined here.", - "course-authoring.grading-settings.assignment.type-name.error.message-2": "For grading to work, you must change all {initialAssignmentName} subsections to {value}", - "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-team.headingTitle": "Course team", "course-authoring.course-team.subTitle": "Settings", "course-authoring.course-team.button.new-team-member": "New team member", @@ -677,7 +640,6 @@ "course-authoring.course-team.warning-modal.title": "Already a course team member", "course-authoring.course-team.warning-modal.message": "{email} is already on the {courseName} team. Recheck the email address if you want to add a new member.", "course-authoring.course-team.warning-modal.button.return": "Return to team listing", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-updates.header.title": "Course updates", "course-authoring.course-updates.header.subtitle": "Content", "course-authoring.course-updates.section-info": "Use course updates to notify students of important dates or exams, highlight particular discussions in the forums, announce schedule changes, and respond to student questions. You add or edit updates in HTML.", @@ -699,7 +661,6 @@ "course-authoring.course-updates.update-modal.inValid": "Action required: Enter a valid date.", "course-authoring.course-updates.update-modal.error-alt-text": "Error icon", "course-authoring.course-updates.update-modal.calendar-alt-text": "Calendar for datepicker input", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", diff --git a/src/i18n/messages/it_IT.json b/src/i18n/messages/it_IT.json index fd53f7ac00..10f9cf32d5 100644 --- a/src/i18n/messages/it_IT.json +++ b/src/i18n/messages/it_IT.json @@ -606,43 +606,6 @@ "course-authoring.schedule-section.license.creative-commons.option.SA.label": "Share alike", "course-authoring.schedule-section.license.creative-commons.option.SA.description": "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with 'No Derivatives'.", "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", - "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", - "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", - "course-authoring.grading-settings.deadline.label": "Grace period on deadline:", - "course-authoring.grading-settings.deadline.description": "Leeway on due dates", - "course-authoring.grading-settings.alert.button.saving": "Saving", - "course-authoring.grading-settings.add-new-assignment-type.btn": "New assignment type", - "course-authoring.grading-settings.assignment-type.description": "Categories and labels for any exercises that are gradable", - "course-authoring.grading-settings.assignment-type.title": "Assignment types", - "course-authoring.grading-settings.grading-rules-policies.description": "Deadlines, requirements, and logistics around grading student work", - "course-authoring.grading-settings.grading-rules-policies.title": "Grading rules & policies", - "course-authoring.grading-settings.credit-eligibility.description": "Settings for course credit eligibility", - "course-authoring.grading-settings.credit-eligibility.title": "Credit eligibility", - "course-authoring.grading-settings.assignment.type-name.title": "Assignment type name", - "course-authoring.grading-settings.assignment.type-name.description": "The general category for this type of assignment, for example, Homework or Midterm Exam. This name is visible to learners.", - "course-authoring.grading-settings.assignment.type-name.error.message-1": "The assignment type must have a name.", - "course-authoring.grading-settings.assignment.type-name.error.message-3": "There's already another assignment type with this name.", - "course-authoring.grading-settings.assignment.abbreviation.title": "Abbreviation", - "course-authoring.grading-settings.assignment.abbreviation.description": "This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.title": "Weight of total grade", - "course-authoring.grading-settings.assignment.weight-of-total-grade.description": "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.error.message": "Please enter an integer between 0 and 100.", - "course-authoring.grading-settings.assignment.total-number.title": "Total number", - "course-authoring.grading-settings.assignment.total-number.description": "The number of subsections in the course that contain problems of this assignment type.", - "course-authoring.grading-settings.assignment.total-number.error.message": "Please enter an integer greater than 0.", - "course-authoring.grading-settings.assignment.number-of-droppable.title": "Number of droppable", - "course-authoring.grading-settings.assignment.number-of-droppable.description": "The number of assignments of this type that will be dropped. The lowest scoring assignments are dropped first.", - "course-authoring.grading-settings.assignment.number-of-droppable.error.message": "Please enter non-negative integer.", - "course-authoring.grading-settings.assignment.alert.warning.description": "There are no assignments of this type in the course.", - "course-authoring.grading-settings.assignment.delete.button": "Delete", - "course-authoring.grading-settings.assignment.number-of-droppable.second.error.message": "Cannot drop more {type} assignments than are assigned.", - "course-authoring.grading-settings.assignment.alert.warning.usage.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.warning.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.success.title": "The number of {type} assignments in the course matches the number defined here.", - "course-authoring.grading-settings.assignment.type-name.error.message-2": "For grading to work, you must change all {initialAssignmentName} subsections to {value}", - "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-team.headingTitle": "Course team", "course-authoring.course-team.subTitle": "Settings", "course-authoring.course-team.button.new-team-member": "New team member", @@ -677,7 +640,6 @@ "course-authoring.course-team.warning-modal.title": "Already a course team member", "course-authoring.course-team.warning-modal.message": "{email} is already on the {courseName} team. Recheck the email address if you want to add a new member.", "course-authoring.course-team.warning-modal.button.return": "Return to team listing", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-updates.header.title": "Course updates", "course-authoring.course-updates.header.subtitle": "Content", "course-authoring.course-updates.section-info": "Use course updates to notify students of important dates or exams, highlight particular discussions in the forums, announce schedule changes, and respond to student questions. You add or edit updates in HTML.", @@ -699,7 +661,6 @@ "course-authoring.course-updates.update-modal.inValid": "Action required: Enter a valid date.", "course-authoring.course-updates.update-modal.error-alt-text": "Error icon", "course-authoring.course-updates.update-modal.calendar-alt-text": "Calendar for datepicker input", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index 77f0fb751a..caf3630337 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -606,43 +606,6 @@ "course-authoring.schedule-section.license.creative-commons.option.SA.label": "Share alike", "course-authoring.schedule-section.license.creative-commons.option.SA.description": "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with 'No Derivatives'.", "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", - "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", - "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", - "course-authoring.grading-settings.deadline.label": "Grace period on deadline:", - "course-authoring.grading-settings.deadline.description": "Leeway on due dates", - "course-authoring.grading-settings.alert.button.saving": "Saving", - "course-authoring.grading-settings.add-new-assignment-type.btn": "New assignment type", - "course-authoring.grading-settings.assignment-type.description": "Categories and labels for any exercises that are gradable", - "course-authoring.grading-settings.assignment-type.title": "Assignment types", - "course-authoring.grading-settings.grading-rules-policies.description": "Deadlines, requirements, and logistics around grading student work", - "course-authoring.grading-settings.grading-rules-policies.title": "Grading rules & policies", - "course-authoring.grading-settings.credit-eligibility.description": "Settings for course credit eligibility", - "course-authoring.grading-settings.credit-eligibility.title": "Credit eligibility", - "course-authoring.grading-settings.assignment.type-name.title": "Assignment type name", - "course-authoring.grading-settings.assignment.type-name.description": "The general category for this type of assignment, for example, Homework or Midterm Exam. This name is visible to learners.", - "course-authoring.grading-settings.assignment.type-name.error.message-1": "The assignment type must have a name.", - "course-authoring.grading-settings.assignment.type-name.error.message-3": "There's already another assignment type with this name.", - "course-authoring.grading-settings.assignment.abbreviation.title": "Abbreviation", - "course-authoring.grading-settings.assignment.abbreviation.description": "This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.title": "Weight of total grade", - "course-authoring.grading-settings.assignment.weight-of-total-grade.description": "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.error.message": "Please enter an integer between 0 and 100.", - "course-authoring.grading-settings.assignment.total-number.title": "Total number", - "course-authoring.grading-settings.assignment.total-number.description": "The number of subsections in the course that contain problems of this assignment type.", - "course-authoring.grading-settings.assignment.total-number.error.message": "Please enter an integer greater than 0.", - "course-authoring.grading-settings.assignment.number-of-droppable.title": "Number of droppable", - "course-authoring.grading-settings.assignment.number-of-droppable.description": "The number of assignments of this type that will be dropped. The lowest scoring assignments are dropped first.", - "course-authoring.grading-settings.assignment.number-of-droppable.error.message": "Please enter non-negative integer.", - "course-authoring.grading-settings.assignment.alert.warning.description": "There are no assignments of this type in the course.", - "course-authoring.grading-settings.assignment.delete.button": "Delete", - "course-authoring.grading-settings.assignment.number-of-droppable.second.error.message": "Cannot drop more {type} assignments than are assigned.", - "course-authoring.grading-settings.assignment.alert.warning.usage.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.warning.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.success.title": "The number of {type} assignments in the course matches the number defined here.", - "course-authoring.grading-settings.assignment.type-name.error.message-2": "For grading to work, you must change all {initialAssignmentName} subsections to {value}", - "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-team.headingTitle": "Course team", "course-authoring.course-team.subTitle": "Settings", "course-authoring.course-team.button.new-team-member": "New team member", @@ -677,7 +640,6 @@ "course-authoring.course-team.warning-modal.title": "Already a course team member", "course-authoring.course-team.warning-modal.message": "{email} is already on the {courseName} team. Recheck the email address if you want to add a new member.", "course-authoring.course-team.warning-modal.button.return": "Return to team listing", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-updates.header.title": "Course updates", "course-authoring.course-updates.header.subtitle": "Content", "course-authoring.course-updates.section-info": "Use course updates to notify students of important dates or exams, highlight particular discussions in the forums, announce schedule changes, and respond to student questions. You add or edit updates in HTML.", @@ -699,7 +661,6 @@ "course-authoring.course-updates.update-modal.inValid": "Action required: Enter a valid date.", "course-authoring.course-updates.update-modal.error-alt-text": "Error icon", "course-authoring.course-updates.update-modal.calendar-alt-text": "Calendar for datepicker input", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", diff --git a/src/i18n/messages/pt_PT.json b/src/i18n/messages/pt_PT.json index ea886df5cf..cbc300f17e 100644 --- a/src/i18n/messages/pt_PT.json +++ b/src/i18n/messages/pt_PT.json @@ -606,43 +606,6 @@ "course-authoring.schedule-section.license.creative-commons.option.SA.label": "Share alike", "course-authoring.schedule-section.license.creative-commons.option.SA.description": "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with 'No Derivatives'.", "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", - "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", - "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", - "course-authoring.grading-settings.deadline.label": "Grace period on deadline:", - "course-authoring.grading-settings.deadline.description": "Leeway on due dates", - "course-authoring.grading-settings.alert.button.saving": "Saving", - "course-authoring.grading-settings.add-new-assignment-type.btn": "New assignment type", - "course-authoring.grading-settings.assignment-type.description": "Categories and labels for any exercises that are gradable", - "course-authoring.grading-settings.assignment-type.title": "Assignment types", - "course-authoring.grading-settings.grading-rules-policies.description": "Deadlines, requirements, and logistics around grading student work", - "course-authoring.grading-settings.grading-rules-policies.title": "Grading rules & policies", - "course-authoring.grading-settings.credit-eligibility.description": "Settings for course credit eligibility", - "course-authoring.grading-settings.credit-eligibility.title": "Credit eligibility", - "course-authoring.grading-settings.assignment.type-name.title": "Assignment type name", - "course-authoring.grading-settings.assignment.type-name.description": "The general category for this type of assignment, for example, Homework or Midterm Exam. This name is visible to learners.", - "course-authoring.grading-settings.assignment.type-name.error.message-1": "The assignment type must have a name.", - "course-authoring.grading-settings.assignment.type-name.error.message-3": "There's already another assignment type with this name.", - "course-authoring.grading-settings.assignment.abbreviation.title": "Abbreviation", - "course-authoring.grading-settings.assignment.abbreviation.description": "This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.title": "Weight of total grade", - "course-authoring.grading-settings.assignment.weight-of-total-grade.description": "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.error.message": "Please enter an integer between 0 and 100.", - "course-authoring.grading-settings.assignment.total-number.title": "Total number", - "course-authoring.grading-settings.assignment.total-number.description": "The number of subsections in the course that contain problems of this assignment type.", - "course-authoring.grading-settings.assignment.total-number.error.message": "Please enter an integer greater than 0.", - "course-authoring.grading-settings.assignment.number-of-droppable.title": "Number of droppable", - "course-authoring.grading-settings.assignment.number-of-droppable.description": "The number of assignments of this type that will be dropped. The lowest scoring assignments are dropped first.", - "course-authoring.grading-settings.assignment.number-of-droppable.error.message": "Please enter non-negative integer.", - "course-authoring.grading-settings.assignment.alert.warning.description": "There are no assignments of this type in the course.", - "course-authoring.grading-settings.assignment.delete.button": "Delete", - "course-authoring.grading-settings.assignment.number-of-droppable.second.error.message": "Cannot drop more {type} assignments than are assigned.", - "course-authoring.grading-settings.assignment.alert.warning.usage.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.warning.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.success.title": "The number of {type} assignments in the course matches the number defined here.", - "course-authoring.grading-settings.assignment.type-name.error.message-2": "For grading to work, you must change all {initialAssignmentName} subsections to {value}", - "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-team.headingTitle": "Course team", "course-authoring.course-team.subTitle": "Settings", "course-authoring.course-team.button.new-team-member": "New team member", @@ -677,7 +640,6 @@ "course-authoring.course-team.warning-modal.title": "Already a course team member", "course-authoring.course-team.warning-modal.message": "{email} is already on the {courseName} team. Recheck the email address if you want to add a new member.", "course-authoring.course-team.warning-modal.button.return": "Return to team listing", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-updates.header.title": "Course updates", "course-authoring.course-updates.header.subtitle": "Content", "course-authoring.course-updates.section-info": "Use course updates to notify students of important dates or exams, highlight particular discussions in the forums, announce schedule changes, and respond to student questions. You add or edit updates in HTML.", @@ -699,7 +661,6 @@ "course-authoring.course-updates.update-modal.inValid": "Action required: Enter a valid date.", "course-authoring.course-updates.update-modal.error-alt-text": "Error icon", "course-authoring.course-updates.update-modal.calendar-alt-text": "Calendar for datepicker input", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index 1d3fa2d556..61fb96195d 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -606,7 +606,6 @@ "course-authoring.schedule-section.license.creative-commons.option.SA.label": "Share alike", "course-authoring.schedule-section.license.creative-commons.option.SA.description": "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with 'No Derivatives'.", "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-team.headingTitle": "Course team", "course-authoring.course-team.subTitle": "Settings", "course-authoring.course-team.button.new-team-member": "New team member", @@ -641,7 +640,6 @@ "course-authoring.course-team.warning-modal.title": "Already a course team member", "course-authoring.course-team.warning-modal.message": "{email} is already on the {courseName} team. Recheck the email address if you want to add a new member.", "course-authoring.course-team.warning-modal.button.return": "Return to team listing", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-updates.header.title": "Course updates", "course-authoring.course-updates.header.subtitle": "Content", "course-authoring.course-updates.section-info": "Use course updates to notify students of important dates or exams, highlight particular discussions in the forums, announce schedule changes, and respond to student questions. You add or edit updates in HTML.", @@ -663,7 +661,6 @@ "course-authoring.course-updates.update-modal.inValid": "Action required: Enter a valid date.", "course-authoring.course-updates.update-modal.error-alt-text": "Error icon", "course-authoring.course-updates.update-modal.calendar-alt-text": "Calendar for datepicker input", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", diff --git a/src/i18n/messages/uk.json b/src/i18n/messages/uk.json index e8ab912b0e..06fa663b51 100644 --- a/src/i18n/messages/uk.json +++ b/src/i18n/messages/uk.json @@ -606,43 +606,6 @@ "course-authoring.schedule-section.license.creative-commons.option.SA.label": "Share alike", "course-authoring.schedule-section.license.creative-commons.option.SA.description": "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with 'No Derivatives'.", "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", - "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", - "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", - "course-authoring.grading-settings.deadline.label": "Grace period on deadline:", - "course-authoring.grading-settings.deadline.description": "Leeway on due dates", - "course-authoring.grading-settings.alert.button.saving": "Saving", - "course-authoring.grading-settings.add-new-assignment-type.btn": "New assignment type", - "course-authoring.grading-settings.assignment-type.description": "Categories and labels for any exercises that are gradable", - "course-authoring.grading-settings.assignment-type.title": "Assignment types", - "course-authoring.grading-settings.grading-rules-policies.description": "Deadlines, requirements, and logistics around grading student work", - "course-authoring.grading-settings.grading-rules-policies.title": "Grading rules & policies", - "course-authoring.grading-settings.credit-eligibility.description": "Settings for course credit eligibility", - "course-authoring.grading-settings.credit-eligibility.title": "Credit eligibility", - "course-authoring.grading-settings.assignment.type-name.title": "Assignment type name", - "course-authoring.grading-settings.assignment.type-name.description": "The general category for this type of assignment, for example, Homework or Midterm Exam. This name is visible to learners.", - "course-authoring.grading-settings.assignment.type-name.error.message-1": "The assignment type must have a name.", - "course-authoring.grading-settings.assignment.type-name.error.message-3": "There's already another assignment type with this name.", - "course-authoring.grading-settings.assignment.abbreviation.title": "Abbreviation", - "course-authoring.grading-settings.assignment.abbreviation.description": "This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.title": "Weight of total grade", - "course-authoring.grading-settings.assignment.weight-of-total-grade.description": "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.error.message": "Please enter an integer between 0 and 100.", - "course-authoring.grading-settings.assignment.total-number.title": "Total number", - "course-authoring.grading-settings.assignment.total-number.description": "The number of subsections in the course that contain problems of this assignment type.", - "course-authoring.grading-settings.assignment.total-number.error.message": "Please enter an integer greater than 0.", - "course-authoring.grading-settings.assignment.number-of-droppable.title": "Number of droppable", - "course-authoring.grading-settings.assignment.number-of-droppable.description": "The number of assignments of this type that will be dropped. The lowest scoring assignments are dropped first.", - "course-authoring.grading-settings.assignment.number-of-droppable.error.message": "Please enter non-negative integer.", - "course-authoring.grading-settings.assignment.alert.warning.description": "There are no assignments of this type in the course.", - "course-authoring.grading-settings.assignment.delete.button": "Delete", - "course-authoring.grading-settings.assignment.number-of-droppable.second.error.message": "Cannot drop more {type} assignments than are assigned.", - "course-authoring.grading-settings.assignment.alert.warning.usage.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.warning.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.success.title": "The number of {type} assignments in the course matches the number defined here.", - "course-authoring.grading-settings.assignment.type-name.error.message-2": "For grading to work, you must change all {initialAssignmentName} subsections to {value}", - "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-updates.header.title": "Course updates", "course-authoring.course-updates.header.subtitle": "Content", "course-authoring.course-updates.section-info": "Use course updates to notify students of important dates or exams, highlight particular discussions in the forums, announce schedule changes, and respond to student questions. You add or edit updates in HTML.", @@ -664,7 +627,6 @@ "course-authoring.course-updates.update-form.inValid": "Action required: Enter a valid date.", "course-authoring.course-updates.update-form.error-alt-text": "Error icon", "course-authoring.course-updates.update-form.calendar-alt-text": "Calendar for datepicker input", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-team.headingTitle": "Course team", "course-authoring.course-team.subTitle": "Settings", "course-authoring.course-team.button.new-team-member": "New team member", @@ -699,7 +661,6 @@ "course-authoring.course-team.warning-modal.title": "Already a course team member", "course-authoring.course-team.warning-modal.message": "{email} is already on the {courseName} team. Recheck the email address if you want to add a new member.", "course-authoring.course-team.warning-modal.button.return": "Return to team listing", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", diff --git a/src/i18n/messages/zh_CN.json b/src/i18n/messages/zh_CN.json index 77f0fb751a..caf3630337 100644 --- a/src/i18n/messages/zh_CN.json +++ b/src/i18n/messages/zh_CN.json @@ -606,43 +606,6 @@ "course-authoring.schedule-section.license.creative-commons.option.SA.label": "Share alike", "course-authoring.schedule-section.license.creative-commons.option.SA.description": "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with 'No Derivatives'.", "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", - "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", - "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", - "course-authoring.grading-settings.deadline.label": "Grace period on deadline:", - "course-authoring.grading-settings.deadline.description": "Leeway on due dates", - "course-authoring.grading-settings.alert.button.saving": "Saving", - "course-authoring.grading-settings.add-new-assignment-type.btn": "New assignment type", - "course-authoring.grading-settings.assignment-type.description": "Categories and labels for any exercises that are gradable", - "course-authoring.grading-settings.assignment-type.title": "Assignment types", - "course-authoring.grading-settings.grading-rules-policies.description": "Deadlines, requirements, and logistics around grading student work", - "course-authoring.grading-settings.grading-rules-policies.title": "Grading rules & policies", - "course-authoring.grading-settings.credit-eligibility.description": "Settings for course credit eligibility", - "course-authoring.grading-settings.credit-eligibility.title": "Credit eligibility", - "course-authoring.grading-settings.assignment.type-name.title": "Assignment type name", - "course-authoring.grading-settings.assignment.type-name.description": "The general category for this type of assignment, for example, Homework or Midterm Exam. This name is visible to learners.", - "course-authoring.grading-settings.assignment.type-name.error.message-1": "The assignment type must have a name.", - "course-authoring.grading-settings.assignment.type-name.error.message-3": "There's already another assignment type with this name.", - "course-authoring.grading-settings.assignment.abbreviation.title": "Abbreviation", - "course-authoring.grading-settings.assignment.abbreviation.description": "This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.title": "Weight of total grade", - "course-authoring.grading-settings.assignment.weight-of-total-grade.description": "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.", - "course-authoring.grading-settings.assignment.weight-of-total-grade.error.message": "Please enter an integer between 0 and 100.", - "course-authoring.grading-settings.assignment.total-number.title": "Total number", - "course-authoring.grading-settings.assignment.total-number.description": "The number of subsections in the course that contain problems of this assignment type.", - "course-authoring.grading-settings.assignment.total-number.error.message": "Please enter an integer greater than 0.", - "course-authoring.grading-settings.assignment.number-of-droppable.title": "Number of droppable", - "course-authoring.grading-settings.assignment.number-of-droppable.description": "The number of assignments of this type that will be dropped. The lowest scoring assignments are dropped first.", - "course-authoring.grading-settings.assignment.number-of-droppable.error.message": "Please enter non-negative integer.", - "course-authoring.grading-settings.assignment.alert.warning.description": "There are no assignments of this type in the course.", - "course-authoring.grading-settings.assignment.delete.button": "Delete", - "course-authoring.grading-settings.assignment.number-of-droppable.second.error.message": "Cannot drop more {type} assignments than are assigned.", - "course-authoring.grading-settings.assignment.alert.warning.usage.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.warning.title": "Warning: The number of {type} assignments defined here does not match the current number of {type} assignments in the course:", - "course-authoring.grading-settings.assignment.alert.success.title": "The number of {type} assignments in the course matches the number defined here.", - "course-authoring.grading-settings.assignment.type-name.error.message-2": "For grading to work, you must change all {initialAssignmentName} subsections to {value}", - "course-authoring.schedule.alert.button.saving": "Saving", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-team.headingTitle": "Course team", "course-authoring.course-team.subTitle": "Settings", "course-authoring.course-team.button.new-team-member": "New team member", @@ -677,7 +640,6 @@ "course-authoring.course-team.warning-modal.title": "Already a course team member", "course-authoring.course-team.warning-modal.message": "{email} is already on the {courseName} team. Recheck the email address if you want to add a new member.", "course-authoring.course-team.warning-modal.button.return": "Return to team listing", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.course-updates.header.title": "Course updates", "course-authoring.course-updates.header.subtitle": "Content", "course-authoring.course-updates.section-info": "Use course updates to notify students of important dates or exams, highlight particular discussions in the forums, announce schedule changes, and respond to student questions. You add or edit updates in HTML.", @@ -699,7 +661,6 @@ "course-authoring.course-updates.update-modal.inValid": "Action required: Enter a valid date.", "course-authoring.course-updates.update-modal.error-alt-text": "Error icon", "course-authoring.course-updates.update-modal.calendar-alt-text": "Calendar for datepicker input", - "course-authoring.advanced-settings.alert.button.saving": "Saving", "course-authoring.grading-settings.credit.eligibility.label": "Minimum credit-eligible grade:", "course-authoring.grading-settings.credit.eligibility.description": "% Must be greater than or equal to the course passing grade", "course-authoring.grading-settings.credit.eligibility.error.msg": "Not able to set passing grade to less than:", diff --git a/src/utils.js b/src/utils.js index 469ef65ab2..67a37e6db7 100644 --- a/src/utils.js +++ b/src/utils.js @@ -39,6 +39,23 @@ export function convertObjectToSnakeCase(obj, unpacked = false) { }, {}); } +export function deepConvertingKeysToCamelCase(obj) { + if (typeof obj !== 'object' || obj === null) { + return obj; + } + + if (Array.isArray(obj)) { + return obj.map((item) => deepConvertingKeysToCamelCase(item)); + } + + const camelCaseObj = {}; + Object.keys(obj).forEach((key) => { + const camelCaseKey = key.replace(/_([a-z])/g, (match, p1) => p1.toUpperCase()); + camelCaseObj[camelCaseKey] = deepConvertingKeysToCamelCase(obj[key]); + }); + return camelCaseObj; +} + export function deepConvertingKeysToSnakeCase(obj) { if (typeof obj !== 'object' || obj === null) { return obj; @@ -49,9 +66,9 @@ export function deepConvertingKeysToSnakeCase(obj) { } const snakeCaseObj = {}; - Object.keys(obj).forEach((key) => { - const snakeCaseKey = snakeCase(key); - snakeCaseObj[snakeCaseKey] = deepConvertingKeysToSnakeCase(obj[key]); + Object.entries(obj).forEach(([key, value]) => { + const snakeCaseKey = key.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase(); + snakeCaseObj[snakeCaseKey] = key === 'gradeCutoffs' ? value : deepConvertingKeysToSnakeCase(value); }); return snakeCaseObj; }