UNPKG

@instructure/quiz-interactions

Version:

A React UI component Library for quiz interaction types.

60 lines 2.62 kB
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import escapeRegExp from 'lodash/escapeRegExp'; import { formatPlain } from '@instructure/quiz-i18n'; import { isScientificNotation, parseScientificNotation } from '@instructure/quiz-scientific-notation'; import additionalFunctions from './additional_functions'; var openingQuote = '`'; var closingQuote = '`'; function formatNumber(value, locale, mathquill) { var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; return isScientificNotation(value) ? formatScientificNotation(value, mathquill) : formatPlain(value, locale, opts); } function formatScientificNotation(value, mathquill) { if (!mathquill) return value; var _parseScientificNotat = parseScientificNotation(value), _parseScientificNotat2 = _slicedToArray(_parseScientificNotat, 2), mantissa = _parseScientificNotat2[0], exponent = _parseScientificNotat2[1]; return "".concat(mantissa, "*10^{").concat(exponent, "}"); } export function substituteVars(input, vars, locale) { return vars.reduce(function (text, v) { var fractionDigits = v.value.toString().split('.')[1]; var numFractionDigits = fractionDigits && fractionDigits.length; return text // Replace mathquill variables first so that we can apply special // formatting for numbers in scientific notation: .replace(new RegExp(// eslint-disable-next-line no-useless-escape "(\\(.*?)".concat(openingQuote).concat(escapeRegExp(v.name)).concat(closingQuote, "(.*?\\))"), 'g'), "$1".concat(formatNumber(v.value, locale, true, { minimumFractionDigits: numFractionDigits }), "$2")) // Then substitute non-mathquill variables: .replace(new RegExp("".concat(openingQuote).concat(escapeRegExp(v.name)).concat(closingQuote), 'g'), formatNumber(v.value, locale, false, { minimumFractionDigits: numFractionDigits, useGrouping: true })); }, input); } var promiseToGetMathjs; export var mathjsLoadingWrapper = { mathjs: null }; export var loadMathjs = function loadMathjs() { if (!promiseToGetMathjs) { promiseToGetMathjs = import(/* webpackChunkName: "mathjs" */'mathjs').then(function (_mathjs) { // import all our additional factory functions _mathjs["import"](additionalFunctions, { override: true }); _mathjs.config({ angles: 'deg' }); mathjsLoadingWrapper.mathjs = _mathjs; return mathjsLoadingWrapper.mathjs; }); } return promiseToGetMathjs; }; export var mathjsIsLoaded = function mathjsIsLoaded() { return mathjsLoadingWrapper.mathjs !== null; };