| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675 | window.$ = window.$ || {};(function() { if ($ && $.fn && $.fn.select2 && $.fn.select2.amd) { define = $.fn.select2.amd.define; require = $.fn.select2.amd.require; }/** * @license almond 0.2.9 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/jrburke/almond for details *///Going sloppy to avoid 'use strict' string cost, but strict practices should//be followed./*jslint sloppy: true *//*global setTimeout: false */var requirejs, require, define;(function (undef) {    var main, req, makeMap, handlers,        defined = {},        waiting = {},        config = {},        defining = {},        hasOwn = Object.prototype.hasOwnProperty,        aps = [].slice,        jsSuffixRegExp = /\.js$/;    function hasProp(obj, prop) {        return hasOwn.call(obj, prop);    }    /**     * Given a relative module name, like ./something, normalize it to     * a real name that can be mapped to a path.     * @param {String} name the relative name     * @param {String} baseName a real name that the name arg is relative     * to.     * @returns {String} normalized name     */    function normalize(name, baseName) {        var nameParts, nameSegment, mapValue, foundMap, lastIndex,            foundI, foundStarMap, starI, i, j, part,            baseParts = baseName && baseName.split("/"),            map = config.map,            starMap = (map && map['*']) || {};        //Adjust any relative paths.        if (name && name.charAt(0) === ".") {            //If have a base name, try to normalize against it,            //otherwise, assume it is a top-level require that will            //be relative to baseUrl in the end.            if (baseName) {                //Convert baseName to array, and lop off the last part,                //so that . matches that "directory" and not name of the baseName's                //module. For instance, baseName of "one/two/three", maps to                //"one/two/three.js", but we want the directory, "one/two" for                //this normalization.                baseParts = baseParts.slice(0, baseParts.length - 1);                name = name.split('/');                lastIndex = name.length - 1;                // Node .js allowance:                if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {                    name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');                }                name = baseParts.concat(name);                //start trimDots                for (i = 0; i < name.length; i += 1) {                    part = name[i];                    if (part === ".") {                        name.splice(i, 1);                        i -= 1;                    } else if (part === "..") {                        if (i === 1 && (name[2] === '..' || name[0] === '..')) {                            //End of the line. Keep at least one non-dot                            //path segment at the front so it can be mapped                            //correctly to disk. Otherwise, there is likely                            //no path mapping for a path starting with '..'.                            //This can still fail, but catches the most reasonable                            //uses of ..                            break;                        } else if (i > 0) {                            name.splice(i - 1, 2);                            i -= 2;                        }                    }                }                //end trimDots                name = name.join("/");            } else if (name.indexOf('./') === 0) {                // No baseName, so this is ID is resolved relative                // to baseUrl, pull off the leading dot.                name = name.substring(2);            }        }        //Apply map config if available.        if ((baseParts || starMap) && map) {            nameParts = name.split('/');            for (i = nameParts.length; i > 0; i -= 1) {                nameSegment = nameParts.slice(0, i).join("/");                if (baseParts) {                    //Find the longest baseName segment match in the config.                    //So, do joins on the biggest to smallest lengths of baseParts.                    for (j = baseParts.length; j > 0; j -= 1) {                        mapValue = map[baseParts.slice(0, j).join('/')];                        //baseName segment has  config, find if it has one for                        //this name.                        if (mapValue) {                            mapValue = mapValue[nameSegment];                            if (mapValue) {                                //Match, update name to the new value.                                foundMap = mapValue;                                foundI = i;                                break;                            }                        }                    }                }                if (foundMap) {                    break;                }                //Check for a star map match, but just hold on to it,                //if there is a shorter segment match later in a matching                //config, then favor over this star map.                if (!foundStarMap && starMap && starMap[nameSegment]) {                    foundStarMap = starMap[nameSegment];                    starI = i;                }            }            if (!foundMap && foundStarMap) {                foundMap = foundStarMap;                foundI = starI;            }            if (foundMap) {                nameParts.splice(0, foundI, foundMap);                name = nameParts.join('/');            }        }        return name;    }    function makeRequire(relName, forceSync) {        return function () {            //A version of a require function that passes a moduleName            //value for items that may need to            //look up paths relative to the moduleName            return req.apply(undef, aps.call(arguments, 0).concat([relName, forceSync]));        };    }    function makeNormalize(relName) {        return function (name) {            return normalize(name, relName);        };    }    function makeLoad(depName) {        return function (value) {            defined[depName] = value;        };    }    function callDep(name) {        if (hasProp(waiting, name)) {            var args = waiting[name];            delete waiting[name];            defining[name] = true;            main.apply(undef, args);        }        if (!hasProp(defined, name) && !hasProp(defining, name)) {            throw new Error('No ' + name);        }        return defined[name];    }    //Turns a plugin!resource to [plugin, resource]    //with the plugin being undefined if the name    //did not have a plugin prefix.    function splitPrefix(name) {        var prefix,            index = name ? name.indexOf('!') : -1;        if (index > -1) {            prefix = name.substring(0, index);            name = name.substring(index + 1, name.length);        }        return [prefix, name];    }    /**     * Makes a name map, normalizing the name, and using a plugin     * for normalization if necessary. Grabs a ref to plugin     * too, as an optimization.     */    makeMap = function (name, relName) {        var plugin,            parts = splitPrefix(name),            prefix = parts[0];        name = parts[1];        if (prefix) {            prefix = normalize(prefix, relName);            plugin = callDep(prefix);        }        //Normalize according        if (prefix) {            if (plugin && plugin.normalize) {                name = plugin.normalize(name, makeNormalize(relName));            } else {                name = normalize(name, relName);            }        } else {            name = normalize(name, relName);            parts = splitPrefix(name);            prefix = parts[0];            name = parts[1];            if (prefix) {                plugin = callDep(prefix);            }        }        //Using ridiculous property names for space reasons        return {            f: prefix ? prefix + '!' + name : name, //fullName            n: name,            pr: prefix,            p: plugin        };    };    function makeConfig(name) {        return function () {            return (config && config.config && config.config[name]) || {};        };    }    handlers = {        require: function (name) {            return makeRequire(name);        },        exports: function (name) {            var e = defined[name];            if (typeof e !== 'undefined') {                return e;            } else {                return (defined[name] = {});            }        },        module: function (name) {            return {                id: name,                uri: '',                exports: defined[name],                config: makeConfig(name)            };        }    };    main = function (name, deps, callback, relName) {        var cjsModule, depName, ret, map, i,            args = [],            callbackType = typeof callback,            usingExports;        //Use name if no relName        relName = relName || name;        //Call the callback to define the module, if necessary.        if (callbackType === 'undefined' || callbackType === 'function') {            //Pull out the defined dependencies and pass the ordered            //values to the callback.            //Default to [require, exports, module] if no deps            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;            for (i = 0; i < deps.length; i += 1) {                map = makeMap(deps[i], relName);                depName = map.f;                //Fast path CommonJS standard dependencies.                if (depName === "require") {                    args[i] = handlers.require(name);                } else if (depName === "exports") {                    //CommonJS module spec 1.1                    args[i] = handlers.exports(name);                    usingExports = true;                } else if (depName === "module") {                    //CommonJS module spec 1.1                    cjsModule = args[i] = handlers.module(name);                } else if (hasProp(defined, depName) ||                           hasProp(waiting, depName) ||                           hasProp(defining, depName)) {                    args[i] = callDep(depName);                } else if (map.p) {                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});                    args[i] = defined[depName];                } else {                    throw new Error(name + ' missing ' + depName);                }            }            ret = callback ? callback.apply(defined[name], args) : undefined;            if (name) {                //If setting exports via "module" is in play,                //favor that over return value and exports. After that,                //favor a non-undefined return value over exports use.                if (cjsModule && cjsModule.exports !== undef &&                        cjsModule.exports !== defined[name]) {                    defined[name] = cjsModule.exports;                } else if (ret !== undef || !usingExports) {                    //Use the return value from the function.                    defined[name] = ret;                }            }        } else if (name) {            //May just be an object definition for the module. Only            //worry about defining if have a module name.            defined[name] = callback;        }    };    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {        if (typeof deps === "string") {            if (handlers[deps]) {                //callback in this case is really relName                return handlers[deps](callback);            }            //Just return the module wanted. In this scenario, the            //deps arg is the module name, and second arg (if passed)            //is just the relName.            //Normalize module name, if it contains . or ..            return callDep(makeMap(deps, callback).f);        } else if (!deps.splice) {            //deps is a config object, not an array.            config = deps;            if (config.deps) {                req(config.deps, config.callback);            }            if (!callback) {                return;            }            if (callback.splice) {                //callback is an array, which means it is a dependency list.                //Adjust args if there are dependencies                deps = callback;                callback = relName;                relName = null;            } else {                deps = undef;            }        }        //Support require(['a'])        callback = callback || function () {};        //If relName is a function, it is an errback handler,        //so remove it.        if (typeof relName === 'function') {            relName = forceSync;            forceSync = alt;        }        //Simulate async callback;        if (forceSync) {            main(undef, deps, callback, relName);        } else {            //Using a non-zero value because of concern for what old browsers            //do, and latest browsers "upgrade" to 4 if lower value is used:            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:            //If want a value immediately, use require('id') instead -- something            //that works in almond on the global level, but not guaranteed and            //unlikely to work in other AMD implementations.            setTimeout(function () {                main(undef, deps, callback, relName);            }, 4);        }        return req;    };    /**     * Just drops the config on the floor, but returns req in case     * the config return value is used.     */    req.config = function (cfg) {        return req(cfg);    };    /**     * Expose module registry for debugging and tooling     */    requirejs._defined = defined;    define = function (name, deps, callback) {        //This module may not have dependencies        if (!deps.splice) {            //deps is not an array, so probably means            //an object literal or factory function for            //the value. Adjust args.            callback = deps;            deps = [];        }        if (!hasProp(defined, name) && !hasProp(waiting, name)) {            waiting[name] = [name, deps, callback];        }    };    define.amd = {        jQuery: true    };}());define("almond", function(){});define('jquery',[],function () {    return jQuery;});define('select2/utils',[], function () {  var Utils = {};  Utils.Extend = function (ChildClass, SuperClass) {    var __hasProp = {}.hasOwnProperty;    function BaseConstructor () {      this.constructor = ChildClass;    }    for (var key in SuperClass) {      if (__hasProp.call(SuperClass, key)) {        ChildClass[key] = SuperClass[key];      }    }    BaseConstructor.prototype = SuperClass.prototype;    ChildClass.prototype = new BaseConstructor();    ChildClass.__super__ = SuperClass.prototype;    return ChildClass;  };  function getMethods (theClass) {    var proto = theClass.prototype;    var methods = [];    for (var methodName in proto) {      var m = proto[methodName];      if (typeof m !== 'function') {        continue;      }      methods.push(methodName);    }    return methods;  }  Utils.Decorate = function (SuperClass, DecoratorClass) {    var decoratedMethods = getMethods(DecoratorClass);    var superMethods = getMethods(SuperClass);    function DecoratedClass () {      var unshift = Array.prototype.unshift;      var argCount = DecoratorClass.prototype.constructor.length;      var calledConstructor = SuperClass.prototype.constructor;      if (argCount > 0) {        unshift.call(arguments, SuperClass.prototype.constructor);        calledConstructor = DecoratorClass.prototype.constructor;      }      calledConstructor.apply(this, arguments);    }    DecoratorClass.displayName = SuperClass.displayName;    function ctr () {      this.constructor = DecoratedClass;    }    DecoratedClass.prototype = new ctr();    for (var m = 0; m < superMethods.length; m++) {        var superMethod = superMethods[m];        DecoratedClass.prototype[superMethod] =          SuperClass.prototype[superMethod];    }    var calledMethod = function (methodName) {      // Stub out the original method if it's not decorating an actual method      var originalMethod = function () {};      if (methodName in DecoratedClass.prototype) {        originalMethod = DecoratedClass.prototype[methodName];      }      var decoratedMethod = DecoratorClass.prototype[methodName];      return function () {        var unshift = Array.prototype.unshift;        unshift.call(arguments, originalMethod);        return decoratedMethod.apply(this, arguments);      };    };    for (var d = 0; d < decoratedMethods.length; d++) {      var decoratedMethod = decoratedMethods[d];      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);    }    return DecoratedClass;  };  var Observable = function () {    this.listeners = {};  };  Observable.prototype.on = function (event, callback) {    this.listeners = this.listeners || {};    if (event in this.listeners) {      this.listeners[event].push(callback);    } else {      this.listeners[event] = [callback];    }  };  Observable.prototype.trigger = function (event) {    var slice = Array.prototype.slice;    this.listeners = this.listeners || {};    if (event in this.listeners) {      this.invoke(this.listeners[event], slice.call(arguments, 1));    }    if ('*' in this.listeners) {      this.invoke(this.listeners['*'], arguments);    }  };  Observable.prototype.invoke = function (listeners, params) {    for (var i = 0, len = listeners.length; i < len; i++) {      listeners[i].apply(this, params);    }  };  Utils.Observable = Observable;  Utils.generateChars = function (length) {    var chars = '';    for (var i = 0; i < length; i++) {      var randomChar = Math.floor(Math.random() * 36);      chars += randomChar.toString(36);    }    return chars;  };  return Utils;});define('select2/results',[  './utils'], function (Utils) {  function Results ($element, options, dataAdapter) {    this.$element = $element;    this.data = dataAdapter;    this.options = options;    Results.__super__.constructor.call(this);  }  Utils.Extend(Results, Utils.Observable);  Results.prototype.render = function () {    var $results = $(      '<ul class="options" role="tree"></ul>'    );    if (this.options.get('multiple')) {      $results.attr('aria-multiselectable', 'true');    }    this.$results = $results;    return $results;  };  Results.prototype.clear = function () {    this.$results.empty();  };  Results.prototype.displayMessage = function (params) {    this.clear();    var $message = $('<li role="treeitem" class="option"></li>');    var message = this.options.get('translations').get(params.message);    $message.text(message(params.args));    this.$results.append($message);  };  Results.prototype.append = function (data) {    var $options = [];    if (data.length === 0) {      if (this.$results.children().length === 0) {        this.trigger('results:message', {          message: 'noResults'        });      }      return;    }    data = this.sort(data);    for (var d = 0; d < data.length; d++) {      var item = data[d];      var $option = this.option(item);      $options.push($option);    }    this.$results.append($options);  };  Results.prototype.sort = function (data) {    return data;  };  Results.prototype.setClasses = function () {    var self = this;    this.data.current(function (selected) {      var selectedIds = $.map(selected, function (s) {        return s.id.toString();      });      var $options = self.$results.find('.option[aria-selected]');      $options.each(function () {        var $option = $(this);        var item = $option.data('data');        if (item.id != null && selectedIds.indexOf(item.id.toString()) > -1) {          $option.attr('aria-selected', 'true');        } else {          $option.attr('aria-selected', 'false');        }      });      var $selected = $options.filter('[aria-selected=true]');      // Check if there are any selected options      if ($selected.length > 0) {        // If there are selected options, highlight the first        $selected.first().trigger('mouseenter');      } else {        // If there are no selected options, highlight the first option        // in the dropdown        $options.first().trigger('mouseenter');      }    });  };  Results.prototype.option = function (data) {    var $option = $(      '<li class="option" role="treeitem" aria-selected="false"></li>'    );    if (data.children) {      $option        .attr('role', 'group')        .attr('aria-label', data.text)        .removeAttr('aria-selected');      var $label = $('<strong class="group-label"></strong>');      this.template(data, $label);      var $children = [];      for (var c = 0; c < data.children.length; c++) {        var child = data.children[c];        var $child = this.option(child);        $children.push($child);      }      var $childrenContainer = $('<ul class="options nested-options"></ul>');      $childrenContainer.append($children);      $option.append($label);      $option.append($childrenContainer);    } else {      this.template(data, $option);    }    if (data.disabled) {      $option        .removeAttr('aria-selected')        .attr('aria-disabled', 'true');    }    if (data.id == null) {      $option.removeAttr('aria-selected');    }    if (data._resultId != null) {      $option.attr('id', data._resultId);    }    $option.data('data', data);    return $option;  };  Results.prototype.bind = function (container, $container) {    var self = this;    var id = container.id + '-results';    this.$results.attr('id', id);    container.on('results:all', function (params) {      self.clear();      self.append(params.data);      if (container.isOpen()) {        self.setClasses();      }    });    container.on('results:append', function (params) {      self.append(params.data);      if (container.isOpen()) {        self.setClasses();      }    });    container.on('select', function () {      if (!container.isOpen()) {        return;      }      self.setClasses();    });    container.on('unselect', function () {      if (!container.isOpen()) {        return;      }      self.setClasses();    });    container.on('open', function () {      // When the dropdown is open, aria-expended="true"      self.$results.attr('aria-expanded', 'true');      self.$results.attr('aria-hidden', 'false');      self.setClasses();      self.ensureHighlightVisible();    });    container.on('close', function () {      // When the dropdown is closed, aria-expended="false"      self.$results.attr('aria-expanded', 'false');      self.$results.attr('aria-hidden', 'true');      self.$results.removeAttr('aria-activedescendant');    });    container.on('results:select', function () {      var $highlighted = self.$results.find('.highlighted');      if ($highlighted.length === 0) {        return;      }      var data = $highlighted.data('data');      if ($highlighted.attr('aria-selected') == 'true') {        self.trigger('unselected', {          data: data        });      } else {        self.trigger('selected', {          data: data        });      }    });    container.on('results:previous', function () {      var $highlighted = self.$results.find('.highlighted');      var $options = self.$results.find('[aria-selected]');      var currentIndex = $options.index($highlighted);      // If we are already at te top, don't move further      if (currentIndex === 0) {        return;      }      var nextIndex = currentIndex - 1;      // If none are highlighted, highlight the first      if ($highlighted.length === 0) {        nextIndex = 0;      }      var $next = $options.eq(nextIndex);      $next.trigger('mouseenter');      var currentOffset = self.$results.offset().top;      var nextTop = $next.offset().top;      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);      if (nextIndex === 0) {        self.$results.scrollTop(0);      } else if (nextTop - currentOffset < 0) {        self.$results.scrollTop(nextOffset);      }    });    container.on('results:next', function () {      var $highlighted = self.$results.find('.highlighted');      var $options = self.$results.find('[aria-selected]');      var currentIndex = $options.index($highlighted);      var nextIndex = currentIndex + 1;      // If we are at the last option, stay there      if (nextIndex >= $options.length) {        return;      }      var $next = $options.eq(nextIndex);      $next.trigger('mouseenter');      var currentOffset = self.$results.offset().top +        self.$results.outerHeight(false);      var nextBottom = $next.offset().top + $next.outerHeight(false);      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;      if (nextIndex === 0) {        self.$results.scrollTop(0);      } else if (nextBottom > currentOffset) {        self.$results.scrollTop(nextOffset);      }    });    container.on('results:focus', function (params) {      params.element.addClass('highlighted');    });    container.on('results:message', function (params) {      self.trigger('results:message', params);    });    this.on('results:message', function (params) {      self.displayMessage(params);    });    this.$results.on('mouseup', '.option[aria-selected]', function (evt) {      var $this = $(this);      var data = $this.data('data');      if ($this.attr('aria-selected') === 'true') {        self.trigger('unselected', {          originalEvent: evt,          data: data        });        return;      }      self.trigger('selected', {        originalEvent: evt,        data: data      });    });    this.$results.on('mouseenter', '.option[aria-selected]', function (evt) {      var data = $(this).data('data');      self.$results.find('.option.highlighted').removeClass('highlighted');      self.trigger('results:focus', {        data: data,        element: $(this)      });    });    this.$results.on('mouseleave', '.option', function (evt) {      if ($(this).hasClass('highlighted')) {        $(this).removeClass('highlighted');        self.$results.removeAttr('aria-activedescendant');      }    });  };  Results.prototype.ensureHighlightVisible = function () {    var $highlighted = this.$results.find('.highlighted');    if ($highlighted.length === 0) {      return;    }    var $options = this.$results.find('[aria-selected]');    var currentIndex = $options.index($highlighted);    var currentOffset = this.$results.offset().top;    var nextTop = $highlighted.offset().top;    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);    var offsetDelta = nextTop - currentOffset;    nextOffset -= $highlighted.outerHeight(false) * 2;    if (currentIndex <= 2) {      this.$results.scrollTop(0);    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {      this.$results.scrollTop(nextOffset);    }  };  Results.prototype.template = function (result, $container) {    var template = this.options.get('templateResult');    $container.html(template(result));  };  return Results;});define('select2/selection/base',[  '../utils'], function (Utils) {  function BaseSelection ($element, options) {    this.$element = $element;    this.options = options;    BaseSelection.__super__.constructor.call(this);  }  Utils.Extend(BaseSelection, Utils.Observable);  BaseSelection.prototype.render = function () {    throw new Error('The `render` method must be defined in child classes.');  };  BaseSelection.prototype.bind = function (container, $container) {    var self = this;    container.on('selection:update', function (params) {      self.update(params.data);    });    container.on('open', function () {      $(document.body).on('mousedown.select2.' + container.id, function (e) {        var $target = $(e.target);        var $select = $target.closest('.select2');        var $all = $('.select2.open');        $all.each(function () {          var $this = $(this);          if (this == $select[0]) {            return;          }          var $element = $this.data('element');          $element.select2('close');        });      });      container.on('close', function () {        $(document.body).off('mousedown.select2.' + container.id);      });    });  };  BaseSelection.prototype.update = function (data) {    throw new Error('The `update` method must be defined in child classes.');  };  return BaseSelection;});define('select2/keys',[], function () {  var KEYS = {    BACKSPACE: 8,    TAB: 9,    ENTER: 13,    SHIFT: 16,    CTRL: 17,    ALT: 18,    ESC: 27,    SPACE: 32,    PAGE_UP: 33,    PAGE_DOWN: 34,    END: 35,    HOME: 36,    LEFT: 37,    UP: 38,    RIGHT: 39,    DOWN: 40,    DELETE: 46,    isArrow: function (k) {        k = k.which ? k.which : k;        switch (k) {        case KEY.LEFT:        case KEY.RIGHT:        case KEY.UP:        case KEY.DOWN:            return true;        }        return false;    }  };  return KEYS;});define('select2/selection/single',[  './base',  '../utils',  '../keys'], function (BaseSelection, Utils, KEYS) {  function SingleSelection () {    SingleSelection.__super__.constructor.apply(this, arguments);  }  Utils.Extend(SingleSelection, BaseSelection);  SingleSelection.prototype.render = function () {    var $selection = $(      '<span class="single-select" tabindex="0" role="combobox" ' +        'aria-autocomplete="list" aria-haspopup="true" aria-expanded="false">' +        '<span class="rendered-selection"></span>' +      '</span>'    );    $selection.attr('title', this.$element.attr('title'));    this.$selection = $selection;    return $selection;  };  SingleSelection.prototype.bind = function (container, $container) {    var self = this;    SingleSelection.__super__.bind.apply(this, arguments);    var id = container.id + '-container';    var resultsId = container.id + '-results';    this.$selection.find('.rendered-selection').attr('id', id);    this.$selection.attr('aria-labelledby', id);    this.$selection.attr('aria-owns', resultsId);    this.$selection.on('mousedown', function (evt) {      // Only respond to left clicks      if (evt.which !== 1) {        return;      }      self.trigger('toggle', {        originalEvent: evt      });    });    container.on('open', function () {      // When the dropdown is open, aria-expanded="true"      self.$selection.attr('aria-expanded', 'true');    });    container.on('close', function () {      // When the dropdown is closed, aria-expanded="false"      self.$selection.attr('aria-expanded', 'false');      self.$selection.removeAttr('aria-activedescendant');      self.$selection.focus();    });    this.$selection.on('focus', function (evt) {      // User focuses on the container    });    this.$selection.on('blur', function (evt) {      // User exits the container    });    this.$selection.on('keydown', function (evt) {      self.trigger('keypress', evt);      if (evt.which === KEYS.SPACE) {        evt.preventDefault();      }    });    container.on('results:focus', function (params) {      self.$selection.attr('aria-activedescendant', params.data._resultId);    });    container.on('selection:update', function (params) {      self.update(params.data);    });  };  SingleSelection.prototype.clear = function () {    this.$selection.find('.rendered-selection').empty();  };  SingleSelection.prototype.display = function (data) {    var template = this.options.get('templateSelection');    return template(data);  };  SingleSelection.prototype.selectionContainer = function () {    return $('<span></span>');  };  SingleSelection.prototype.update = function (data) {    if (data.length === 0) {      this.clear();      return;    }    var selection = data[0];    var formatted = this.display(selection);    this.$selection.find('.rendered-selection').html(formatted);  };  return SingleSelection;});define('select2/selection/multiple',[  './base',  '../utils'], function (BaseSelection, Utils) {  function MultipleSelection ($element, options) {    MultipleSelection.__super__.constructor.apply(this, arguments);  }  Utils.Extend(MultipleSelection, BaseSelection);  MultipleSelection.prototype.render = function () {    var $selection = $(      '<span class="multiple-select">' +        '<ul class="rendered-selection"></ul>' +      '</span>'    );    this.$selection = $selection;    return $selection;  };  MultipleSelection.prototype.bind = function (container, $container) {    var self = this;    MultipleSelection.__super__.bind.apply(this, arguments);    this.$selection.on('click', function (evt) {      self.trigger('toggle', {        originalEvent: evt      });    });    this.$selection.on('click', '.remove', function (evt) {      var $remove = $(this);      var $selection = $remove.parent();      var data = $selection.data('data');      self.trigger('unselected', {        originalEvent: evt,        data: data      });    });  };  MultipleSelection.prototype.clear = function () {    this.$selection.find('.rendered-selection').empty();  };  MultipleSelection.prototype.display = function (data) {    var template = this.options.get('templateSelection');    return template(data);  };  MultipleSelection.prototype.selectionContainer = function () {    var $container = $(      '<li class="choice">' +        '<span class="remove" role="presentation">×</span>' +      '</li>'    );    return $container;  };  MultipleSelection.prototype.update = function (data) {    this.clear();    if (data.length === 0) {      return;    }    var $selections = [];    for (var d = 0; d < data.length; d++) {      var selection = data[d];      var formatted = this.display(selection);      var $selection = this.selectionContainer();      $selection.append(formatted);      $selection.data('data', selection);      $selections.push($selection);    }    this.$selection.find('.rendered-selection').append($selections);  };  return MultipleSelection;});define('select2/selection/placeholder',[  '../utils'], function (Utils) {  function Placeholder (decorated, $element, options) {    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));    decorated.call(this, $element, options);  }  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {    if (typeof placeholder === 'string') {      placeholder = {        id: '',        text: placeholder      };    }    return placeholder;  };  Placeholder.prototype.update = function (decorated, data) {    var singlePlaceholder = (      data.length == 1 && data[0].id != this.placeholder.id    );    var multipleSelections = data.length > 1;    if (multipleSelections || singlePlaceholder) {      return decorated.call(this, data);    }    this.clear();    var $placeholder = this.selectionContainer();    $placeholder.html(this.display(this.placeholder));    $placeholder.addClass('placeholder').removeClass('choice');    this.$selection.find('.rendered-selection').append($placeholder);  };  return Placeholder;});define('select2/translation',[], function () {  function Translation (dict) {    this.dict = dict || {};  }  Translation.prototype.all = function () {    return this.dict;  };  Translation.prototype.get = function (key) {    return this.dict[key];  };  Translation.prototype.extend = function (translation) {    this.dict = $.extend({}, translation.all(), this.dict);  };  // Static functions  Translation._cache = {};  Translation.loadPath = function (path) {    if (!(path in Translation._cache)) {      var translations = require(path);      Translation._cache[path] = translations;    }    return new Translation(Translation._cache[path]);  };  return Translation;});define('select2/data/base',[  '../utils'], function (Utils) {  function BaseAdapter ($element, options) {    BaseAdapter.__super__.constructor.call(this);  }  Utils.Extend(BaseAdapter, Utils.Observable);  BaseAdapter.prototype.current = function (callback) {    throw new Error('The `current` method must be defined in child classes.');  };  BaseAdapter.prototype.query = function (params, callback) {    throw new Error('The `query` method must be defined in child classes.');  };  BaseAdapter.prototype.bind = function (container, $container) {    // Can be implemented in subclasses  };  BaseAdapter.prototype.generateResultId = function (container, data) {    var id = container.id + '-result-';    id += Utils.generateChars(4);    if (data.id != null) {      id += '-' + data.id.toString();    } else {      id += '-' + Utils.generateChars(4);    }    return id;  };  return BaseAdapter;});define('select2/data/select',[  './base',  '../utils',  'jquery'], function (BaseAdapter, Utils, $) {  function SelectAdapter ($element, options) {    this.$element = $element;    this.options = options;    SelectAdapter.__super__.constructor.call(this);  }  Utils.Extend(SelectAdapter, BaseAdapter);  SelectAdapter.prototype.current = function (callback) {    var data = [];    var self = this;    this.$element.find(':selected').each(function () {      var $option = $(this);      var option = self.item($option);      data.push(option);    });    callback(data);  };  SelectAdapter.prototype.select = function (data) {    var self = this;    if (this.$element.prop('multiple')) {      this.current(function (currentData) {        var val = [];        data = [data];        data.push.apply(data, currentData);        for (var d = 0; d < data.length; d++) {          id = data[d].id;          if (val.indexOf(id) === -1) {            val.push(id);          }        }        self.$element.val(val);        self.$element.trigger('change');      });    } else {      var val = data.id;      this.$element.val(val);      this.$element.trigger('change');    }  };  SelectAdapter.prototype.unselect = function (data) {    var self = this;    if (!this.$element.prop('multiple')) {      return;    }    this.current(function (currentData) {      var val = [];      for (var d = 0; d < currentData.length; d++) {        id = currentData[d].id;        if (id !== data.id && val.indexOf(id) === -1) {          val.push(id);        }      }      self.$element.val(val);      self.$element.trigger('change');    });  };  SelectAdapter.prototype.bind = function (container, $container) {    var self = this;    this.container = container;    container.on('select', function (params) {      self.select(params.data);    });    container.on('unselect', function (params) {      self.unselect(params.data);    });  };  SelectAdapter.prototype.query = function (params, callback) {    var data = [];    var self = this;    var $options = this.$element.children();    $options.each(function () {      var $option = $(this);      if (!$option.is('option') && !$option.is('optgroup')) {        return;      }      var option = self.item($option);      var matches = self.matches(params, option);      if (matches !== null) {        data.push(matches);      }    });    callback(data);  };  SelectAdapter.prototype.option = function (data) {    var $option = $('<option></option>');    $option.text(data.text);    $option.val(data.id);    $option.prop('disabled', data.disabled || false);    // Get any automatically generated data values    var detectedData = this.item($option);    // Merge it with the already present data    var combinedData = $.extend({}, data, detectedData);    // Override the option's data with the combined data    $option.data('data', combinedData);    return $option;  };  SelectAdapter.prototype.item = function ($option) {    var data = $option.data('data');    // If the data has already be generated, use it    if (data == null) {      if ($option.is('option')) {        data = {          id: $option.val(),          text: $option.html(),          disabled: $option.prop('disabled')        };      } else if ($option.is('optgroup')) {        data = {          text: $option.attr('label'),          children: []        };        var $children = $option.children('option');        var children = [];        for (var c = 0; c < $children.length; c++) {          var $child = $($children[c]);          var child = this.item($child);          children.push(child);        }        data.children = children;      }      if (data.id && this.container != null) {        data._resultId = this.generateResultId(this.container, data);      }      $option.data('data', data);    }    return data;  };  SelectAdapter.prototype.matches = function (params, data) {    var matcher = this.options.get('matcher');    return matcher(params, data);  };  return SelectAdapter;});define('select2/data/array',[  './select',  '../utils',  'jquery'], function (SelectAdapter, Utils, $) {  function ArrayAdapter ($element, options) {    this.data = options.get('data');    ArrayAdapter.__super__.constructor.call(this, $element, options);  }  Utils.Extend(ArrayAdapter, SelectAdapter);  ArrayAdapter.prototype.select = function (data) {    var self = this;    this.$element.find('option').each(function () {      var $option = $(this);      var option = self.item($option);      if (option.id == data.id.toString()) {        $option.remove();      }    });    var $option = this.option(data);    this.$element.append($option);    ArrayAdapter.__super__.select.call(this, data);  };  ArrayAdapter.prototype.query = function (params, callback) {    var matches = [];    var self = this;    $.each(this.data, function () {      var option = this;      if (self.matches(params, option)) {        matches.push(option);      }    });    callback(matches);  };  return ArrayAdapter;});define('select2/data/ajax',[  './array',  '../utils',  'jquery'], function (ArrayAdapter, Utils, $) {  function AjaxAdapter ($element, options) {    this.ajaxOptions = options.get('ajax');    if (this.ajaxOptions.processResults != null) {      this.processResults = this.ajaxOptions.processResults;    }    ArrayAdapter.__super__.constructor.call(this, $element, options);  }  Utils.Extend(AjaxAdapter, ArrayAdapter);  AjaxAdapter.prototype.processResults = function (results) {    return results;  };  AjaxAdapter.prototype.query = function (params, callback) {    var matches = [];    var self = this;    var options = $.extend({      type: 'GET'    }, this.ajaxOptions);    if (typeof options.url === 'function') {      options.url = options.url(params);    }    if (typeof options.data === 'function') {      options.data = options.data(params);    }    function request () {      var $request = $.ajax(options);      $request.success(function (data) {        var results = self.processResults(data);        callback(results);      });    }    if (this.ajaxOptions.delay && params.term !== '') {      if (this._queryTimeout) {        window.clearTimeout(this._queryTimeout);      }      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);    } else {      request();    }  };  return AjaxAdapter;});define('select2/data/tags',[], function () {  function Tags (decorated, $element, options) {    var tags = options.get('tags');    decorated.call(this, $element, options);  }  Tags.prototype.query = function (decorated, params, callback) {    var self = this;    this._removeOldTags();    if (params.term == null || params.term === '' || params.page != null) {      decorated.call(this, params, callback);      return;    }    function wrapper (data, child) {      for (var i = 0; i < data.length; i++) {        var option = data[i];        var checkChildren = (          option.children != null && !wrapper(option.children, true)        );        var checkText = option.text === params.term;        if (checkText || checkChildren) {          if (child) {            return false;          }          callback(data);          return;        }      }      if (child) {        return true;      }      var tag = self.createTag(params);      var $option = self.option(tag);      $option.attr('data-select2-tag', true);      self.$element.append($option);      self.insertTag(data, tag);      callback(data);    }    decorated.call(this, params, wrapper);  };  Tags.prototype.createTag = function (decorated, params) {    return {      id: params.term,      text: params.term    };  };  Tags.prototype.insertTag = function (_, data, tag) {    data.unshift(tag);  };  Tags.prototype._removeOldTags = function (_) {    var tag = this._lastTag;    var $options = this.$element.find('option[data-select2-tag]');    $options.each(function () {      if (this.selected) {        return;      }      $(this).remove();    });  };  return Tags;});define('select2/data/minimumInputLength',[], function () {  function MinimumInputLength (decorated, $e, options) {    this.minimumInputLength = options.get('minimumInputLength');    decorated.call(this, $e, options);  }  MinimumInputLength.prototype.query = function (decorated, params, callback) {    params.term = params.term || '';    if (params.term.length < this.minimumInputLength) {      this.trigger('results:message', {        message: 'inputTooShort',        args: {          minimum: this.minimumInputLength,          input: params.term,          params: params        }      });      return;    }    decorated.call(this, params, callback);  };  return MinimumInputLength;});define('select2/dropdown',[  './utils'], function (Utils) {  function Dropdown ($element, options) {    this.$element = $element;  }  Utils.Extend(Dropdown, Utils.Observable);  Dropdown.prototype.render = function () {    var $dropdown = $(      '<span class="dropdown">' +        '<span class="results"></span>' +      '</span>'    );    return $dropdown;  };  Dropdown.prototype.bind = function (container, $container) {    // Can be implemented in subclasses  };  return Dropdown;});define('select2/dropdown/search',[  '../utils'], function (Utils) {  function Search () { }  Search.prototype.render = function (decorated) {    var $rendered = decorated.call(this);    var $search = $(      '<span class="search">' +        '<input type="search" name="search" tabindex="-1" role="textbox" />' +      '</span>'    );    this.$searchContainer = $search;    this.$search = $search.find('input');    $rendered.prepend($search);    return $rendered;  };  Search.prototype.bind = function (decorated, container, $container) {    var self = this;    decorated.call(this, container, $container);    this.$search.on('keydown', function (evt) {      self.trigger('keypress', evt);      self._keyUpPrevented = evt.isDefaultPrevented();    });    this.$search.on('keyup', function (evt) {      self.handleSearch(evt);    });    container.on('open', function () {      self.$search.attr('tabindex', 0);    });    container.on('close', function () {      self.$search.attr('tabindex', -1);      self.$search.val('');    });    container.on('results:all', function (params) {      if (params.query.term == null || params.query.term === '') {        var showSearch = self.showSearch(params);        if (showSearch) {          self.$searchContainer.show();        } else {          self.$searchContainer.hide();        }      }    });  };  Search.prototype.handleSearch = function (evt) {    if (!this._keyUpPrevented) {      var input = this.$search.val();      this.trigger('query', {        term: input      });    }    this._keyUpPrevented = false;  };  Search.prototype.showSearch = function (_, params) {    return true;  };  return Search;});define('select2/dropdown/hidePlaceholder',[], function () {  function HidePlaceholder (decorated, $element, options, dataAdapter) {    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));    decorated.call(this, $element, options, dataAdapter);  }  HidePlaceholder.prototype.append = function (decorated, data) {    data = this.removePlaceholder(data);    decorated.call(this, data);  };  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {    if (typeof placeholder === 'string') {      placeholder = {        id: '',        text: placeholder      };    }    return placeholder;  };  HidePlaceholder.prototype.removePlaceholder = function (_, data) {    var modifiedData = data.slice(0);    for (var d = data.length - 1; d >= 0; d--) {      var item = data[d];      if (this.placeholder.id === item.id) {        modifiedData.splice(d, 1);      }    }    return modifiedData;  };  return HidePlaceholder;});define('select2/dropdown/infiniteScroll',[  'jquery'], function ($) {  function InfiniteScroll (decorated, $element, options, dataAdapter) {    this.lastParams = {};    decorated.call(this, $element, options, dataAdapter);    this.$loadingMore = this.createLoadingMore();    this.loading = false;  }  InfiniteScroll.prototype.append = function (decorated, data) {    this.$loadingMore.remove();    decorated.call(this, data);    if (data.length > 0) {      this.$results.append(this.$loadingMore);    }    this.loading = false;  };  InfiniteScroll.prototype.bind = function (decorated, container, $container) {    var self = this;    decorated.call(this, container, $container);    container.on('query', function (params) {      self.lastParams = params;      self.loading = true;    });    container.on('query:append', function (params) {      self.lastParams = params;      self.loading = true;    });    this.$results.on('scroll', function () {      var loadMoreVisible = $.contains(        document.documentElement,        self.$loadingMore[0]      );      if (self.loading || !loadMoreVisible) {        return;      }      var currentOffset = self.$results.offset().top +        self.$results.outerHeight(false);      var loadingMoreOffset = self.$loadingMore.offset().top +        self.$loadingMore.outerHeight(false);      if (currentOffset + 50 >= loadingMoreOffset) {        self.loadMore();      }    });  };  InfiniteScroll.prototype.loadMore = function () {    this.loading = true;    var params = $.extend({}, {page: 1}, this.lastParams);    params.page++;    this.trigger('query:append', params);  };  InfiniteScroll.prototype.createLoadingMore = function () {    var $option = $(      '<li class="option load-more" role="treeitem"></li>'    );    var message = this.options.get('translations').get('loadingMore');    $option.html(message(this.lastParams));    return $option;  };  return InfiniteScroll;});define('select2/i18n/en',[],function () {  return {    inputTooShort: function (args) {      var remainingChars = args.minimum - args.input.length;      var message = 'Please enter ' + remainingChars + ' or more character';      if (remainingChars != 1) {        message += 's';      }      return message;    },    loadingMore: function () {      return 'Loading more results…';    },    noResults: function () {      return 'No results found';    }  };});define('select2/compat/matcher',[], function () {  function oldMatcher (matcher) {    function wrappedMatcher (params, data) {      var match = $.extend(true, {}, data);      if (params.term == null || $.trim(params.term) === '') {        return match;      }      if (data.children) {        for (var c = data.children.length - 1; c >= 0; c--) {          var child = data.children[c];          // Check if the child object matches          // The old matcher returned a boolean true or false          var doesMatch = matcher(params.term, child.text, child);          // If the child didn't match, pop it off          if (!doesMatch) {            match.children.splice(c, 1);          }        }        if (match.children.length > 0) {          return match;        }      }      if (matcher(params.term, data.text, data)) {        return match;      }      return null;    }    return wrappedMatcher;  }  return oldMatcher;});define('select2/defaults',[  'jquery',  './results',  './selection/single',  './selection/multiple',  './selection/placeholder',  './utils',  './translation',  './data/select',  './data/array',  './data/ajax',  './data/tags',  './data/minimumInputLength',  './dropdown',  './dropdown/search',  './dropdown/hidePlaceholder',  './dropdown/infiniteScroll',  './i18n/en',  './compat/matcher'], function ($, ResultsList,             SingleSelection, MultipleSelection, Placeholder,             Utils, Translation,             SelectData, ArrayData, AjaxData, Tags, MinimumInputLength,             Dropdown, Search, HidePlaceholder, InfiniteScroll,             EnglishTranslation) {  function Defaults () {    this.reset();  }  Defaults.prototype.apply = function (options) {    options = $.extend({}, this.defaults, options);    if (options.dataAdapter == null) {      if (options.ajax != null) {        options.dataAdapter = AjaxData;      } else if (options.data != null) {        options.dataAdapter = ArrayData;      } else {        options.dataAdapter = SelectData;      }    }    if (options.minimumInputLength > 0) {      options.dataAdapter = Utils.Decorate(        options.dataAdapter,        MinimumInputLength      );    }    if (options.tags != null) {      options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);    }    if (options.resultsAdapter == null) {      options.resultsAdapter = ResultsList;      if (options.ajax != null) {        options.resultsAdapter = Utils.Decorate(          options.resultsAdapter,          InfiniteScroll        );      }      if (options.placeholder != null) {        options.resultsAdapter = Utils.Decorate(          options.resultsAdapter,          HidePlaceholder        );      }    }    if (options.dropdownAdapter == null) {      var SearchableDropdown = Utils.Decorate(Dropdown, Search);      options.dropdownAdapter = SearchableDropdown;    }    if (options.selectionAdapter == null) {      if (options.multiple) {        options.selectionAdapter = MultipleSelection;      } else {        options.selectionAdapter = SingleSelection;      }      // Add the placeholder mixin if a placeholder was specified      if (options.placeholder != null) {        options.selectionAdapter = Utils.Decorate(          options.selectionAdapter,          Placeholder        );      }    }    if (typeof options.language === 'string') {      options.language = [options.language];    }    if ($.isArray(options.language)) {      var languages = new Translation();      var languageNames = options.language.concat(this.defaults.language);      for (var l = 0; l < languageNames.length; l++) {        var name = languageNames[l];        var language = {};        try {          // Try to load it with the original name          language = Translation.loadPath(name);        } catch (e) {          // If we couldn't load it, check if it wasn't the full path          name = 'select2/i18n/' + name;          language = Translation.loadPath(name);        }        languages.extend(language);      }      options.translations = languages;    } else {      options.translations = new Translations(options.language);    }    return options;  };  Defaults.prototype.reset = function () {    function matcher (params, data) {      var match = $.extend(true, {}, data);      if (data.children) {        for (var c = data.children.length - 1; c >= 0; c--) {          var child = data.children[c];          var matches = matcher(params, child);          // If there wasn't a match, remove the object in the array          if (matches === null) {            match.children.splice(c, 1);          }        }        if (match.children.length > 0) {          return match;        }      }      if ($.trim(params.term) === '') {        return match;      }      if (data.text.toUpperCase().indexOf(params.term.toUpperCase()) > -1) {        return match;      }      return null;    }    this.defaults = {      language: ['select2/i18n/en'],      matcher: matcher,      minimumInputLength: 0,      templateResult: function (result) {        return result.text;      },      templateSelection: function (selection) {        return selection.text;      }    };  };  var defaults = new Defaults();  return defaults;});define('select2/options',[  './defaults'], function (Defaults) {  function Options (options, $element) {    this.options = options;    if ($element != null) {      this.fromElement($element);    }    this.options = Defaults.apply(this.options);  }  Options.prototype.fromElement = function ($e) {    if (this.options.multiple == null) {      this.options.multiple = $e.prop('multiple');    }    return this;  };  Options.prototype.get = function (key) {    return this.options[key];  };  Options.prototype.set = function (key, val) {    this.options[key] = val;  };  return Options;});define('select2/core',[  'jquery',  './options',  './utils',  './keys'], function ($, Options, Utils, KEYS) {  var Select2 = function ($element, options) {    this.$element = $element;    this.id = this._generateId($element);    options = options || {};    this.options = new Options(options, $element);    Select2.__super__.constructor.call(this);    // Set up containers and adapters    var DataAdapter = this.options.get('dataAdapter');    this.data = new DataAdapter($element, this.options);    var $container = this.render();    this._placeContainer($container);    var SelectionAdapter = this.options.get('selectionAdapter');    this.selection = new SelectionAdapter($element, this.options);    var $selection = this.selection.render();    this._placeSelection($selection);    var DropdownAdapter = this.options.get('dropdownAdapter');    this.dropdown = new DropdownAdapter($element, this.options);    var $dropdown = this.dropdown.render();    this._placeDropdown($dropdown);    var ResultsAdapter = this.options.get('resultsAdapter');    this.results = new ResultsAdapter($element, this.options, this.data);    var $results = this.results.render();    this._placeResults($results);    // Bind events    var self = this;    // Bind the container to all of the adapters    this._bindAdapters();    // Register any DOM event handlers    this._registerDomEvents();    // Register any internal event handlers    this._registerDataEvents();    this._registerSelectionEvents();    this._registerDropdownEvents();    this._registerResultsEvents();    this._registerEvents();    // Set the initial state    this.data.current(function (initialData) {      self.trigger('selection:update', {        data: initialData      });    });    // Hide the original select    $element.hide();    $element.attr('tabindex', '-1');    $element.data('select2', this);  };  Utils.Extend(Select2, Utils.Observable);  Select2.prototype._generateId = function ($element) {    var id = '';    if ($element.attr('id') != null) {      id = $element.attr('id');    } else if ($element.attr('name') != null) {      id = $element.attr('name') + '-' + Utils.generateChars(2);    } else {      id = Utils.generateChars(4);    }    id = 'select2-' + id;    return id;  };  Select2.prototype._placeContainer = function ($container) {    $container.insertAfter(this.$element);    $container.width(this.$element.outerWidth(false));  };  Select2.prototype._placeSelection = function ($selection) {    var $selectionContainer = this.$container.find('.selection');    $selectionContainer.append($selection);  };  Select2.prototype._placeDropdown = function ($dropdown) {    this.$dropdown = $dropdown;    var $dropdownContainer = this.$container.find('.dropdown-wrapper');    $dropdownContainer.append($dropdown);  };  Select2.prototype._placeResults = function ($results) {    var $resultsContainer = this.$dropdown.find('.results');    $resultsContainer.append($results);  };  Select2.prototype._bindAdapters = function () {    this.data.bind(this, this.$container);    this.selection.bind(this, this.$container);    this.dropdown.bind(this, this.$container);    this.results.bind(this, this.$container);  };  Select2.prototype._registerDomEvents = function () {    var self = this;    this.$element.on('change', function () {      self.data.current(function (data) {        self.trigger('selection:update', {          data: data        });      });    });  };  Select2.prototype._registerDataEvents = function () {    var self = this;    this.data.on('results:message', function (params) {      self.trigger('results:message', params);    });  };  Select2.prototype._registerSelectionEvents = function () {    var self = this;    this.selection.on('open', function () {      self.open();    });    this.selection.on('close', function () {      self.close();    });    this.selection.on('toggle', function () {      self.toggleDropdown();    });    this.selection.on('results:select', function () {      self.trigger('results:select');    });    this.selection.on('results:previous', function () {      self.trigger('results:previous');    });    this.selection.on('results:next', function () {      self.trigger('results:next');    });    this.selection.on('unselected', function (params) {      self.trigger('unselect', params);      self.close();    });    this.selection.on('keypress', function (e) {      self.trigger('keypress', e);    });  };  Select2.prototype._registerDropdownEvents = function () {    var self = this;    this.dropdown.on('query', function (params) {      self.trigger('query', params);    });    this.dropdown.on('keypress', function (e) {      self.trigger('keypress', e);    });  };  Select2.prototype._registerResultsEvents = function () {    var self = this;    this.results.on('query:append', function (params) {      self.trigger('query:append', params);    });    this.results.on('selected', function (params) {      self.trigger('select', params);      self.close();    });    this.results.on('unselected', function (params) {      self.trigger('unselect', params);      self.close();    });    this.results.on('results:focus', function (params) {      self.trigger('results:focus', params);    });  };  Select2.prototype._registerEvents = function () {    var self = this;    this.on('open', function () {      self.$container.addClass('open');    });    this.on('close', function () {      self.$container.removeClass('open');    });    this.on('query', function (params) {      this.data.query(params, function (data) {        self.trigger('results:all', {          data: data,          query: params        });      });    });    this.on('query:append', function (params) {      this.data.query(params, function (data) {        self.trigger('results:append', {          data: data,          query: params        });      });    });    this.on('keypress', function (evt) {      var key = evt.which;      if (self.isOpen()) {        if (key === KEYS.ENTER) {          self.trigger('results:select');          evt.preventDefault();        } else if (key === KEYS.UP) {          self.trigger('results:previous');          evt.preventDefault();        } else if (key === KEYS.DOWN) {          self.trigger('results:next');          evt.preventDefault();        } else if (key === KEYS.ESC || key === KEYS.TAB) {          self.close();          evt.preventDefault();        }      } else {        if (key === KEYS.ENTER || key === KEYS.SPACE) {          self.open();          evt.preventDefault();        }      }    });  };  Select2.prototype.toggleDropdown = function () {    if (this.isOpen()) {      this.close();    } else {      this.open();    }  };  Select2.prototype.open = function () {    if (this.isOpen()) {      return;    }    this.trigger('query', {});    this.trigger('open');  };  Select2.prototype.close = function () {    if (!this.isOpen()) {      return;    }    this.trigger('close');  };  Select2.prototype.isOpen = function () {    return this.$container.hasClass('open');  };  Select2.prototype.render = function () {    var $container = $(      '<span class="select2 select2-container select2-theme-default">' +        '<span class="selection"></span>' +        '<span class="dropdown-wrapper" aria-hidden="true"></span>' +      '</span>'    );    this.$container = $container;    $container.data('element', this.$element);    return $container;  };  return Select2;});define('jquery.select2',[  'jquery',  'select2/core'], function ($, Select2) {  if ($.fn.select2 == null) {    $.fn.select2 = function (options) {      options = options || {};      if (typeof options === 'object') {        this.each(function () {          var instance = new Select2($(this), options);        });      } else if (typeof options === 'string') {        var instance = this.data('select2');        var args = Array.prototype.slice.call(arguments, 1);        instance[options](args);      } else {        throw new Error('Invalid arguments for Select2: ' + options);      }    };  }  return Select2;});require('jquery.select2'); $.fn.select2.amd = { define: define, require: require };}());
 |