{"version":3,"file":"wai.min.js","sources":["require.js","../admin/libs/underscore.js","../admin/libs/backbone.js","wai/location.js","wai/module.js","main.js"],"names":[],"mappings":"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","sourcesContent":["/** vim: et:ts=4:sw=4:sts=4\n * @license RequireJS 2.1.2 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n//Not using strict: uneven strict support in browsers, #392, and causes\n//problems with requirejs.exec()/transpiler plugins that may not be strict.\n/*jslint regexp: true, nomen: true, sloppy: true */\n/*global window, navigator, document, importScripts, jQuery, setTimeout, opera */\n\nvar requirejs, require, define;\n(function (global) {\n var req, s, head, baseElement, dataMain, src,\n interactiveScript, currentlyAddingScript, mainScript, subPath,\n version = '2.1.2',\n commentRegExp = /(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/mg,\n cjsRequireRegExp = /[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,\n jsSuffixRegExp = /\\.js$/,\n currDirRegExp = /^\\.\\//,\n op = Object.prototype,\n ostring = op.toString,\n hasOwn = op.hasOwnProperty,\n ap = Array.prototype,\n aps = ap.slice,\n apsp = ap.splice,\n isBrowser = !!(typeof window !== 'undefined' && navigator && document),\n isWebWorker = !isBrowser && typeof importScripts !== 'undefined',\n //PS3 indicates loaded and complete, but need to wait for complete\n //specifically. Sequence is 'loading', 'loaded', execution,\n // then 'complete'. The UA check is unfortunate, but not sure how\n //to feature test w/o causing perf issues.\n readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ?\n /^complete$/ : /^(complete|loaded)$/,\n defContextName = '_',\n //Oh the tragedy, detecting opera. See the usage of isOpera for reason.\n isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]',\n contexts = {},\n cfg = {},\n globalDefQueue = [],\n useInteractive = false;\n\n function isFunction(it) {\n return ostring.call(it) === '[object Function]';\n }\n\n function isArray(it) {\n return ostring.call(it) === '[object Array]';\n }\n\n /**\n * Helper function for iterating over an array. If the func returns\n * a true value, it will break out of the loop.\n */\n function each(ary, func) {\n if (ary) {\n var i;\n for (i = 0; i < ary.length; i += 1) {\n if (ary[i] && func(ary[i], i, ary)) {\n break;\n }\n }\n }\n }\n\n /**\n * Helper function for iterating over an array backwards. If the func\n * returns a true value, it will break out of the loop.\n */\n function eachReverse(ary, func) {\n if (ary) {\n var i;\n for (i = ary.length - 1; i > -1; i -= 1) {\n if (ary[i] && func(ary[i], i, ary)) {\n break;\n }\n }\n }\n }\n\n function hasProp(obj, prop) {\n return hasOwn.call(obj, prop);\n }\n\n function getOwn(obj, prop) {\n return hasProp(obj, prop) && obj[prop];\n }\n\n /**\n * Cycles over properties in an object and calls a function for each\n * property value. If the function returns a truthy value, then the\n * iteration is stopped.\n */\n function eachProp(obj, func) {\n var prop;\n for (prop in obj) {\n if (hasProp(obj, prop)) {\n if (func(obj[prop], prop)) {\n break;\n }\n }\n }\n }\n\n /**\n * Simple function to mix in properties from source into target,\n * but only if target does not already have a property of the same name.\n */\n function mixin(target, source, force, deepStringMixin) {\n if (source) {\n eachProp(source, function (value, prop) {\n if (force || !hasProp(target, prop)) {\n if (deepStringMixin && typeof value !== 'string') {\n if (!target[prop]) {\n target[prop] = {};\n }\n mixin(target[prop], value, force, deepStringMixin);\n } else {\n target[prop] = value;\n }\n }\n });\n }\n return target;\n }\n\n //Similar to Function.prototype.bind, but the 'this' object is specified\n //first, since it is easier to read/figure out what 'this' will be.\n function bind(obj, fn) {\n return function () {\n return fn.apply(obj, arguments);\n };\n }\n\n function scripts() {\n return document.getElementsByTagName('script');\n }\n\n //Allow getting a global that expressed in\n //dot notation, like 'a.b.c'.\n function getGlobal(value) {\n if (!value) {\n return value;\n }\n var g = global;\n each(value.split('.'), function (part) {\n g = g[part];\n });\n return g;\n }\n\n /**\n * Constructs an error with a pointer to an URL with more information.\n * @param {String} id the error ID that maps to an ID on a web page.\n * @param {String} message human readable error.\n * @param {Error} [err] the original error, if there is one.\n *\n * @returns {Error}\n */\n function makeError(id, msg, err, requireModules) {\n var e = new Error(msg + '\\nhttp://requirejs.org/docs/errors.html#' + id);\n e.requireType = id;\n e.requireModules = requireModules;\n if (err) {\n e.originalError = err;\n }\n return e;\n }\n\n if (typeof define !== 'undefined') {\n //If a define is already in play via another AMD loader,\n //do not overwrite.\n return;\n }\n\n if (typeof requirejs !== 'undefined') {\n if (isFunction(requirejs)) {\n //Do not overwrite and existing requirejs instance.\n return;\n }\n cfg = requirejs;\n requirejs = undefined;\n }\n\n //Allow for a require config object\n if (typeof require !== 'undefined' && !isFunction(require)) {\n //assume it is a config object.\n cfg = require;\n require = undefined;\n }\n\n function newContext(contextName) {\n var inCheckLoaded, Module, context, handlers,\n checkLoadedTimeoutId,\n config = {\n waitSeconds: 7,\n baseUrl: './',\n paths: {},\n pkgs: {},\n shim: {},\n map: {},\n config: {}\n },\n registry = {},\n undefEvents = {},\n defQueue = [],\n defined = {},\n urlFetched = {},\n requireCounter = 1,\n unnormalizedCounter = 1;\n\n /**\n * Trims the . and .. from an array of path segments.\n * It will keep a leading path segment if a .. will become\n * the first path segment, to help with module name lookups,\n * which act like paths, but can be remapped. But the end result,\n * all paths that use this function should look normalized.\n * NOTE: this method MODIFIES the input array.\n * @param {Array} ary the array of path segments.\n */\n function trimDots(ary) {\n var i, part;\n for (i = 0; ary[i]; i += 1) {\n part = ary[i];\n if (part === '.') {\n ary.splice(i, 1);\n i -= 1;\n } else if (part === '..') {\n if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {\n //End of the line. Keep at least one non-dot\n //path segment at the front so it can be mapped\n //correctly to disk. Otherwise, there is likely\n //no path mapping for a path starting with '..'.\n //This can still fail, but catches the most reasonable\n //uses of ..\n break;\n } else if (i > 0) {\n ary.splice(i - 1, 2);\n i -= 2;\n }\n }\n }\n }\n\n /**\n * Given a relative module name, like ./something, normalize it to\n * a real name that can be mapped to a path.\n * @param {String} name the relative name\n * @param {String} baseName a real name that the name arg is relative\n * to.\n * @param {Boolean} applyMap apply the map config to the value. Should\n * only be done if this normalization is for a dependency ID.\n * @returns {String} normalized name\n */\n function normalize(name, baseName, applyMap) {\n var pkgName, pkgConfig, mapValue, nameParts, i, j, nameSegment,\n foundMap, foundI, foundStarMap, starI,\n baseParts = baseName && baseName.split('/'),\n normalizedBaseParts = baseParts,\n map = config.map,\n starMap = map && map['*'];\n\n //Adjust any relative paths.\n if (name && name.charAt(0) === '.') {\n //If have a base name, try to normalize against it,\n //otherwise, assume it is a top-level require that will\n //be relative to baseUrl in the end.\n if (baseName) {\n if (getOwn(config.pkgs, baseName)) {\n //If the baseName is a package name, then just treat it as one\n //name to concat the name with.\n normalizedBaseParts = baseParts = [baseName];\n } else {\n //Convert baseName to array, and lop off the last part,\n //so that . matches that 'directory' and not name of the baseName's\n //module. For instance, baseName of 'one/two/three', maps to\n //'one/two/three.js', but we want the directory, 'one/two' for\n //this normalization.\n normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n }\n\n name = normalizedBaseParts.concat(name.split('/'));\n trimDots(name);\n\n //Some use of packages may use a . path to reference the\n //'main' module name, so normalize for that.\n pkgConfig = getOwn(config.pkgs, (pkgName = name[0]));\n name = name.join('/');\n if (pkgConfig && name === pkgName + '/' + pkgConfig.main) {\n name = pkgName;\n }\n } else if (name.indexOf('./') === 0) {\n // No baseName, so this is ID is resolved relative\n // to baseUrl, pull off the leading dot.\n name = name.substring(2);\n }\n }\n\n //Apply map config if available.\n if (applyMap && (baseParts || starMap) && map) {\n nameParts = name.split('/');\n\n for (i = nameParts.length; i > 0; i -= 1) {\n nameSegment = nameParts.slice(0, i).join('/');\n\n if (baseParts) {\n //Find the longest baseName segment match in the config.\n //So, do joins on the biggest to smallest lengths of baseParts.\n for (j = baseParts.length; j > 0; j -= 1) {\n mapValue = getOwn(map, baseParts.slice(0, j).join('/'));\n\n //baseName segment has config, find if it has one for\n //this name.\n if (mapValue) {\n mapValue = getOwn(mapValue, nameSegment);\n if (mapValue) {\n //Match, update name to the new value.\n foundMap = mapValue;\n foundI = i;\n break;\n }\n }\n }\n }\n\n if (foundMap) {\n break;\n }\n\n //Check for a star map match, but just hold on to it,\n //if there is a shorter segment match later in a matching\n //config, then favor over this star map.\n if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) {\n foundStarMap = getOwn(starMap, nameSegment);\n starI = i;\n }\n }\n\n if (!foundMap && foundStarMap) {\n foundMap = foundStarMap;\n foundI = starI;\n }\n\n if (foundMap) {\n nameParts.splice(0, foundI, foundMap);\n name = nameParts.join('/');\n }\n }\n\n return name;\n }\n\n function removeScript(name) {\n if (isBrowser) {\n each(scripts(), function (scriptNode) {\n if (scriptNode.getAttribute('data-requiremodule') === name &&\n scriptNode.getAttribute('data-requirecontext') === context.contextName) {\n scriptNode.parentNode.removeChild(scriptNode);\n return true;\n }\n });\n }\n }\n\n function hasPathFallback(id) {\n var pathConfig = getOwn(config.paths, id);\n if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) {\n removeScript(id);\n //Pop off the first array value, since it failed, and\n //retry\n pathConfig.shift();\n context.require.undef(id);\n context.require([id]);\n return true;\n }\n }\n\n //Turns a plugin!resource to [plugin, resource]\n //with the plugin being undefined if the name\n //did not have a plugin prefix.\n function splitPrefix(name) {\n var prefix,\n index = name ? name.indexOf('!') : -1;\n if (index > -1) {\n prefix = name.substring(0, index);\n name = name.substring(index + 1, name.length);\n }\n return [prefix, name];\n }\n\n /**\n * Creates a module mapping that includes plugin prefix, module\n * name, and path. If parentModuleMap is provided it will\n * also normalize the name via require.normalize()\n *\n * @param {String} name the module name\n * @param {String} [parentModuleMap] parent module map\n * for the module name, used to resolve relative names.\n * @param {Boolean} isNormalized: is the ID already normalized.\n * This is true if this call is done for a define() module ID.\n * @param {Boolean} applyMap: apply the map config to the ID.\n * Should only be true if this map is for a dependency.\n *\n * @returns {Object}\n */\n function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) {\n var url, pluginModule, suffix, nameParts,\n prefix = null,\n parentName = parentModuleMap ? parentModuleMap.name : null,\n originalName = name,\n isDefine = true,\n normalizedName = '';\n\n //If no name, then it means it is a require call, generate an\n //internal name.\n if (!name) {\n isDefine = false;\n name = '_@r' + (requireCounter += 1);\n }\n\n nameParts = splitPrefix(name);\n prefix = nameParts[0];\n name = nameParts[1];\n\n if (prefix) {\n prefix = normalize(prefix, parentName, applyMap);\n pluginModule = getOwn(defined, prefix);\n }\n\n //Account for relative paths if there is a base name.\n if (name) {\n if (prefix) {\n if (pluginModule && pluginModule.normalize) {\n //Plugin is loaded, use its normalize method.\n normalizedName = pluginModule.normalize(name, function (name) {\n return normalize(name, parentName, applyMap);\n });\n } else {\n normalizedName = normalize(name, parentName, applyMap);\n }\n } else {\n //A regular module.\n normalizedName = normalize(name, parentName, applyMap);\n\n //Normalized name may be a plugin ID due to map config\n //application in normalize. The map config values must\n //already be normalized, so do not need to redo that part.\n nameParts = splitPrefix(normalizedName);\n prefix = nameParts[0];\n normalizedName = nameParts[1];\n isNormalized = true;\n\n url = context.nameToUrl(normalizedName);\n }\n }\n\n //If the id is a plugin id that cannot be determined if it needs\n //normalization, stamp it with a unique ID so two matching relative\n //ids that may conflict can be separate.\n suffix = prefix && !pluginModule && !isNormalized ?\n '_unnormalized' + (unnormalizedCounter += 1) :\n '';\n\n return {\n prefix: prefix,\n name: normalizedName,\n parentMap: parentModuleMap,\n unnormalized: !!suffix,\n url: url,\n originalName: originalName,\n isDefine: isDefine,\n id: (prefix ?\n prefix + '!' + normalizedName :\n normalizedName) + suffix\n };\n }\n\n function getModule(depMap) {\n var id = depMap.id,\n mod = getOwn(registry, id);\n\n if (!mod) {\n mod = registry[id] = new context.Module(depMap);\n }\n\n return mod;\n }\n\n function on(depMap, name, fn) {\n var id = depMap.id,\n mod = getOwn(registry, id);\n\n if (hasProp(defined, id) &&\n (!mod || mod.defineEmitComplete)) {\n if (name === 'defined') {\n fn(defined[id]);\n }\n } else {\n getModule(depMap).on(name, fn);\n }\n }\n\n function onError(err, errback) {\n var ids = err.requireModules,\n notified = false;\n\n if (errback) {\n errback(err);\n } else {\n each(ids, function (id) {\n var mod = getOwn(registry, id);\n if (mod) {\n //Set error on module, so it skips timeout checks.\n mod.error = err;\n if (mod.events.error) {\n notified = true;\n mod.emit('error', err);\n }\n }\n });\n\n if (!notified) {\n req.onError(err);\n }\n }\n }\n\n /**\n * Internal method to transfer globalQueue items to this context's\n * defQueue.\n */\n function takeGlobalQueue() {\n //Push all the globalDefQueue items into the context's defQueue\n if (globalDefQueue.length) {\n //Array splice in the values since the context code has a\n //local var ref to defQueue, so cannot just reassign the one\n //on context.\n apsp.apply(defQueue,\n [defQueue.length - 1, 0].concat(globalDefQueue));\n globalDefQueue = [];\n }\n }\n\n handlers = {\n 'require': function (mod) {\n if (mod.require) {\n return mod.require;\n } else {\n return (mod.require = context.makeRequire(mod.map));\n }\n },\n 'exports': function (mod) {\n mod.usingExports = true;\n if (mod.map.isDefine) {\n if (mod.exports) {\n return mod.exports;\n } else {\n return (mod.exports = defined[mod.map.id] = {});\n }\n }\n },\n 'module': function (mod) {\n if (mod.module) {\n return mod.module;\n } else {\n return (mod.module = {\n id: mod.map.id,\n uri: mod.map.url,\n config: function () {\n return (config.config && getOwn(config.config, mod.map.id)) || {};\n },\n exports: defined[mod.map.id]\n });\n }\n }\n };\n\n function cleanRegistry(id) {\n //Clean up machinery used for waiting modules.\n delete registry[id];\n }\n\n function breakCycle(mod, traced, processed) {\n var id = mod.map.id;\n\n if (mod.error) {\n mod.emit('error', mod.error);\n } else {\n traced[id] = true;\n each(mod.depMaps, function (depMap, i) {\n var depId = depMap.id,\n dep = getOwn(registry, depId);\n\n //Only force things that have not completed\n //being defined, so still in the registry,\n //and only if it has not been matched up\n //in the module already.\n if (dep && !mod.depMatched[i] && !processed[depId]) {\n if (getOwn(traced, depId)) {\n mod.defineDep(i, defined[depId]);\n mod.check(); //pass false?\n } else {\n breakCycle(dep, traced, processed);\n }\n }\n });\n processed[id] = true;\n }\n }\n\n function checkLoaded() {\n var map, modId, err, usingPathFallback,\n waitInterval = config.waitSeconds * 1000,\n //It is possible to disable the wait interval by using waitSeconds of 0.\n expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(),\n noLoads = [],\n reqCalls = [],\n stillLoading = false,\n needCycleCheck = true;\n\n //Do not bother if this call was a result of a cycle break.\n if (inCheckLoaded) {\n return;\n }\n\n inCheckLoaded = true;\n\n //Figure out the state of all the modules.\n eachProp(registry, function (mod) {\n map = mod.map;\n modId = map.id;\n\n //Skip things that are not enabled or in error state.\n if (!mod.enabled) {\n return;\n }\n\n if (!map.isDefine) {\n reqCalls.push(mod);\n }\n\n if (!mod.error) {\n //If the module should be executed, and it has not\n //been inited and time is up, remember it.\n if (!mod.inited && expired) {\n if (hasPathFallback(modId)) {\n usingPathFallback = true;\n stillLoading = true;\n } else {\n noLoads.push(modId);\n removeScript(modId);\n }\n } else if (!mod.inited && mod.fetched && map.isDefine) {\n stillLoading = true;\n if (!map.prefix) {\n //No reason to keep looking for unfinished\n //loading. If the only stillLoading is a\n //plugin resource though, keep going,\n //because it may be that a plugin resource\n //is waiting on a non-plugin cycle.\n return (needCycleCheck = false);\n }\n }\n }\n });\n\n if (expired && noLoads.length) {\n //If wait time expired, throw error of unloaded modules.\n err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads);\n err.contextName = context.contextName;\n return onError(err);\n }\n\n //Not expired, check for a cycle.\n if (needCycleCheck) {\n each(reqCalls, function (mod) {\n breakCycle(mod, {}, {});\n });\n }\n\n //If still waiting on loads, and the waiting load is something\n //other than a plugin resource, or there are still outstanding\n //scripts, then just try back later.\n if ((!expired || usingPathFallback) && stillLoading) {\n //Something is still waiting to load. Wait for it, but only\n //if a timeout is not already in effect.\n if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {\n checkLoadedTimeoutId = setTimeout(function () {\n checkLoadedTimeoutId = 0;\n checkLoaded();\n }, 50);\n }\n }\n\n inCheckLoaded = false;\n }\n\n Module = function (map) {\n this.events = getOwn(undefEvents, map.id) || {};\n this.map = map;\n this.shim = getOwn(config.shim, map.id);\n this.depExports = [];\n this.depMaps = [];\n this.depMatched = [];\n this.pluginMaps = {};\n this.depCount = 0;\n\n /* this.exports this.factory\n this.depMaps = [],\n this.enabled, this.fetched\n */\n };\n\n Module.prototype = {\n init: function (depMaps, factory, errback, options) {\n options = options || {};\n\n //Do not do more inits if already done. Can happen if there\n //are multiple define calls for the same module. That is not\n //a normal, common case, but it is also not unexpected.\n if (this.inited) {\n return;\n }\n\n this.factory = factory;\n\n if (errback) {\n //Register for errors on this module.\n this.on('error', errback);\n } else if (this.events.error) {\n //If no errback already, but there are error listeners\n //on this module, set up an errback to pass to the deps.\n errback = bind(this, function (err) {\n this.emit('error', err);\n });\n }\n\n //Do a copy of the dependency array, so that\n //source inputs are not modified. For example\n //\"shim\" deps are passed in here directly, and\n //doing a direct modification of the depMaps array\n //would affect that config.\n this.depMaps = depMaps && depMaps.slice(0);\n\n this.errback = errback;\n\n //Indicate this module has be initialized\n this.inited = true;\n\n this.ignore = options.ignore;\n\n //Could have option to init this module in enabled mode,\n //or could have been previously marked as enabled. However,\n //the dependencies are not known until init is called. So\n //if enabled previously, now trigger dependencies as enabled.\n if (options.enabled || this.enabled) {\n //Enable this module and dependencies.\n //Will call this.check()\n this.enable();\n } else {\n this.check();\n }\n },\n\n defineDep: function (i, depExports) {\n //Because of cycles, defined callback for a given\n //export can be called more than once.\n if (!this.depMatched[i]) {\n this.depMatched[i] = true;\n this.depCount -= 1;\n this.depExports[i] = depExports;\n }\n },\n\n fetch: function () {\n if (this.fetched) {\n return;\n }\n this.fetched = true;\n\n context.startTime = (new Date()).getTime();\n\n var map = this.map;\n\n //If the manager is for a plugin managed resource,\n //ask the plugin to load it now.\n if (this.shim) {\n context.makeRequire(this.map, {\n enableBuildCallback: true\n })(this.shim.deps || [], bind(this, function () {\n return map.prefix ? this.callPlugin() : this.load();\n }));\n } else {\n //Regular dependency.\n return map.prefix ? this.callPlugin() : this.load();\n }\n },\n\n load: function () {\n var url = this.map.url;\n\n //Regular dependency.\n if (!urlFetched[url]) {\n urlFetched[url] = true;\n context.load(this.map.id, url);\n }\n },\n\n /**\n * Checks is the module is ready to define itself, and if so,\n * define it.\n */\n check: function () {\n if (!this.enabled || this.enabling) {\n return;\n }\n\n var err, cjsModule,\n id = this.map.id,\n depExports = this.depExports,\n exports = this.exports,\n factory = this.factory;\n\n if (!this.inited) {\n this.fetch();\n } else if (this.error) {\n this.emit('error', this.error);\n } else if (!this.defining) {\n //The factory could trigger another require call\n //that would result in checking this module to\n //define itself again. If already in the process\n //of doing that, skip this work.\n this.defining = true;\n\n if (this.depCount < 1 && !this.defined) {\n if (isFunction(factory)) {\n //If there is an error listener, favor passing\n //to that instead of throwing an error.\n if (this.events.error) {\n try {\n exports = context.execCb(id, factory, depExports, exports);\n } catch (e) {\n err = e;\n }\n } else {\n exports = context.execCb(id, factory, depExports, exports);\n }\n\n if (this.map.isDefine) {\n //If setting exports via 'module' is in play,\n //favor that over return value and exports. After that,\n //favor a non-undefined return value over exports use.\n cjsModule = this.module;\n if (cjsModule &&\n cjsModule.exports !== undefined &&\n //Make sure it is not already the exports value\n cjsModule.exports !== this.exports) {\n exports = cjsModule.exports;\n } else if (exports === undefined && this.usingExports) {\n //exports already set the defined value.\n exports = this.exports;\n }\n }\n\n if (err) {\n err.requireMap = this.map;\n err.requireModules = [this.map.id];\n err.requireType = 'define';\n return onError((this.error = err));\n }\n\n } else {\n //Just a literal value\n exports = factory;\n }\n\n this.exports = exports;\n\n if (this.map.isDefine && !this.ignore) {\n defined[id] = exports;\n\n if (req.onResourceLoad) {\n req.onResourceLoad(context, this.map, this.depMaps);\n }\n }\n\n //Clean up\n delete registry[id];\n\n this.defined = true;\n }\n\n //Finished the define stage. Allow calling check again\n //to allow define notifications below in the case of a\n //cycle.\n this.defining = false;\n\n if (this.defined && !this.defineEmitted) {\n this.defineEmitted = true;\n this.emit('defined', this.exports);\n this.defineEmitComplete = true;\n }\n\n }\n },\n\n callPlugin: function () {\n var map = this.map,\n id = map.id,\n //Map already normalized the prefix.\n pluginMap = makeModuleMap(map.prefix);\n\n //Mark this as a dependency for this plugin, so it\n //can be traced for cycles.\n this.depMaps.push(pluginMap);\n\n on(pluginMap, 'defined', bind(this, function (plugin) {\n var load, normalizedMap, normalizedMod,\n name = this.map.name,\n parentName = this.map.parentMap ? this.map.parentMap.name : null,\n localRequire = context.makeRequire(map.parentMap, {\n enableBuildCallback: true,\n skipMap: true\n });\n\n //If current map is not normalized, wait for that\n //normalized name to load instead of continuing.\n if (this.map.unnormalized) {\n //Normalize the ID if the plugin allows it.\n if (plugin.normalize) {\n name = plugin.normalize(name, function (name) {\n return normalize(name, parentName, true);\n }) || '';\n }\n\n //prefix and name should already be normalized, no need\n //for applying map config again either.\n normalizedMap = makeModuleMap(map.prefix + '!' + name,\n this.map.parentMap);\n on(normalizedMap,\n 'defined', bind(this, function (value) {\n this.init([], function () { return value; }, null, {\n enabled: true,\n ignore: true\n });\n }));\n\n normalizedMod = getOwn(registry, normalizedMap.id);\n if (normalizedMod) {\n //Mark this as a dependency for this plugin, so it\n //can be traced for cycles.\n this.depMaps.push(normalizedMap);\n\n if (this.events.error) {\n normalizedMod.on('error', bind(this, function (err) {\n this.emit('error', err);\n }));\n }\n normalizedMod.enable();\n }\n\n return;\n }\n\n load = bind(this, function (value) {\n this.init([], function () { return value; }, null, {\n enabled: true\n });\n });\n\n load.error = bind(this, function (err) {\n this.inited = true;\n this.error = err;\n err.requireModules = [id];\n\n //Remove temp unnormalized modules for this module,\n //since they will never be resolved otherwise now.\n eachProp(registry, function (mod) {\n if (mod.map.id.indexOf(id + '_unnormalized') === 0) {\n cleanRegistry(mod.map.id);\n }\n });\n\n onError(err);\n });\n\n //Allow plugins to load other code without having to know the\n //context or how to 'complete' the load.\n load.fromText = bind(this, function (text, textAlt) {\n /*jslint evil: true */\n var moduleName = map.name,\n moduleMap = makeModuleMap(moduleName),\n hasInteractive = useInteractive;\n\n //As of 2.1.0, support just passing the text, to reinforce\n //fromText only being called once per resource. Still\n //support old style of passing moduleName but discard\n //that moduleName in favor of the internal ref.\n if (textAlt) {\n text = textAlt;\n }\n\n //Turn off interactive script matching for IE for any define\n //calls in the text, then turn it back on at the end.\n if (hasInteractive) {\n useInteractive = false;\n }\n\n //Prime the system by creating a module instance for\n //it.\n getModule(moduleMap);\n\n //Transfer any config to this other module.\n if (hasProp(config.config, id)) {\n config.config[moduleName] = config.config[id];\n }\n\n try {\n req.exec(text);\n } catch (e) {\n throw new Error('fromText eval for ' + moduleName +\n ' failed: ' + e);\n }\n\n if (hasInteractive) {\n useInteractive = true;\n }\n\n //Mark this as a dependency for the plugin\n //resource\n this.depMaps.push(moduleMap);\n\n //Support anonymous modules.\n context.completeLoad(moduleName);\n\n //Bind the value of that module to the value for this\n //resource ID.\n localRequire([moduleName], load);\n });\n\n //Use parentName here since the plugin's name is not reliable,\n //could be some weird string with no path that actually wants to\n //reference the parentName's path.\n plugin.load(map.name, localRequire, load, config);\n }));\n\n context.enable(pluginMap, this);\n this.pluginMaps[pluginMap.id] = pluginMap;\n },\n\n enable: function () {\n this.enabled = true;\n\n //Set flag mentioning that the module is enabling,\n //so that immediate calls to the defined callbacks\n //for dependencies do not trigger inadvertent load\n //with the depCount still being zero.\n this.enabling = true;\n\n //Enable each dependency\n each(this.depMaps, bind(this, function (depMap, i) {\n var id, mod, handler;\n\n if (typeof depMap === 'string') {\n //Dependency needs to be converted to a depMap\n //and wired up to this module.\n depMap = makeModuleMap(depMap,\n (this.map.isDefine ? this.map : this.map.parentMap),\n false,\n !this.skipMap);\n this.depMaps[i] = depMap;\n\n handler = getOwn(handlers, depMap.id);\n\n if (handler) {\n this.depExports[i] = handler(this);\n return;\n }\n\n this.depCount += 1;\n\n on(depMap, 'defined', bind(this, function (depExports) {\n this.defineDep(i, depExports);\n this.check();\n }));\n\n if (this.errback) {\n on(depMap, 'error', this.errback);\n }\n }\n\n id = depMap.id;\n mod = registry[id];\n\n //Skip special modules like 'require', 'exports', 'module'\n //Also, don't call enable if it is already enabled,\n //important in circular dependency cases.\n if (!hasProp(handlers, id) && mod && !mod.enabled) {\n context.enable(depMap, this);\n }\n }));\n\n //Enable each plugin that is used in\n //a dependency\n eachProp(this.pluginMaps, bind(this, function (pluginMap) {\n var mod = getOwn(registry, pluginMap.id);\n if (mod && !mod.enabled) {\n context.enable(pluginMap, this);\n }\n }));\n\n this.enabling = false;\n\n this.check();\n },\n\n on: function (name, cb) {\n var cbs = this.events[name];\n if (!cbs) {\n cbs = this.events[name] = [];\n }\n cbs.push(cb);\n },\n\n emit: function (name, evt) {\n each(this.events[name], function (cb) {\n cb(evt);\n });\n if (name === 'error') {\n //Now that the error handler was triggered, remove\n //the listeners, since this broken Module instance\n //can stay around for a while in the registry.\n delete this.events[name];\n }\n }\n };\n\n function callGetModule(args) {\n //Skip modules already defined.\n if (!hasProp(defined, args[0])) {\n getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]);\n }\n }\n\n function removeListener(node, func, name, ieName) {\n //Favor detachEvent because of IE9\n //issue, see attachEvent/addEventListener comment elsewhere\n //in this file.\n if (node.detachEvent && !isOpera) {\n //Probably IE. If not it will throw an error, which will be\n //useful to know.\n if (ieName) {\n node.detachEvent(ieName, func);\n }\n } else {\n node.removeEventListener(name, func, false);\n }\n }\n\n /**\n * Given an event from a script node, get the requirejs info from it,\n * and then removes the event listeners on the node.\n * @param {Event} evt\n * @returns {Object}\n */\n function getScriptData(evt) {\n //Using currentTarget instead of target for Firefox 2.0's sake. Not\n //all old browsers will be supported, but this one was easy enough\n //to support and still makes sense.\n var node = evt.currentTarget || evt.srcElement;\n\n //Remove the listeners once here.\n removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange');\n removeListener(node, context.onScriptError, 'error');\n\n return {\n node: node,\n id: node && node.getAttribute('data-requiremodule')\n };\n }\n\n function intakeDefines() {\n var args;\n\n //Any defined modules in the global queue, intake them now.\n takeGlobalQueue();\n\n //Make sure any remaining defQueue items get properly processed.\n while (defQueue.length) {\n args = defQueue.shift();\n if (args[0] === null) {\n return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1]));\n } else {\n //args are id, deps, factory. Should be normalized by the\n //define() function.\n callGetModule(args);\n }\n }\n }\n\n context = {\n config: config,\n contextName: contextName,\n registry: registry,\n defined: defined,\n urlFetched: urlFetched,\n defQueue: defQueue,\n Module: Module,\n makeModuleMap: makeModuleMap,\n nextTick: req.nextTick,\n\n /**\n * Set a configuration for the context.\n * @param {Object} cfg config object to integrate.\n */\n configure: function (cfg) {\n //Make sure the baseUrl ends in a slash.\n if (cfg.baseUrl) {\n if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') {\n cfg.baseUrl += '/';\n }\n }\n\n //Save off the paths and packages since they require special processing,\n //they are additive.\n var pkgs = config.pkgs,\n shim = config.shim,\n objs = {\n paths: true,\n config: true,\n map: true\n };\n\n eachProp(cfg, function (value, prop) {\n if (objs[prop]) {\n if (prop === 'map') {\n mixin(config[prop], value, true, true);\n } else {\n mixin(config[prop], value, true);\n }\n } else {\n config[prop] = value;\n }\n });\n\n //Merge shim\n if (cfg.shim) {\n eachProp(cfg.shim, function (value, id) {\n //Normalize the structure\n if (isArray(value)) {\n value = {\n deps: value\n };\n }\n if ((value.exports || value.init) && !value.exportsFn) {\n value.exportsFn = context.makeShimExports(value);\n }\n shim[id] = value;\n });\n config.shim = shim;\n }\n\n //Adjust packages if necessary.\n if (cfg.packages) {\n each(cfg.packages, function (pkgObj) {\n var location;\n\n pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj;\n location = pkgObj.location;\n\n //Create a brand new object on pkgs, since currentPackages can\n //be passed in again, and config.pkgs is the internal transformed\n //state for all package configs.\n pkgs[pkgObj.name] = {\n name: pkgObj.name,\n location: location || pkgObj.name,\n //Remove leading dot in main, so main paths are normalized,\n //and remove any trailing .js, since different package\n //envs have different conventions: some use a module name,\n //some use a file name.\n main: (pkgObj.main || 'main')\n .replace(currDirRegExp, '')\n .replace(jsSuffixRegExp, '')\n };\n });\n\n //Done with modifications, assing packages back to context config\n config.pkgs = pkgs;\n }\n\n //If there are any \"waiting to execute\" modules in the registry,\n //update the maps for them, since their info, like URLs to load,\n //may have changed.\n eachProp(registry, function (mod, id) {\n //If module already has init called, since it is too\n //late to modify them, and ignore unnormalized ones\n //since they are transient.\n if (!mod.inited && !mod.map.unnormalized) {\n mod.map = makeModuleMap(id);\n }\n });\n\n //If a deps array or a config callback is specified, then call\n //require with those args. This is useful when require is defined as a\n //config object before require.js is loaded.\n if (cfg.deps || cfg.callback) {\n context.require(cfg.deps || [], cfg.callback);\n }\n },\n\n makeShimExports: function (value) {\n function fn() {\n var ret;\n if (value.init) {\n ret = value.init.apply(global, arguments);\n }\n return ret || (value.exports && getGlobal(value.exports));\n }\n return fn;\n },\n\n makeRequire: function (relMap, options) {\n options = options || {};\n\n function localRequire(deps, callback, errback) {\n var id, map, requireMod;\n\n if (options.enableBuildCallback && callback && isFunction(callback)) {\n callback.__requireJsBuild = true;\n }\n\n if (typeof deps === 'string') {\n if (isFunction(callback)) {\n //Invalid call\n return onError(makeError('requireargs', 'Invalid require call'), errback);\n }\n\n //If require|exports|module are requested, get the\n //value for them from the special handlers. Caveat:\n //this only works while module is being defined.\n if (relMap && hasProp(handlers, deps)) {\n return handlers[deps](registry[relMap.id]);\n }\n\n //Synchronous access to one module. If require.get is\n //available (as in the Node adapter), prefer that.\n if (req.get) {\n return req.get(context, deps, relMap);\n }\n\n //Normalize module name, if it contains . or ..\n map = makeModuleMap(deps, relMap, false, true);\n id = map.id;\n\n if (!hasProp(defined, id)) {\n return onError(makeError('notloaded', 'Module name \"' +\n id +\n '\" has not been loaded yet for context: ' +\n contextName +\n (relMap ? '' : '. Use require([])')));\n }\n return defined[id];\n }\n\n //Grab defines waiting in the global queue.\n intakeDefines();\n\n //Mark all the dependencies as needing to be loaded.\n context.nextTick(function () {\n //Some defines could have been added since the\n //require call, collect them.\n intakeDefines();\n\n requireMod = getModule(makeModuleMap(null, relMap));\n\n //Store if map config should be applied to this require\n //call for dependencies.\n requireMod.skipMap = options.skipMap;\n\n requireMod.init(deps, callback, errback, {\n enabled: true\n });\n\n checkLoaded();\n });\n\n return localRequire;\n }\n\n mixin(localRequire, {\n isBrowser: isBrowser,\n\n /**\n * Converts a module name + .extension into an URL path.\n * *Requires* the use of a module name. It does not support using\n * plain URLs like nameToUrl.\n */\n toUrl: function (moduleNamePlusExt) {\n var index = moduleNamePlusExt.lastIndexOf('.'),\n ext = null;\n\n if (index !== -1) {\n ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length);\n moduleNamePlusExt = moduleNamePlusExt.substring(0, index);\n }\n\n return context.nameToUrl(normalize(moduleNamePlusExt,\n relMap && relMap.id, true), ext);\n },\n\n defined: function (id) {\n return hasProp(defined, makeModuleMap(id, relMap, false, true).id);\n },\n\n specified: function (id) {\n id = makeModuleMap(id, relMap, false, true).id;\n return hasProp(defined, id) || hasProp(registry, id);\n }\n });\n\n //Only allow undef on top level require calls\n if (!relMap) {\n localRequire.undef = function (id) {\n //Bind any waiting define() calls to this context,\n //fix for #408\n takeGlobalQueue();\n\n var map = makeModuleMap(id, relMap, true),\n mod = getOwn(registry, id);\n\n delete defined[id];\n delete urlFetched[map.url];\n delete undefEvents[id];\n\n if (mod) {\n //Hold on to listeners in case the\n //module will be attempted to be reloaded\n //using a different config.\n if (mod.events.defined) {\n undefEvents[id] = mod.events;\n }\n\n cleanRegistry(id);\n }\n };\n }\n\n return localRequire;\n },\n\n /**\n * Called to enable a module if it is still in the registry\n * awaiting enablement. parent module is passed in for context,\n * used by the optimizer.\n */\n enable: function (depMap, parent) {\n var mod = getOwn(registry, depMap.id);\n if (mod) {\n getModule(depMap).enable();\n }\n },\n\n /**\n * Internal method used by environment adapters to complete a load event.\n * A load event could be a script load or just a load pass from a synchronous\n * load call.\n * @param {String} moduleName the name of the module to potentially complete.\n */\n completeLoad: function (moduleName) {\n var found, args, mod,\n shim = getOwn(config.shim, moduleName) || {},\n shExports = shim.exports;\n\n takeGlobalQueue();\n\n while (defQueue.length) {\n args = defQueue.shift();\n if (args[0] === null) {\n args[0] = moduleName;\n //If already found an anonymous module and bound it\n //to this name, then this is some other anon module\n //waiting for its completeLoad to fire.\n if (found) {\n break;\n }\n found = true;\n } else if (args[0] === moduleName) {\n //Found matching define call for this script!\n found = true;\n }\n\n callGetModule(args);\n }\n\n //Do this after the cycle of callGetModule in case the result\n //of those calls/init calls changes the registry.\n mod = getOwn(registry, moduleName);\n\n if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) {\n if (config.enforceDefine && (!shExports || !getGlobal(shExports))) {\n if (hasPathFallback(moduleName)) {\n return;\n } else {\n return onError(makeError('nodefine',\n 'No define call for ' + moduleName,\n null,\n [moduleName]));\n }\n } else {\n //A script that does not call define(), so just simulate\n //the call for it.\n callGetModule([moduleName, (shim.deps || []), shim.exportsFn]);\n }\n }\n\n checkLoaded();\n },\n\n /**\n * Converts a module name to a file path. Supports cases where\n * moduleName may actually be just an URL.\n * Note that it **does not** call normalize on the moduleName,\n * it is assumed to have already been normalized. This is an\n * internal API, not a public one. Use toUrl for the public API.\n */\n nameToUrl: function (moduleName, ext) {\n var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url,\n parentPath;\n\n //If a colon is in the URL, it indicates a protocol is used and it is just\n //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?)\n //or ends with .js, then assume the user meant to use an url and not a module id.\n //The slash is important for protocol-less URLs as well as full paths.\n if (req.jsExtRegExp.test(moduleName)) {\n //Just a plain path, not module name lookup, so just return it.\n //Add extension if it is included. This is a bit wonky, only non-.js things pass\n //an extension, this method probably needs to be reworked.\n url = moduleName + (ext || '');\n } else {\n //A module that needs to be converted to a path.\n paths = config.paths;\n pkgs = config.pkgs;\n\n syms = moduleName.split('/');\n //For each module name segment, see if there is a path\n //registered for it. Start with most specific name\n //and work up from it.\n for (i = syms.length; i > 0; i -= 1) {\n parentModule = syms.slice(0, i).join('/');\n pkg = getOwn(pkgs, parentModule);\n parentPath = getOwn(paths, parentModule);\n if (parentPath) {\n //If an array, it means there are a few choices,\n //Choose the one that is desired\n if (isArray(parentPath)) {\n parentPath = parentPath[0];\n }\n syms.splice(0, i, parentPath);\n break;\n } else if (pkg) {\n //If module name is just the package name, then looking\n //for the main module.\n if (moduleName === pkg.name) {\n pkgPath = pkg.location + '/' + pkg.main;\n } else {\n pkgPath = pkg.location;\n }\n syms.splice(0, i, pkgPath);\n break;\n }\n }\n\n //Join the path parts together, then figure out if baseUrl is needed.\n url = syms.join('/');\n url += (ext || (/\\?/.test(url) ? '' : '.js'));\n url = (url.charAt(0) === '/' || url.match(/^[\\w\\+\\.\\-]+:/) ? '' : config.baseUrl) + url;\n }\n\n return config.urlArgs ? url +\n ((url.indexOf('?') === -1 ? '?' : '&') +\n config.urlArgs) : url;\n },\n\n //Delegates to req.load. Broken out as a separate function to\n //allow overriding in the optimizer.\n load: function (id, url) {\n req.load(context, id, url);\n },\n\n /**\n * Executes a module callack function. Broken out as a separate function\n * solely to allow the build system to sequence the files in the built\n * layer in the right sequence.\n *\n * @private\n */\n execCb: function (name, callback, args, exports) {\n return callback.apply(exports, args);\n },\n\n /**\n * callback for script loads, used to check status of loading.\n *\n * @param {Event} evt the event from the browser for the script\n * that was loaded.\n */\n onScriptLoad: function (evt) {\n //Using currentTarget instead of target for Firefox 2.0's sake. Not\n //all old browsers will be supported, but this one was easy enough\n //to support and still makes sense.\n if (evt.type === 'load' ||\n (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) {\n //Reset interactive script so a script node is not held onto for\n //to long.\n interactiveScript = null;\n\n //Pull out the name of the module and the context.\n var data = getScriptData(evt);\n context.completeLoad(data.id);\n }\n },\n\n /**\n * Callback for script errors.\n */\n onScriptError: function (evt) {\n var data = getScriptData(evt);\n if (!hasPathFallback(data.id)) {\n return onError(makeError('scripterror', 'Script error', evt, [data.id]));\n }\n }\n };\n\n context.require = context.makeRequire();\n return context;\n }\n\n /**\n * Main entry point.\n *\n * If the only argument to require is a string, then the module that\n * is represented by that string is fetched for the appropriate context.\n *\n * If the first argument is an array, then it will be treated as an array\n * of dependency string names to fetch. An optional function callback can\n * be specified to execute when all of those dependencies are available.\n *\n * Make a local req variable to help Caja compliance (it assumes things\n * on a require that are not standardized), and to give a short\n * name for minification/local scope use.\n */\n req = requirejs = function (deps, callback, errback, optional) {\n\n //Find the right context, use default\n var context, config,\n contextName = defContextName;\n\n // Determine if have config object in the call.\n if (!isArray(deps) && typeof deps !== 'string') {\n // deps is a config object\n config = deps;\n if (isArray(callback)) {\n // Adjust args if there are dependencies\n deps = callback;\n callback = errback;\n errback = optional;\n } else {\n deps = [];\n }\n }\n\n if (config && config.context) {\n contextName = config.context;\n }\n\n context = getOwn(contexts, contextName);\n if (!context) {\n context = contexts[contextName] = req.s.newContext(contextName);\n }\n\n if (config) {\n context.configure(config);\n }\n\n return context.require(deps, callback, errback);\n };\n\n /**\n * Support require.config() to make it easier to cooperate with other\n * AMD loaders on globally agreed names.\n */\n req.config = function (config) {\n return req(config);\n };\n\n /**\n * Execute something after the current tick\n * of the event loop. Override for other envs\n * that have a better solution than setTimeout.\n * @param {Function} fn function to execute later.\n */\n req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) {\n setTimeout(fn, 4);\n } : function (fn) { fn(); };\n\n /**\n * Export require as a global, but only if it does not already exist.\n */\n if (!require) {\n require = req;\n }\n\n req.version = version;\n\n //Used to filter out dependencies that are already paths.\n req.jsExtRegExp = /^\\/|:|\\?|\\.js$/;\n req.isBrowser = isBrowser;\n s = req.s = {\n contexts: contexts,\n newContext: newContext\n };\n\n //Create default context.\n req({});\n\n //Exports some context-sensitive methods on global require.\n each([\n 'toUrl',\n 'undef',\n 'defined',\n 'specified'\n ], function (prop) {\n //Reference from contexts instead of early binding to default context,\n //so that during builds, the latest instance of the default context\n //with its config gets used.\n req[prop] = function () {\n var ctx = contexts[defContextName];\n return ctx.require[prop].apply(ctx, arguments);\n };\n });\n\n if (isBrowser) {\n head = s.head = document.getElementsByTagName('head')[0];\n //If BASE tag is in play, using appendChild is a problem for IE6.\n //When that browser dies, this can be removed. Details in this jQuery bug:\n //http://dev.jquery.com/ticket/2709\n baseElement = document.getElementsByTagName('base')[0];\n if (baseElement) {\n head = s.head = baseElement.parentNode;\n }\n }\n\n /**\n * Any errors that require explicitly generates will be passed to this\n * function. Intercept/override it if you want custom error handling.\n * @param {Error} err the error object.\n */\n req.onError = function (err) {\n throw err;\n };\n\n /**\n * Does the request to load a module for the browser case.\n * Make this a separate function to allow other environments\n * to override it.\n *\n * @param {Object} context the require context to find state.\n * @param {String} moduleName the name of the module.\n * @param {Object} url the URL to the module.\n */\n req.load = function (context, moduleName, url) {\n var config = (context && context.config) || {},\n node;\n if (isBrowser) {\n //In the browser so use a script tag\n node = config.xhtml ?\n document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') :\n document.createElement('script');\n node.type = config.scriptType || 'text/javascript';\n node.charset = 'utf-8';\n node.async = true;\n\n node.setAttribute('data-requirecontext', context.contextName);\n node.setAttribute('data-requiremodule', moduleName);\n\n //Set up load listener. Test attachEvent first because IE9 has\n //a subtle issue in its addEventListener and script onload firings\n //that do not match the behavior of all other browsers with\n //addEventListener support, which fire the onload event for a\n //script right after the script execution. See:\n //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution\n //UNFORTUNATELY Opera implements attachEvent but does not follow the script\n //script execution mode.\n if (node.attachEvent &&\n //Check if node.attachEvent is artificially added by custom script or\n //natively supported by browser\n //read https://github.com/jrburke/requirejs/issues/187\n //if we can NOT find [native code] then it must NOT natively supported.\n //in IE8, node.attachEvent does not have toString()\n //Note the test for \"[native code\" with no closing brace, see:\n //https://github.com/jrburke/requirejs/issues/273\n !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) &&\n !isOpera) {\n //Probably IE. IE (at least 6-8) do not fire\n //script onload right after executing the script, so\n //we cannot tie the anonymous define call to a name.\n //However, IE reports the script as being in 'interactive'\n //readyState at the time of the define call.\n useInteractive = true;\n\n node.attachEvent('onreadystatechange', context.onScriptLoad);\n //It would be great to add an error handler here to catch\n //404s in IE9+. However, onreadystatechange will fire before\n //the error handler, so that does not help. If addEvenListener\n //is used, then IE will fire error before load, but we cannot\n //use that pathway given the connect.microsoft.com issue\n //mentioned above about not doing the 'script execute,\n //then fire the script load event listener before execute\n //next script' that other browsers do.\n //Best hope: IE10 fixes the issues,\n //and then destroys all installs of IE 6-9.\n //node.attachEvent('onerror', context.onScriptError);\n } else {\n node.addEventListener('load', context.onScriptLoad, false);\n node.addEventListener('error', context.onScriptError, false);\n }\n node.src = url;\n\n //For some cache cases in IE 6-8, the script executes before the end\n //of the appendChild execution, so to tie an anonymous define\n //call to the module name (which is stored on the node), hold on\n //to a reference to this node, but clear after the DOM insertion.\n currentlyAddingScript = node;\n if (baseElement) {\n head.insertBefore(node, baseElement);\n } else {\n head.appendChild(node);\n }\n currentlyAddingScript = null;\n\n return node;\n } else if (isWebWorker) {\n //In a web worker, use importScripts. This is not a very\n //efficient use of importScripts, importScripts will block until\n //its script is downloaded and evaluated. However, if web workers\n //are in play, the expectation that a build has been done so that\n //only one script needs to be loaded anyway. This may need to be\n //reevaluated if other use cases become common.\n importScripts(url);\n\n //Account for anonymous modules\n context.completeLoad(moduleName);\n }\n };\n\n function getInteractiveScript() {\n if (interactiveScript && interactiveScript.readyState === 'interactive') {\n return interactiveScript;\n }\n\n eachReverse(scripts(), function (script) {\n if (script.readyState === 'interactive') {\n return (interactiveScript = script);\n }\n });\n return interactiveScript;\n }\n\n //Look for a data-main script attribute, which could also adjust the baseUrl.\n if (isBrowser) {\n //Figure out baseUrl. Get it from the script tag with require.js in it.\n eachReverse(scripts(), function (script) {\n //Set the 'head' where we can append children by\n //using the script's parent.\n if (!head) {\n head = script.parentNode;\n }\n\n //Look for a data-main attribute to set main script for the page\n //to load. If it is there, the path to data main becomes the\n //baseUrl, if it is not already set.\n dataMain = script.getAttribute('data-main');\n if (dataMain) {\n //Set final baseUrl if there is not already an explicit one.\n if (!cfg.baseUrl) {\n //Pull off the directory of data-main for use as the\n //baseUrl.\n src = dataMain.split('/');\n mainScript = src.pop();\n subPath = src.length ? src.join('/') + '/' : './';\n\n cfg.baseUrl = subPath;\n dataMain = mainScript;\n }\n\n //Strip off any trailing .js since dataMain is now\n //like a module name.\n dataMain = dataMain.replace(jsSuffixRegExp, '');\n\n //Put the data-main script in the files to load.\n cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain];\n\n return true;\n }\n });\n }\n\n /**\n * The function that handles definitions of modules. Differs from\n * require() in that a string for the module should be the first argument,\n * and the function to execute after dependencies are loaded should\n * return a value to define the module corresponding to the first argument's\n * name.\n */\n define = function (name, deps, callback) {\n var node, context;\n\n //Allow for anonymous modules\n if (typeof name !== 'string') {\n //Adjust args appropriately\n callback = deps;\n deps = name;\n name = null;\n }\n\n //This module may not have dependencies\n if (!isArray(deps)) {\n callback = deps;\n deps = [];\n }\n\n //If no name, and callback is a function, then figure out if it a\n //CommonJS thing with dependencies.\n if (!deps.length && isFunction(callback)) {\n //Remove comments from the callback string,\n //look for require calls, and pull them into the dependencies,\n //but only if there are function args.\n if (callback.length) {\n callback\n .toString()\n .replace(commentRegExp, '')\n .replace(cjsRequireRegExp, function (match, dep) {\n deps.push(dep);\n });\n\n //May be a CommonJS thing even without require calls, but still\n //could use exports, and module. Avoid doing exports and module\n //work though if it just needs require.\n //REQUIRES the function to expect the CommonJS variables in the\n //order listed below.\n deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps);\n }\n }\n\n //If in IE 6-8 and hit an anonymous define() call, do the interactive\n //work.\n if (useInteractive) {\n node = currentlyAddingScript || getInteractiveScript();\n if (node) {\n if (!name) {\n name = node.getAttribute('data-requiremodule');\n }\n context = contexts[node.getAttribute('data-requirecontext')];\n }\n }\n\n //Always save off evaluating the def call until the script onload handler.\n //This allows multiple modules to be in a file without prematurely\n //tracing dependencies, and allows for anonymous module support,\n //where the module name is not known until the script onload event\n //occurs. If no context, use the global queue, and get it processed\n //in the onscript load callback.\n (context ? context.defQueue : globalDefQueue).push([name, deps, callback]);\n };\n\n define.amd = {\n jQuery: true\n };\n\n\n /**\n * Executes the text. Normally just uses eval, but can be modified\n * to use a better, environment-specific call. Only used for transpiling\n * loader plugins, not for plain JS modules.\n * @param {String} text the text to execute/evaluate.\n */\n req.exec = function (text) {\n /*jslint evil: true */\n return eval(text);\n };\n\n //Set up with config info.\n req(cfg);\n}(this));\n\ndefine(\"requirejs\", function(){});\n\n","// Underscore.js 1.6.0\n// http://underscorejs.org\n// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n(function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,h=e.reduce,v=e.reduceRight,g=e.filter,d=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,w=Object.keys,_=i.bind,j=function(n){return n instanceof j?n:this instanceof j?void(this._wrapped=n):new j(n)};\"undefined\"!=typeof exports?(\"undefined\"!=typeof module&&module.exports&&(exports=module.exports=j),exports._=j):n._=j,j.VERSION=\"1.6.0\";var A=j.each=j.forEach=function(n,t,e){if(null==n)return n;if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a=j.keys(n),u=0,i=a.length;i>u;u++)if(t.call(e,n[a[u]],a[u],n)===r)return;return n};j.map=j.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e.push(t.call(r,n,u,i))}),e)};var O=\"Reduce of empty array with no initial value\";j.reduce=j.foldl=j.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduce===h)return e&&(t=j.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(O);return r},j.reduceRight=j.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduceRight===v)return e&&(t=j.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=j.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(O);return r},j.find=j.detect=function(n,t,r){var e;return k(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},j.filter=j.select=function(n,t,r){var e=[];return null==n?e:g&&n.filter===g?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&e.push(n)}),e)},j.reject=function(n,t,r){return j.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},j.every=j.all=function(n,t,e){t||(t=j.identity);var u=!0;return null==n?u:d&&n.every===d?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var k=j.some=j.any=function(n,t,e){t||(t=j.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};j.contains=j.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:k(n,function(n){return n===t})},j.invoke=function(n,t){var r=o.call(arguments,2),e=j.isFunction(t);return j.map(n,function(n){return(e?t:n[t]).apply(n,r)})},j.pluck=function(n,t){return j.map(n,j.property(t))},j.where=function(n,t){return j.filter(n,j.matches(t))},j.findWhere=function(n,t){return j.find(n,j.matches(t))},j.max=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.max.apply(Math,n);var e=-1/0,u=-1/0;return A(n,function(n,i,a){var o=t?t.call(r,n,i,a):n;o>u&&(e=n,u=o)}),e},j.min=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.min.apply(Math,n);var e=1/0,u=1/0;return A(n,function(n,i,a){var o=t?t.call(r,n,i,a):n;u>o&&(e=n,u=o)}),e},j.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=j.random(r++),e[r-1]=e[t],e[t]=n}),e},j.sample=function(n,t,r){return null==t||r?(n.length!==+n.length&&(n=j.values(n)),n[j.random(n.length-1)]):j.shuffle(n).slice(0,Math.max(0,t))};var E=function(n){return null==n?j.identity:j.isFunction(n)?n:j.property(n)};j.sortBy=function(n,t,r){return t=E(t),j.pluck(j.map(n,function(n,e,u){return{value:n,index:e,criteria:t.call(r,n,e,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),\"value\")};var F=function(n){return function(t,r,e){var u={};return r=E(r),A(t,function(i,a){var o=r.call(e,i,a,t);n(u,o,i)}),u}};j.groupBy=F(function(n,t,r){j.has(n,t)?n[t].push(r):n[t]=[r]}),j.indexBy=F(function(n,t,r){n[t]=r}),j.countBy=F(function(n,t){j.has(n,t)?n[t]++:n[t]=1}),j.sortedIndex=function(n,t,r,e){r=E(r);for(var u=r.call(e,t),i=0,a=n.length;a>i;){var o=i+a>>>1;r.call(e,n[o])t?[]:o.call(n,0,t)},j.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},j.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},j.rest=j.tail=j.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},j.compact=function(n){return j.filter(n,j.identity)};var M=function(n,t,r){return t&&j.every(n,j.isArray)?c.apply(r,n):(A(n,function(n){j.isArray(n)||j.isArguments(n)?t?a.apply(r,n):M(n,t,r):r.push(n)}),r)};j.flatten=function(n,t){return M(n,t,[])},j.without=function(n){return j.difference(n,o.call(arguments,1))},j.partition=function(n,t){var r=[],e=[];return A(n,function(n){(t(n)?r:e).push(n)}),[r,e]},j.uniq=j.unique=function(n,t,r,e){j.isFunction(t)&&(e=r,r=t,t=!1);var u=r?j.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:j.contains(a,r))||(a.push(r),i.push(n[e]))}),i},j.union=function(){return j.uniq(j.flatten(arguments,!0))},j.intersection=function(n){var t=o.call(arguments,1);return j.filter(j.uniq(n),function(n){return j.every(t,function(t){return j.contains(t,n)})})},j.difference=function(n){var t=c.apply(e,o.call(arguments,1));return j.filter(n,function(n){return!j.contains(t,n)})},j.zip=function(){for(var n=j.max(j.pluck(arguments,\"length\").concat(0)),t=new Array(n),r=0;n>r;r++)t[r]=j.pluck(arguments,\"\"+r);return t},j.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},j.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if(\"number\"!=typeof r)return e=j.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},j.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},j.range=function(n,t,r){arguments.length<=1&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=new Array(e);e>u;)i[u++]=n,n+=r;return i};var R=function(){};j.bind=function(n,t){var r,e;if(_&&n.bind===_)return _.apply(n,o.call(arguments,1));if(!j.isFunction(n))throw new TypeError;return r=o.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(o.call(arguments)));R.prototype=n.prototype;var u=new R;R.prototype=null;var i=n.apply(u,r.concat(o.call(arguments)));return Object(i)===i?i:u}},j.partial=function(n){var t=o.call(arguments,1);return function(){for(var r=0,e=t.slice(),u=0,i=e.length;i>u;u++)e[u]===j&&(e[u]=arguments[r++]);for(;r=f?(clearTimeout(a),a=null,o=l,i=n.apply(e,u),e=u=null):a||r.trailing===!1||(a=setTimeout(c,f)),i}},j.debounce=function(n,t,r){var e,u,i,a,o,c=function(){var l=j.now()-a;t>l?e=setTimeout(c,t-l):(e=null,r||(o=n.apply(i,u),i=u=null))};return function(){i=this,u=arguments,a=j.now();var l=r&&!e;return e||(e=setTimeout(c,t)),l&&(o=n.apply(i,u),i=u=null),o}},j.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},j.wrap=function(n,t){return j.partial(t,n)},j.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},j.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},j.keys=function(n){if(!j.isObject(n))return[];if(w)return w(n);var t=[];for(var r in n)j.has(n,r)&&t.push(r);return t},j.values=function(n){for(var t=j.keys(n),r=t.length,e=new Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},j.pairs=function(n){for(var t=j.keys(n),r=t.length,e=new Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},j.invert=function(n){for(var t={},r=j.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},j.functions=j.methods=function(n){var t=[];for(var r in n)j.isFunction(n[r])&&t.push(r);return t.sort()},j.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},j.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},j.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)j.contains(r,u)||(t[u]=n[u]);return t},j.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]===void 0&&(n[r]=t[r])}),n},j.clone=function(n){return j.isObject(n)?j.isArray(n)?n.slice():j.extend({},n):n},j.tap=function(n,t){return t(n),n};var S=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof j&&(n=n._wrapped),t instanceof j&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case\"[object String]\":return n==String(t);case\"[object Number]\":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case\"[object Date]\":case\"[object Boolean]\":return+n==+t;case\"[object RegExp]\":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if(\"object\"!=typeof n||\"object\"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;var a=n.constructor,o=t.constructor;if(a!==o&&!(j.isFunction(a)&&a instanceof a&&j.isFunction(o)&&o instanceof o)&&\"constructor\"in n&&\"constructor\"in t)return!1;r.push(n),e.push(t);var c=0,f=!0;if(\"[object Array]\"==u){if(c=n.length,f=c==t.length)for(;c--&&(f=S(n[c],t[c],r,e)););}else{for(var s in n)if(j.has(n,s)&&(c++,!(f=j.has(t,s)&&S(n[s],t[s],r,e))))break;if(f){for(s in t)if(j.has(t,s)&&!c--)break;f=!c}}return r.pop(),e.pop(),f};j.isEqual=function(n,t){return S(n,t,[],[])},j.isEmpty=function(n){if(null==n)return!0;if(j.isArray(n)||j.isString(n))return 0===n.length;for(var t in n)if(j.has(n,t))return!1;return!0},j.isElement=function(n){return!(!n||1!==n.nodeType)},j.isArray=x||function(n){return\"[object Array]\"==l.call(n)},j.isObject=function(n){return n===Object(n)},A([\"Arguments\",\"Function\",\"String\",\"Number\",\"Date\",\"RegExp\"],function(n){j[\"is\"+n]=function(t){return l.call(t)==\"[object \"+n+\"]\"}}),j.isArguments(arguments)||(j.isArguments=function(n){return!(!n||!j.has(n,\"callee\"))}),\"function\"!=typeof/./&&(j.isFunction=function(n){return\"function\"==typeof n}),j.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},j.isNaN=function(n){return j.isNumber(n)&&n!=+n},j.isBoolean=function(n){return n===!0||n===!1||\"[object Boolean]\"==l.call(n)},j.isNull=function(n){return null===n},j.isUndefined=function(n){return n===void 0},j.has=function(n,t){return f.call(n,t)},j.noConflict=function(){return n._=t,this},j.identity=function(n){return n},j.constant=function(n){return function(){return n}},j.property=function(n){return function(t){return t[n]}},j.matches=function(n){return function(t){if(t===n)return!0;for(var r in n)if(n[r]!==t[r])return!1;return!0}},j.times=function(n,t,r){for(var e=Array(Math.max(0,n)),u=0;n>u;u++)e[u]=t.call(r,u);return e},j.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},j.now=Date.now||function(){return(new Date).getTime()};var T={escape:{\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\"}};T.unescape=j.invert(T.escape);var I={escape:new RegExp(\"[\"+j.keys(T.escape).join(\"\")+\"]\",\"g\"),unescape:new RegExp(\"(\"+j.keys(T.unescape).join(\"|\")+\")\",\"g\")};j.each([\"escape\",\"unescape\"],function(n){j[n]=function(t){return null==t?\"\":(\"\"+t).replace(I[n],function(t){return T[n][t]})}}),j.result=function(n,t){if(null==n)return void 0;var r=n[t];return j.isFunction(r)?r.call(n):r},j.mixin=function(n){A(j.functions(n),function(t){var r=j[t]=n[t];j.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),z.call(this,r.apply(j,n))}})};var N=0;j.uniqueId=function(n){var t=++N+\"\";return n?n+t:t},j.templateSettings={evaluate:/<%([\\s\\S]+?)%>/g,interpolate:/<%=([\\s\\S]+?)%>/g,escape:/<%-([\\s\\S]+?)%>/g};var q=/(.)^/,B={\"'\":\"'\",\"\\\\\":\"\\\\\",\"\\r\":\"r\",\"\\n\":\"n\",\"\t\":\"t\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},D=/\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g;j.template=function(n,t,r){var e;r=j.defaults({},r,j.templateSettings);var u=new RegExp([(r.escape||q).source,(r.interpolate||q).source,(r.evaluate||q).source].join(\"|\")+\"|$\",\"g\"),i=0,a=\"__p+='\";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(D,function(n){return\"\\\\\"+B[n]}),r&&(a+=\"'+\\n((__t=(\"+r+\"))==null?'':_.escape(__t))+\\n'\"),e&&(a+=\"'+\\n((__t=(\"+e+\"))==null?'':__t)+\\n'\"),u&&(a+=\"';\\n\"+u+\"\\n__p+='\"),i=o+t.length,t}),a+=\"';\\n\",r.variable||(a=\"with(obj||{}){\\n\"+a+\"}\\n\"),a=\"var __t,__p='',__j=Array.prototype.join,\"+\"print=function(){__p+=__j.call(arguments,'');};\\n\"+a+\"return __p;\\n\";try{e=new Function(r.variable||\"obj\",\"_\",a)}catch(o){throw o.source=a,o}if(t)return e(t,j);var c=function(n){return e.call(this,n,j)};return c.source=\"function(\"+(r.variable||\"obj\")+\"){\\n\"+a+\"}\",c},j.chain=function(n){return j(n).chain()};var z=function(n){return this._chain?j(n).chain():n};j.mixin(j),A([\"pop\",\"push\",\"reverse\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(n){var t=e[n];j.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),\"shift\"!=n&&\"splice\"!=n||0!==r.length||delete r[0],z.call(this,r)}}),A([\"concat\",\"join\",\"slice\"],function(n){var t=e[n];j.prototype[n]=function(){return z.call(this,t.apply(this._wrapped,arguments))}}),j.extend(j.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),\"function\"==typeof define&&define.amd&&define(\"underscore\",[],function(){return j})}).call(this);\n\n","// Backbone.js 1.1.2\n\n// (c) 2010-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(root, factory) {\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define('backbone',['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore');\n factory(root, exports, _);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));\n }\n\n}(this, function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create local references to array methods we'll want to use later.\n var array = [];\n var push = array.push;\n var slice = array.slice;\n var splice = array.splice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.1.2';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // custom events. You may bind with `on` or remove with `off` callback\n // functions to an event; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n on: function(name, callback, context) {\n if (!eventsApi(this, 'on', name, [callback, context]) || !callback) return this;\n this._events || (this._events = {});\n var events = this._events[name] || (this._events[name] = []);\n events.push({callback: callback, context: context, ctx: context || this});\n return this;\n },\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, it will be removed.\n once: function(name, callback, context) {\n if (!eventsApi(this, 'once', name, [callback, context]) || !callback) return this;\n var self = this;\n var once = _.once(function() {\n self.off(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n return this.on(name, once, context);\n },\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n off: function(name, callback, context) {\n var retain, ev, events, names, i, l, j, k;\n if (!this._events || !eventsApi(this, 'off', name, [callback, context])) return this;\n if (!name && !callback && !context) {\n this._events = void 0;\n return this;\n }\n names = name ? [name] : _.keys(this._events);\n for (i = 0, l = names.length; i < l; i++) {\n name = names[i];\n if (events = this._events[name]) {\n this._events[name] = retain = [];\n if (callback || context) {\n for (j = 0, k = events.length; j < k; j++) {\n ev = events[j];\n if ((callback && callback !== ev.callback && callback !== ev.callback._callback) ||\n (context && context !== ev.context)) {\n retain.push(ev);\n }\n }\n }\n if (!retain.length) delete this._events[name];\n }\n }\n\n return this;\n },\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n trigger: function(name) {\n if (!this._events) return this;\n var args = slice.call(arguments, 1);\n if (!eventsApi(this, 'trigger', name, args)) return this;\n var events = this._events[name];\n var allEvents = this._events.all;\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, arguments);\n return this;\n },\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n stopListening: function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n var remove = !name && !callback;\n if (!callback && typeof name === 'object') callback = this;\n if (obj) (listeningTo = {})[obj._listenId] = obj;\n for (var id in listeningTo) {\n obj = listeningTo[id];\n obj.off(name, callback, this);\n if (remove || _.isEmpty(obj._events)) delete this._listeningTo[id];\n }\n return this;\n }\n\n };\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // Implement fancy features of the Events API such as multiple event\n // names `\"change blur\"` and jQuery-style event maps `{change: action}`\n // in terms of the existing API.\n var eventsApi = function(obj, action, name, rest) {\n if (!name) return true;\n\n // Handle event maps.\n if (typeof name === 'object') {\n for (var key in name) {\n obj[action].apply(obj, [key, name[key]].concat(rest));\n }\n return false;\n }\n\n // Handle space separated event names.\n if (eventSplitter.test(name)) {\n var names = name.split(eventSplitter);\n for (var i = 0, l = names.length; i < l; i++) {\n obj[action].apply(obj, [names[i]].concat(rest));\n }\n return false;\n }\n\n return true;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n var listenMethods = {listenTo: 'on', listenToOnce: 'once'};\n\n // Inversion-of-control versions of `on` and `once`. Tell *this* object to\n // listen to an event in another object ... keeping track of what it's\n // listening to.\n _.each(listenMethods, function(implementation, method) {\n Events[method] = function(obj, name, callback) {\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n listeningTo[id] = obj;\n if (!callback && typeof name === 'object') callback = this;\n obj[implementation](name, callback, this);\n return this;\n };\n });\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.cid = _.uniqueId('c');\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n attrs = _.defaults({}, attrs, _.result(this, 'defaults'));\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n var attr, attrs, unset, changes, silent, changing, prev, current;\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n unset = options.unset;\n silent = options.silent;\n changes = [];\n changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n current = this.attributes, prev = this._previousAttributes;\n\n // Check for changes of `id`.\n if (this.idAttribute in attrs) this.id = attrs[this.idAttribute];\n\n // For each `set` attribute, update or delete the current value.\n for (attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n this.changed[attr] = val;\n } else {\n delete this.changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0, l = changes.length; i < l; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var val, changed = false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n for (var attr in diff) {\n if (_.isEqual(old[attr], (val = diff[attr]))) continue;\n (changed || (changed = {}))[attr] = val;\n }\n return changed;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server. If the server's representation of the\n // model differs from its current attributes, they will be overridden,\n // triggering a `\"change\"` event.\n fetch: function(options) {\n options = options ? _.clone(options) : {};\n if (options.parse === void 0) options.parse = true;\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n if (!model.set(model.parse(resp, options), options)) return false;\n if (success) success(model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n var attrs, method, xhr, attributes = this.attributes;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true}, options);\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !options.wait) {\n if (!this.set(attrs, options)) return false;\n } else {\n if (!this._validate(attrs, options)) return false;\n }\n\n // Set temporary attributes if `{wait: true}`.\n if (attrs && options.wait) {\n this.attributes = _.extend({}, attributes, attrs);\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n if (options.parse === void 0) options.parse = true;\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = model.parse(resp, options);\n if (options.wait) serverAttrs = _.extend(attrs || {}, serverAttrs);\n if (_.isObject(serverAttrs) && !model.set(serverAttrs, options)) {\n return false;\n }\n if (success) success(model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update');\n if (method === 'patch') options.attrs = attrs;\n xhr = this.sync(method, this, options);\n\n // Restore attributes.\n if (attrs && options.wait) this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n\n var destroy = function() {\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (options.wait || model.isNew()) destroy();\n if (success) success(model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n if (this.isNew()) {\n options.success();\n return false;\n }\n wrapError(this, options);\n\n var xhr = this.sync('delete', this, options);\n if (!options.wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n return base.replace(/([^\\/])$/, '$1/') + encodeURIComponent(this.id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend(options || {}, { validate: true }));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Underscore methods that we want to implement on the Model.\n var modelMethods = ['keys', 'values', 'pairs', 'invert', 'pick', 'omit'];\n\n // Mix in each Underscore method as a proxy to `Model#attributes`.\n _.each(modelMethods, function(method) {\n Model.prototype[method] = function() {\n var args = slice.call(arguments);\n args.unshift(this.attributes);\n return _[method].apply(_, args);\n };\n });\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analagous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model){ return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n var singular = !_.isArray(models);\n models = singular ? [models] : _.clone(models);\n options || (options = {});\n var i, l, index, model;\n for (i = 0, l = models.length; i < l; i++) {\n model = models[i] = this.get(models[i]);\n if (!model) continue;\n delete this._byId[model.id];\n delete this._byId[model.cid];\n index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n this._removeReference(model, options);\n }\n return singular ? models[0] : models;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n options = _.defaults({}, options, setOptions);\n if (options.parse) models = this.parse(models, options);\n var singular = !_.isArray(models);\n models = singular ? (models ? [models] : []) : _.clone(models);\n var i, l, id, model, attrs, existing, sort;\n var at = options.at;\n var targetModel = this.model;\n var sortable = this.comparator && (at == null) && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n var toAdd = [], toRemove = [], modelMap = {};\n var add = options.add, merge = options.merge, remove = options.remove;\n var order = !sortable && add && remove ? [] : false;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n for (i = 0, l = models.length; i < l; i++) {\n attrs = models[i] || {};\n if (attrs instanceof Model) {\n id = model = attrs;\n } else {\n id = attrs[targetModel.prototype.idAttribute || 'id'];\n }\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n if (existing = this.get(id)) {\n if (remove) modelMap[existing.cid] = true;\n if (merge) {\n attrs = attrs === model ? model.attributes : attrs;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n if (sortable && !sort && existing.hasChanged(sortAttr)) sort = true;\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(attrs, options);\n if (!model) continue;\n toAdd.push(model);\n this._addReference(model, options);\n }\n\n // Do not add multiple models with the same `id`.\n model = existing || model;\n if (order && (model.isNew() || !modelMap[model.id])) order.push(model);\n modelMap[model.id] = true;\n }\n\n // Remove nonexistent models if appropriate.\n if (remove) {\n for (i = 0, l = this.length; i < l; ++i) {\n if (!modelMap[(model = this.models[i]).cid]) toRemove.push(model);\n }\n if (toRemove.length) this.remove(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n if (toAdd.length || (order && order.length)) {\n if (sortable) sort = true;\n this.length += toAdd.length;\n if (at != null) {\n for (i = 0, l = toAdd.length; i < l; i++) {\n this.models.splice(at + i, 0, toAdd[i]);\n }\n } else {\n if (order) this.models.length = 0;\n var orderedModels = order || toAdd;\n for (i = 0, l = orderedModels.length; i < l; i++) {\n this.models.push(orderedModels[i]);\n }\n }\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort events.\n if (!options.silent) {\n for (i = 0, l = toAdd.length; i < l; i++) {\n (model = toAdd[i]).trigger('add', model, this, options);\n }\n if (sort || (order && order.length)) this.trigger('sort', this, options);\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options || (options = {});\n for (var i = 0, l = this.models.length; i < l; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n this.remove(model, options);\n return model;\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n this.remove(model, options);\n return model;\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] || this._byId[obj.id] || this._byId[obj.cid];\n },\n\n // Get the model at the given index.\n at: function(index) {\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n if (_.isEmpty(attrs)) return first ? void 0 : [];\n return this[first ? 'find' : 'filter'](function(model) {\n for (var key in attrs) {\n if (attrs[key] !== model.get(key)) return false;\n }\n return true;\n });\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n if (!this.comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n // Run sort based on type of `comparator`.\n if (_.isString(this.comparator) || this.comparator.length === 1) {\n this.models = this.sortBy(this.comparator, this);\n } else {\n this.models.sort(_.bind(this.comparator, this));\n }\n\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return _.invoke(this.models, 'get', attr);\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = options ? _.clone(options) : {};\n if (options.parse === void 0) options.parse = true;\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success(collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n if (!(model = this._prepareModel(model, options))) return false;\n if (!options.wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(model, resp) {\n if (options.wait) collection.add(model, options);\n if (success) success(model, resp, options);\n };\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models);\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (attrs instanceof Model) return attrs;\n options = options ? _.clone(options) : {};\n options.collection = this;\n var model = new this.model(attrs, options);\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n if (model.id != null) this._byId[model.id] = model;\n if (!model.collection) model.collection = this;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (model && event === 'change:' + model.idAttribute) {\n delete this._byId[model.previous(model.idAttribute)];\n if (model.id != null) this._byId[model.id] = model;\n }\n this.trigger.apply(this, arguments);\n }\n\n });\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var methods = ['forEach', 'each', 'map', 'collect', 'reduce', 'foldl',\n 'inject', 'reduceRight', 'foldr', 'find', 'detect', 'filter', 'select',\n 'reject', 'every', 'all', 'some', 'any', 'include', 'contains', 'invoke',\n 'max', 'min', 'toArray', 'size', 'first', 'head', 'take', 'initial', 'rest',\n 'tail', 'drop', 'last', 'without', 'difference', 'indexOf', 'shuffle',\n 'lastIndexOf', 'isEmpty', 'chain', 'sample'];\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n _.each(methods, function(method) {\n Collection.prototype[method] = function() {\n var args = slice.call(arguments);\n args.unshift(this.models);\n return _[method].apply(_, args);\n };\n });\n\n // Underscore methods that take a property name as an argument.\n var attributeMethods = ['groupBy', 'countBy', 'sortBy', 'indexBy'];\n\n // Use attributes instead of properties.\n _.each(attributeMethods, function(method) {\n Collection.prototype[method] = function(value, context) {\n var iterator = _.isFunction(value) ? value : function(model) {\n return model.get(value);\n };\n return _[method](this.models, iterator, context);\n };\n });\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n options || (options = {});\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n this.delegateEvents();\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be merged as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this.$el.remove();\n this.stopListening();\n return this;\n },\n\n // Change the view's element (`this.el` property), including event\n // re-delegation.\n setElement: function(element, delegate) {\n if (this.$el) this.undelegateEvents();\n this.$el = element instanceof Backbone.$ ? element : Backbone.$(element);\n this.el = this.$el[0];\n if (delegate !== false) this.delegateEvents();\n return this;\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n // This only works for delegate-able events: not `focus`, `blur`, and\n // not `change`, `submit`, and `reset` in Internet Explorer.\n delegateEvents: function(events) {\n if (!(events || (events = _.result(this, 'events')))) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[events[key]];\n if (!method) continue;\n\n var match = key.match(delegateEventSplitter);\n var eventName = match[1], selector = match[2];\n method = _.bind(method, this);\n eventName += '.delegateEvents' + this.cid;\n if (selector === '') {\n this.$el.on(eventName, method);\n } else {\n this.$el.on(eventName, selector, method);\n }\n }\n return this;\n },\n\n // Clears all callbacks previously bound to the view with `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n var $el = Backbone.$('<' + _.result(this, 'tagName') + '>').attr(attrs);\n this.setElement($el, false);\n } else {\n this.setElement(_.result(this, 'el'), false);\n }\n }\n\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // If we're sending a `PATCH` request, and we're in an old Internet Explorer\n // that still has ActiveX enabled by default, override jQuery to use that\n // for XHR instead. Remove this line when jQuery supports `PATCH` on IE8.\n if (params.type === 'PATCH' && noXhrPatch) {\n params.xhr = function() {\n return new ActiveXObject(\"Microsoft.XMLHTTP\");\n };\n }\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n var noXhrPatch =\n typeof window !== 'undefined' && !!window.ActiveXObject &&\n !(window.XMLHttpRequest && (new XMLHttpRequest).dispatchEvent);\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n 'create': 'POST',\n 'update': 'PUT',\n 'patch': 'PATCH',\n 'delete': 'DELETE',\n 'read': 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n router.execute(callback, args);\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n _.bindAll(this, 'checkUrl');\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for detecting MSIE.\n var isExplorer = /msie [\\w.]+/;\n\n // Cached regex for removing a trailing slash.\n var trailingSlash = /\\/$/;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n return this.location.pathname.replace(/[^\\/]$/, '$&/') === this.root;\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the cross-browser normalized URL fragment, either from the URL,\n // the hash, or the override.\n getFragment: function(fragment, forcePushState) {\n if (fragment == null) {\n if (this._hasPushState || !this._wantsHashChange || forcePushState) {\n fragment = decodeURI(this.location.pathname + this.location.search);\n var root = this.root.replace(trailingSlash, '');\n if (!fragment.indexOf(root)) fragment = fragment.slice(root.length);\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error(\"Backbone.history has already been started\");\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._wantsHashChange = this.options.hashChange !== false;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.options.pushState && this.history && this.history.pushState);\n var fragment = this.getFragment();\n var docMode = document.documentMode;\n var oldIE = (isExplorer.exec(navigator.userAgent.toLowerCase()) && (!docMode || docMode <= 7));\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n if (oldIE && this._wantsHashChange) {\n var frame = Backbone.$('