(function () { /** * @license almond 0.3.3 Copyright jQuery Foundation and other contributors. * Released under MIT license, http://github.com/requirejs/almond/LICENSE */ //Going sloppy to avoid 'use strict' string cost, but strict practices should //be followed. /*global setTimeout: false */ var requirejs, require, define; (function (undef) { var main, req, makeMap, handlers, defined = {}, waiting = {}, config = {}, defining = {}, hasOwn = Object.prototype.hasOwnProperty, aps = [].slice, jsSuffixRegExp = /\.js$/; function hasProp(obj, prop) { return hasOwn.call(obj, prop); } /** * Given a relative module name, like ./something, normalize it to * a real name that can be mapped to a path. * @param {String} name the relative name * @param {String} baseName a real name that the name arg is relative * to. * @returns {String} normalized name */ function normalize(name, baseName) { var nameParts, nameSegment, mapValue, foundMap, lastIndex, foundI, foundStarMap, starI, i, j, part, normalizedBaseParts, baseParts = baseName && baseName.split("/"), map = config.map, starMap = (map && map['*']) || {}; //Adjust any relative paths. if (name) { name = name.split('/'); lastIndex = name.length - 1; // If wanting node ID compatibility, strip .js from end // of IDs. Have to do this here, and not in nameToUrl // because node allows either .js or non .js to map // to same file. if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) { name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, ''); } // Starts with a '.' so need the baseName if (name[0].charAt(0) === '.' && baseParts) { //Convert baseName to array, and lop off the last part, //so that . matches that 'directory' and not name of the baseName's //module. For instance, baseName of 'one/two/three', maps to //'one/two/three.js', but we want the directory, 'one/two' for //this normalization. normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); name = normalizedBaseParts.concat(name); } //start trimDots for (i = 0; i < name.length; i++) { part = name[i]; if (part === '.') { name.splice(i, 1); i -= 1; } else if (part === '..') { // If at the start, or previous value is still .., // keep them so that when converted to a path it may // still work when converted to a path, even though // as an ID it is less than ideal. In larger point // releases, may be better to just kick out an error. if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') { continue; } else if (i > 0) { name.splice(i - 1, 2); i -= 2; } } } //end trimDots name = name.join('/'); } //Apply map config if available. if ((baseParts || starMap) && map) { nameParts = name.split('/'); for (i = nameParts.length; i > 0; i -= 1) { nameSegment = nameParts.slice(0, i).join("/"); if (baseParts) { //Find the longest baseName segment match in the config. //So, do joins on the biggest to smallest lengths of baseParts. for (j = baseParts.length; j > 0; j -= 1) { mapValue = map[baseParts.slice(0, j).join('/')]; //baseName segment has config, find if it has one for //this name. if (mapValue) { mapValue = mapValue[nameSegment]; if (mapValue) { //Match, update name to the new value. foundMap = mapValue; foundI = i; break; } } } } if (foundMap) { break; } //Check for a star map match, but just hold on to it, //if there is a shorter segment match later in a matching //config, then favor over this star map. if (!foundStarMap && starMap && starMap[nameSegment]) { foundStarMap = starMap[nameSegment]; starI = i; } } if (!foundMap && foundStarMap) { foundMap = foundStarMap; foundI = starI; } if (foundMap) { nameParts.splice(0, foundI, foundMap); name = nameParts.join('/'); } } return name; } function makeRequire(relName, forceSync) { return function () { //A version of a require function that passes a moduleName //value for items that may need to //look up paths relative to the moduleName var args = aps.call(arguments, 0); //If first arg is not require('string'), and there is only //one arg, it is the array form without a callback. Insert //a null so that the following concat is correct. if (typeof args[0] !== 'string' && args.length === 1) { args.push(null); } return req.apply(undef, args.concat([relName, forceSync])); }; } function makeNormalize(relName) { return function (name) { return normalize(name, relName); }; } function makeLoad(depName) { return function (value) { defined[depName] = value; }; } function callDep(name) { if (hasProp(waiting, name)) { var args = waiting[name]; delete waiting[name]; defining[name] = true; main.apply(undef, args); } if (!hasProp(defined, name) && !hasProp(defining, name)) { throw new Error('No ' + name); } return defined[name]; } //Turns a plugin!resource to [plugin, resource] //with the plugin being undefined if the name //did not have a plugin prefix. function splitPrefix(name) { var prefix, index = name ? name.indexOf('!') : -1; if (index > -1) { prefix = name.substring(0, index); name = name.substring(index + 1, name.length); } return [prefix, name]; } //Creates a parts array for a relName where first part is plugin ID, //second part is resource ID. Assumes relName has already been normalized. function makeRelParts(relName) { return relName ? splitPrefix(relName) : []; } /** * Makes a name map, normalizing the name, and using a plugin * for normalization if necessary. Grabs a ref to plugin * too, as an optimization. */ makeMap = function (name, relParts) { var plugin, parts = splitPrefix(name), prefix = parts[0], relResourceName = relParts[1]; name = parts[1]; if (prefix) { prefix = normalize(prefix, relResourceName); plugin = callDep(prefix); } //Normalize according if (prefix) { if (plugin && plugin.normalize) { name = plugin.normalize(name, makeNormalize(relResourceName)); } else { name = normalize(name, relResourceName); } } else { name = normalize(name, relResourceName); parts = splitPrefix(name); prefix = parts[0]; name = parts[1]; if (prefix) { plugin = callDep(prefix); } } //Using ridiculous property names for space reasons return { f: prefix ? prefix + '!' + name : name, //fullName n: name, pr: prefix, p: plugin }; }; function makeConfig(name) { return function () { return (config && config.config && config.config[name]) || {}; }; } handlers = { require: function (name) { return makeRequire(name); }, exports: function (name) { var e = defined[name]; if (typeof e !== 'undefined') { return e; } else { return (defined[name] = {}); } }, module: function (name) { return { id: name, uri: '', exports: defined[name], config: makeConfig(name) }; } }; main = function (name, deps, callback, relName) { var cjsModule, depName, ret, map, i, relParts, args = [], callbackType = typeof callback, usingExports; //Use name if no relName relName = relName || name; relParts = makeRelParts(relName); //Call the callback to define the module, if necessary. if (callbackType === 'undefined' || callbackType === 'function') { //Pull out the defined dependencies and pass the ordered //values to the callback. //Default to [require, exports, module] if no deps deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps; for (i = 0; i < deps.length; i += 1) { map = makeMap(deps[i], relParts); depName = map.f; //Fast path CommonJS standard dependencies. if (depName === "require") { args[i] = handlers.require(name); } else if (depName === "exports") { //CommonJS module spec 1.1 args[i] = handlers.exports(name); usingExports = true; } else if (depName === "module") { //CommonJS module spec 1.1 cjsModule = args[i] = handlers.module(name); } else if (hasProp(defined, depName) || hasProp(waiting, depName) || hasProp(defining, depName)) { args[i] = callDep(depName); } else if (map.p) { map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {}); args[i] = defined[depName]; } else { throw new Error(name + ' missing ' + depName); } } ret = callback ? callback.apply(defined[name], args) : undefined; if (name) { //If setting exports via "module" is in play, //favor that over return value and exports. After that, //favor a non-undefined return value over exports use. if (cjsModule && cjsModule.exports !== undef && cjsModule.exports !== defined[name]) { defined[name] = cjsModule.exports; } else if (ret !== undef || !usingExports) { //Use the return value from the function. defined[name] = ret; } } } else if (name) { //May just be an object definition for the module. Only //worry about defining if have a module name. defined[name] = callback; } }; requirejs = require = req = function (deps, callback, relName, forceSync, alt) { if (typeof deps === "string") { if (handlers[deps]) { //callback in this case is really relName return handlers[deps](callback); } //Just return the module wanted. In this scenario, the //deps arg is the module name, and second arg (if passed) //is just the relName. //Normalize module name, if it contains . or .. return callDep(makeMap(deps, makeRelParts(callback)).f); } else if (!deps.splice) { //deps is a config object, not an array. config = deps; if (config.deps) { req(config.deps, config.callback); } if (!callback) { return; } if (callback.splice) { //callback is an array, which means it is a dependency list. //Adjust args if there are dependencies deps = callback; callback = relName; relName = null; } else { deps = undef; } } //Support require(['a']) callback = callback || function () {}; //If relName is a function, it is an errback handler, //so remove it. if (typeof relName === 'function') { relName = forceSync; forceSync = alt; } //Simulate async callback; if (forceSync) { main(undef, deps, callback, relName); } else { //Using a non-zero value because of concern for what old browsers //do, and latest browsers "upgrade" to 4 if lower value is used: //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout: //If want a value immediately, use require('id') instead -- something //that works in almond on the global level, but not guaranteed and //unlikely to work in other AMD implementations. setTimeout(function () { main(undef, deps, callback, relName); }, 4); } return req; }; /** * Just drops the config on the floor, but returns req in case * the config return value is used. */ req.config = function (cfg) { return req(cfg); }; /** * Expose module registry for debugging and tooling */ requirejs._defined = defined; define = function (name, deps, callback) { if (typeof name !== 'string') { throw new Error('See almond README: incorrect module build, no module name'); } //This module may not have dependencies if (!deps.splice) { //deps is not an array, so probably means //an object literal or factory function for //the value. Adjust args. callback = deps; deps = []; } if (!hasProp(defined, name) && !hasProp(waiting, name)) { waiting[name] = [name, deps, callback]; } }; define.amd = { jQuery: true }; }()); define("../node_modules/almond/almond", function(){}); define('core/EventObject',[],() => { 'use strict'; return class EventObject { constructor() { this.listeners = new Map(); this.forwards = new Set(); } addEventListener(type, callback) { const l = this.listeners.get(type); if(l) { l.push(callback); } else { this.listeners.set(type, [callback]); } } removeEventListener(type, fn) { const l = this.listeners.get(type); if(!l) { return; } const i = l.indexOf(fn); if(i !== -1) { l.splice(i, 1); } } countEventListeners(type) { return (this.listeners.get(type) || []).length; } removeAllEventListeners(type) { if(type) { this.listeners.delete(type); } else { this.listeners.clear(); } } addEventForwarding(target) { this.forwards.add(target); } removeEventForwarding(target) { this.forwards.delete(target); } removeAllEventForwardings() { this.forwards.clear(); } trigger(type, params = []) { (this.listeners.get(type) || []).forEach( (listener) => listener.apply(null, params) ); this.forwards.forEach((fwd) => fwd.trigger(type, params)); } }; }); define('core/ArrayUtilities',[],() => { 'use strict'; function indexOf(list, element, equalityCheck = null) { if(equalityCheck === null) { return list.indexOf(element); } for(let i = 0; i < list.length; ++ i) { if(equalityCheck(list[i], element)) { return i; } } return -1; } function mergeSets(target, b = null, equalityCheck = null) { if(!b) { return; } for(let i = 0; i < b.length; ++ i) { if(indexOf(target, b[i], equalityCheck) === -1) { target.push(b[i]); } } } function hasIntersection(a, b, equalityCheck = null) { for(let i = 0; i < b.length; ++ i) { if(indexOf(a, b[i], equalityCheck) !== -1) { return true; } } return false; } function removeAll(target, b = null, equalityCheck = null) { if(!b) { return; } for(let i = 0; i < b.length; ++ i) { const p = indexOf(target, b[i], equalityCheck); if(p !== -1) { target.splice(p, 1); } } } function remove(list, item, equalityCheck = null) { const p = indexOf(list, item, equalityCheck); if(p !== -1) { list.splice(p, 1); } } function last(list) { return list[list.length - 1]; } function combineRecur(parts, position, current, target) { if(position >= parts.length) { target.push(current.slice()); return; } const choices = parts[position]; if(!Array.isArray(choices)) { current.push(choices); combineRecur(parts, position + 1, current, target); current.pop(); return; } for(let i = 0; i < choices.length; ++ i) { current.push(choices[i]); combineRecur(parts, position + 1, current, target); current.pop(); } } function combine(parts) { const target = []; combineRecur(parts, 0, [], target); return target; } function flatMap(list, fn) { const result = []; list.forEach((item) => { result.push(...fn(item)); }); return result; } return { indexOf, mergeSets, hasIntersection, removeAll, remove, last, combine, flatMap, }; }); define('sequence/CodeMirrorMode',['core/ArrayUtilities'], (array) => { 'use strict'; const CM_ERROR = {type: 'error line-error', then: {'': 0}}; function suggestionsEqual(a, b) { return ( (a.v === b.v) && (a.prefix === b.prefix) && (a.suffix === b.suffix) && (a.q === b.q) ); } const makeCommands = ((() => { // The order of commands inside "then" blocks directly influences the // order they are displayed to the user in autocomplete menus. // This relies on the fact that common JS engines maintain insertion // order in objects, though this is not guaranteed. It could be switched // to use Map objects instead for strict compliance, at the cost of // extra syntax. const end = {type: '', suggest: '\n', then: {}}; const hiddenEnd = {type: '', then: {}}; function textTo(exit, suggest) { return { type: 'string', suggest, then: Object.assign({'': 0}, exit), }; } const textToEnd = textTo({'\n': end}); const aliasListToEnd = { type: 'variable', suggest: {known: 'Agent'}, then: { '': 0, '\n': end, ',': {type: 'operator', suggest: true, then: {'': 1}}, 'as': {type: 'keyword', suggest: true, then: { '': {type: 'variable', suggest: {known: 'Agent'}, then: { '': 0, ',': {type: 'operator', suggest: true, then: {'': 3}}, '\n': end, }}, }}, }, }; function agentListTo(exit) { return { type: 'variable', suggest: {known: 'Agent'}, then: Object.assign({}, exit, { '': 0, ',': {type: 'operator', suggest: true, then: {'': 1}}, } ), }; } const colonTextToEnd = { type: 'operator', suggest: true, then: {'': textToEnd, '\n': hiddenEnd}, }; const agentListToText = agentListTo({ ':': colonTextToEnd, }); const agentList2ToText = { type: 'variable', suggest: {known: 'Agent'}, then: { '': 0, ',': {type: 'operator', suggest: true, then: { '': agentListToText, }}, ':': CM_ERROR, }, }; const singleAgentToText = { type: 'variable', suggest: {known: 'Agent'}, then: { '': 0, ',': CM_ERROR, ':': colonTextToEnd, }, }; const agentToOptText = { type: 'variable', suggest: {known: 'Agent'}, then: { '': 0, ':': {type: 'operator', suggest: true, then: { '': textToEnd, '\n': hiddenEnd, }}, '\n': end, }, }; const referenceName = { ':': {type: 'operator', suggest: true, then: { '': textTo({ 'as': {type: 'keyword', suggest: true, then: { '': { type: 'variable', suggest: {known: 'Agent'}, then: { '': 0, '\n': end, }, }, }}, }), }}, }; const refDef = {type: 'keyword', suggest: true, then: Object.assign({ 'over': {type: 'keyword', suggest: true, then: { '': agentListTo(referenceName), }}, }, referenceName)}; function makeSideNote(side) { return { type: 'keyword', suggest: [side + ' of ', side + ': '], then: { 'of': {type: 'keyword', suggest: true, then: { '': agentListToText, }}, ':': {type: 'operator', suggest: true, then: { '': textToEnd, }}, '': agentListToText, }, }; } function makeOpBlock(exit, sourceExit) { const op = {type: 'operator', suggest: true, then: { '+': CM_ERROR, '-': CM_ERROR, '*': CM_ERROR, '!': CM_ERROR, '': exit, }}; return { '+': {type: 'operator', suggest: true, then: { '+': CM_ERROR, '-': CM_ERROR, '*': op, '!': CM_ERROR, '': exit, }}, '-': {type: 'operator', suggest: true, then: { '+': CM_ERROR, '-': CM_ERROR, '*': op, '!': {type: 'operator', then: { '+': CM_ERROR, '-': CM_ERROR, '*': CM_ERROR, '!': CM_ERROR, '': exit, }}, '': exit, }}, '*': {type: 'operator', suggest: true, then: Object.assign({ '+': op, '-': op, '*': CM_ERROR, '!': CM_ERROR, '': exit, }, sourceExit)}, '!': op, '': exit, }; } function makeCMConnect(arrows) { const connect = { type: 'keyword', suggest: true, then: makeOpBlock(agentToOptText, { ':': colonTextToEnd, '\n': hiddenEnd, }), }; const then = {'': 0}; arrows.forEach((arrow) => (then[arrow] = connect)); then[':'] = { type: 'operator', suggest: true, override: 'Label', then: {}, }; return makeOpBlock( {type: 'variable', suggest: {known: 'Agent'}, then}, then ); } const BASE_THEN = { 'title': {type: 'keyword', suggest: true, then: { '': textToEnd, }}, 'theme': {type: 'keyword', suggest: true, then: { '': { type: 'string', suggest: { global: 'themes', suffix: '\n', }, then: { '': 0, '\n': end, }, }, }}, 'headers': {type: 'keyword', suggest: true, then: { 'none': {type: 'keyword', suggest: true, then: {}}, 'cross': {type: 'keyword', suggest: true, then: {}}, 'box': {type: 'keyword', suggest: true, then: {}}, 'fade': {type: 'keyword', suggest: true, then: {}}, 'bar': {type: 'keyword', suggest: true, then: {}}, }}, 'terminators': {type: 'keyword', suggest: true, then: { 'none': {type: 'keyword', suggest: true, then: {}}, 'cross': {type: 'keyword', suggest: true, then: {}}, 'box': {type: 'keyword', suggest: true, then: {}}, 'fade': {type: 'keyword', suggest: true, then: {}}, 'bar': {type: 'keyword', suggest: true, then: {}}, }}, 'define': {type: 'keyword', suggest: true, then: { '': aliasListToEnd, 'as': CM_ERROR, }}, 'begin': {type: 'keyword', suggest: true, then: { '': aliasListToEnd, 'reference': refDef, 'as': CM_ERROR, }}, 'end': {type: 'keyword', suggest: true, then: { '': aliasListToEnd, 'as': CM_ERROR, '\n': end, }}, 'if': {type: 'keyword', suggest: true, then: { '': textToEnd, ':': {type: 'operator', suggest: true, then: { '': textToEnd, }}, '\n': end, }}, 'else': {type: 'keyword', suggest: ['else\n', 'else if: '], then: { 'if': {type: 'keyword', suggest: 'if: ', then: { '': textToEnd, ':': {type: 'operator', suggest: true, then: { '': textToEnd, }}, }}, '\n': end, }}, 'repeat': {type: 'keyword', suggest: true, then: { '': textToEnd, ':': {type: 'operator', suggest: true, then: { '': textToEnd, }}, '\n': end, }}, 'note': {type: 'keyword', suggest: true, then: { 'over': {type: 'keyword', suggest: true, then: { '': agentListToText, }}, 'left': makeSideNote('left'), 'right': makeSideNote('right'), 'between': {type: 'keyword', suggest: true, then: { '': agentList2ToText, }}, }}, 'state': {type: 'keyword', suggest: 'state over ', then: { 'over': {type: 'keyword', suggest: true, then: { '': singleAgentToText, }}, }}, 'text': {type: 'keyword', suggest: true, then: { 'left': makeSideNote('left'), 'right': makeSideNote('right'), }}, 'autolabel': {type: 'keyword', suggest: true, then: { 'off': {type: 'keyword', suggest: true, then: {}}, '': textTo({'\n': end}, [ {v: '