| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259 | /** * @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 methodName = superMethods[m];        DecoratedClass.prototype[methodName] = SuperClass.prototype[methodName];    }    for (var m = 0; m < decoratedMethods.length; m++) {      var methodName = decoratedMethods[m];      function calledMethod (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);        }      }      DecoratedClass.prototype[methodName] = calledMethod(methodName);    }    return DecoratedClass;  }  var Observable = function () {    this.listeners = {};  };  Observable.prototype.on = function (event, callback) {    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;    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;  return Utils;});define('select2/data/select',[  '../utils',  'jquery'], function (Utils, $) {  function SelectAdapter ($element, options) {    this.$element = $element;    SelectAdapter.__super__.constructor.call(this);  }  Utils.Extend(SelectAdapter, Utils.Observable);  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;    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;    this.$element.find("option").each(function () {      var $option = $(this);      var option = self.item($option);      if (self.matches(params, option)) {        data.push(option);      }    });    callback(data);  };  SelectAdapter.prototype.item = function ($option) {    var data = $option.data("data");    // If the data has already be generated, use it    if (data == null) {      data = {        id: $option.val(),        text: $option.html()      };      $option.data("data", data);    }    return data;  };  SelectAdapter.prototype.matches = function (params, data) {    if ($.trim(params.term) == "") {      return true;    }    if (data.text.indexOf(params.term) > -1) {      return true;    }    return false;  }  return SelectAdapter;});define('select2/results',[  './utils'], function (Utils) {  function Results ($element, options, dataAdapter) {    this.$element = $element;    this.data = dataAdapter;    Results.__super__.constructor.call(this);  }  Utils.Extend(Results, Utils.Observable);  Results.prototype.render = function () {    var $results = $(      '<ul class="options"></ul>'    );    this.$results = $results;    return $results;  };  Results.prototype.clear = function () {    this.$results.empty();  };  Results.prototype.append = function (data) {    var $options = [];    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.setClasses = function () {    var self = this;    this.data.current(function (selected) {      selected = $.map(selected, function (s) { return s.id; });      self.$results.find(".option.selected").removeClass("selected");      var $options = self.$results.find(".option");      $options.each(function () {        var $option = $(this);        var item = $option.data("data");        if (selected.indexOf(item.id) > -1) {          $option.addClass("selected");        }      });    });  };  Results.prototype.option = function (data) {    var $option = $(      '<li class="option"></li>'    );    $option.html(data.text);    $option.data("data", data);    return $option;  }  Results.prototype.bind = function (container, $container) {    var self = this;    this.on("results:all", function (data) {      self.clear();      self.append(data);      self.setClasses();    });    this.on("results:append", function (data) {      self.append(data);      self.setClasses();    })    this.$results.on("mouseup", ".option", function (evt) {      var $this = $(this);      var data = $this.data("data");      if ($this.hasClass("selected")) {        self.trigger("unselected", {          originalEvent: evt,          data: data        })        self.setClasses();        return;      }      self.trigger("selected", {        originalEvent: evt,        data: data      });      self.setClasses();    });    this.$results.on("mouseenter", ".option", function (evt) {      self.$results.find(".option.highlighted").removeClass("highlighted");      $(this).addClass("highlighted");    });    this.$results.on("mouseleave", ".option", function (evt) {      $(this).removeClass("highlighted");    });  };  return Results;});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="">' +        '<span class="results"></span>' +      '</span>'    );    return $dropdown;  }  return Dropdown;});define('select2/selection/single',[  '../utils'], function (Utils) {  function SingleSelection ($element, options) {    this.$element = $element;    this.options = options;    SingleSelection.__super__.constructor.call(this);  }  Utils.Extend(SingleSelection, Utils.Observable);  SingleSelection.prototype.render = function () {    var $selection = $(      '<span class="single-select">' +        '<span class="rendered-selection"></span>' +      '</span>'    );    this.$selection = $selection;    return $selection;  }  SingleSelection.prototype.bind = function (container, $container) {    var self = this;    this.$selection.on('mousedown', function (evt) {      // Only respond to left clicks      if (evt.which !== 1) {        return;      }      self.trigger("toggle", {        originalEvent: evt      });    });    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) {    return data.text;  }  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',[  '../utils'], function (Utils) {  function MultipleSelection ($element, options) {    this.$element = $element;    this.options = options;    MultipleSelection.__super__.constructor.call(this);  }  Utils.Extend(MultipleSelection, Utils.Observable);  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;    this.$selection.on('click', function (evt) {      self.trigger("toggle", {        originalEvent: evt      });    });    container.on("selection:update", function (params) {      self.update(params.data);    });  }  MultipleSelection.prototype.clear = function () {    this.$selection.find(".rendered-selection").empty();  }  MultipleSelection.prototype.display = function (data) {    return data.text;  }  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 = $('<ul class="choice"></ul>');      $selection.text(formatted);      $selection.data("data", data);      $selections.push($selection);    }    this.$selection.find(".rendered-selection").append($selections);  }  return MultipleSelection;});define('select2/data/array',[  "./select",  "../utils"], function (SelectAdapter, Utils) {  function ArrayAdapter ($element, options) {    this.data = options.options.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) {        $option.remove();      }    });    var $option = this.option(data);    this.$element.append($option);    ArrayAdapter.__super__.select.call(this, data);  }  ArrayAdapter.prototype.option = function (data) {    var $option = $("<option></option>");    $option.text(data.text);    $option.val(data.id);    $option.data("data", data);    return $option;  }  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.options.ajax;    this.processResults = this.ajaxOptions.processResults ||      function (results) {        return results      };    ArrayAdapter.__super__.constructor.call(this, $element, options);  }  Utils.Extend(AjaxAdapter, ArrayAdapter);  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);    }    var $request = $.ajax(options);    $request.success(function (data) {      var results = self.processResults(data);      console.log(results)      callback(results);    });  };  return AjaxAdapter;});define('select2/options',[  './data/select',  './results',  './dropdown',  './selection/single',  './selection/multiple',  './data/array',  './data/ajax'], function (SelectData, ResultsList, Dropdown, SingleSelection,             MultipleSelection) {  function Options (options) {    this.options = options;    this.dataAdapter = options.dataAdapter || SelectData;    this.resultsAdapter = ResultsList;    this.dropdownAdapter = options.dropdownAdapter || Dropdown;    this.selectionAdapter = options.selectionAdapter;    if (this.selectionAdapter == null) {      if (this.options.multiple) {        this.selectionAdapter = MultipleSelection;      } else {        this.selectionAdapter = SingleSelection;      }    }  }  return Options;});define('select2/core',[  'jquery',  './options',  './utils'], function ($, Options, Utils) {  var Select2 = function ($element, options) {    this.$element = $element;    options = options || {};    options.multiple = options.multiple || $element.prop("multiple");    this.options = new Options(options);    Select2.__super__.constructor.call(this);    // Set up containers and adapters    this.data = new this.options.dataAdapter($element, this.options);    var $container = this.render();    this.$container = $container;    $container.insertAfter(this.$element);    $container.width($element.width());    this.selection = new this.options.selectionAdapter($element, this.options);    var $selectionContainer = $container.find(".selection");    var $selection = this.selection.render();    $selectionContainer.append($selection);    this.dropdown = new this.options.dropdownAdapter($element, this.options);    var $dropdownContainer = $container.find(".dropdown");    var $dropdown = this.dropdown.render();    $dropdownContainer.append($dropdown);    this.results = new this.options.resultsAdapter($element, this.options, this.data);    var $resultsContainer = $dropdown.find(".results");    var $results = this.results.render();    $resultsContainer.append($results);    // Bind events    var self = this;    this.data.bind(this, $container);    this.selection.bind(this, $container);    this.results.bind(this, $container);    this.$element.on("change", function () {      self.data.current(function (data) {        self.trigger("selection:update", {          data: data        });      });    });    this.selection.on("toggle", function () {      self.toggleDropdown();    });    this.results.on("selected", function (params) {      self.trigger("select", params);      self.trigger("close");    });    this.results.on("unselected", function (params) {      self.trigger("unselect", params);      self.trigger("close");    });    this.on("open", function () {      $container.addClass("open");    });    this.on("close", function () {      $container.removeClass("open");    });    // Set the initial state    this.data.current(function (initialData) {      self.trigger("selection:update", {        data: initialData      });    });    this.data.query({}, function (data) {      self.results.trigger("results:all", data);    });    // Hide the original select    $element.hide();  };  Utils.Extend(Select2, Utils.Observable);  Select2.prototype.toggleDropdown = function () {    if (this.$container.hasClass("open")) {      this.trigger("close");    } else {      this.trigger("open");    }  }  Select2.prototype.render = function () {    var $container = $(      '<span class="select2 select2-container select2-theme-default">' +        '<span class="selection"></span>' +        '<span class="dropdown"></span>' +      '</span>'    );    return $container;  };  return Select2;});
 |