UNPKG

@instructure/quiz-interactions

Version:

A React UI component Library for quiz interaction types.

101 lines (100 loc) 4.37 kB
function _array_like_to_array(arr, len) { if (len == null || len > arr.length) len = arr.length; for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i]; return arr2; } function _array_with_holes(arr) { if (Array.isArray(arr)) return arr; } function _iterable_to_array_limit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){ _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally{ try { if (!_n && _i["return"] != null) _i["return"](); } finally{ if (_d) throw _e; } } return _arr; } function _non_iterable_rest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _sliced_to_array(arr, i) { return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest(); } function _unsupported_iterable_to_array(o, minLen) { if (!o) return; if (typeof o === "string") return _array_like_to_array(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen); } 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] !== void 0 ? arguments[3] : {}; return isScientificNotation(value) ? formatScientificNotation(value, mathquill) : formatPlain(value, locale, opts); } function formatScientificNotation(value, mathquill) { if (!mathquill) return value; var _parseScientificNotation = _sliced_to_array(parseScientificNotation(value), 2), mantissa = _parseScientificNotation[0], exponent = _parseScientificNotation[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() { return mathjsLoadingWrapper.mathjs !== null; };