{"version":3,"file":"prefix-runestone.4370653ffa4ec93a.bundle.js","mappings":"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","sources":["webpack://WebComponents/./runestone/common/js/bookfuncs.js","webpack://WebComponents/./runestone/common/js/jquery.idle-timer.js","webpack://WebComponents/./runestone/common/js/jquery_i18n/jquery.i18n.emitter.bidi.js","webpack://WebComponents/./runestone/common/js/jquery_i18n/jquery.i18n.emitter.js","webpack://WebComponents/./runestone/common/js/jquery_i18n/jquery.i18n.fallbacks.js","webpack://WebComponents/./runestone/common/js/jquery_i18n/jquery.i18n.js","webpack://WebComponents/./runestone/common/js/jquery_i18n/jquery.i18n.language.js","webpack://WebComponents/./runestone/common/js/jquery_i18n/jquery.i18n.messagestore.js","webpack://WebComponents/./runestone/common/js/jquery_i18n/jquery.i18n.parser.js","webpack://WebComponents/./runestone/common/js/presenter_mode.js","webpack://WebComponents/./runestone/common/js/renderComponent.js","webpack://WebComponents/./runestone/common/js/runestonebase.js","webpack://WebComponents/./runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/static/bootstrap-sphinx.js","webpack://WebComponents/./runestone/common/js/user-highlights.js","webpack://WebComponents/./runestone/common/js/pretext.js","webpack://WebComponents/./webpack.index.js","webpack://WebComponents/./runestone/common/js/theme.js","webpack://WebComponents/external var \"jQuery\""],"sourcesContent":["/**\n *\n * User: bmiller\n * Original: 2011-04-20\n * Date: 2019-06-14\n * Time: 2:01 PM\n * This change marks the beginning of version 4.0 of the runestone components\n * Login/logout is no longer handled through javascript but rather server side.\n * Many of the components depend on the runestone:login event so we will keep that\n * for now to keep the churn fairly minimal.\n */\n\n/*\n\n Copyright (C) 2011 Brad Miller bonelake@gmail.com\n\n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see
load('path/to/all_localizations.json');
\n\t\t *\n\t\t * To load a localization file for a locale:\n\t\t * \n\t\t * load('path/to/de-messages.json', 'de' );\n\t\t *
\n\t\t *\n\t\t * To load a localization file from a directory:\n\t\t * \n\t\t * load('path/to/i18n/directory', 'de' );\n\t\t *
\n\t\t * The above method has the advantage of fallback resolution.\n\t\t * ie, it will automatically load the fallback locales for de.\n\t\t * For most usecases, this is the recommended method.\n\t\t * It is optional to have trailing slash at end.\n\t\t *\n\t\t * A data object containing message key- message translation mappings\n\t\t * can also be passed. Example:\n\t\t * \n\t\t * load( { 'hello' : 'Hello' }, optionalLocale );\n\t\t *
\n\t\t *\n\t\t * A source map containing key-value pair of languagename and locations\n\t\t * can also be passed. Example:\n\t\t * \n\t\t * load( {\n\t\t * bn: 'i18n/bn.json',\n\t\t * he: 'i18n/he.json',\n\t\t * en: 'i18n/en.json'\n\t\t * } )\n\t\t *
\n\t\t *\n\t\t * If the data argument is null/undefined/false,\n\t\t * all cached messages for the i18n instance will get reset.\n\t\t *\n\t\t * @param {string|Object} source\n\t\t * @param {string} locale Language tag\n\t\t * @return {jQuery.Promise}\n\t\t */\n\t\tload: function ( source, locale ) {\n\t\t\tvar fallbackLocales, locIndex, fallbackLocale, sourceMap = {};\n\t\t\tif ( !source && !locale ) {\n\t\t\t\tsource = 'i18n/' + $.i18n().locale + '.json';\n\t\t\t\tlocale = $.i18n().locale;\n\t\t\t}\n\t\t\tif ( typeof source === 'string' &&\n\t\t\t\t// source extension should be json, but can have query params after that.\n\t\t\t\tsource.split( '?' )[ 0 ].split( '.' ).pop() !== 'json'\n\t\t\t) {\n\t\t\t\t// Load specified locale then check for fallbacks when directory is\n\t\t\t\t// specified in load()\n\t\t\t\tsourceMap[ locale ] = source + '/' + locale + '.json';\n\t\t\t\tfallbackLocales = ( $.i18n.fallbacks[ locale ] || [] )\n\t\t\t\t\t.concat( this.options.fallbackLocale );\n\t\t\t\tfor ( locIndex = 0; locIndex < fallbackLocales.length; locIndex++ ) {\n\t\t\t\t\tfallbackLocale = fallbackLocales[ locIndex ];\n\t\t\t\t\tsourceMap[ fallbackLocale ] = source + '/' + fallbackLocale + '.json';\n\t\t\t\t}\n\t\t\t\treturn this.load( sourceMap );\n\t\t\t} else {\n\t\t\t\treturn this.messageStore.load( source, locale );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Does parameter and magic word substitution.\n\t\t *\n\t\t * @param {string} key Message key\n\t\t * @param {Array} parameters Message parameters\n\t\t * @return {string}\n\t\t */\n\t\tparse: function ( key, parameters ) {\n\t\t\tvar message = this.localize( key );\n\t\t\t// FIXME: This changes the state of the I18N object,\n\t\t\t// should probably not change the 'this.parser' but just\n\t\t\t// pass it to the parser.\n\t\t\tthis.parser.language = $.i18n.languages[ $.i18n().locale ] || $.i18n.languages[ 'default' ];\n\t\t\tif ( message === '' ) {\n\t\t\t\tmessage = key;\n\t\t\t}\n\t\t\treturn this.parser.parse( message, parameters );\n\t\t}\n\t};\n\n\t/**\n\t * Process a message from the $.I18N instance\n\t * for the current document, stored in jQuery.data(document).\n\t *\n\t * @param {string} key Key of the message.\n\t * @param {string} param1 [param...] Variadic list of parameters for {key}.\n\t * @return {string|$.I18N} Parsed message, or if no key was given\n\t * the instance of $.I18N is returned.\n\t */\n\t$.i18n = function ( key, param1 ) {\n\t\tvar parameters,\n\t\t\ti18n = $.data( document, 'i18n' ),\n\t\t\toptions = typeof key === 'object' && key;\n\n\t\t// If the locale option for this call is different then the setup so far,\n\t\t// update it automatically. This doesn't just change the context for this\n\t\t// call but for all future call as well.\n\t\t// If there is no i18n setup yet, don't do this. It will be taken care of\n\t\t// by the `new I18N` construction below.\n\t\t// NOTE: It should only change language for this one call.\n\t\t// Then cache instances of I18N somewhere.\n\t\tif ( options && options.locale && i18n && i18n.locale !== options.locale ) {\n\t\t\ti18n.locale = options.locale;\n\t\t}\n\n\t\tif ( !i18n ) {\n\t\t\ti18n = new I18N( options );\n\t\t\t$.data( document, 'i18n', i18n );\n\t\t}\n\n\t\tif ( typeof key === 'string' ) {\n\t\t\tif ( param1 !== undefined ) {\n\t\t\t\tparameters = slice.call( arguments, 1 );\n\t\t\t} else {\n\t\t\t\tparameters = [];\n\t\t\t}\n\n\t\t\treturn i18n.parse( key, parameters );\n\t\t} else {\n\t\t\t// FIXME: remove this feature/bug.\n\t\t\treturn i18n;\n\t\t}\n\t};\n\n\t$.fn.i18n = function () {\n\t\tvar i18n = $.data( document, 'i18n' );\n\n\t\tif ( !i18n ) {\n\t\t\ti18n = new I18N();\n\t\t\t$.data( document, 'i18n', i18n );\n\t\t}\n\n\t\treturn this.each( function () {\n\t\t\tvar $this = $( this ),\n\t\t\t\tmessageKey = $this.data( 'i18n' ),\n\t\t\t\tlBracket, rBracket, type, key;\n\n\t\t\tif ( messageKey ) {\n\t\t\t\tlBracket = messageKey.indexOf( '[' );\n\t\t\t\trBracket = messageKey.indexOf( ']' );\n\t\t\t\tif ( lBracket !== -1 && rBracket !== -1 && lBracket < rBracket ) {\n\t\t\t\t\ttype = messageKey.slice( lBracket + 1, rBracket );\n\t\t\t\t\tkey = messageKey.slice( rBracket + 1 );\n\t\t\t\t\tif ( type === 'html' ) {\n\t\t\t\t\t\t$this.html( i18n.parse( key ) );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$this.attr( type, i18n.parse( key ) );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$this.text( i18n.parse( messageKey ) );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$this.find( '[data-i18n]' ).i18n();\n\t\t\t}\n\t\t} );\n\t};\n\n\tfunction getDefaultLocale() {\n\t\tvar nav, locale = $( 'html' ).attr( 'lang' );\n\n\t\tif ( !locale ) {\n\t\t\tif ( typeof window.navigator !== undefined ) {\n\t\t\t\tnav = window.navigator;\n\t\t\t\tlocale = nav.language || nav.userLanguage || '';\n\t\t\t} else {\n\t\t\t\tlocale = '';\n\t\t\t}\n\t\t}\n\t\treturn locale;\n\t}\n\n\t$.i18n.languages = {};\n\t$.i18n.messageStore = $.i18n.messageStore || {};\n\t$.i18n.parser = {\n\t\t// The default parser only handles variable substitution\n\t\tparse: function ( message, parameters ) {\n\t\t\treturn message.replace( /\\$(\\d+)/g, function ( str, match ) {\n\t\t\t\tvar index = parseInt( match, 10 ) - 1;\n\t\t\t\treturn parameters[ index ] !== undefined ? parameters[ index ] : '$' + match;\n\t\t\t} );\n\t\t},\n\t\temitter: {}\n\t};\n\t$.i18n.fallbacks = {};\n\t$.i18n.debug = false;\n\t$.i18n.log = function ( /* arguments */ ) {\n\t\tif ( window.console && $.i18n.debug ) {\n\t\t\twindow.console.log.apply( window.console, arguments );\n\t\t}\n\t};\n\t/* Static members */\n\tI18N.defaults = {\n\t\tlocale: getDefaultLocale(),\n\t\tfallbackLocale: 'en',\n\t\tparser: $.i18n.parser,\n\t\tmessageStore: $.i18n.messageStore\n\t};\n\n\t// Expose constructor\n\t$.i18n.constructor = I18N;\n}( jQuery ) );","/* global pluralRuleParser */\n( function ( $ ) {\n\t'use strict';\n\n\t// jscs:disable\n\tvar language = {\n\t\t// CLDR plural rules generated using\n\t\t// libs/CLDRPluralRuleParser/tools/PluralXML2JSON.html\n\t\tpluralRules: {\n\t\t\tak: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tam: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tar: {\n\t\t\t\tzero: 'n = 0',\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2',\n\t\t\t\tfew: 'n % 100 = 3..10',\n\t\t\t\tmany: 'n % 100 = 11..99'\n\t\t\t},\n\t\t\tars: {\n\t\t\t\tzero: 'n = 0',\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2',\n\t\t\t\tfew: 'n % 100 = 3..10',\n\t\t\t\tmany: 'n % 100 = 11..99'\n\t\t\t},\n\t\t\tas: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tbe: {\n\t\t\t\tone: 'n % 10 = 1 and n % 100 != 11',\n\t\t\t\tfew: 'n % 10 = 2..4 and n % 100 != 12..14',\n\t\t\t\tmany: 'n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14'\n\t\t\t},\n\t\t\tbh: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tbn: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tbr: {\n\t\t\t\tone: 'n % 10 = 1 and n % 100 != 11,71,91',\n\t\t\t\ttwo: 'n % 10 = 2 and n % 100 != 12,72,92',\n\t\t\t\tfew: 'n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99',\n\t\t\t\tmany: 'n != 0 and n % 1000000 = 0'\n\t\t\t},\n\t\t\tbs: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'\n\t\t\t},\n\t\t\tcs: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\tfew: 'i = 2..4 and v = 0',\n\t\t\t\tmany: 'v != 0'\n\t\t\t},\n\t\t\tcy: {\n\t\t\t\tzero: 'n = 0',\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2',\n\t\t\t\tfew: 'n = 3',\n\t\t\t\tmany: 'n = 6'\n\t\t\t},\n\t\t\tda: {\n\t\t\t\tone: 'n = 1 or t != 0 and i = 0,1'\n\t\t\t},\n\t\t\tdsb: {\n\t\t\t\tone: 'v = 0 and i % 100 = 1 or f % 100 = 1',\n\t\t\t\ttwo: 'v = 0 and i % 100 = 2 or f % 100 = 2',\n\t\t\t\tfew: 'v = 0 and i % 100 = 3..4 or f % 100 = 3..4'\n\t\t\t},\n\t\t\tfa: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tff: {\n\t\t\t\tone: 'i = 0,1'\n\t\t\t},\n\t\t\tfil: {\n\t\t\t\tone: 'v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9'\n\t\t\t},\n\t\t\tfr: {\n\t\t\t\tone: 'i = 0,1'\n\t\t\t},\n\t\t\tga: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2',\n\t\t\t\tfew: 'n = 3..6',\n\t\t\t\tmany: 'n = 7..10'\n\t\t\t},\n\t\t\tgd: {\n\t\t\t\tone: 'n = 1,11',\n\t\t\t\ttwo: 'n = 2,12',\n\t\t\t\tfew: 'n = 3..10,13..19'\n\t\t\t},\n\t\t\tgu: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tguw: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tgv: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1',\n\t\t\t\ttwo: 'v = 0 and i % 10 = 2',\n\t\t\t\tfew: 'v = 0 and i % 100 = 0,20,40,60,80',\n\t\t\t\tmany: 'v != 0'\n\t\t\t},\n\t\t\the: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\ttwo: 'i = 2 and v = 0',\n\t\t\t\tmany: 'v = 0 and n != 0..10 and n % 10 = 0'\n\t\t\t},\n\t\t\thi: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\thr: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'\n\t\t\t},\n\t\t\thsb: {\n\t\t\t\tone: 'v = 0 and i % 100 = 1 or f % 100 = 1',\n\t\t\t\ttwo: 'v = 0 and i % 100 = 2 or f % 100 = 2',\n\t\t\t\tfew: 'v = 0 and i % 100 = 3..4 or f % 100 = 3..4'\n\t\t\t},\n\t\t\thy: {\n\t\t\t\tone: 'i = 0,1'\n\t\t\t},\n\t\t\tis: {\n\t\t\t\tone: 't = 0 and i % 10 = 1 and i % 100 != 11 or t != 0'\n\t\t\t},\n\t\t\tiu: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tiw: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\ttwo: 'i = 2 and v = 0',\n\t\t\t\tmany: 'v = 0 and n != 0..10 and n % 10 = 0'\n\t\t\t},\n\t\t\tkab: {\n\t\t\t\tone: 'i = 0,1'\n\t\t\t},\n\t\t\tkn: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tkw: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tlag: {\n\t\t\t\tzero: 'n = 0',\n\t\t\t\tone: 'i = 0,1 and n != 0'\n\t\t\t},\n\t\t\tln: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tlt: {\n\t\t\t\tone: 'n % 10 = 1 and n % 100 != 11..19',\n\t\t\t\tfew: 'n % 10 = 2..9 and n % 100 != 11..19',\n\t\t\t\tmany: 'f != 0'\n\t\t\t},\n\t\t\tlv: {\n\t\t\t\tzero: 'n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19',\n\t\t\t\tone: 'n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1'\n\t\t\t},\n\t\t\tmg: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tmk: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 or f % 10 = 1'\n\t\t\t},\n\t\t\tmo: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\tfew: 'v != 0 or n = 0 or n != 1 and n % 100 = 1..19'\n\t\t\t},\n\t\t\tmr: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t},\n\t\t\tmt: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\tfew: 'n = 0 or n % 100 = 2..10',\n\t\t\t\tmany: 'n % 100 = 11..19'\n\t\t\t},\n\t\t\tnaq: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tnso: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tpa: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tpl: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14',\n\t\t\t\tmany: 'v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14'\n\t\t\t},\n\t\t\tprg: {\n\t\t\t\tzero: 'n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19',\n\t\t\t\tone: 'n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1'\n\t\t\t},\n\t\t\tpt: {\n\t\t\t\tone: 'i = 0..1'\n\t\t\t},\n\t\t\tro: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\tfew: 'v != 0 or n = 0 or n != 1 and n % 100 = 1..19'\n\t\t\t},\n\t\t\tru: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14',\n\t\t\t\tmany: 'v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14'\n\t\t\t},\n\t\t\tse: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsh: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'\n\t\t\t},\n\t\t\tshi: {\n\t\t\t\tone: 'i = 0 or n = 1',\n\t\t\t\tfew: 'n = 2..10'\n\t\t\t},\n\t\t\tsi: {\n\t\t\t\tone: 'n = 0,1 or i = 0 and f = 1'\n\t\t\t},\n\t\t\tsk: {\n\t\t\t\tone: 'i = 1 and v = 0',\n\t\t\t\tfew: 'i = 2..4 and v = 0',\n\t\t\t\tmany: 'v != 0'\n\t\t\t},\n\t\t\tsl: {\n\t\t\t\tone: 'v = 0 and i % 100 = 1',\n\t\t\t\ttwo: 'v = 0 and i % 100 = 2',\n\t\t\t\tfew: 'v = 0 and i % 100 = 3..4 or v != 0'\n\t\t\t},\n\t\t\tsma: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsmi: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsmj: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsmn: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsms: {\n\t\t\t\tone: 'n = 1',\n\t\t\t\ttwo: 'n = 2'\n\t\t\t},\n\t\t\tsr: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'\n\t\t\t},\n\t\t\tti: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\ttl: {\n\t\t\t\tone: 'v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9'\n\t\t\t},\n\t\t\ttzm: {\n\t\t\t\tone: 'n = 0..1 or n = 11..99'\n\t\t\t},\n\t\t\tuk: {\n\t\t\t\tone: 'v = 0 and i % 10 = 1 and i % 100 != 11',\n\t\t\t\tfew: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14',\n\t\t\t\tmany: 'v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14'\n\t\t\t},\n\t\t\twa: {\n\t\t\t\tone: 'n = 0..1'\n\t\t\t},\n\t\t\tzu: {\n\t\t\t\tone: 'i = 0 or n = 1'\n\t\t\t}\n\t\t},\n\t\t// jscs:enable\n\n\t\t/**\n\t\t * Plural form transformations, needed for some languages.\n\t\t *\n\t\t * @param {integer} count\n\t\t * Non-localized quantifier\n\t\t * @param {Array} forms\n\t\t * List of plural forms\n\t\t * @return {string} Correct form for quantifier in this language\n\t\t */\n\t\tconvertPlural: function ( count, forms ) {\n\t\t\tvar pluralRules,\n\t\t\t\tpluralFormIndex,\n\t\t\t\tindex,\n\t\t\t\texplicitPluralPattern = new RegExp( '\\\\d+=', 'i' ),\n\t\t\t\tformCount,\n\t\t\t\tform;\n\n\t\t\tif ( !forms || forms.length === 0 ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t// Handle for Explicit 0= & 1= values\n\t\t\tfor ( index = 0; index < forms.length; index++ ) {\n\t\t\t\tform = forms[ index ];\n\t\t\t\tif ( explicitPluralPattern.test( form ) ) {\n\t\t\t\t\tformCount = parseInt( form.slice( 0, form.indexOf( '=' ) ), 10 );\n\t\t\t\t\tif ( formCount === count ) {\n\t\t\t\t\t\treturn ( form.slice( form.indexOf( '=' ) + 1 ) );\n\t\t\t\t\t}\n\t\t\t\t\tforms[ index ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tforms = $.map( forms, function ( form ) {\n\t\t\t\tif ( form !== undefined ) {\n\t\t\t\t\treturn form;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tpluralRules = this.pluralRules[ $.i18n().locale ];\n\n\t\t\tif ( !pluralRules ) {\n\t\t\t\t// default fallback.\n\t\t\t\treturn ( count === 1 ) ? forms[ 0 ] : forms[ 1 ];\n\t\t\t}\n\n\t\t\tpluralFormIndex = this.getPluralForm( count, pluralRules );\n\t\t\tpluralFormIndex = Math.min( pluralFormIndex, forms.length - 1 );\n\n\t\t\treturn forms[ pluralFormIndex ];\n\t\t},\n\n\t\t/**\n\t\t * For the number, get the plural for index\n\t\t *\n\t\t * @param {integer} number\n\t\t * @param {Object} pluralRules\n\t\t * @return {integer} plural form index\n\t\t */\n\t\tgetPluralForm: function ( number, pluralRules ) {\n\t\t\tvar i,\n\t\t\t\tpluralForms = [ 'zero', 'one', 'two', 'few', 'many', 'other' ],\n\t\t\t\tpluralFormIndex = 0;\n\n\t\t\tfor ( i = 0; i < pluralForms.length; i++ ) {\n\t\t\t\tif ( pluralRules[ pluralForms[ i ] ] ) {\n\t\t\t\t\tif ( pluralRuleParser( pluralRules[ pluralForms[ i ] ], number ) ) {\n\t\t\t\t\t\treturn pluralFormIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\tpluralFormIndex++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn pluralFormIndex;\n\t\t},\n\n\t\t/**\n\t\t * Converts a number using digitTransformTable.\n\t\t *\n\t\t * @param {number} num Value to be converted\n\t\t * @param {boolean} integer Convert the return value to an integer\n\t\t * @return {string} The number converted into a String.\n\t\t */\n\t\tconvertNumber: function ( num, integer ) {\n\t\t\tvar tmp, item, i,\n\t\t\t\ttransformTable, numberString, convertedNumber;\n\n\t\t\t// Set the target Transform table:\n\t\t\ttransformTable = this.digitTransformTable( $.i18n().locale );\n\t\t\tnumberString = String( num );\n\t\t\tconvertedNumber = '';\n\n\t\t\tif ( !transformTable ) {\n\t\t\t\treturn num;\n\t\t\t}\n\n\t\t\t// Check if the restore to Latin number flag is set:\n\t\t\tif ( integer ) {\n\t\t\t\tif ( parseFloat( num, 10 ) === num ) {\n\t\t\t\t\treturn num;\n\t\t\t\t}\n\n\t\t\t\ttmp = [];\n\n\t\t\t\tfor ( item in transformTable ) {\n\t\t\t\t\ttmp[ transformTable[ item ] ] = item;\n\t\t\t\t}\n\n\t\t\t\ttransformTable = tmp;\n\t\t\t}\n\n\t\t\tfor ( i = 0; i < numberString.length; i++ ) {\n\t\t\t\tif ( transformTable[ numberString[ i ] ] ) {\n\t\t\t\t\tconvertedNumber += transformTable[ numberString[ i ] ];\n\t\t\t\t} else {\n\t\t\t\t\tconvertedNumber += numberString[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn integer ? parseFloat( convertedNumber, 10 ) : convertedNumber;\n\t\t},\n\n\t\t/**\n\t\t * Grammatical transformations, needed for inflected languages.\n\t\t * Invoked by putting {{grammar:form|word}} in a message.\n\t\t * Override this method for languages that need special grammar rules\n\t\t * applied dynamically.\n\t\t *\n\t\t * @param {string} word\n\t\t * @param {string} form\n\t\t * @return {string}\n\t\t */\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tconvertGrammar: function ( word, form ) {\n\t\t\treturn word;\n\t\t},\n\n\t\t/**\n\t\t * Provides an alternative text depending on specified gender. Usage\n\t\t * {{gender:[gender|user object]|masculine|feminine|neutral}}. If second\n\t\t * or third parameter are not specified, masculine is used.\n\t\t *\n\t\t * These details may be overriden per language.\n\t\t *\n\t\t * @param {string} gender\n\t\t * male, female, or anything else for neutral.\n\t\t * @param {Array} forms\n\t\t * List of gender forms\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgender: function ( gender, forms ) {\n\t\t\tif ( !forms || forms.length === 0 ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\twhile ( forms.length < 2 ) {\n\t\t\t\tforms.push( forms[ forms.length - 1 ] );\n\t\t\t}\n\n\t\t\tif ( gender === 'male' ) {\n\t\t\t\treturn forms[ 0 ];\n\t\t\t}\n\n\t\t\tif ( gender === 'female' ) {\n\t\t\t\treturn forms[ 1 ];\n\t\t\t}\n\n\t\t\treturn ( forms.length === 3 ) ? forms[ 2 ] : forms[ 0 ];\n\t\t},\n\n\t\t/**\n\t\t * Get the digit transform table for the given language\n\t\t * See http://cldr.unicode.org/translation/numbering-systems\n\t\t *\n\t\t * @param {string} language\n\t\t * @return {Array|boolean} List of digits in the passed language or false\n\t\t * representation, or boolean false if there is no information.\n\t\t */\n\t\tdigitTransformTable: function ( language ) {\n\t\t\tvar tables = {\n\t\t\t\tar: '٠١٢٣٤٥٦٧٨٩',\n\t\t\t\tfa: '۰۱۲۳۴۵۶۷۸۹',\n\t\t\t\tml: '൦൧൨൩൪൫൬൭൮൯',\n\t\t\t\tkn: '೦೧೨೩೪೫೬೭೮೯',\n\t\t\t\tlo: '໐໑໒໓໔໕໖໗໘໙',\n\t\t\t\tor: '୦୧୨୩୪୫୬୭୮୯',\n\t\t\t\tkh: '០១២៣៤៥៦៧៨៩',\n\t\t\t\tpa: '੦੧੨੩੪੫੬੭੮੯',\n\t\t\t\tgu: '૦૧૨૩૪૫૬૭૮૯',\n\t\t\t\thi: '०१२३४५६७८९',\n\t\t\t\tmy: '၀၁၂၃၄၅၆၇၈၉',\n\t\t\t\tta: '௦௧௨௩௪௫௬௭௮௯',\n\t\t\t\tte: '౦౧౨౩౪౫౬౭౮౯',\n\t\t\t\tth: '๐๑๒๓๔๕๖๗๘๙', // FIXME use iso 639 codes\n\t\t\t\tbo: '༠༡༢༣༤༥༦༧༨༩' // FIXME use iso 639 codes\n\t\t\t};\n\n\t\t\tif ( !tables[ language ] ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn tables[ language ].split( '' );\n\t\t}\n\t};\n\n\t$.extend( $.i18n.languages, {\n\t\t'default': language\n\t} );\n}( jQuery ) );\n","/*!\n * jQuery Internationalization library - Message Store\n *\n * Copyright (C) 2012 Santhosh Thottingal\n *\n * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do anything special to\n * choose one license or the other and you don't have to notify anyone which license you are using.\n * You are free to use UniversalLanguageSelector in commercial projects as long as the copyright\n * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.\n *\n * @licence GNU General Public Licence 2.0 or later\n * @licence MIT License\n */\n\n( function ( $ ) {\n\t'use strict';\n\n\tvar MessageStore = function () {\n\t\tthis.messages = {};\n\t\tthis.sources = {};\n\t};\n\n\tfunction jsonMessageLoader( url ) {\n\t\tvar deferred = $.Deferred();\n\n\t\t$.getJSON( url )\n\t\t\t.done( deferred.resolve )\n\t\t\t.fail( function ( jqxhr, settings, exception ) {\n\t\t\t\t$.i18n.log( 'Error in loading messages from ' + url + ' Exception: ' + exception );\n\t\t\t\t// Ignore 404 exception, because we are handling fallabacks explicitly\n\t\t\t\tdeferred.resolve();\n\t\t\t} );\n\n\t\treturn deferred.promise();\n\t}\n\n\t/**\n\t * See https://github.com/wikimedia/jquery.i18n/wiki/Specification#wiki-Message_File_Loading\n\t */\n\tMessageStore.prototype = {\n\n\t\t/**\n\t\t * General message loading API This can take a URL string for\n\t\t * the json formatted messages.\n\t\t * load('path/to/all_localizations.json');
\n\t\t *\n\t\t * This can also load a localization file for a locale \n\t\t * load( 'path/to/de-messages.json', 'de' );\n\t\t *
\n\t\t * A data object containing message key- message translation mappings\n\t\t * can also be passed Eg:\n\t\t * \n\t\t * load( { 'hello' : 'Hello' }, optionalLocale );\n\t\t *
If the data argument is\n\t\t * null/undefined/false,\n\t\t * all cached messages for the i18n instance will get reset.\n\t\t *\n\t\t * @param {string|Object} source\n\t\t * @param {string} locale Language tag\n\t\t * @return {jQuery.Promise}\n\t\t */\n\t\tload: function ( source, locale ) {\n\t\t\tvar key = null,\n\t\t\t\tdeferred = null,\n\t\t\t\tdeferreds = [],\n\t\t\t\tmessageStore = this;\n\n\t\t\tif ( typeof source === 'string' ) {\n\t\t\t\t// This is a URL to the messages file.\n\t\t\t\t$.i18n.log( 'Loading messages from: ' + source );\n\t\t\t\tdeferred = jsonMessageLoader( source )\n\t\t\t\t\t.done( function ( localization ) {\n\t\t\t\t\t\tmessageStore.set( locale, localization );\n\t\t\t\t\t} );\n\n\t\t\t\treturn deferred.promise();\n\t\t\t}\n\n\t\t\tif ( locale ) {\n\t\t\t\t// source is an key-value pair of messages for given locale\n\t\t\t\tmessageStore.set( locale, source );\n\n\t\t\t\treturn $.Deferred().resolve();\n\t\t\t} else {\n\t\t\t\t// source is a key-value pair of locales and their source\n\t\t\t\tfor ( key in source ) {\n\t\t\t\t\tif ( Object.prototype.hasOwnProperty.call( source, key ) ) {\n\t\t\t\t\t\tlocale = key;\n\t\t\t\t\t\t// No {locale} given, assume data is a group of languages,\n\t\t\t\t\t\t// call this function again for each language.\n\t\t\t\t\t\tdeferreds.push( messageStore.load( source[ key ], locale ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn $.when.apply( $, deferreds );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Set messages to the given locale.\n\t\t * If locale exists, add messages to the locale.\n\t\t *\n\t\t * @param {string} locale\n\t\t * @param {Object} messages\n\t\t */\n\t\tset: function ( locale, messages ) {\n\t\t\tif ( !this.messages[ locale ] ) {\n\t\t\t\tthis.messages[ locale ] = messages;\n\t\t\t} else {\n\t\t\t\tthis.messages[ locale ] = $.extend( this.messages[ locale ], messages );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t *\n\t\t * @param {string} locale\n\t\t * @param {string} messageKey\n\t\t * @return {boolean}\n\t\t */\n\t\tget: function ( locale, messageKey ) {\n\t\t\treturn this.messages[ locale ] && this.messages[ locale ][ messageKey ];\n\t\t}\n\t};\n\n\t$.extend( $.i18n.messageStore, new MessageStore() );\n}( jQuery ) );\n","/*!\n * jQuery Internationalization library\n *\n * Copyright (C) 2011-2013 Santhosh Thottingal, Neil Kandalgaonkar\n *\n * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do\n * anything special to choose one license or the other and you don't have to\n * notify anyone which license you are using. You are free to use\n * UniversalLanguageSelector in commercial projects as long as the copyright\n * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.\n *\n * @licence GNU General Public Licence 2.0 or later\n * @licence MIT License\n */\n\n( function ( $ ) {\n\t'use strict';\n\n\tvar MessageParser = function ( options ) {\n\t\tthis.options = $.extend( {}, $.i18n.parser.defaults, options );\n\t\tthis.language = $.i18n.languages[ String.locale ] || $.i18n.languages[ 'default' ];\n\t\tthis.emitter = $.i18n.parser.emitter;\n\t};\n\n\tMessageParser.prototype = {\n\n\t\tconstructor: MessageParser,\n\n\t\tsimpleParse: function ( message, parameters ) {\n\t\t\treturn message.replace( /\\$(\\d+)/g, function ( str, match ) {\n\t\t\t\tvar index = parseInt( match, 10 ) - 1;\n\n\t\t\t\treturn parameters[ index ] !== undefined ? parameters[ index ] : '$' + match;\n\t\t\t} );\n\t\t},\n\n\t\tparse: function ( message, replacements ) {\n\t\t\tif ( message.indexOf( '{{' ) < 0 ) {\n\t\t\t\treturn this.simpleParse( message, replacements );\n\t\t\t}\n\n\t\t\tthis.emitter.language = $.i18n.languages[ $.i18n().locale ] ||\n\t\t\t\t$.i18n.languages[ 'default' ];\n\n\t\t\treturn this.emitter.emit( this.ast( message ), replacements );\n\t\t},\n\n\t\tast: function ( message ) {\n\t\t\tvar pipe, colon, backslash, anyCharacter, dollar, digits, regularLiteral,\n\t\t\t\tregularLiteralWithoutBar, regularLiteralWithoutSpace, escapedOrLiteralWithoutBar,\n\t\t\t\tescapedOrRegularLiteral, templateContents, templateName, openTemplate,\n\t\t\t\tcloseTemplate, expression, paramExpression, result,\n\t\t\t\tpos = 0;\n\n\t\t\t// Try parsers until one works, if none work return null\n\t\t\tfunction choice( parserSyntax ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar i, result;\n\n\t\t\t\t\tfor ( i = 0; i < parserSyntax.length; i++ ) {\n\t\t\t\t\t\tresult = parserSyntax[ i ]();\n\n\t\t\t\t\t\tif ( result !== null ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Try several parserSyntax-es in a row.\n\t\t\t// All must succeed; otherwise, return null.\n\t\t\t// This is the only eager one.\n\t\t\tfunction sequence( parserSyntax ) {\n\t\t\t\tvar i, res,\n\t\t\t\t\toriginalPos = pos,\n\t\t\t\t\tresult = [];\n\n\t\t\t\tfor ( i = 0; i < parserSyntax.length; i++ ) {\n\t\t\t\t\tres = parserSyntax[ i ]();\n\n\t\t\t\t\tif ( res === null ) {\n\t\t\t\t\t\tpos = originalPos;\n\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tresult.push( res );\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\t// Run the same parser over and over until it fails.\n\t\t\t// Must succeed a minimum of n times; otherwise, return null.\n\t\t\tfunction nOrMore( n, p ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar originalPos = pos,\n\t\t\t\t\t\tresult = [],\n\t\t\t\t\t\tparsed = p();\n\n\t\t\t\t\twhile ( parsed !== null ) {\n\t\t\t\t\t\tresult.push( parsed );\n\t\t\t\t\t\tparsed = p();\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( result.length < n ) {\n\t\t\t\t\t\tpos = originalPos;\n\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Helpers -- just make parserSyntax out of simpler JS builtin types\n\n\t\t\tfunction makeStringParser( s ) {\n\t\t\t\tvar len = s.length;\n\n\t\t\t\treturn function () {\n\t\t\t\t\tvar result = null;\n\n\t\t\t\t\tif ( message.slice( pos, pos + len ) === s ) {\n\t\t\t\t\t\tresult = s;\n\t\t\t\t\t\tpos += len;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfunction makeRegexParser( regex ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar matches = message.slice( pos ).match( regex );\n\n\t\t\t\t\tif ( matches === null ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tpos += matches[ 0 ].length;\n\n\t\t\t\t\treturn matches[ 0 ];\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tpipe = makeStringParser( '|' );\n\t\t\tcolon = makeStringParser( ':' );\n\t\t\tbackslash = makeStringParser( '\\\\' );\n\t\t\tanyCharacter = makeRegexParser( /^./ );\n\t\t\tdollar = makeStringParser( '$' );\n\t\t\tdigits = makeRegexParser( /^\\d+/ );\n\t\t\tregularLiteral = makeRegexParser( /^[^{}[\\]$\\\\]/ );\n\t\t\tregularLiteralWithoutBar = makeRegexParser( /^[^{}[\\]$\\\\|]/ );\n\t\t\tregularLiteralWithoutSpace = makeRegexParser( /^[^{}[\\]$\\s]/ );\n\n\t\t\t// There is a general pattern:\n\t\t\t// parse a thing;\n\t\t\t// if it worked, apply transform,\n\t\t\t// otherwise return null.\n\t\t\t// But using this as a combinator seems to cause problems\n\t\t\t// when combined with nOrMore().\n\t\t\t// May be some scoping issue.\n\t\t\tfunction transform( p, fn ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar result = p();\n\n\t\t\t\t\treturn result === null ? null : fn( result );\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Used to define \"literals\" within template parameters. The pipe\n\t\t\t// character is the parameter delimeter, so by default\n\t\t\t// it is not a literal in the parameter\n\t\t\tfunction literalWithoutBar() {\n\t\t\t\tvar result = nOrMore( 1, escapedOrLiteralWithoutBar )();\n\n\t\t\t\treturn result === null ? null : result.join( '' );\n\t\t\t}\n\n\t\t\tfunction literal() {\n\t\t\t\tvar result = nOrMore( 1, escapedOrRegularLiteral )();\n\n\t\t\t\treturn result === null ? null : result.join( '' );\n\t\t\t}\n\n\t\t\tfunction escapedLiteral() {\n\t\t\t\tvar result = sequence( [ backslash, anyCharacter ] );\n\n\t\t\t\treturn result === null ? null : result[ 1 ];\n\t\t\t}\n\n\t\t\tchoice( [ escapedLiteral, regularLiteralWithoutSpace ] );\n\t\t\tescapedOrLiteralWithoutBar = choice( [ escapedLiteral, regularLiteralWithoutBar ] );\n\t\t\tescapedOrRegularLiteral = choice( [ escapedLiteral, regularLiteral ] );\n\n\t\t\tfunction replacement() {\n\t\t\t\tvar result = sequence( [ dollar, digits ] );\n\n\t\t\t\tif ( result === null ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn [ 'REPLACE', parseInt( result[ 1 ], 10 ) - 1 ];\n\t\t\t}\n\n\t\t\ttemplateName = transform(\n\t\t\t\t// see $wgLegalTitleChars\n\t\t\t\t// not allowing : due to the need to catch \"PLURAL:$1\"\n\t\t\t\tmakeRegexParser( /^[ !\"$&'()*,./0-9;=?@A-Z^_`a-z~\\x80-\\xFF+-]+/ ),\n\n\t\t\t\tfunction ( result ) {\n\t\t\t\t\treturn result.toString();\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tfunction templateParam() {\n\t\t\t\tvar expr,\n\t\t\t\t\tresult = sequence( [ pipe, nOrMore( 0, paramExpression ) ] );\n\n\t\t\t\tif ( result === null ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\texpr = result[ 1 ];\n\n\t\t\t\t// use a \"CONCAT\" operator if there are multiple nodes,\n\t\t\t\t// otherwise return the first node, raw.\n\t\t\t\treturn expr.length > 1 ? [ 'CONCAT' ].concat( expr ) : expr[ 0 ];\n\t\t\t}\n\n\t\t\tfunction templateWithReplacement() {\n\t\t\t\tvar result = sequence( [ templateName, colon, replacement ] );\n\n\t\t\t\treturn result === null ? null : [ result[ 0 ], result[ 2 ] ];\n\t\t\t}\n\n\t\t\tfunction templateWithOutReplacement() {\n\t\t\t\tvar result = sequence( [ templateName, colon, paramExpression ] );\n\n\t\t\t\treturn result === null ? null : [ result[ 0 ], result[ 2 ] ];\n\t\t\t}\n\n\t\t\ttemplateContents = choice( [\n\t\t\t\tfunction () {\n\t\t\t\t\tvar res = sequence( [\n\t\t\t\t\t\t// templates can have placeholders for dynamic\n\t\t\t\t\t\t// replacement eg: {{PLURAL:$1|one car|$1 cars}}\n\t\t\t\t\t\t// or no placeholders eg:\n\t\t\t\t\t\t// {{GRAMMAR:genitive|{{SITENAME}}}\n\t\t\t\t\t\tchoice( [ templateWithReplacement, templateWithOutReplacement ] ),\n\t\t\t\t\t\tnOrMore( 0, templateParam )\n\t\t\t\t\t] );\n\n\t\t\t\t\treturn res === null ? null : res[ 0 ].concat( res[ 1 ] );\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\tvar res = sequence( [ templateName, nOrMore( 0, templateParam ) ] );\n\n\t\t\t\t\tif ( res === null ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [ res[ 0 ] ].concat( res[ 1 ] );\n\t\t\t\t}\n\t\t\t] );\n\n\t\t\topenTemplate = makeStringParser( '{{' );\n\t\t\tcloseTemplate = makeStringParser( '}}' );\n\n\t\t\tfunction template() {\n\t\t\t\tvar result = sequence( [ openTemplate, templateContents, closeTemplate ] );\n\n\t\t\t\treturn result === null ? null : result[ 1 ];\n\t\t\t}\n\n\t\t\texpression = choice( [ template, replacement, literal ] );\n\t\t\tparamExpression = choice( [ template, replacement, literalWithoutBar ] );\n\n\t\t\tfunction start() {\n\t\t\t\tvar result = nOrMore( 0, expression )();\n\n\t\t\t\tif ( result === null ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn [ 'CONCAT' ].concat( result );\n\t\t\t}\n\n\t\t\tresult = start();\n\n\t\t\t/*\n\t\t\t * For success, the pos must have gotten to the end of the input\n\t\t\t * and returned a non-null.\n\t\t\t * n.b. This is part of language infrastructure, so we do not throw an\n\t\t\t * internationalizable message.\n\t\t\t */\n\t\t\tif ( result === null || pos !== message.length ) {\n\t\t\t\tthrow new Error( 'Parse error at position ' + pos.toString() + ' in input: ' + message );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t};\n\n\t$.extend( $.i18n.parser, new MessageParser() );\n}( jQuery ) );","var codeExercises;\nvar presenterCssLink;\nvar presentModeInitialized = false;\n\nfunction presentToggle() {\n if (!presentModeInitialized) {\n presentModeSetup();\n presentModeInitialized = true;\n }\n let bod = $(\"body\");\n let presentClass = \"present\";\n let fullHeightClass = \"full-height\";\n let bottomClass = \"bottom\";\n if (bod.hasClass(presentClass)) {\n $(\"section *\")\n .not(\n \"h1, .presentation-title, .btn-presenter, .runestone, .runestone *, section, .pre, code\"\n )\n .removeClass(\"hidden\"); //show everything\n $(\"#completionButton\").removeClass(\"hidden\");\n bod.removeClass(presentClass);\n $(\".\" + fullHeightClass).removeClass(fullHeightClass);\n $(\".\" + bottomClass).removeClass(bottomClass);\n localStorage.setItem(\"presentMode\", \"text\");\n codeExercises.removeClass(\"hidden\");\n presenterCssLink.disabled = true; // disable present_mode.css\n } else {\n $(\"section *\")\n .not(\n \"h1, .presentation-title, .btn-presenter, .runestone, .runestone *, section, .pre, code\"\n )\n .addClass(\"hidden\"); // hide extraneous stuff\n $(\"#completionButton\").addClass(\"hidden\");\n bod.addClass(presentClass);\n bod.addClass(fullHeightClass);\n $(\"html\").addClass(fullHeightClass);\n $(\"section .runestone\").addClass(fullHeightClass);\n $(\".ac-caption\").addClass(bottomClass);\n localStorage.setItem(\"presentMode\", presentClass);\n // presenter_mode.css is loaded by webpack\n //loadPresenterCss(); // present_mode.css should only apply when in presenter mode.\n activateExercise();\n }\n}\n\nfunction loadPresenterCss() {\n presenterCssLink = document.createElement(\"link\");\n presenterCssLink.type = \"text/css\";\n presenterCssLink.href = \"../_static/presenter_mode.css\";\n presenterCssLink.rel = \"stylesheet\";\n document.getElementsByTagName(\"head\")[0].appendChild(presenterCssLink);\n}\n\nfunction presentModeSetup() {\n // moved this out of configure\n let dataComponent = $(\"[data-childcomponent]\");\n\n // this still leaves some things semi-messed up when you exit presenter mode.\n // but instructors will probably just learn to refresh the page.\n dataComponent.addClass(\"runestone\");\n dataComponent.parent().closest(\"div\").not(\"section\").addClass(\"runestone\");\n dataComponent.parent().closest(\"div\").css(\"max-width\", \"none\");\n\n dataComponent.each(function (index) {\n let me = $(this);\n $(this)\n .find(\".ac_code_div, .ac_output\")\n .wrapAll(\"\");\n });\n\n codelensListener(500);\n $(\"section img\").wrap('Sorry, no source is available for preview.
`\n );\n return;\n }\n let patt = /..\\/_images/g;\n componentSrc = componentSrc.replace(\n patt,\n `${eBookConfig.app}/books/published/${eBookConfig.basecourse}/_images`\n );\n jQuery(`#${whereDiv}`).html(componentSrc);\n\n if (typeof window.componentMap === \"undefined\") {\n window.componentMap = {};\n }\n\n let componentKind = $($(`#${whereDiv} [data-component]`)[0]).data(\n \"component\"\n );\n // Import the JavaScript for this component before proceeding.\n await runestone_import(componentKind);\n let opt = {};\n opt.orig = jQuery(`#${whereDiv} [data-component]`)[0];\n if (opt.orig) {\n opt.lang = $(opt.orig).data(\"lang\");\n opt.useRunestoneServices = true;\n opt.graderactive = false;\n opt.python3 = true;\n if (typeof moreOpts !== \"undefined\") {\n for (let key in moreOpts) {\n opt[key] = moreOpts[key];\n }\n }\n }\n\n if (typeof component_factory === \"undefined\") {\n alert(\"Error: Missing the component factory!\");\n } else {\n if (\n !window.component_factory[componentKind] &&\n !jQuery(`#${whereDiv}`).html()\n ) {\n jQuery(`#${whereDiv}`).html(\n `Preview not available for ${componentKind}
`\n );\n } else {\n let res = window.component_factory[componentKind](opt);\n if (componentKind === \"activecode\") {\n if (moreOpts.multiGrader) {\n window.componentMap[\n `${moreOpts.gradingContainer} ${res.divid}`\n ] = res;\n } else {\n window.componentMap[res.divid] = res;\n }\n }\n }\n }\n}\n\nexport function createTimedComponent(componentSrc, moreOpts) {\n /* The important distinction is that the component does not really need to be rendered\n into the page, in fact, due to the async nature of getting the source the list of questions\n is made and the original html is replaced by the look of the exam.\n */\n\n let patt = /..\\/_images/g;\n componentSrc = componentSrc.replace(\n patt,\n `${eBookConfig.app}/books/published/${eBookConfig.basecourse}/_images`\n );\n\n let componentKind = $($(componentSrc).find(\"[data-component]\")[0]).data(\n \"component\"\n );\n\n let origId = $(componentSrc).find(\"[data-component]\").first().attr(\"id\");\n\n // Double check -- if the component source is not in the DOM, then briefly add it\n // and call the constructor.\n let hdiv;\n if (!document.getElementById(origId)) {\n hdiv = $(\"\", {\n css: { display: \"none\" },\n }).appendTo(\"body\");\n hdiv.html(componentSrc);\n }\n // at this point hdiv is a jquery object\n\n let ret;\n let opts = {\n orig: document.getElementById(origId),\n timed: true,\n };\n if (typeof moreOpts !== \"undefined\") {\n for (let key in moreOpts) {\n opts[key] = moreOpts[key];\n }\n }\n\n if (componentKind in window.component_factory) {\n ret = window.component_factory[componentKind](opts);\n }\n\n let rdict = {};\n rdict.question = ret;\n return rdict;\n}\n\n// For integration with the React overhault of Pretext\n// 1. Disable the automatic instantiation at the end of each component.js\n// 2. react will search for all \".runestone\" and will call this function for each of them.\nexport async function renderOneComponent(rsDiv) {\n // Find the actual component inside the runestone component.\n let component = rsDiv.querySelector(\"[data-component]\");\n if (component == null) {\n console.log(\"Render was called for a component, but now [data-component] attribute is present. This may mean the component has already been rendered.\")\n return;\n }\n let componentKind = component.dataset.component;\n await runestone_import(componentKind);\n if ($(this).closest(\"[data-component=timedAssessment]\").length == 0) {\n // If this element exists within a timed component, don't render it here\n try {\n let divid = component.id;\n window.componentMap[divid] = window.component_factory[\n componentKind\n ]({\n orig: component,\n useRunestoneServices: eBookConfig.useRunestoneServices,\n });\n } catch (err) {\n console.log(`Error rendering ${componentKind} Problem ${this.id}\n Details: ${err}`);\n }\n }\n}\n","/* ********************************\n * |docname| - Runestone Base Class\n * ********************************\n * All runestone components should inherit from RunestoneBase. In addition all runestone components should do the following things:\n *\n * 1. Ensure that they are wrapped in a div with the class runestone\n * 2. Write their source AND their generated html to the database if the database is configured\n * 3. Properly save and restore their answers using the checkServer mechanism in this base class. Each component must provide an implementation of:\n *\n * - checkLocalStorage\n * - setLocalStorage\n * - restoreAnswers\n * - disableInteraction\n *\n * 4. provide a Selenium based unit test\n */\n\nimport { pageProgressTracker } from \"./bookfuncs.js\";\n//import \"./../styles/runestone-custom-sphinx-bootstrap.css\";\n\nexport default class RunestoneBase {\n constructor(opts) {\n this.component_ready_promise = new Promise(\n (resolve) => (this._component_ready_resolve_fn = resolve)\n );\n this.optional = false;\n if (typeof window.allComponents === \"undefined\") {\n window.allComponents = [];\n }\n window.allComponents.push(this);\n if (opts) {\n this.sid = opts.sid;\n this.graderactive = opts.graderactive;\n this.showfeedback = true;\n if (opts.timed) {\n this.isTimed = true;\n }\n if (opts.enforceDeadline) {\n this.deadline = opts.deadline;\n }\n if ($(opts.orig).data(\"optional\")) {\n this.optional = true;\n } else {\n this.optional = false;\n }\n if (opts.selector_id) {\n this.selector_id = opts.selector_id;\n }\n if (typeof opts.assessmentTaken !== \"undefined\") {\n this.assessmentTaken = opts.assessmentTaken;\n } else {\n // default to true as this opt is only provided from a timedAssessment\n this.assessmentTaken = true;\n }\n // This is for the selectquestion points\n // If a selectquestion is part of a timed exam it will get\n // the timedWrapper options.\n if (typeof opts.timedWrapper !== \"undefined\") {\n this.timedWrapper = opts.timedWrapper;\n } else {\n // However sometimes selectquestions\n // are used in regular assignments. The hacky way to detect this\n // is to look for doAssignment in the URL and then grab\n // the assignment name from the heading.\n if (location.href.indexOf(\"doAssignment\") >= 0) {\n this.timedWrapper = $(\"h1#assignment_name\").text();\n } else {\n this.timedWrapper = null;\n }\n }\n if ($(opts.orig).data(\"question_label\")) {\n this.question_label = $(opts.orig).data(\"question_label\");\n }\n this.is_toggle = true ? opts.is_toggle : false;\n this.is_select = true ? opts.is_select : false;\n\n }\n this.mjelements = [];\n let self = this;\n this.mjReady = new Promise(function(resolve, reject) {\n self.mjresolver = resolve;\n });\n this.aQueue = new AutoQueue();\n this.jsonHeaders = new Headers({\n \"Content-type\": \"application/json; charset=utf-8\",\n Accept: \"application/json\",\n });\n }\n\n // _`logBookEvent`\n //----------------\n // This function sends the provided ``eventInfo`` to the `hsblog endpoint` of the server. Awaiting this function returns either ``undefined`` (if Runestone services are not available) or the data returned by the server as a JavaScript object (already JSON-decoded).\n async logBookEvent(eventInfo) {\n if (this.graderactive) {\n return;\n }\n let post_return;\n eventInfo.course_name = eBookConfig.course;\n eventInfo.clientLoginStatus = eBookConfig.isLoggedIn;\n eventInfo.timezoneoffset = new Date().getTimezoneOffset() / 60;\n if (typeof(this.percent) === \"number\") {\n eventInfo.percent = this.percent;\n }\n if (\n eBookConfig.isLoggedIn &&\n eBookConfig.useRunestoneServices &&\n eBookConfig.logLevel > 0\n ) {\n post_return = this.postLogMessage(eventInfo);\n }\n if (!this.isTimed || eBookConfig.debug) {\n let prefix = eBookConfig.isLoggedIn ? \"Save\" : \"Not\";\n console.log(`${prefix} logging event ` + JSON.stringify(eventInfo));\n }\n // When selectquestions are part of an assignment especially toggle questions\n // we need to count using the selector_id of the select question.\n // We also need to log an event for that selector so that we will know\n // that interaction has taken place. This is **independent** of how the\n // autograder will ultimately grade the question!\n if (this.selector_id) {\n eventInfo.div_id = this.selector_id.replace(\n \"-toggleSelectedQuestion\",\n \"\"\n );\n eventInfo.event = \"selectquestion\";\n eventInfo.act = \"interaction\";\n this.postLogMessage(eventInfo);\n }\n if (\n typeof pageProgressTracker.updateProgress === \"function\" &&\n eventInfo.act != \"edit\" &&\n this.optional == false\n ) {\n pageProgressTracker.updateProgress(eventInfo.div_id);\n }\n return post_return;\n }\n\n async postLogMessage(eventInfo) {\n var post_return;\n let request = new Request(\n `${eBookConfig.new_server_prefix}/logger/bookevent`, {\n method: \"POST\",\n headers: this.jsonHeaders,\n body: JSON.stringify(eventInfo),\n }\n );\n try {\n var response = await fetch(request);\n if (!response.ok) {\n if (response.status === 422) {\n // Get details about why this is unprocesable.\n post_return = await response.json();\n console.log(post_return.detail);\n throw new Error(\"Unprocessable Request\");\n } else if (response.status == 401) {\n post_return = await response.json();\n console.log(\n `Missing authentication token ${post_return.detail}`\n );\n throw new Error(\"Missing authentication token\");\n }\n throw new Error(`Failed to save the log entry\n Status: ${response.status}`);\n }\n post_return = await response.json();\n } catch (e) {\n let detail = \"none\";\n if (post_return && post_return.detail) {\n detail = post_return.detail;\n }\n if (eBookConfig.loginRequired) {\n alert(`Error: Your action was not saved!\n The error was ${e}\n Status Code: ${response.status}\n Detail: ${detail}.\n Please report this error!`);\n }\n // send a request to save this error\n console.log(`Error: ${e} Detail: ${detail} Status Code: ${response.status}`);\n }\n return post_return;\n }\n // .. _logRunEvent:\n //\n // logRunEvent\n // -----------\n // This function sends the provided ``eventInfo`` to the `runlog endpoint`. When awaited, this function returns the data (decoded from JSON) the server sent back.\n async logRunEvent(eventInfo) {\n let post_promise = \"done\";\n if (this.graderactive) {\n return;\n }\n eventInfo.course = eBookConfig.course;\n eventInfo.clientLoginStatus = eBookConfig.isLoggedIn;\n eventInfo.timezoneoffset = new Date().getTimezoneOffset() / 60;\n if (this.forceSave || \"to_save\" in eventInfo === false) {\n eventInfo.save_code = \"True\";\n }\n if (\n eBookConfig.isLoggedIn &&\n eBookConfig.useRunestoneServices &&\n eBookConfig.logLevel > 0\n ) {\n let request = new Request(\n `${eBookConfig.new_server_prefix}/logger/runlog`, {\n method: \"POST\",\n headers: this.jsonHeaders,\n body: JSON.stringify(eventInfo),\n }\n );\n let response = await fetch(request);\n if (!response.ok) {\n post_promise = await response.json();\n if (eBookConfig.loginRequired) {\n alert(`Failed to save your code\n Status is ${response.status}\n Detail: ${post_promise.detail}`);\n } else {\n console.log(\n `Did not save the code. Status: ${response.status}`\n );\n }\n } else {\n post_promise = await response.json();\n }\n }\n if (!this.isTimed || eBookConfig.debug) {\n console.log(\"running \" + JSON.stringify(eventInfo));\n }\n if (\n typeof pageProgressTracker.updateProgress === \"function\" &&\n this.optional == false\n ) {\n pageProgressTracker.updateProgress(eventInfo.div_id);\n }\n return post_promise;\n }\n /* Checking/loading from storage\n **WARNING:** DO NOT `await` this function!\n This function, although async, does not explicitly resolve its promise by returning a value. The reason for this is because it is called by the constructor for nearly every component. In Javascript constructors cannot be async!\n\n One of the recommended ways to handle the async requirements from within a constructor is to use an attribute as a promise and resolve that attribute at the appropriate time.\n */\n async checkServer(\n // A string specifying the event name to use for querying the :ref:`getAssessResults` endpoint.\n eventInfo,\n // If true, this function will invoke ``indicate_component_ready()`` just before it returns. This is provided since most components are ready after this function completes its work.\n //\n // TODO: This defaults to false, to avoid causing problems with any components that haven't been updated and tested. After all Runestone components have been updated, default this to true and remove the extra parameter from most calls to this function.\n will_be_ready = false\n ) {\n // Check if the server has stored answer\n let self = this;\n this.checkServerComplete = new Promise(function(resolve, reject) {\n self.csresolver = resolve;\n });\n if (\n eBookConfig.isLoggedIn &&\n (this.useRunestoneServices || this.graderactive)\n ) {\n let data = {};\n data.div_id = this.divid;\n data.course = eBookConfig.course;\n data.event = eventInfo;\n if (this.graderactive && this.deadline) {\n data.deadline = this.deadline;\n data.rawdeadline = this.rawdeadline;\n data.tzoff = this.tzoff;\n }\n if (this.sid) {\n data.sid = this.sid;\n }\n if (!(data.div_id && data.course && data.event)) {\n console.log(\n `A required field is missing data ${data.div_id}:${data.course}:${data.event}`\n );\n }\n // If we are NOT in practice mode and we are not in a peer exercise\n // and assessmentTaken is true\n if (\n !eBookConfig.practice_mode &&\n !eBookConfig.peer &&\n this.assessmentTaken\n ) {\n let request = new Request(\n `${eBookConfig.new_server_prefix}/assessment/results`, {\n method: \"POST\",\n body: JSON.stringify(data),\n headers: this.jsonHeaders,\n }\n );\n try {\n let response = await fetch(request);\n if (response.ok) {\n data = await response.json();\n data = data.detail;\n this.repopulateFromStorage(data);\n this.attempted = true;\n if (typeof(data.correct) !== \"undefined\") {\n this.correct = data.correct;\n } else {\n this.correct = null;\n }\n this.csresolver(\"server\");\n } else {\n console.log(\n `HTTP Error getting results: ${response.statusText}`\n );\n this.checkLocalStorage(); // just go right to local storage\n this.csresolver(\"local\");\n }\n } catch (err) {\n console.log(`Error getting results: ${err}`)\n try {\n this.checkLocalStorage();\n } catch (err) {\n console.log(err);\n }\n }\n } else {\n this.loadData({});\n this.csresolver(\"not taken\");\n }\n } else {\n this.checkLocalStorage(); // just go right to local storage\n this.csresolver(\"local\");\n }\n\n if (will_be_ready) {\n this.indicate_component_ready();\n }\n }\n\n // This method assumes that ``this.componentDiv`` refers to the ``div`` containing the component, and that this component's ID is set.\n indicate_component_ready() {\n // Add a class to indicate the component is now ready.\n this.containerDiv.classList.add(\"runestone-component-ready\");\n // Resolve the ``this.component_ready_promise``.\n this._component_ready_resolve_fn();\n }\n\n loadData(data) {\n // for most classes, loadData doesn't do anything. But for Parsons, and perhaps others in the future,\n // initialization can happen even when there's no history to be loaded\n return null;\n }\n\n /**\n * repopulateFromStorage is called after a successful API call is made to ``getAssessResults`` in\n * the checkServer method in this class\n *\n * ``restoreAnswers,`` ``setLocalStorage`` and ``checkLocalStorage`` are defined in the child classes.\n *\n * @param {*} data - a JSON object representing the data needed to restore a previous answer for a component\n * @param {*} status - the http status\n * @param {*} whatever - ignored\n */\n repopulateFromStorage(data) {\n // decide whether to use the server's answer (if there is one) or to load from storage\n if (data !== null && data !== \"no data\" && this.shouldUseServer(data)) {\n this.restoreAnswers(data);\n this.setLocalStorage(data);\n } else {\n this.checkLocalStorage();\n }\n }\n shouldUseServer(data) {\n // returns true if server data is more recent than local storage or if server storage is correct\n if (\n data.correct === \"T\" ||\n data.correct === true ||\n localStorage.length === 0 ||\n this.graderactive === true ||\n this.isTimed\n ) {\n return true;\n }\n let ex = localStorage.getItem(this.localStorageKey());\n if (ex === null) {\n return true;\n }\n let storedData;\n try {\n storedData = JSON.parse(ex);\n } catch (err) {\n // error while parsing; likely due to bad value stored in storage\n console.log(err.message);\n localStorage.removeItem(this.localStorageKey());\n // definitely don't want to use local storage here\n return true;\n }\n if (data.answer == storedData.answer) return true;\n let storageDate = new Date(storedData.timestamp);\n let serverDate = new Date(data.timestamp);\n return serverDate >= storageDate;\n }\n // Return the key which to be used when accessing local storage.\n localStorageKey() {\n return (\n eBookConfig.email +\n \":\" +\n eBookConfig.course +\n \":\" +\n this.divid +\n \"-given\"\n );\n }\n addCaption(elType) {\n //someElement.parentNode.insertBefore(newElement, someElement.nextSibling);\n if (!this.isTimed) {\n var capDiv = document.createElement(\"p\");\n if (this.question_label) {\n this.caption = `Activity: ${this.question_label} ${this.caption} (${this.divid})`;\n $(capDiv).html(this.caption);\n $(capDiv).addClass(`${elType}_caption`);\n } else {\n $(capDiv).html(this.caption + \" (\" + this.divid + \")\");\n $(capDiv).addClass(`${elType}_caption`);\n $(capDiv).addClass(`${elType}_caption_text`);\n }\n this.capDiv = capDiv;\n //this.outerDiv.parentNode.insertBefore(capDiv, this.outerDiv.nextSibling);\n this.containerDiv.appendChild(capDiv);\n }\n }\n\n hasUserActivity() {\n return this.isAnswered;\n }\n\n checkCurrentAnswer() {\n console.log(\n \"Each component should provide an implementation of checkCurrentAnswer\"\n );\n }\n\n async logCurrentAnswer() {\n console.log(\n \"Each component should provide an implementation of logCurrentAnswer\"\n );\n }\n renderFeedback() {\n console.log(\n \"Each component should provide an implementation of renderFeedback\"\n );\n }\n disableInteraction() {\n console.log(\n \"Each component should provide an implementation of disableInteraction\"\n );\n }\n\n toString() {\n return `${this.constructor.name}: ${this.divid}`;\n }\n\n queueMathJax(component) {\n if (typeof(MathJax) === \"undefined\") {\n console.log(\"Error -- MathJax is not loaded\")\n return Promise.resolve(null);\n } else {\n // See - https://docs.mathjax.org/en/latest/advanced/typeset.html\n // Per the above we should keep track of the promises and only call this\n // a second time if all previous promises have resolved.\n // Create a queue of components\n // should wait until defaultPageReady is defined\n // If defaultPageReady is not defined then just enqueue the components.\n // Once defaultPageReady is defined\n // the window.runestoneMathReady promise will be fulfilled when the\n // initial typesetting is complete.\n if (MathJax.typesetPromise) {\n if (typeof(window.runestoneMathReady) !== \"undefined\") {\n return window.runestoneMathReady.then(\n () => this.mjresolver(this.aQueue.enqueue(component))\n )\n } else {\n return this.mjresolver(this.aQueue.enqueue(component))\n }\n } else {\n console.log(`Waiting on MathJax!! ${MathJax.typesetPromise}`);\n setTimeout(() => this.queueMathJax(component), 200);\n console.log(`Returning mjready promise: ${this.mjReady}`)\n return this.mjReady;\n }\n }\n }\n\n decorateStatus() {\n let rsDiv = $(this.containerDiv).closest(\"div.runestone\")[0];\n if (this.correct) {\n rsDiv.classList.add(\"isCorrect\");\n } else {\n if (this.correct === null) {\n rsDiv.classList.add(\"notAnswered\");\n } else {\n rsDiv.classList.add(\"isInCorrect\");\n }\n }\n }\n\n}\n\n\n// Inspiration and lots of code for this solution come from\n// https://stackoverflow.com/questions/53540348/js-async-await-tasks-queue\n// The idea here is that until MathJax is ready we can just enqueue things\n// once mathjax becomes ready then we can drain the queue and continue as usual.\n\nclass Queue {\n constructor() { this._items = []; }\n enqueue(item) { this._items.push(item); }\n dequeue() { return this._items.shift(); }\n get size() { return this._items.length; }\n}\n\nclass AutoQueue extends Queue {\n constructor() {\n super();\n this._pendingPromise = false;\n }\n\n enqueue(component) {\n return new Promise((resolve, reject) => {\n super.enqueue({ component, resolve, reject });\n this.dequeue();\n });\n }\n\n async dequeue() {\n if (this._pendingPromise) return false;\n\n let item = super.dequeue();\n\n if (!item) return false;\n\n try {\n this._pendingPromise = true;\n\n let payload = await MathJax.startup.defaultPageReady().then(\n async function() {\n console.log(`MathJax Ready -- dequeing a typesetting run for ${item.component.id}`)\n return await MathJax.typesetPromise([item.component])\n }\n );\n\n this._pendingPromise = false; item.resolve(payload);\n }\n catch (e) {\n this._pendingPromise = false;\n item.reject(e);\n } finally {\n this.dequeue();\n }\n\n return true;\n }\n }\n\n\n window.RunestoneBase = RunestoneBase;\n","(function ($) {\n /**\n * Patch TOC list.\n *\n * Will mutate the underlying span to have a correct ul for nav.\n *\n * @param $span: Span containing nested UL's to mutate.\n * @param minLevel: Starting level for nested lists. (1: global, 2: local).\n */\n var patchToc = function ($ul, minLevel) {\n var findA,\n patchTables,\n $localLi;\n\n // Find all a \"internal\" tags, traversing recursively.\n findA = function ($elem, level) {\n level = level || 0;\n var $items = $elem.find(\"> li > a.internal, > ul, > li > ul\");\n\n // Iterate everything in order.\n $items.each(function (index, item) {\n var $item = $(item),\n tag = item.tagName.toLowerCase(),\n $childrenLi = $item.children('li'),\n $parentLi = $($item.parent('li'), $item.parent().parent('li'));\n\n // Add dropdowns if more children and above minimum level.\n if (tag === 'ul' && level >= minLevel && $childrenLi.length > 0) {\n $parentLi\n .addClass('dropdown-submenu')\n .children('a').first().attr('tabindex', -1);\n\n $item.addClass('dropdown-menu');\n }\n\n findA($item, level + 1);\n });\n };\n\n findA($ul);\n };\n\n /**\n * Patch all tables to remove ``docutils`` class and add Bootstrap base\n * ``table`` class.\n */\n patchTables = function () {\n $(\"table.docutils\")\n .removeClass(\"docutils\")\n .addClass(\"table\")\n .attr(\"border\", 0);\n };\n\n$(function () {\n\n /*\n * Scroll the window to avoid the topnav bar\n * https://github.com/twitter/bootstrap/issues/1768\n */\n if ($(\"#navbar.navbar-fixed-top\").length > 0) {\n var navHeight = $(\"#navbar\").height(),\n shiftWindow = function() { scrollBy(0, -navHeight - 10); };\n\n if (location.hash) {\n shiftWindow();\n }\n\n window.addEventListener(\"hashchange\", shiftWindow);\n }\n\n // Add styling, structure to TOC's.\n $(\".dropdown-menu\").each(function () {\n $(this).find(\"ul\").each(function (index, item){\n var $item = $(item);\n $item.addClass('unstyled');\n });\n });\n\n // Global TOC.\n if ($(\"ul.globaltoc li\").length) {\n patchToc($(\"ul.globaltoc\"), 1);\n } else {\n // Remove Global TOC.\n $(\".globaltoc-container\").remove();\n }\n\n // Local TOC.\n patchToc($(\"ul.localtoc\"), 2);\n\n // Mutate sub-lists (for bs-2.3.0).\n $(\".dropdown-menu ul\").not(\".dropdown-menu\").each(function () {\n var $ul = $(this),\n $parent = $ul.parent(),\n tag = $parent[0].tagName.toLowerCase(),\n $kids = $ul.children().detach();\n\n // Replace list with items if submenu header.\n if (tag === \"ul\") {\n $ul.replaceWith($kids);\n } else if (tag === \"li\") {\n // Insert into previous list.\n $parent.after($kids);\n $ul.remove();\n }\n });\n\n // Add divider in page TOC.\n $localLi = $(\"ul.localtoc li\");\n if ($localLi.length > 2) {\n $localLi.first().after('');\n }\n\n // Enable dropdown.\n $('.dropdown-toggle').dropdown();\n\n // Patch tables.\n patchTables();\n\n // Add Note, Warning styles.\n $('div.note').addClass('alert').addClass('alert-info');\n $('div.warning').addClass('alert').addClass('alert-warning');\n\n // Inline code styles to Bootstrap style.\n $('tt.docutils.literal').not(\".xref\").each(function (i, e) {\n // ignore references\n if (!$(e).parent().hasClass(\"reference\")) {\n $(e).replaceWith(function () {\n return $(\"
\").text($(this).text());\n });\n }});\n });\n}(window.jQuery));\n","/*global variable declarations*/\n\n\"use strict\";\n\nimport \"../css/user-highlights.css\";\n\nfunction getCompletions() {\n // Get the completion status\n if (\n window.location.href.match(\n /(index.html|toctree.html|genindex.html|navhelp.html|toc.html|assignments.html|Exercises.html)/\n )\n ) {\n return;\n }\n\n var currentPathname = window.location.pathname;\n if (currentPathname.indexOf(\"?\") !== -1) {\n currentPathname = currentPathname.substring(\n 0,\n currentPathname.lastIndexOf(\"?\")\n );\n }\n var data = {\n lastPageUrl: currentPathname,\n isPtxBook: isPreTeXt(),\n };\n jQuery\n .ajax({\n url: `${eBookConfig.new_server_prefix}/logger/getCompletionStatus`,\n data: data,\n async: false,\n })\n .done(function (data) {\n if (data != \"None\") {\n var completionData = data.detail;\n var completionClass, completionMsg;\n if (completionData[0].completionStatus == 1) {\n completionClass = \"buttonConfirmCompletion\";\n completionMsg =\n \" Completed. Well Done!\";\n } else {\n completionClass = \"buttonAskCompletion\";\n completionMsg = \"Mark as Completed\";\n }\n let scp = document.querySelector(\"#scprogresscontainer\");\n if (scp) {\n scp.classList.add(\"ptx-runestone-container\");\n }\n $(\"#scprogresscontainer\").append(\n '\"\n );\n }\n });\n}\n\nfunction showLastPositionBanner() {\n var lastPositionVal = $.getUrlVar(\"lastPosition\");\n if (typeof lastPositionVal !== \"undefined\") {\n $(\"body\").append(\n '