(function ($){ if (typeof $.fn.each2 == "undefined") { $.fn.extend({ each2: function (c){ var j = $([0] ), i = -1, l = _AN_Read_length("length", this); while (++i < l && (j.context = j[0] = this[i]) && c.call(j[0], i, j) !== false ); return this; } } ); } } )(jQuery); (function ($, undefined){ "use strict"; if (window.Select2 !== undefined) { return ; } var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer, lastMousePosition = { x: 0, y: 0} , $document, scrollBarDimensions, KEY = { TAB: 9, ENTER: 13, ESC: 27, SPACE: 32, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, SHIFT: 16, CTRL: 17, ALT: 18, PAGE_UP: 33, PAGE_DOWN: 34, HOME: 36, END: 35, BACKSPACE: 8, 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 ; } , isControl: function (e){ var k = e.which; switch (k){ case KEY.SHIFT: case KEY.CTRL: case KEY.ALT: return true ; } if (e.metaKey) return true ; return false ; } , isFunctionKey: function (k){ k = k.which? k.which: k; return k >= 112 && k <= 123; } } , MEASURE_SCROLLBAR_TEMPLATE = "
", DIACRITICS = { "\u24B6": "A", "\uFF21": "A", "\u00C0": "A", "\u00C1": "A", "\u00C2": "A", "\u1EA6": "A", "\u1EA4": "A", "\u1EAA": "A", "\u1EA8": "A", "\u00C3": "A", "\u0100": "A", "\u0102": "A", "\u1EB0": "A", "\u1EAE": "A", "\u1EB4": "A", "\u1EB2": "A", "\u0226": "A", "\u01E0": "A", "\u00C4": "A", "\u01DE": "A", "\u1EA2": "A", "\u00C5": "A", "\u01FA": "A", "\u01CD": "A", "\u0200": "A", "\u0202": "A", "\u1EA0": "A", "\u1EAC": "A", "\u1EB6": "A", "\u1E00": "A", "\u0104": "A", "\u023A": "A", "\u2C6F": "A", "\uA732": "AA", "\u00C6": "AE", "\u01FC": "AE", "\u01E2": "AE", "\uA734": "AO", "\uA736": "AU", "\uA738": "AV", "\uA73A": "AV", "\uA73C": "AY", "\u24B7": "B", "\uFF22": "B", "\u1E02": "B", "\u1E04": "B", "\u1E06": "B", "\u0243": "B", "\u0182": "B", "\u0181": "B", "\u24B8": "C", "\uFF23": "C", "\u0106": "C", "\u0108": "C", "\u010A": "C", "\u010C": "C", "\u00C7": "C", "\u1E08": "C", "\u0187": "C", "\u023B": "C", "\uA73E": "C", "\u24B9": "D", "\uFF24": "D", "\u1E0A": "D", "\u010E": "D", "\u1E0C": "D", "\u1E10": "D", "\u1E12": "D", "\u1E0E": "D", "\u0110": "D", "\u018B": "D", "\u018A": "D", "\u0189": "D", "\uA779": "D", "\u01F1": "DZ", "\u01C4": "DZ", "\u01F2": "Dz", "\u01C5": "Dz", "\u24BA": "E", "\uFF25": "E", "\u00C8": "E", "\u00C9": "E", "\u00CA": "E", "\u1EC0": "E", "\u1EBE": "E", "\u1EC4": "E", "\u1EC2": "E", "\u1EBC": "E", "\u0112": "E", "\u1E14": "E", "\u1E16": "E", "\u0114": "E", "\u0116": "E", "\u00CB": "E", "\u1EBA": "E", "\u011A": "E", "\u0204": "E", "\u0206": "E", "\u1EB8": "E", "\u1EC6": "E", "\u0228": "E", "\u1E1C": "E", "\u0118": "E", "\u1E18": "E", "\u1E1A": "E", "\u0190": "E", "\u018E": "E", "\u24BB": "F", "\uFF26": "F", "\u1E1E": "F", "\u0191": "F", "\uA77B": "F", "\u24BC": "G", "\uFF27": "G", "\u01F4": "G", "\u011C": "G", "\u1E20": "G", "\u011E": "G", "\u0120": "G", "\u01E6": "G", "\u0122": "G", "\u01E4": "G", "\u0193": "G", "\uA7A0": "G", "\uA77D": "G", "\uA77E": "G", "\u24BD": "H", "\uFF28": "H", "\u0124": "H", "\u1E22": "H", "\u1E26": "H", "\u021E": "H", "\u1E24": "H", "\u1E28": "H", "\u1E2A": "H", "\u0126": "H", "\u2C67": "H", "\u2C75": "H", "\uA78D": "H", "\u24BE": "I", "\uFF29": "I", "\u00CC": "I", "\u00CD": "I", "\u00CE": "I", "\u0128": "I", "\u012A": "I", "\u012C": "I", "\u0130": "I", "\u00CF": "I", "\u1E2E": "I", "\u1EC8": "I", "\u01CF": "I", "\u0208": "I", "\u020A": "I", "\u1ECA": "I", "\u012E": "I", "\u1E2C": "I", "\u0197": "I", "\u24BF": "J", "\uFF2A": "J", "\u0134": "J", "\u0248": "J", "\u24C0": "K", "\uFF2B": "K", "\u1E30": "K", "\u01E8": "K", "\u1E32": "K", "\u0136": "K", "\u1E34": "K", "\u0198": "K", "\u2C69": "K", "\uA740": "K", "\uA742": "K", "\uA744": "K", "\uA7A2": "K", "\u24C1": "L", "\uFF2C": "L", "\u013F": "L", "\u0139": "L", "\u013D": "L", "\u1E36": "L", "\u1E38": "L", "\u013B": "L", "\u1E3C": "L", "\u1E3A": "L", "\u0141": "L", "\u023D": "L", "\u2C62": "L", "\u2C60": "L", "\uA748": "L", "\uA746": "L", "\uA780": "L", "\u01C7": "LJ", "\u01C8": "Lj", "\u24C2": "M", "\uFF2D": "M", "\u1E3E": "M", "\u1E40": "M", "\u1E42": "M", "\u2C6E": "M", "\u019C": "M", "\u24C3": "N", "\uFF2E": "N", "\u01F8": "N", "\u0143": "N", "\u00D1": "N", "\u1E44": "N", "\u0147": "N", "\u1E46": "N", "\u0145": "N", "\u1E4A": "N", "\u1E48": "N", "\u0220": "N", "\u019D": "N", "\uA790": "N", "\uA7A4": "N", "\u01CA": "NJ", "\u01CB": "Nj", "\u24C4": "O", "\uFF2F": "O", "\u00D2": "O", "\u00D3": "O", "\u00D4": "O", "\u1ED2": "O", "\u1ED0": "O", "\u1ED6": "O", "\u1ED4": "O", "\u00D5": "O", "\u1E4C": "O", "\u022C": "O", "\u1E4E": "O", "\u014C": "O", "\u1E50": "O", "\u1E52": "O", "\u014E": "O", "\u022E": "O", "\u0230": "O", "\u00D6": "O", "\u022A": "O", "\u1ECE": "O", "\u0150": "O", "\u01D1": "O", "\u020C": "O", "\u020E": "O", "\u01A0": "O", "\u1EDC": "O", "\u1EDA": "O", "\u1EE0": "O", "\u1EDE": "O", "\u1EE2": "O", "\u1ECC": "O", "\u1ED8": "O", "\u01EA": "O", "\u01EC": "O", "\u00D8": "O", "\u01FE": "O", "\u0186": "O", "\u019F": "O", "\uA74A": "O", "\uA74C": "O", "\u01A2": "OI", "\uA74E": "OO", "\u0222": "OU", "\u24C5": "P", "\uFF30": "P", "\u1E54": "P", "\u1E56": "P", "\u01A4": "P", "\u2C63": "P", "\uA750": "P", "\uA752": "P", "\uA754": "P", "\u24C6": "Q", "\uFF31": "Q", "\uA756": "Q", "\uA758": "Q", "\u024A": "Q", "\u24C7": "R", "\uFF32": "R", "\u0154": "R", "\u1E58": "R", "\u0158": "R", "\u0210": "R", "\u0212": "R", "\u1E5A": "R", "\u1E5C": "R", "\u0156": "R", "\u1E5E": "R", "\u024C": "R", "\u2C64": "R", "\uA75A": "R", "\uA7A6": "R", "\uA782": "R", "\u24C8": "S", "\uFF33": "S", "\u1E9E": "S", "\u015A": "S", "\u1E64": "S", "\u015C": "S", "\u1E60": "S", "\u0160": "S", "\u1E66": "S", "\u1E62": "S", "\u1E68": "S", "\u0218": "S", "\u015E": "S", "\u2C7E": "S", "\uA7A8": "S", "\uA784": "S", "\u24C9": "T", "\uFF34": "T", "\u1E6A": "T", "\u0164": "T", "\u1E6C": "T", "\u021A": "T", "\u0162": "T", "\u1E70": "T", "\u1E6E": "T", "\u0166": "T", "\u01AC": "T", "\u01AE": "T", "\u023E": "T", "\uA786": "T", "\uA728": "TZ", "\u24CA": "U", "\uFF35": "U", "\u00D9": "U", "\u00DA": "U", "\u00DB": "U", "\u0168": "U", "\u1E78": "U", "\u016A": "U", "\u1E7A": "U", "\u016C": "U", "\u00DC": "U", "\u01DB": "U", "\u01D7": "U", "\u01D5": "U", "\u01D9": "U", "\u1EE6": "U", "\u016E": "U", "\u0170": "U", "\u01D3": "U", "\u0214": "U", "\u0216": "U", "\u01AF": "U", "\u1EEA": "U", "\u1EE8": "U", "\u1EEE": "U", "\u1EEC": "U", "\u1EF0": "U", "\u1EE4": "U", "\u1E72": "U", "\u0172": "U", "\u1E76": "U", "\u1E74": "U", "\u0244": "U", "\u24CB": "V", "\uFF36": "V", "\u1E7C": "V", "\u1E7E": "V", "\u01B2": "V", "\uA75E": "V", "\u0245": "V", "\uA760": "VY", "\u24CC": "W", "\uFF37": "W", "\u1E80": "W", "\u1E82": "W", "\u0174": "W", "\u1E86": "W", "\u1E84": "W", "\u1E88": "W", "\u2C72": "W", "\u24CD": "X", "\uFF38": "X", "\u1E8A": "X", "\u1E8C": "X", "\u24CE": "Y", "\uFF39": "Y", "\u1EF2": "Y", "\u00DD": "Y", "\u0176": "Y", "\u1EF8": "Y", "\u0232": "Y", "\u1E8E": "Y", "\u0178": "Y", "\u1EF6": "Y", "\u1EF4": "Y", "\u01B3": "Y", "\u024E": "Y", "\u1EFE": "Y", "\u24CF": "Z", "\uFF3A": "Z", "\u0179": "Z", "\u1E90": "Z", "\u017B": "Z", "\u017D": "Z", "\u1E92": "Z", "\u1E94": "Z", "\u01B5": "Z", "\u0224": "Z", "\u2C7F": "Z", "\u2C6B": "Z", "\uA762": "Z", "\u24D0": "a", "\uFF41": "a", "\u1E9A": "a", "\u00E0": "a", "\u00E1": "a", "\u00E2": "a", "\u1EA7": "a", "\u1EA5": "a", "\u1EAB": "a", "\u1EA9": "a", "\u00E3": "a", "\u0101": "a", "\u0103": "a", "\u1EB1": "a", "\u1EAF": "a", "\u1EB5": "a", "\u1EB3": "a", "\u0227": "a", "\u01E1": "a", "\u00E4": "a", "\u01DF": "a", "\u1EA3": "a", "\u00E5": "a", "\u01FB": "a", "\u01CE": "a", "\u0201": "a", "\u0203": "a", "\u1EA1": "a", "\u1EAD": "a", "\u1EB7": "a", "\u1E01": "a", "\u0105": "a", "\u2C65": "a", "\u0250": "a", "\uA733": "aa", "\u00E6": "ae", "\u01FD": "ae", "\u01E3": "ae", "\uA735": "ao", "\uA737": "au", "\uA739": "av", "\uA73B": "av", "\uA73D": "ay", "\u24D1": "b", "\uFF42": "b", "\u1E03": "b", "\u1E05": "b", "\u1E07": "b", "\u0180": "b", "\u0183": "b", "\u0253": "b", "\u24D2": "c", "\uFF43": "c", "\u0107": "c", "\u0109": "c", "\u010B": "c", "\u010D": "c", "\u00E7": "c", "\u1E09": "c", "\u0188": "c", "\u023C": "c", "\uA73F": "c", "\u2184": "c", "\u24D3": "d", "\uFF44": "d", "\u1E0B": "d", "\u010F": "d", "\u1E0D": "d", "\u1E11": "d", "\u1E13": "d", "\u1E0F": "d", "\u0111": "d", "\u018C": "d", "\u0256": "d", "\u0257": "d", "\uA77A": "d", "\u01F3": "dz", "\u01C6": "dz", "\u24D4": "e", "\uFF45": "e", "\u00E8": "e", "\u00E9": "e", "\u00EA": "e", "\u1EC1": "e", "\u1EBF": "e", "\u1EC5": "e", "\u1EC3": "e", "\u1EBD": "e", "\u0113": "e", "\u1E15": "e", "\u1E17": "e", "\u0115": "e", "\u0117": "e", "\u00EB": "e", "\u1EBB": "e", "\u011B": "e", "\u0205": "e", "\u0207": "e", "\u1EB9": "e", "\u1EC7": "e", "\u0229": "e", "\u1E1D": "e", "\u0119": "e", "\u1E19": "e", "\u1E1B": "e", "\u0247": "e", "\u025B": "e", "\u01DD": "e", "\u24D5": "f", "\uFF46": "f", "\u1E1F": "f", "\u0192": "f", "\uA77C": "f", "\u24D6": "g", "\uFF47": "g", "\u01F5": "g", "\u011D": "g", "\u1E21": "g", "\u011F": "g", "\u0121": "g", "\u01E7": "g", "\u0123": "g", "\u01E5": "g", "\u0260": "g", "\uA7A1": "g", "\u1D79": "g", "\uA77F": "g", "\u24D7": "h", "\uFF48": "h", "\u0125": "h", "\u1E23": "h", "\u1E27": "h", "\u021F": "h", "\u1E25": "h", "\u1E29": "h", "\u1E2B": "h", "\u1E96": "h", "\u0127": "h", "\u2C68": "h", "\u2C76": "h", "\u0265": "h", "\u0195": "hv", "\u24D8": "i", "\uFF49": "i", "\u00EC": "i", "\u00ED": "i", "\u00EE": "i", "\u0129": "i", "\u012B": "i", "\u012D": "i", "\u00EF": "i", "\u1E2F": "i", "\u1EC9": "i", "\u01D0": "i", "\u0209": "i", "\u020B": "i", "\u1ECB": "i", "\u012F": "i", "\u1E2D": "i", "\u0268": "i", "\u0131": "i", "\u24D9": "j", "\uFF4A": "j", "\u0135": "j", "\u01F0": "j", "\u0249": "j", "\u24DA": "k", "\uFF4B": "k", "\u1E31": "k", "\u01E9": "k", "\u1E33": "k", "\u0137": "k", "\u1E35": "k", "\u0199": "k", "\u2C6A": "k", "\uA741": "k", "\uA743": "k", "\uA745": "k", "\uA7A3": "k", "\u24DB": "l", "\uFF4C": "l", "\u0140": "l", "\u013A": "l", "\u013E": "l", "\u1E37": "l", "\u1E39": "l", "\u013C": "l", "\u1E3D": "l", "\u1E3B": "l", "\u017F": "l", "\u0142": "l", "\u019A": "l", "\u026B": "l", "\u2C61": "l", "\uA749": "l", "\uA781": "l", "\uA747": "l", "\u01C9": "lj", "\u24DC": "m", "\uFF4D": "m", "\u1E3F": "m", "\u1E41": "m", "\u1E43": "m", "\u0271": "m", "\u026F": "m", "\u24DD": "n", "\uFF4E": "n", "\u01F9": "n", "\u0144": "n", "\u00F1": "n", "\u1E45": "n", "\u0148": "n", "\u1E47": "n", "\u0146": "n", "\u1E4B": "n", "\u1E49": "n", "\u019E": "n", "\u0272": "n", "\u0149": "n", "\uA791": "n", "\uA7A5": "n", "\u01CC": "nj", "\u24DE": "o", "\uFF4F": "o", "\u00F2": "o", "\u00F3": "o", "\u00F4": "o", "\u1ED3": "o", "\u1ED1": "o", "\u1ED7": "o", "\u1ED5": "o", "\u00F5": "o", "\u1E4D": "o", "\u022D": "o", "\u1E4F": "o", "\u014D": "o", "\u1E51": "o", "\u1E53": "o", "\u014F": "o", "\u022F": "o", "\u0231": "o", "\u00F6": "o", "\u022B": "o", "\u1ECF": "o", "\u0151": "o", "\u01D2": "o", "\u020D": "o", "\u020F": "o", "\u01A1": "o", "\u1EDD": "o", "\u1EDB": "o", "\u1EE1": "o", "\u1EDF": "o", "\u1EE3": "o", "\u1ECD": "o", "\u1ED9": "o", "\u01EB": "o", "\u01ED": "o", "\u00F8": "o", "\u01FF": "o", "\u0254": "o", "\uA74B": "o", "\uA74D": "o", "\u0275": "o", "\u01A3": "oi", "\u0223": "ou", "\uA74F": "oo", "\u24DF": "p", "\uFF50": "p", "\u1E55": "p", "\u1E57": "p", "\u01A5": "p", "\u1D7D": "p", "\uA751": "p", "\uA753": "p", "\uA755": "p", "\u24E0": "q", "\uFF51": "q", "\u024B": "q", "\uA757": "q", "\uA759": "q", "\u24E1": "r", "\uFF52": "r", "\u0155": "r", "\u1E59": "r", "\u0159": "r", "\u0211": "r", "\u0213": "r", "\u1E5B": "r", "\u1E5D": "r", "\u0157": "r", "\u1E5F": "r", "\u024D": "r", "\u027D": "r", "\uA75B": "r", "\uA7A7": "r", "\uA783": "r", "\u24E2": "s", "\uFF53": "s", "\u00DF": "s", "\u015B": "s", "\u1E65": "s", "\u015D": "s", "\u1E61": "s", "\u0161": "s", "\u1E67": "s", "\u1E63": "s", "\u1E69": "s", "\u0219": "s", "\u015F": "s", "\u023F": "s", "\uA7A9": "s", "\uA785": "s", "\u1E9B": "s", "\u24E3": "t", "\uFF54": "t", "\u1E6B": "t", "\u1E97": "t", "\u0165": "t", "\u1E6D": "t", "\u021B": "t", "\u0163": "t", "\u1E71": "t", "\u1E6F": "t", "\u0167": "t", "\u01AD": "t", "\u0288": "t", "\u2C66": "t", "\uA787": "t", "\uA729": "tz", "\u24E4": "u", "\uFF55": "u", "\u00F9": "u", "\u00FA": "u", "\u00FB": "u", "\u0169": "u", "\u1E79": "u", "\u016B": "u", "\u1E7B": "u", "\u016D": "u", "\u00FC": "u", "\u01DC": "u", "\u01D8": "u", "\u01D6": "u", "\u01DA": "u", "\u1EE7": "u", "\u016F": "u", "\u0171": "u", "\u01D4": "u", "\u0215": "u", "\u0217": "u", "\u01B0": "u", "\u1EEB": "u", "\u1EE9": "u", "\u1EEF": "u", "\u1EED": "u", "\u1EF1": "u", "\u1EE5": "u", "\u1E73": "u", "\u0173": "u", "\u1E77": "u", "\u1E75": "u", "\u0289": "u", "\u24E5": "v", "\uFF56": "v", "\u1E7D": "v", "\u1E7F": "v", "\u028B": "v", "\uA75F": "v", "\u028C": "v", "\uA761": "vy", "\u24E6": "w", "\uFF57": "w", "\u1E81": "w", "\u1E83": "w", "\u0175": "w", "\u1E87": "w", "\u1E85": "w", "\u1E98": "w", "\u1E89": "w", "\u2C73": "w", "\u24E7": "x", "\uFF58": "x", "\u1E8B": "x", "\u1E8D": "x", "\u24E8": "y", "\uFF59": "y", "\u1EF3": "y", "\u00FD": "y", "\u0177": "y", "\u1EF9": "y", "\u0233": "y", "\u1E8F": "y", "\u00FF": "y", "\u1EF7": "y", "\u1E99": "y", "\u1EF5": "y", "\u01B4": "y", "\u024F": "y", "\u1EFF": "y", "\u24E9": "z", "\uFF5A": "z", "\u017A": "z", "\u1E91": "z", "\u017C": "z", "\u017E": "z", "\u1E93": "z", "\u1E95": "z", "\u01B6": "z", "\u0225": "z", "\u0240": "z", "\u2C6C": "z", "\uA763": "z"} ; $document = $(document); nextUid = (function (){ var counter = 1; return function (){ return counter++ ; } ; } ()); function stripDiacritics(str){ var ret, i, l, c; if (!str || _AN_Read_length("length", str) < 1) return str; ret = ""; for (i = 0, l = _AN_Read_length("length", str); i < l; i++ ){ c = str.charAt(i); ret += DIACRITICS[c] || c; } return ret; } function indexOf(value, array){ var i = 0, l = _AN_Read_length("length", array); for (; i < l; i = i + 1){ if (equal(value, array[i])) return i; } return -1; } function measureScrollbar(){ var $template = $(MEASURE_SCROLLBAR_TEMPLATE); $template.appendTo('body'); var dim = { width: $template.width() - $template[0].clientWidth, height: $template.height() - $template[0].clientHeight} ; $template.remove(); return dim; } function equal(a, b){ if (a === b) return true ; if (a === undefined || b === undefined) return false ; if (a === null || b === null ) return false ; if (a.constructor === String) return a + '' === b + ''; if (b.constructor === String) return b + '' === a + ''; return false ; } function splitVal(string, separator){ var val, i, l; if (string === null || _AN_Read_length('length', string) < 1) return [] ; val = string.split(separator); for (i = 0, l = _AN_Read_length('length', val); i < l; i = i + 1)val[i] = $.trim(val[i]); return val; } function getSideBorderPadding(element){ return element.outerWidth(false ) - element.width(); } function installKeyUpChangeEvent(element){ var key = "keyup-change-value"; element.on("keydown", function (){ if ($.data(element, key) === undefined) { $.data(element, key, element.val()); } } ); element.on("keyup", function (){ var val = $.data(element, key); if (val !== undefined && element.val() !== val) { $.removeData(element, key); element.trigger("keyup-change"); } } ); } $document.on("mousemove", function (e){ lastMousePosition.x = e.pageX; lastMousePosition.y = e.pageY; } ); function installFilteredMouseMove(element){ element.on("mousemove", function (e){ var lastpos = lastMousePosition; if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) { $(_AN_Read_target("target", e)).trigger("mousemove-filtered", e); } } ); } function debounce(quietMillis, fn, ctx){ ctx = ctx || undefined; var timeout; return function (){ var args = arguments; window.clearTimeout(timeout); timeout = _AN_Call_settimeout("setTimeout", window, function (){ fn.apply(ctx, args); } , quietMillis); } ; } function thunk(formula){ var evaluated = false , value; return function (){ if (evaluated === false ) { value = formula(); evaluated = true ; } return value; } ; } ; function installDebouncedScroll(threshold, element){ var notify = debounce(threshold, function (e){ element.trigger("scroll-debounced", e); } ); element.on("scroll", function (e){ if (indexOf(_AN_Read_target("target", e), element.get()) >= 0) notify(e); } ); } function focus($el){ if ($el[0] === document.activeElement) return ; _AN_Call_settimeout("setTimeout", window, function (){ var el = $el[0], pos = _AN_Read_length("length", $el.val()), range; $el.focus(); if ($el.is(":visible") && el === document.activeElement) { if (el.setSelectionRange) { el.setSelectionRange(pos, pos); } else if (el.createTextRange) { range = el.createTextRange(); range.collapse(false ); range.select(); } } } , 0); } function getCursorInfo(el){ el = $(el)[0]; var offset = 0; var length = 0; if ('selectionStart' in el) { offset = el.selectionStart; length = el.selectionEnd - offset; } else if ('selection' in document) { el.focus(); var sel = document.selection.createRange(); length = _AN_Read_length('length', document.selection.createRange().text); sel.moveStart('character', - _AN_Read_length('length', el.value)); offset = _AN_Read_length('length', sel.text) - length; } return { offset: offset, length: length} ; } function killEvent(event){ event.preventDefault(); event.stopPropagation(); } function killEventImmediately(event){ event.preventDefault(); event.stopImmediatePropagation(); } function measureTextWidth(e){ if (!sizer) { var style = e[0].currentStyle || window.getComputedStyle(e[0], null ); sizer = $(_AN_Call_createelement('createElement', document, "div")).css({ position: "absolute", left: "-10000px", top: "-10000px", display: "none", fontSize: style.fontSize, fontFamily: style.fontFamily, fontStyle: style.fontStyle, fontWeight: style.fontWeight, letterSpacing: style.letterSpacing, textTransform: style.textTransform, whiteSpace: "nowrap"} ); sizer.attr("class", "select2-sizer"); $("body").append(sizer); } sizer.text(e.val()); return sizer.width(); } function syncCssClasses(dest, src, adapter){ var classes, replacements = [] , adapted; classes = dest.attr("class"); if (classes) { classes = '' + classes; $(classes.split(" ")).each2(function (){ if (this.indexOf("select2-") === 0) { replacements.push(this); } } ); } classes = src.attr("class"); if (classes) { classes = '' + classes; $(classes.split(" ")).each2(function (){ if (this.indexOf("select2-") !== 0) { adapted = adapter(this); if (adapted) { replacements.push(this); } } } ); } dest.attr("class", replacements.join(" ")); } function markMatch(text, term, markup, escapeMarkup){ var match = stripDiacritics(text.toUpperCase()).indexOf(stripDiacritics(term.toUpperCase())), tl = _AN_Read_length("length", term); if (match < 0) { markup.push(escapeMarkup(text)); return ; } markup.push(escapeMarkup(text.substring(0, match))); markup.push(""); markup.push(escapeMarkup(text.substring(match, match + tl))); markup.push(""); markup.push(escapeMarkup(text.substring(match + tl, _AN_Read_length("length", text)))); } function defaultEscapeMarkup(markup){ var replace_map = { '\\': '\', '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', "/": '/'} ; return _AN_Call_replace('replace', String(markup), /[&<>"'\/\\]/g, function (match){ return replace_map[match]; } ); } function ajax(options){ var timeout, handler = null , quietMillis = options.quietMillis || 100, ajaxUrl = _AN_Read_url('url', options), self = this; return function (query){ window.clearTimeout(timeout); timeout = _AN_Call_settimeout('setTimeout', window, function (){ var data = options.data, url = ajaxUrl, transport = options.transport || $.fn.select2.ajaxDefaults.transport, deprecated = { type: options.type || 'GET', cache: options.cache || false , jsonpCallback: options.jsonpCallback || undefined, dataType: options.dataType || "json"} , params = $.extend({ } , $.fn.select2.ajaxDefaults.params, deprecated); data = data? data.call(self, query.term, query.page, query.context): null ; url = (typeof url === 'function')? url.call(self, query.term, query.page, query.context): url; if (handler) { handler.abort(); } if (options.params) { if ($.isFunction(options.params)) { $.extend(params, options.params.call(self)); } else { $.extend(params, options.params); } } $.extend(params, { url: url, dataType: options.dataType, data: data, success: function (data){ var results = options.results(data, query.page); query.callback(results); } } ); handler = transport.call(self, params); } , quietMillis); } ; } function local(options){ var data = options, dataText, tmp, text = function (item){ return "" + item.text; } ; if ($.isArray(data)) { tmp = data; data = { results: tmp} ; } if ($.isFunction(data) === false ) { tmp = data; data = function (){ return tmp; } ; } var dataItem = data(); if (dataItem.text) { text = dataItem.text; if (!$.isFunction(text)) { dataText = dataItem.text; text = function (item){ return item[dataText]; } ; } } return function (query){ var t = query.term, filtered = { results: [] } , process; if (t === "") { query.callback(data()); return ; } process = function (datum, collection){ var group, attr; datum = datum[0]; if (datum.children) { group = { } ; for (attr in datum){ if (datum.hasOwnProperty(attr)) group[attr] = datum[attr]; } group.children = [] ; $(datum.children).each2(function (i, childDatum){ process(childDatum, group.children); } ); if (_AN_Read_length("length", group.children) || query.matcher(t, text(group), datum)) { collection.push(group); } } else { if (query.matcher(t, text(datum), datum)) { collection.push(datum); } } } ; $(data().results).each2(function (i, datum){ process(datum, filtered.results); } ); query.callback(filtered); } ; } function tags(data){ var isFunc = $.isFunction(data); return function (query){ var t = query.term, filtered = { results: [] } ; $(isFunc? data(): data).each(function (){ var isObject = this.text !== undefined, text = isObject? this.text: this; if (t === "" || query.matcher(t, text)) { filtered.results.push(isObject? this: { id: this, text: this} ); } } ); query.callback(filtered); } ; } function checkFormatter(formatter, formatterName){ if ($.isFunction(formatter)) return true ; if (!formatter) return false ; throw new Error(formatterName + " must be a function or a falsy value") } function evaluate(val){ return $.isFunction(val)? val(): val; } function countResults(results){ var count = 0; $.each(results, function (i, item){ if (item.children) { count += countResults(item.children); } else { count++ ; } } ); return count; } function defaultTokenizer(input, selection, selectCallback, opts){ var original = input, dupe = false , token, index, i, l, separator; if (!opts.createSearchChoice || !opts.tokenSeparators || _AN_Read_length("length", opts.tokenSeparators) < 1) return undefined; while (true ){ index = -1; for (i = 0, l = _AN_Read_length("length", opts.tokenSeparators); i < l; i++ ){ separator = opts.tokenSeparators[i]; index = input.indexOf(separator); if (index >= 0) break ; } if (index < 0) break ; token = input.substring(0, index); input = input.substring(index + _AN_Read_length("length", separator)); if (_AN_Read_length("length", token) > 0) { token = opts.createSearchChoice.call(this, token, selection); if (token !== undefined && token !== null && opts.id(token) !== undefined && opts.id(token) !== null ) { dupe = false ; for (i = 0, l = _AN_Read_length("length", selection); i < l; i++ ){ if (equal(opts.id(token), opts.id(selection[i]))) { dupe = true ; break ; } } if (!dupe) selectCallback(token); } } } if (original !== input) return input; } function clazz(SuperClass, methods){ var constructor = function (){ } ; constructor.prototype = new SuperClass(); constructor.prototype.constructor = constructor; constructor.prototype.parent = SuperClass.prototype; constructor.prototype = $.extend(constructor.prototype, methods); return constructor; } AbstractSelect2 = clazz(Object, { bind: function (func){ var self = this; return function (){ func.apply(self, arguments); } ; } , init: function (opts){ var results, search, resultsSelector = ".select2-results", disabled, readonly; this.opts = opts = this.prepareOpts(opts); this.id = opts.id; if (opts.element.data("select2") !== undefined && opts.element.data("select2") !== null ) { opts.element.data("select2").destroy(); } this.container = this.createContainer(); this.containerId = "s2id_" + (opts.element.attr("id") || "autogen" + nextUid()); this.containerSelector = "#" + _AN_Call_replace("replace", this.containerId, /([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1'); this.container.attr("id", this.containerId); this.body = thunk(function (){ return opts.element.closest("body"); } ); syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass); this.container.attr("style", opts.element.attr("style")); this.container.css(evaluate(opts.containerCss)); this.container.addClass(evaluate(opts.containerCssClass)); this.elementTabIndex = this.opts.element.attr("tabindex"); this.opts.element.data("select2", this).attr("tabindex", "-1").before(this.container); this.container.data("select2", this); this.dropdown = this.container.find(".select2-drop"); this.dropdown.addClass(evaluate(opts.dropdownCssClass)); this.dropdown.data("select2", this); this.results = results = this.container.find(resultsSelector); _AN_Write_search("search", this, false , search = this.container.find("input.select2-input")); this.queryCount = 0; this.resultsPage = 0; this.context = null ; this.initContainer(); installFilteredMouseMove(this.results); this.dropdown.on("mousemove-filtered touchstart touchmove touchend", resultsSelector, this.bind(this.highlightUnderEvent)); installDebouncedScroll(80, this.results); this.dropdown.on("scroll-debounced", resultsSelector, this.bind(this.loadMoreIfNeeded)); $(this.container).on("change", ".select2-input", function (e){ e.stopPropagation(); } ); $(this.dropdown).on("change", ".select2-input", function (e){ e.stopPropagation(); } ); if ($.fn.mousewheel) { results.mousewheel(function (e, delta, deltaX, deltaY){ var top = results.scrollTop(), height; if (deltaY > 0 && top - deltaY <= 0) { results.scrollTop(0); killEvent(e); } else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) { results.scrollTop(results.get(0).scrollHeight - results.height()); killEvent(e); } } ); } installKeyUpChangeEvent(search); search.on("keyup-change input paste", this.bind(this.updateResults)); search.on("focus", function (){ search.addClass("select2-focused"); } ); search.on("blur", function (){ search.removeClass("select2-focused"); } ); this.dropdown.on("mouseup", resultsSelector, this.bind(function (e){ if (_AN_Read_length("length", $(_AN_Read_target("target", e)).closest(".select2-result-selectable")) > 0) { this.highlightUnderEvent(e); this.selectHighlighted(e); } } )); this.dropdown.on("click mouseup mousedown", function (e){ e.stopPropagation(); } ); if ($.isFunction(this.opts.initSelection)) { this.initSelection(); this.monitorSource(); } if (opts.maximumInputLength !== null ) { _AN_Read_search("search", this).attr("maxlength", opts.maximumInputLength); } var disabled = opts.element.prop("disabled"); if (disabled === undefined) disabled = false ; this.enable(!disabled); var readonly = opts.element.prop("readonly"); if (readonly === undefined) readonly = false ; this.readonly(readonly); scrollBarDimensions = scrollBarDimensions || measureScrollbar(); this.autofocus = opts.element.prop("autofocus"); opts.element.prop("autofocus", false ); if (this.autofocus) this.focus(); } , destroy: function (){ var element = this.opts.element, select2 = element.data("select2"); if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null ; } if (select2 !== undefined) { select2.container.remove(); select2.dropdown.remove(); element.removeClass("select2-offscreen").removeData("select2").off(".select2").prop("autofocus", this.autofocus || false ); if (this.elementTabIndex) { element.attr({ tabindex: this.elementTabIndex} ); } else { element.removeAttr("tabindex"); } _AN_Call_show("show", element); } } , optionToData: function (element){ if (element.is("option")) { return { id: element.prop("value"), text: element.text(), element: element.get(), css: element.attr("class"), disabled: element.prop("disabled"), locked: equal(element.attr("locked"), "locked") || equal(element.data("locked"), true )} ; } else if (element.is("optgroup")) { return { text: element.attr("label"), children: [] , element: element.get(), css: element.attr("class")} ; } } , prepareOpts: function (opts){ var element, select, idKey, ajaxUrl, self = this; element = opts.element; if (element.get(0).tagName.toLowerCase() === "select") { this.select = select = opts.element; } if (select) { $.each(["id", "multiple", "ajax", "query", "createSearchChoice", "initSelection", "data", "tags"] , function (){ if (this in opts) { throw new Error("Option '" + this + "' is not allowed for Select2 when attached to a ", "
", " ", " ", "
"] .join("")); return container; } , enableInterface: function (){ if (this.parent.enableInterface.apply(this, arguments)) { this.focusser.prop("disabled", !this.isInterfaceEnabled()); } } , opening: function (){ var el, range, len; if (this.opts.minimumResultsForSearch >= 0) { this.showSearch(true ); } this.parent.opening.apply(this, arguments); if (this.showSearchInput !== false ) { _AN_Read_search("search", this).val(this.focusser.val()); } _AN_Read_search("search", this).focus(); el = _AN_Read_search("search", this).get(0); if (el.createTextRange) { range = el.createTextRange(); range.collapse(false ); range.select(); } else if (el.setSelectionRange) { len = _AN_Read_length("length", _AN_Read_search("search", this).val()); el.setSelectionRange(len, len); } this.focusser.prop("disabled", true ).val(""); this.updateResults(true ); this.opts.element.trigger($.Event("select2-open")); } , close: function (){ if (!this.opened()) return ; this.parent.close.apply(this, arguments); this.focusser.removeAttr("disabled"); this.focusser.focus(); } , focus: function (){ if (this.opened()) { this.close(); } else { this.focusser.removeAttr("disabled"); this.focusser.focus(); } } , isFocused: function (){ return this.container.hasClass("select2-container-active"); } , cancel: function (){ this.parent.cancel.apply(this, arguments); this.focusser.removeAttr("disabled"); this.focusser.focus(); } , initContainer: function (){ var selection, container = this.container, dropdown = this.dropdown; if (this.opts.minimumResultsForSearch < 0) { this.showSearch(false ); } else { this.showSearch(true ); } this.selection = selection = container.find(".select2-choice"); this.focusser = container.find(".select2-focusser"); this.focusser.attr("id", "s2id_autogen" + nextUid()); $("label[for='" + this.opts.element.attr("id") + "']").attr('for', this.focusser.attr('id')); this.focusser.attr("tabindex", this.elementTabIndex); _AN_Read_search("search", this).on("keydown", this.bind(function (e){ if (!this.isInterfaceEnabled()) return ; if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) { killEvent(e); return ; } switch (e.which){ case KEY.UP: case KEY.DOWN: this.moveHighlight((e.which === KEY.UP)? -1: 1); killEvent(e); return ; case KEY.ENTER: this.selectHighlighted(); killEvent(e); return ; case KEY.TAB: if (this.opts.selectOnBlur) { this.selectHighlighted({ noFocus: true } ); } return ; case KEY.ESC: this.cancel(e); killEvent(e); return ; } } )); _AN_Read_search("search", this).on("blur", this.bind(function (e){ if (document.activeElement === this.body().get(0)) { _AN_Call_settimeout("setTimeout", window, this.bind(function (){ _AN_Read_search("search", this).focus(); } ), 0); } } )); this.focusser.on("keydown", this.bind(function (e){ if (!this.isInterfaceEnabled()) return ; if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) { return ; } if (this.opts.openOnEnter === false && e.which === KEY.ENTER) { killEvent(e); return ; } if (e.which == KEY.DOWN || e.which == KEY.UP || (e.which == KEY.ENTER && this.opts.openOnEnter)) { if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) return ; _AN_Call_open("open", this); killEvent(e); return ; } if (e.which == KEY.DELETE || e.which == KEY.BACKSPACE) { if (this.opts.allowClear) { _AN_Call_clear("clear", this); } killEvent(e); return ; } } )); installKeyUpChangeEvent(this.focusser); this.focusser.on("keyup-change input", this.bind(function (e){ if (this.opts.minimumResultsForSearch >= 0) { e.stopPropagation(); if (this.opened()) return ; _AN_Call_open("open", this); } } )); selection.on("mousedown", "abbr", this.bind(function (e){ if (!this.isInterfaceEnabled()) return ; _AN_Call_clear("clear", this); killEventImmediately(e); this.close(); this.selection.focus(); } )); selection.on("mousedown", this.bind(function (e){ if (!this.container.hasClass("select2-container-active")) { this.opts.element.trigger($.Event("select2-focus")); } if (this.opened()) { this.close(); } else if (this.isInterfaceEnabled()) { _AN_Call_open("open", this); } killEvent(e); } )); dropdown.on("mousedown", this.bind(function (){ _AN_Read_search("search", this).focus(); } )); selection.on("focus", this.bind(function (e){ killEvent(e); } )); this.focusser.on("focus", this.bind(function (){ if (!this.container.hasClass("select2-container-active")) { this.opts.element.trigger($.Event("select2-focus")); } this.container.addClass("select2-container-active"); } )).on("blur", this.bind(function (){ if (!this.opened()) { this.container.removeClass("select2-container-active"); this.opts.element.trigger($.Event("select2-blur")); } } )); _AN_Read_search("search", this).on("focus", this.bind(function (){ if (!this.container.hasClass("select2-container-active")) { this.opts.element.trigger($.Event("select2-focus")); } this.container.addClass("select2-container-active"); } )); this.initContainerWidth(); this.opts.element.addClass("select2-offscreen"); this.setPlaceholder(); } , clear: function (triggerChange){ var data = this.selection.data("select2-data"); if (data) { var placeholderOption = this.getPlaceholderOption(); this.opts.element.val(placeholderOption? placeholderOption.val(): ""); this.selection.find(".select2-chosen").empty(); this.selection.removeData("select2-data"); this.setPlaceholder(); if (triggerChange !== false ) { this.opts.element.trigger({ type: "select2-removed", val: this.id(data), choice: data} ); this.triggerChange({ removed: data} ); } } } , initSelection: function (){ var selected; if (this.isPlaceholderOptionSelected()) { this.updateSelection(null ); this.close(); this.setPlaceholder(); } else { var self = this; this.opts.initSelection.call(null , this.opts.element, function (selected){ if (selected !== undefined && selected !== null ) { self.updateSelection(selected); self.close(); self.setPlaceholder(); } } ); } } , isPlaceholderOptionSelected: function (){ var placeholderOption; return this.opts.placeholder && ((placeholderOption = this.getPlaceholderOption()) !== undefined && placeholderOption.is(':selected')) || (this.opts.element.val() === "") || (this.opts.element.val() === undefined) || (this.opts.element.val() === null ); } , prepareOpts: function (){ var opts = this.parent.prepareOpts.apply(this, arguments), self = this; if (opts.element.get(0).tagName.toLowerCase() === "select") { opts.initSelection = function (element, callback){ var selected = element.find(":selected"); callback(self.optionToData(selected)); } ; } else if ("data" in opts) { opts.initSelection = opts.initSelection || function (element, callback){ var id = element.val(); var match = null ; opts.query({ matcher: function (term, text, el){ var is_match = equal(id, opts.id(el)); if (is_match) { match = el; } return is_match; } , callback: !$.isFunction(callback)? $.noop: function (){ callback(match); } } ); } ; } return opts; } , getPlaceholder: function (){ if (this.select) { if (this.getPlaceholderOption() === undefined) { return undefined; } } return this.parent.getPlaceholder.apply(this, arguments); } , setPlaceholder: function (){ var placeholder = this.getPlaceholder(); if (this.isPlaceholderOptionSelected() && placeholder !== undefined) { if (this.select && this.getPlaceholderOption() === undefined) return ; this.selection.find(".select2-chosen").html(this.opts.escapeMarkup(placeholder)); this.selection.addClass("select2-default"); this.container.removeClass("select2-allowclear"); } } , postprocessResults: function (data, initial, noHighlightUpdate){ var selected = 0, self = this, showSearchInput = true ; this.findHighlightableChoices().each2(function (i, elm){ if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) { selected = i; return false ; } } ); if (noHighlightUpdate !== false ) { if (initial === true && selected >= 0) { this.highlight(selected); } else { this.highlight(0); } } if (initial === true ) { var min = this.opts.minimumResultsForSearch; if (min >= 0) { this.showSearch(countResults(data.results) >= min); } } } , showSearch: function (showSearchInput){ if (this.showSearchInput === showSearchInput) return ; this.showSearchInput = showSearchInput; this.dropdown.find(".select2-search").toggleClass("select2-search-hidden", !showSearchInput); this.dropdown.find(".select2-search").toggleClass("select2-offscreen", !showSearchInput); $(this.dropdown, this.container).toggleClass("select2-with-searchbox", showSearchInput); } , onSelect: function (data, options){ if (!this.triggerSelect(data)) { return ; } var old = this.opts.element.val(), oldData = this.data(); this.opts.element.val(this.id(data)); this.updateSelection(data); this.opts.element.trigger({ type: "select2-selected", val: this.id(data), choice: data} ); this.close(); if (!options || !options.noFocus) this.selection.focus(); if (!equal(old, this.id(data))) { this.triggerChange({ added: data, removed: oldData} ); } } , updateSelection: function (data){ var container = this.selection.find(".select2-chosen"), formatted, cssClass; this.selection.data("select2-data", data); container.empty(); if (data !== null ) { formatted = this.opts.formatSelection(data, container, this.opts.escapeMarkup); } if (formatted !== undefined) { container.append(formatted); } cssClass = this.opts.formatSelectionCssClass(data, container); if (cssClass !== undefined) { container.addClass(cssClass); } this.selection.removeClass("select2-default"); if (this.opts.allowClear && this.getPlaceholder() !== undefined) { this.container.addClass("select2-allowclear"); } } , val: function (){ var val, triggerChange = false , data = null , self = this, oldData = this.data(); if (_AN_Read_length("length", arguments) === 0) { return this.opts.element.val(); } val = arguments[0]; if (_AN_Read_length("length", arguments) > 1) { triggerChange = arguments[1]; } if (this.select) { this.select.val(val).find(":selected").each2(function (i, elm){ data = self.optionToData(elm); return false ; } ); this.updateSelection(data); this.setPlaceholder(); if (triggerChange) { this.triggerChange({ added: data, removed: oldData} ); } } else { if (!val && val !== 0) { _AN_Call_clear("clear", this, triggerChange); return ; } if (this.opts.initSelection === undefined) { throw new Error("cannot call val() if initSelection() is not defined") } this.opts.element.val(val); this.opts.initSelection(this.opts.element, function (data){ self.opts.element.val(!data? "": self.id(data)); self.updateSelection(data); self.setPlaceholder(); if (triggerChange) { self.triggerChange({ added: data, removed: oldData} ); } } ); } } , clearSearch: function (){ _AN_Read_search("search", this).val(""); this.focusser.val(""); } , data: function (value){ var data, triggerChange = false ; if (_AN_Read_length("length", arguments) === 0) { data = this.selection.data("select2-data"); if (data == undefined) data = null ; return data; } else { if (_AN_Read_length("length", arguments) > 1) { triggerChange = arguments[1]; } if (!value) { _AN_Call_clear("clear", this, triggerChange); } else { data = this.data(); this.opts.element.val(!value? "": this.id(value)); this.updateSelection(value); if (triggerChange) { this.triggerChange({ added: value, removed: data} ); } } } } } ); MultiSelect2 = clazz(AbstractSelect2, { createContainer: function (){ var container = $(_AN_Call_createelement("createElement", document, "div")).attr({ "class": "select2-container select2-container-multi"} ).html(["", "
", " ", "
"] .join("")); return container; } , prepareOpts: function (){ var opts = this.parent.prepareOpts.apply(this, arguments), self = this; if (opts.element.get(0).tagName.toLowerCase() === "select") { opts.initSelection = function (element, callback){ var data = [] ; element.find(":selected").each2(function (i, elm){ data.push(self.optionToData(elm)); } ); callback(data); } ; } else if ("data" in opts) { opts.initSelection = opts.initSelection || function (element, callback){ var ids = splitVal(element.val(), opts.separator); var matches = [] ; opts.query({ matcher: function (term, text, el){ var is_match = _AN_Read_length("length", $.grep(ids, function (id){ return equal(id, opts.id(el)); } )); if (is_match) { matches.push(el); } return is_match; } , callback: !$.isFunction(callback)? $.noop: function (){ var ordered = [] ; for (var i = 0; i < _AN_Read_length("length", ids); i++ ){ var id = ids[i]; for (var j = 0; j < _AN_Read_length("length", matches); j++ ){ var match = matches[j]; if (equal(id, opts.id(match))) { ordered.push(match); matches.splice(j, 1); break ; } } } callback(ordered); } } ); } ; } return opts; } , selectChoice: function (choice){ var selected = this.container.find(".select2-search-choice-focus"); if (_AN_Read_length("length", selected) && choice && choice[0] == selected[0]) { } else { if (selected.length) { this.opts.element.trigger("choice-deselected", selected); } selected.removeClass("select2-search-choice-focus"); if (choice && _AN_Read_length("length", choice)) { this.close(); choice.addClass("select2-search-choice-focus"); this.opts.element.trigger("choice-selected", choice); } } } , initContainer: function (){ var selector = ".select2-choices", selection; this.searchContainer = this.container.find(".select2-search-field"); this.selection = selection = this.container.find(selector); var _this = this; this.selection.on("click", ".select2-search-choice", function (e){ _AN_Read_search("search", _this)[0].focus(); _this.selectChoice($(this)); } ); _AN_Read_search("search", this).attr("id", "s2id_autogen" + nextUid()); $("label[for='" + this.opts.element.attr("id") + "']").attr('for', _AN_Read_search('search', this).attr('id')); _AN_Read_search('search', this).on("input paste", this.bind(function (){ if (!this.isInterfaceEnabled()) return ; if (!this.opened()) { _AN_Call_open("open", this); } } )); _AN_Read_search("search", this).attr("tabindex", this.elementTabIndex); this.keydowns = 0; _AN_Read_search("search", this).on("keydown", this.bind(function (e){ if (!this.isInterfaceEnabled()) return ; ++this.keydowns; var selected = selection.find(".select2-search-choice-focus"); var prev = selected.prev(".select2-search-choice:not(.select2-locked)"); var next = selected.next(".select2-search-choice:not(.select2-locked)"); var pos = getCursorInfo(_AN_Read_search("search", this)); if (_AN_Read_length("length", selected) && (e.which == KEY.LEFT || e.which == KEY.RIGHT || e.which == KEY.BACKSPACE || e.which == KEY.DELETE || e.which == KEY.ENTER)) { var selectedChoice = selected; if (e.which == KEY.LEFT && _AN_Read_length("length", prev)) { selectedChoice = prev; } else if (e.which == KEY.RIGHT) { selectedChoice = _AN_Read_length("length", next)? next: null ; } else if (e.which === KEY.BACKSPACE) { this.unselect(selected.first()); _AN_Read_search("search", this).width(10); selectedChoice = _AN_Read_length("length", prev)? prev: next; } else if (e.which == KEY.DELETE) { this.unselect(selected.first()); _AN_Read_search("search", this).width(10); selectedChoice = _AN_Read_length("length", next)? next: null ; } else if (e.which == KEY.ENTER) { selectedChoice = null ; } this.selectChoice(selectedChoice); killEvent(e); if (!selectedChoice || !_AN_Read_length("length", selectedChoice)) { _AN_Call_open("open", this); } return ; } else if (((e.which === KEY.BACKSPACE && this.keydowns == 1) || e.which == KEY.LEFT) && (pos.offset == 0 && !_AN_Read_length("length", pos))) { this.selectChoice(selection.find(".select2-search-choice:not(.select2-locked)").last()); killEvent(e); return ; } else { this.selectChoice(null ); } if (this.opened()) { switch (e.which){ case KEY.UP: case KEY.DOWN: this.moveHighlight((e.which === KEY.UP)? -1: 1); killEvent(e); return ; case KEY.ENTER: this.selectHighlighted(); killEvent(e); return ; case KEY.TAB: if (this.opts.selectOnBlur) { this.selectHighlighted({ noFocus: true } ); } this.close(); return ; case KEY.ESC: this.cancel(e); killEvent(e); return ; } } if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.BACKSPACE || e.which === KEY.ESC) { return ; } if (e.which === KEY.ENTER) { if (this.opts.openOnEnter === false ) { return ; } else if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) { return ; } } _AN_Call_open("open", this); if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) { killEvent(e); } if (e.which === KEY.ENTER) { killEvent(e); } } )); _AN_Read_search("search", this).on("keyup", this.bind(function (e){ this.keydowns = 0; this.resizeSearch(); } )); _AN_Read_search("search", this).on("blur", this.bind(function (e){ this.container.removeClass("select2-container-active"); _AN_Read_search("search", this).removeClass("select2-focused"); this.selectChoice(null ); if (!this.opened()) this.clearSearch(); e.stopImmediatePropagation(); this.opts.element.trigger($.Event("select2-blur")); } )); this.container.on("click", selector, this.bind(function (e){ if (!this.isInterfaceEnabled()) return ; if (_AN_Read_length("length", $(_AN_Read_target("target", e)).closest(".select2-search-choice")) > 0) { return ; } this.selectChoice(null ); this.clearPlaceholder(); if (!this.container.hasClass("select2-container-active")) { this.opts.element.trigger($.Event("select2-focus")); } _AN_Call_open("open", this); this.focusSearch(); e.preventDefault(); } )); this.container.on("focus", selector, this.bind(function (){ if (!this.isInterfaceEnabled()) return ; if (!this.container.hasClass("select2-container-active")) { this.opts.element.trigger($.Event("select2-focus")); } this.container.addClass("select2-container-active"); this.dropdown.addClass("select2-drop-active"); this.clearPlaceholder(); } )); this.initContainerWidth(); this.opts.element.addClass("select2-offscreen"); this.clearSearch(); } , enableInterface: function (){ if (this.parent.enableInterface.apply(this, arguments)) { _AN_Read_search("search", this).prop("disabled", !this.isInterfaceEnabled()); } } , initSelection: function (){ var data; if (this.opts.element.val() === "" && this.opts.element.text() === "") { this.updateSelection([] ); this.close(); this.clearSearch(); } if (this.select || this.opts.element.val() !== "") { var self = this; this.opts.initSelection.call(null , this.opts.element, function (data){ if (data !== undefined && data !== null ) { self.updateSelection(data); self.close(); self.clearSearch(); } } ); } } , clearSearch: function (){ var placeholder = this.getPlaceholder(), maxWidth = this.getMaxSearchWidth(); if (placeholder !== undefined && _AN_Read_length("length", this.getVal()) === 0 && _AN_Read_search("search", this).hasClass("select2-focused") === false ) { _AN_Read_search("search", this).val(placeholder).addClass("select2-default"); _AN_Read_search("search", this).width(maxWidth > 0? maxWidth: this.container.css("width")); } else { _AN_Read_search("search", this).val("").width(10); } } , clearPlaceholder: function (){ if (_AN_Read_search("search", this).hasClass("select2-default")) { _AN_Read_search("search", this).val("").removeClass("select2-default"); } } , opening: function (){ this.clearPlaceholder(); this.resizeSearch(); this.parent.opening.apply(this, arguments); this.focusSearch(); this.updateResults(true ); _AN_Read_search("search", this).focus(); this.opts.element.trigger($.Event("select2-open")); } , close: function (){ if (!this.opened()) return ; this.parent.close.apply(this, arguments); } , focus: function (){ this.close(); _AN_Read_search("search", this).focus(); } , isFocused: function (){ return _AN_Read_search("search", this).hasClass("select2-focused"); } , updateSelection: function (data){ var ids = [] , filtered = [] , self = this; $(data).each(function (){ if (indexOf(self.id(this), ids) < 0) { ids.push(self.id(this)); filtered.push(this); } } ); data = filtered; this.selection.find(".select2-search-choice").remove(); $(data).each(function (){ self.addSelectedChoice(this); } ); self.postprocessResults(); } , tokenize: function (){ var input = _AN_Read_search("search", this).val(); input = this.opts.tokenizer.call(this, input, this.data(), this.bind(this.onSelect), this.opts); if (input != null && input != undefined) { _AN_Read_search("search", this).val(input); if (_AN_Read_length("length", input) > 0) { _AN_Call_open("open", this); } } } , onSelect: function (data, options){ if (!this.triggerSelect(data)) { return ; } this.addSelectedChoice(data); this.opts.element.trigger({ type: "selected", val: this.id(data), choice: data} ); if (this.select || !this.opts.closeOnSelect) this.postprocessResults(data, false , this.opts.closeOnSelect === true ); if (this.opts.closeOnSelect) { this.close(); _AN_Read_search("search", this).width(10); } else { if (this.countSelectableResults() > 0) { _AN_Read_search("search", this).width(10); this.resizeSearch(); if (this.getMaximumSelectionSize() > 0 && _AN_Read_length("length", this.val()) >= this.getMaximumSelectionSize()) { this.updateResults(true ); } this.positionDropdown(); } else { this.close(); _AN_Read_search("search", this).width(10); } } this.triggerChange({ added: data} ); if (!options || !options.noFocus) this.focusSearch(); } , cancel: function (){ this.close(); this.focusSearch(); } , addSelectedChoice: function (data){ var enableChoice = !data.locked, enabledItem = $("
  • " + "
    " + " " + "
  • "), disabledItem = $("
  • " + "
    " + "
  • "); var choice = enableChoice? enabledItem: disabledItem, id = this.id(data), val = this.getVal(), formatted, cssClass; formatted = this.opts.formatSelection(data, choice.find("div"), this.opts.escapeMarkup); if (formatted != undefined) { choice.find("div").replaceWith("
    " + formatted + "
    "); } cssClass = this.opts.formatSelectionCssClass(data, choice.find("div")); if (cssClass != undefined) { choice.addClass(cssClass); } if (enableChoice) { choice.find(".select2-search-choice-close").on("mousedown", killEvent).on("click dblclick", this.bind(function (e){ if (!this.isInterfaceEnabled()) return ; $(_AN_Read_target("target", e)).closest(".select2-search-choice").fadeOut('fast', this.bind(function (){ this.unselect($(_AN_Read_target('target', e))); this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"); this.close(); this.focusSearch(); } )).dequeue(); killEvent(e); } )).on("focus", this.bind(function (){ if (!this.isInterfaceEnabled()) return ; this.container.addClass("select2-container-active"); this.dropdown.addClass("select2-drop-active"); } )); } choice.data("select2-data", data); choice.insertBefore(this.searchContainer); val.push(id); this.setVal(val); } , unselect: function (selected){ var val = this.getVal(), data, index; selected = selected.closest(".select2-search-choice"); if (_AN_Read_length("length", selected) === 0) { throw "Invalid argument: " + selected + ". Must be .select2-search-choice" } data = selected.data("select2-data"); if (!data) { return ; } index = indexOf(this.id(data), val); if (index >= 0) { val.splice(index, 1); this.setVal(val); if (this.select) this.postprocessResults(); } selected.remove(); this.opts.element.trigger({ type: "removed", val: this.id(data), choice: data} ); this.triggerChange({ removed: data} ); } , postprocessResults: function (data, initial, noHighlightUpdate){ var val = this.getVal(), choices = this.results.find(".select2-result"), compound = this.results.find(".select2-result-with-children"), self = this; choices.each2(function (i, choice){ var id = self.id(choice.data("select2-data")); if (indexOf(id, val) >= 0) { choice.addClass("select2-selected"); choice.find(".select2-result-selectable").addClass("select2-selected"); } } ); compound.each2(function (i, choice){ if (!choice.is('.select2-result-selectable') && _AN_Read_length('length', choice.find(".select2-result-selectable:not(.select2-selected)")) === 0) { choice.addClass("select2-selected"); } } ); if (this.highlight() == -1 && noHighlightUpdate !== false ) { self.highlight(0); } if (!this.opts.createSearchChoice && !_AN_Read_length("length", choices.filter('.select2-result:not(.select2-selected)')) > 0) { if (!data || data && !data.more && _AN_Read_length('length', this.results.find(".select2-no-results")) === 0) { if (checkFormatter(self.opts.formatNoMatches, "formatNoMatches")) { this.results.append("
  • " + self.opts.formatNoMatches(_AN_Read_search("search", self).val()) + "
  • "); } } } } , getMaxSearchWidth: function (){ return this.selection.width() - getSideBorderPadding(_AN_Read_search("search", this)); } , resizeSearch: function (){ var minimumWidth, left, maxWidth, containerLeft, searchWidth, sideBorderPadding = getSideBorderPadding(_AN_Read_search("search", this)); minimumWidth = measureTextWidth(_AN_Read_search("search", this)) + 10; left = _AN_Read_search("search", this).offset().left; maxWidth = this.selection.width(); containerLeft = this.selection.offset().left; searchWidth = maxWidth - (left - containerLeft) - sideBorderPadding; if (searchWidth < minimumWidth) { searchWidth = maxWidth - sideBorderPadding; } if (searchWidth < 40) { searchWidth = maxWidth - sideBorderPadding; } if (searchWidth <= 0) { searchWidth = minimumWidth; } _AN_Read_search("search", this).width(searchWidth); } , getVal: function (){ var val; if (this.select) { val = this.select.val(); return val === null ? [] : val; } else { val = this.opts.element.val(); return splitVal(val, this.opts.separator); } } , setVal: function (val){ var unique; if (this.select) { this.select.val(val); } else { unique = [] ; $(val).each(function (){ if (indexOf(this, unique) < 0) unique.push(this); } ); this.opts.element.val(_AN_Read_length("length", unique) === 0? "": unique.join(this.opts.separator)); } } , buildChangeDetails: function (old, current){ var current = current.slice(0), old = old.slice(0); for (var i = 0; i < _AN_Read_length("length", current); i++ ){ for (var j = 0; j < _AN_Read_length("length", old); j++ ){ if (equal(this.opts.id(current[i]), this.opts.id(old[j]))) { current.splice(i, 1); i-- ; old.splice(j, 1); j-- ; } } } return { added: current, removed: old} ; } , val: function (val, triggerChange){ var oldData, self = this, changeDetails; if (_AN_Read_length("length", arguments) === 0) { return this.getVal(); } oldData = this.data(); if (!_AN_Read_length("length", oldData)) oldData = [] ; if (!val && val !== 0) { this.opts.element.val(""); this.updateSelection([] ); this.clearSearch(); if (triggerChange) { this.triggerChange({ added: this.data(), removed: oldData} ); } return ; } this.setVal(val); if (this.select) { this.opts.initSelection(this.select, this.bind(this.updateSelection)); if (triggerChange) { this.triggerChange(this.buildChangeDetails(oldData, this.data())); } } else { if (this.opts.initSelection === undefined) { throw new Error("val() cannot be called if initSelection() is not defined") } this.opts.initSelection(this.opts.element, function (data){ var ids = $.map(data, self.id); self.setVal(ids); self.updateSelection(data); self.clearSearch(); if (triggerChange) { self.triggerChange(self.buildChangeDetails(oldData, this.data())); } } ); } this.clearSearch(); } , onSortStart: function (){ if (this.select) { throw new Error("Sorting of elements is not supported when attached to instead.") } _AN_Read_search("search", this).width(0); this.searchContainer.hide(); } , onSortEnd: function (){ var val = [] , self = this; _AN_Call_show("show", this.searchContainer); this.searchContainer.appendTo(this.searchContainer.parent()); this.resizeSearch(); this.selection.find(".select2-search-choice").each(function (){ val.push(self.opts.id($(this).data("select2-data"))); } ); this.setVal(val); this.triggerChange(); } , data: function (values, triggerChange){ var self = this, ids, old; if (_AN_Read_length("length", arguments) === 0) { return this.selection.find(".select2-search-choice").map(function (){ return $(this).data("select2-data"); } ).get(); } else { old = this.data(); if (!values) { values = [] ; } ids = $.map(values, function (e){ return self.opts.id(e); } ); this.setVal(ids); this.updateSelection(values); this.clearSearch(); if (triggerChange) { this.triggerChange(this.buildChangeDetails(old, this.data())); } } } } ); $.fn.select2 = function (){ var args = Array.prototype.slice.call(arguments, 0), opts, select2, method, value, multiple, allowedMethods = ["val", "destroy", "opened", "open", "close", "focus", "isFocused", "container", "dropdown", "onSortStart", "onSortEnd", "enable", "disable", "readonly", "positionDropdown", "data", "search"] , valueMethods = ["opened", "isFocused", "container", "dropdown"] , propertyMethods = ["val", "data"] , methodsMap = { search: "externalSearch"} ; this.each(function (){ if (_AN_Read_length("length", args) === 0 || typeof (args[0]) === "object") { opts = _AN_Read_length("length", args) === 0? { } : $.extend({ } , args[0]); opts.element = $(this); if (opts.element.get(0).tagName.toLowerCase() === "select") { multiple = opts.element.prop("multiple"); } else { multiple = opts.multiple || false ; if ("tags" in opts) { opts.multiple = multiple = true ; } } select2 = multiple? new MultiSelect2(): new SingleSelect2(); _AN_Call_init("init", select2, opts); } else if (typeof (args[0]) === "string") { if (indexOf(args[0], allowedMethods) < 0) { throw "Unknown method: " + args[0] } value = undefined; select2 = $(this).data("select2"); if (select2 === undefined) return ; method = args[0]; if (method === "container") { value = select2.container; } else if (method === "dropdown") { value = select2.dropdown; } else { if (methodsMap[method]) method = methodsMap[method]; value = select2[method].apply(select2, args.slice(1)); } if (indexOf(args[0], valueMethods) >= 0 || (indexOf(args[0], propertyMethods) && _AN_Read_length("length", args) == 1)) { return false ; } } else { throw "Invalid arguments to select2 plugin: " + args } } ); return (value === undefined)? this: value; } ; $.fn.select2.defaults = { width: "copy", loadMorePadding: 0, closeOnSelect: true , openOnEnter: true , containerCss: { } , dropdownCss: { } , containerCssClass: "", dropdownCssClass: "", formatResult: function (result, container, query, escapeMarkup){ var markup = [] ; markMatch(result.text, query.term, markup, escapeMarkup); return markup.join(""); } , formatSelection: function (data, container, escapeMarkup){ return data? escapeMarkup(data.text): undefined; } , sortResults: function (results, container, query){ return results; } , formatResultCssClass: function (data){ return undefined; } , formatSelectionCssClass: function (data, container){ return undefined; } , formatNoMatches: function (){ return "No matches found"; } , formatInputTooShort: function (input, min){ var n = min - _AN_Read_length("length", input); return "Please enter " + n + " more character" + (n == 1? "": "s"); } , formatInputTooLong: function (input, max){ var n = _AN_Read_length("length", input) - max; return "Please delete " + n + " character" + (n == 1? "": "s"); } , formatSelectionTooBig: function (limit){ return "You can only select " + limit + " item" + (limit == 1? "": "s"); } , formatLoadMore: function (pageNumber){ return "Loading more results..."; } , formatSearching: function (){ return "Searching..."; } , minimumResultsForSearch: 0, minimumInputLength: 0, maximumInputLength: null , maximumSelectionSize: 0, id: function (e){ return e.id; } , matcher: function (term, text){ return stripDiacritics('' + text).toUpperCase().indexOf(stripDiacritics('' + term).toUpperCase()) >= 0; } , separator: ",", tokenSeparators: [] , tokenizer: defaultTokenizer, escapeMarkup: defaultEscapeMarkup, blurOnChange: false , selectOnBlur: false , adaptContainerCssClass: function (c){ return c; } , adaptDropdownCssClass: function (c){ return null ; } } ; $.fn.select2.ajaxDefaults = { transport: $.ajax, params: { type: "GET", cache: false , dataType: "json"} } ; window.Select2 = { query: { ajax: ajax, local: local, tags: tags} , util: { debounce: debounce, markMatch: markMatch, escapeMarkup: defaultEscapeMarkup, stripDiacritics: stripDiacritics} , "class": { "abstract": AbstractSelect2, "single": SingleSelect2, "multi": MultiSelect2} } ; } (jQuery));