fix: reworked grading deadline (#584)
This commit is contained in:
@@ -8,3 +8,5 @@ coverage:
|
||||
default:
|
||||
target: auto
|
||||
threshold: 0%
|
||||
ignore:
|
||||
- "src/grading-settings/grading-scale/react-ranger.js"
|
||||
|
||||
10
package-lock.json
generated
10
package-lock.json
generated
@@ -34,7 +34,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",
|
||||
@@ -17908,15 +17907,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",
|
||||
|
||||
@@ -59,7 +59,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",
|
||||
|
||||
@@ -23,3 +23,5 @@ export const NOTIFICATION_MESSAGES = {
|
||||
duplicating: 'Duplicating',
|
||||
deleting: 'Deleting',
|
||||
};
|
||||
|
||||
export const DEFAULT_TIME_STAMP = '00:00';
|
||||
|
||||
@@ -61,7 +61,7 @@ describe('<GradingSettings />', () => {
|
||||
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('<GradingSettings />', () => {
|
||||
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 () => {
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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]),
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 = {}) => (
|
||||
<IntlProvider locale="en">
|
||||
<DeadlineSection
|
||||
setShowSavePrompt={jest.fn()}
|
||||
gracePeriod={gracePeriodDefaultTime}
|
||||
setGradingData={jest.fn()}
|
||||
setShowSuccessAlert={jest.fn()}
|
||||
{...props}
|
||||
@@ -29,14 +29,17 @@ const RootWrapper = (props = {}) => (
|
||||
|
||||
describe('<DeadlineSection />', () => {
|
||||
it('checking deadline label and description text', async () => {
|
||||
const { getByText } = render(<RootWrapper />);
|
||||
const { getByText } = render(<RootWrapper gracePeriod={gracePeriodDefaultTime} />);
|
||||
await waitFor(() => {
|
||||
expect(getByText(messages.gracePeriodOnDeadlineLabel.defaultMessage)).toBeInTheDocument();
|
||||
expect(getByText(messages.gracePeriodOnDeadlineDescription.defaultMessage)).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
it('checking deadline input value', async () => {
|
||||
const { getByTestId } = render(<RootWrapper setGradingData={setGradingData} />);
|
||||
const { getByTestId } = render(<RootWrapper
|
||||
gracePeriod={gracePeriodDefaultTime}
|
||||
setGradingData={setGradingData}
|
||||
/>);
|
||||
await waitFor(() => {
|
||||
const inputElement = getByTestId('deadline-period-input');
|
||||
expect(inputElement.value).toBe('12:12');
|
||||
@@ -45,4 +48,34 @@ describe('<DeadlineSection />', () => {
|
||||
expect(testObj.gracePeriod.minutes).toBe(13);
|
||||
});
|
||||
});
|
||||
it('checking deadline input value if grace Period equal null', async () => {
|
||||
const { getByTestId } = render(<RootWrapper gracePeriod={null} setGradingData={setGradingData} />);
|
||||
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(<RootWrapper
|
||||
gracePeriod={gracePeriodDefaultTime}
|
||||
setGradingData={setGradingData}
|
||||
/>);
|
||||
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();
|
||||
});
|
||||
});
|
||||
it('checking deadline input time format validation error', async () => {
|
||||
const { getByPlaceholderText, getByText } = render(<RootWrapper
|
||||
gracePeriod={gracePeriodDefaultTime}
|
||||
setGradingData={setGradingData}
|
||||
/>);
|
||||
|
||||
await waitFor(() => {
|
||||
const inputElement = getByPlaceholderText(TIME_FORMAT.toUpperCase());
|
||||
fireEvent.change(inputElement, { target: { value: '32:70' } });
|
||||
expect(getByText(`Grace period must be specified in ${TIME_FORMAT.toUpperCase()} format.`)).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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 (
|
||||
<Form.Group className="w-50">
|
||||
<Form.Group className={classNames('w-50 form-group-custom', {
|
||||
'form-group-custom_isInvalid': isError,
|
||||
})}
|
||||
>
|
||||
<Form.Label className="grading-label">
|
||||
{intl.formatMessage(messages.gracePeriodOnDeadlineLabel)}
|
||||
</Form.Label>
|
||||
<Form.Control
|
||||
data-testid="deadline-period-input"
|
||||
type="time"
|
||||
value={timeStampValue}
|
||||
value={newDeadlineValue}
|
||||
onChange={handleDeadlineChange}
|
||||
placeholder={TIME_FORMAT.toUpperCase()}
|
||||
/>
|
||||
<Form.Control.Feedback className="grading-description">
|
||||
{intl.formatMessage(messages.gracePeriodOnDeadlineDescription)}
|
||||
</Form.Control.Feedback>
|
||||
{isError && (
|
||||
<Form.Control.Feedback className="feedback-error" type="invalid">
|
||||
{intl.formatMessage(messages.gracePeriodOnDeadlineErrorMsg, { timeFormat: TIME_FORMAT.toUpperCase() })}
|
||||
</Form.Control.Feedback>
|
||||
)}
|
||||
</Form.Group>
|
||||
);
|
||||
};
|
||||
@@ -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]),
|
||||
}),
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
27
src/grading-settings/deadline-section/utils.js
Normal file
27
src/grading-settings/deadline-section/utils.js
Normal file
@@ -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 = /^(?:[01]\d|2[0-3]):[0-5]\d$/;
|
||||
|
||||
const isValid = timePattern.test(inputStr);
|
||||
setShowSavePrompt(isValid);
|
||||
setIsError(!isValid);
|
||||
|
||||
return isValid;
|
||||
}
|
||||
42
src/grading-settings/deadline-section/utils.test.js
Normal file
42
src/grading-settings/deadline-section/utils.test.js
Normal file
@@ -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);
|
||||
});
|
||||
});
|
||||
@@ -1,15 +1,16 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { useRanger } from 'react-ranger';
|
||||
import { Icon, IconButtonWithTooltip } 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;
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ describe('<GradingScale />', () => {
|
||||
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('<GradingScale />', () => {
|
||||
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');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
|
||||
359
src/grading-settings/grading-scale/react-ranger.js
vendored
Normal file
359
src/grading-settings/grading-scale/react-ranger.js
vendored
Normal file
@@ -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
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -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:",
|
||||
|
||||
@@ -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:",
|
||||
|
||||
@@ -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:",
|
||||
|
||||
@@ -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:",
|
||||
|
||||
@@ -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:",
|
||||
|
||||
@@ -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:",
|
||||
|
||||
@@ -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:",
|
||||
|
||||
@@ -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:",
|
||||
|
||||
@@ -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:",
|
||||
|
||||
@@ -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:",
|
||||
|
||||
@@ -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:",
|
||||
|
||||
@@ -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:",
|
||||
|
||||
@@ -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:",
|
||||
|
||||
@@ -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:",
|
||||
|
||||
23
src/utils.js
23
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user