aboutsummaryrefslogtreecommitdiffhomepage
path: root/public/bower_components/select2/src
diff options
context:
space:
mode:
Diffstat (limited to 'public/bower_components/select2/src')
-rw-r--r--public/bower_components/select2/src/js/banner.end.js6
-rw-r--r--public/bower_components/select2/src/js/banner.start.js6
-rw-r--r--public/bower_components/select2/src/js/jquery.mousewheel.shim.js6
-rw-r--r--public/bower_components/select2/src/js/jquery.select2.js57
-rw-r--r--public/bower_components/select2/src/js/jquery.shim.js14
-rw-r--r--public/bower_components/select2/src/js/select2/compat/containerCss.js56
-rw-r--r--public/bower_components/select2/src/js/select2/compat/dropdownCss.js56
-rw-r--r--public/bower_components/select2/src/js/select2/compat/initSelection.js42
-rw-r--r--public/bower_components/select2/src/js/select2/compat/inputData.js127
-rw-r--r--public/bower_components/select2/src/js/select2/compat/matcher.js42
-rw-r--r--public/bower_components/select2/src/js/select2/compat/query.js26
-rw-r--r--public/bower_components/select2/src/js/select2/compat/utils.js43
-rw-r--r--public/bower_components/select2/src/js/select2/core.js612
-rw-r--r--public/bower_components/select2/src/js/select2/data/ajax.js109
-rw-r--r--public/bower_components/select2/src/js/select2/data/array.js79
-rw-r--r--public/bower_components/select2/src/js/select2/data/base.js40
-rw-r--r--public/bower_components/select2/src/js/select2/data/maximumInputLength.js31
-rw-r--r--public/bower_components/select2/src/js/select2/data/maximumSelectionLength.js31
-rw-r--r--public/bower_components/select2/src/js/select2/data/minimumInputLength.js30
-rw-r--r--public/bower_components/select2/src/js/select2/data/select.js285
-rw-r--r--public/bower_components/select2/src/js/select2/data/tags.js128
-rw-r--r--public/bower_components/select2/src/js/select2/data/tokenizer.js116
-rw-r--r--public/bower_components/select2/src/js/select2/defaults.js396
-rw-r--r--public/bower_components/select2/src/js/select2/diacritics.js847
-rw-r--r--public/bower_components/select2/src/js/select2/dropdown.js42
-rw-r--r--public/bower_components/select2/src/js/select2/dropdown/attachBody.js222
-rw-r--r--public/bower_components/select2/src/js/select2/dropdown/attachContainer.js18
-rw-r--r--public/bower_components/select2/src/js/select2/dropdown/closeOnSelect.js35
-rw-r--r--public/bower_components/select2/src/js/select2/dropdown/hidePlaceholder.js42
-rw-r--r--public/bower_components/select2/src/js/select2/dropdown/infiniteScroll.js89
-rw-r--r--public/bower_components/select2/src/js/select2/dropdown/minimumResultsForSearch.js39
-rw-r--r--public/bower_components/select2/src/js/select2/dropdown/search.js101
-rw-r--r--public/bower_components/select2/src/js/select2/dropdown/selectOnClose.js50
-rw-r--r--public/bower_components/select2/src/js/select2/dropdown/stopPropagation.js38
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/af.js44
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/ar.js30
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/az.js27
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/bg.js47
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/bs.js55
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/ca.js52
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/cs.js61
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/da.js36
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/de.js40
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/dsb.js48
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/el.js52
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/en.js44
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/es.js52
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/et.js53
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/eu.js51
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/fa.js38
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/fi.js30
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/fr.js33
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/gl.js39
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/he.js56
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/hi.js39
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/hr.js44
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/hsb.js48
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/hu.js30
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/hy.js38
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/id.js30
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/is.js41
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/it.js48
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/ja.js36
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/km.js36
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/ko.js36
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/lt.js52
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/lv.js51
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/mk.js47
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/ms.js30
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/nb.js32
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/nl.js43
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/pl.js45
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/ps.js45
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/pt-BR.js46
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/pt.js40
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/ro.js46
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/ru.js58
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/sk.js59
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/sl.js54
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/sr-Cyrl.js55
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/sr.js55
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/sv.js37
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/th.js36
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/tr.js36
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/uk.js43
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/vi.js37
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/zh-CN.js36
-rw-r--r--public/bower_components/select2/src/js/select2/i18n/zh-TW.js33
-rw-r--r--public/bower_components/select2/src/js/select2/keys.js25
-rw-r--r--public/bower_components/select2/src/js/select2/options.js122
-rw-r--r--public/bower_components/select2/src/js/select2/results.js523
-rw-r--r--public/bower_components/select2/src/js/select2/selection/allowClear.js97
-rw-r--r--public/bower_components/select2/src/js/select2/selection/base.js158
-rw-r--r--public/bower_components/select2/src/js/select2/selection/clickMask.js29
-rw-r--r--public/bower_components/select2/src/js/select2/selection/eventRelay.js45
-rw-r--r--public/bower_components/select2/src/js/select2/selection/multiple.js109
-rw-r--r--public/bower_components/select2/src/js/select2/selection/placeholder.js49
-rw-r--r--public/bower_components/select2/src/js/select2/selection/search.js222
-rw-r--r--public/bower_components/select2/src/js/select2/selection/single.js99
-rw-r--r--public/bower_components/select2/src/js/select2/selection/stopPropagation.js38
-rw-r--r--public/bower_components/select2/src/js/select2/translation.js36
-rw-r--r--public/bower_components/select2/src/js/select2/utils.js276
-rw-r--r--public/bower_components/select2/src/js/wrapper.end.js12
-rw-r--r--public/bower_components/select2/src/js/wrapper.start.js38
-rw-r--r--public/bower_components/select2/src/scss/_dropdown.scss73
-rw-r--r--public/bower_components/select2/src/scss/_multiple.scss35
-rw-r--r--public/bower_components/select2/src/scss/_single.scss34
-rw-r--r--public/bower_components/select2/src/scss/core.scss48
-rw-r--r--public/bower_components/select2/src/scss/mixins/_gradients.scss13
-rw-r--r--public/bower_components/select2/src/scss/theme/classic/_defaults.scss34
-rw-r--r--public/bower_components/select2/src/scss/theme/classic/_multiple.scss93
-rw-r--r--public/bower_components/select2/src/scss/theme/classic/_single.scss124
-rw-r--r--public/bower_components/select2/src/scss/theme/classic/layout.scss64
-rw-r--r--public/bower_components/select2/src/scss/theme/default/_multiple.scss98
-rw-r--r--public/bower_components/select2/src/scss/theme/default/_single.scss83
-rw-r--r--public/bower_components/select2/src/scss/theme/default/layout.scss97
116 files changed, 8865 insertions, 0 deletions
diff --git a/public/bower_components/select2/src/js/banner.end.js b/public/bower_components/select2/src/js/banner.end.js
new file mode 100644
index 0000000..ea00a03
--- /dev/null
+++ b/public/bower_components/select2/src/js/banner.end.js
@@ -0,0 +1,6 @@
+ // Return the AMD loader configuration so it can be used outside of this file
+ return {
+ define: S2.define,
+ require: S2.require
+ };
+}());
diff --git a/public/bower_components/select2/src/js/banner.start.js b/public/bower_components/select2/src/js/banner.start.js
new file mode 100644
index 0000000..78fe8b0
--- /dev/null
+++ b/public/bower_components/select2/src/js/banner.start.js
@@ -0,0 +1,6 @@
+(function () {
+ // Restore the Select2 AMD loader so it can be used
+ // Needed mostly in the language files, where the loader is not inserted
+ if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {
+ var S2 = jQuery.fn.select2.amd;
+ }
diff --git a/public/bower_components/select2/src/js/jquery.mousewheel.shim.js b/public/bower_components/select2/src/js/jquery.mousewheel.shim.js
new file mode 100644
index 0000000..a27fda0
--- /dev/null
+++ b/public/bower_components/select2/src/js/jquery.mousewheel.shim.js
@@ -0,0 +1,6 @@
+define([
+ 'jquery'
+], function ($) {
+ // Used to shim jQuery.mousewheel for non-full builds.
+ return $;
+});
diff --git a/public/bower_components/select2/src/js/jquery.select2.js b/public/bower_components/select2/src/js/jquery.select2.js
new file mode 100644
index 0000000..a3f8eff
--- /dev/null
+++ b/public/bower_components/select2/src/js/jquery.select2.js
@@ -0,0 +1,57 @@
+define([
+ 'jquery',
+ 'jquery-mousewheel',
+
+ './select2/core',
+ './select2/defaults'
+], function ($, _, Select2, Defaults) {
+ if ($.fn.select2 == null) {
+ // All methods that should return the element
+ var thisMethods = ['open', 'close', 'destroy'];
+
+ $.fn.select2 = function (options) {
+ options = options || {};
+
+ if (typeof options === 'object') {
+ this.each(function () {
+ var instanceOptions = $.extend(true, {}, options);
+
+ var instance = new Select2($(this), instanceOptions);
+ });
+
+ return this;
+ } else if (typeof options === 'string') {
+ var ret;
+ var args = Array.prototype.slice.call(arguments, 1);
+
+ this.each(function () {
+ var instance = $(this).data('select2');
+
+ if (instance == null && window.console && console.error) {
+ console.error(
+ 'The select2(\'' + options + '\') method was called on an ' +
+ 'element that is not using Select2.'
+ );
+ }
+
+ ret = instance[options].apply(instance, args);
+ });
+
+ // Check if we should be returning `this`
+ if ($.inArray(options, thisMethods) > -1) {
+ return this;
+ }
+
+ return ret;
+ } else {
+ throw new Error('Invalid arguments for Select2: ' + options);
+ }
+ };
+ }
+
+ if ($.fn.select2.defaults == null) {
+ $.fn.select2.defaults = Defaults;
+ }
+
+ return Select2;
+});
diff --git a/public/bower_components/select2/src/js/jquery.shim.js b/public/bower_components/select2/src/js/jquery.shim.js
new file mode 100644
index 0000000..880993a
--- /dev/null
+++ b/public/bower_components/select2/src/js/jquery.shim.js
@@ -0,0 +1,14 @@
+/* global jQuery:false, $:false */
+define(function () {
+ var _$ = jQuery || $;
+
+ if (_$ == null && console && console.error) {
+ console.error(
+ 'Select2: An instance of jQuery or a jQuery-compatible library was not ' +
+ 'found. Make sure that you are including jQuery before Select2 on your ' +
+ 'web page.'
+ );
+ }
+
+ return _$;
+});
diff --git a/public/bower_components/select2/src/js/select2/compat/containerCss.js b/public/bower_components/select2/src/js/select2/compat/containerCss.js
new file mode 100644
index 0000000..45703ac
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/compat/containerCss.js
@@ -0,0 +1,56 @@
+define([
+ 'jquery',
+ './utils'
+], function ($, CompatUtils) {
+ // No-op CSS adapter that discards all classes by default
+ function _containerAdapter (clazz) {
+ return null;
+ }
+
+ function ContainerCSS () { }
+
+ ContainerCSS.prototype.render = function (decorated) {
+ var $container = decorated.call(this);
+
+ var containerCssClass = this.options.get('containerCssClass') || '';
+
+ if ($.isFunction(containerCssClass)) {
+ containerCssClass = containerCssClass(this.$element);
+ }
+
+ var containerCssAdapter = this.options.get('adaptContainerCssClass');
+ containerCssAdapter = containerCssAdapter || _containerAdapter;
+
+ if (containerCssClass.indexOf(':all:') !== -1) {
+ containerCssClass = containerCssClass.replace(':all:', '');
+
+ var _cssAdapter = containerCssAdapter;
+
+ containerCssAdapter = function (clazz) {
+ var adapted = _cssAdapter(clazz);
+
+ if (adapted != null) {
+ // Append the old one along with the adapted one
+ return adapted + ' ' + clazz;
+ }
+
+ return clazz;
+ };
+ }
+
+ var containerCss = this.options.get('containerCss') || {};
+
+ if ($.isFunction(containerCss)) {
+ containerCss = containerCss(this.$element);
+ }
+
+ CompatUtils.syncCssClasses($container, this.$element, containerCssAdapter);
+
+ $container.css(containerCss);
+ $container.addClass(containerCssClass);
+
+ return $container;
+ };
+
+ return ContainerCSS;
+});
diff --git a/public/bower_components/select2/src/js/select2/compat/dropdownCss.js b/public/bower_components/select2/src/js/select2/compat/dropdownCss.js
new file mode 100644
index 0000000..02f5582
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/compat/dropdownCss.js
@@ -0,0 +1,56 @@
+define([
+ 'jquery',
+ './utils'
+], function ($, CompatUtils) {
+ // No-op CSS adapter that discards all classes by default
+ function _dropdownAdapter (clazz) {
+ return null;
+ }
+
+ function DropdownCSS () { }
+
+ DropdownCSS.prototype.render = function (decorated) {
+ var $dropdown = decorated.call(this);
+
+ var dropdownCssClass = this.options.get('dropdownCssClass') || '';
+
+ if ($.isFunction(dropdownCssClass)) {
+ dropdownCssClass = dropdownCssClass(this.$element);
+ }
+
+ var dropdownCssAdapter = this.options.get('adaptDropdownCssClass');
+ dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter;
+
+ if (dropdownCssClass.indexOf(':all:') !== -1) {
+ dropdownCssClass = dropdownCssClass.replace(':all:', '');
+
+ var _cssAdapter = dropdownCssAdapter;
+
+ dropdownCssAdapter = function (clazz) {
+ var adapted = _cssAdapter(clazz);
+
+ if (adapted != null) {
+ // Append the old one along with the adapted one
+ return adapted + ' ' + clazz;
+ }
+
+ return clazz;
+ };
+ }
+
+ var dropdownCss = this.options.get('dropdownCss') || {};
+
+ if ($.isFunction(dropdownCss)) {
+ dropdownCss = dropdownCss(this.$element);
+ }
+
+ CompatUtils.syncCssClasses($dropdown, this.$element, dropdownCssAdapter);
+
+ $dropdown.css(dropdownCss);
+ $dropdown.addClass(dropdownCssClass);
+
+ return $dropdown;
+ };
+
+ return DropdownCSS;
+});
diff --git a/public/bower_components/select2/src/js/select2/compat/initSelection.js b/public/bower_components/select2/src/js/select2/compat/initSelection.js
new file mode 100644
index 0000000..71ee29d
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/compat/initSelection.js
@@ -0,0 +1,42 @@
+define([
+ 'jquery'
+], function ($) {
+ function InitSelection (decorated, $element, options) {
+ if (options.get('debug') && window.console && console.warn) {
+ console.warn(
+ 'Select2: The `initSelection` option has been deprecated in favor' +
+ ' of a custom data adapter that overrides the `current` method. ' +
+ 'This method is now called multiple times instead of a single ' +
+ 'time when the instance is initialized. Support will be removed ' +
+ 'for the `initSelection` option in future versions of Select2'
+ );
+ }
+
+ this.initSelection = options.get('initSelection');
+ this._isInitialized = false;
+
+ decorated.call(this, $element, options);
+ }
+
+ InitSelection.prototype.current = function (decorated, callback) {
+ var self = this;
+
+ if (this._isInitialized) {
+ decorated.call(this, callback);
+
+ return;
+ }
+
+ this.initSelection.call(null, this.$element, function (data) {
+ self._isInitialized = true;
+
+ if (!$.isArray(data)) {
+ data = [data];
+ }
+
+ callback(data);
+ });
+ };
+
+ return InitSelection;
+});
diff --git a/public/bower_components/select2/src/js/select2/compat/inputData.js b/public/bower_components/select2/src/js/select2/compat/inputData.js
new file mode 100644
index 0000000..a338bf1
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/compat/inputData.js
@@ -0,0 +1,127 @@
+define([
+ 'jquery'
+], function ($) {
+ function InputData (decorated, $element, options) {
+ this._currentData = [];
+ this._valueSeparator = options.get('valueSeparator') || ',';
+
+ if ($element.prop('type') === 'hidden') {
+ if (options.get('debug') && console && console.warn) {
+ console.warn(
+ 'Select2: Using a hidden input with Select2 is no longer ' +
+ 'supported and may stop working in the future. It is recommended ' +
+ 'to use a `<select>` element instead.'
+ );
+ }
+ }
+
+ decorated.call(this, $element, options);
+ }
+
+ InputData.prototype.current = function (_, callback) {
+ function getSelected (data, selectedIds) {
+ var selected = [];
+
+ if (data.selected || $.inArray(data.id, selectedIds) !== -1) {
+ data.selected = true;
+ selected.push(data);
+ } else {
+ data.selected = false;
+ }
+
+ if (data.children) {
+ selected.push.apply(selected, getSelected(data.children, selectedIds));
+ }
+
+ return selected;
+ }
+
+ var selected = [];
+
+ for (var d = 0; d < this._currentData.length; d++) {
+ var data = this._currentData[d];
+
+ selected.push.apply(
+ selected,
+ getSelected(
+ data,
+ this.$element.val().split(
+ this._valueSeparator
+ )
+ )
+ );
+ }
+
+ callback(selected);
+ };
+
+ InputData.prototype.select = function (_, data) {
+ if (!this.options.get('multiple')) {
+ this.current(function (allData) {
+ $.map(allData, function (data) {
+ data.selected = false;
+ });
+ });
+
+ this.$element.val(data.id);
+ this.$element.trigger('change');
+ } else {
+ var value = this.$element.val();
+ value += this._valueSeparator + data.id;
+
+ this.$element.val(value);
+ this.$element.trigger('change');
+ }
+ };
+
+ InputData.prototype.unselect = function (_, data) {
+ var self = this;
+
+ data.selected = false;
+
+ this.current(function (allData) {
+ var values = [];
+
+ for (var d = 0; d < allData.length; d++) {
+ var item = allData[d];
+
+ if (data.id == item.id) {
+ continue;
+ }
+
+ values.push(item.id);
+ }
+
+ self.$element.val(values.join(self._valueSeparator));
+ self.$element.trigger('change');
+ });
+ };
+
+ InputData.prototype.query = function (_, params, callback) {
+ var results = [];
+
+ for (var d = 0; d < this._currentData.length; d++) {
+ var data = this._currentData[d];
+
+ var matches = this.matches(params, data);
+
+ if (matches !== null) {
+ results.push(matches);
+ }
+ }
+
+ callback({
+ results: results
+ });
+ };
+
+ InputData.prototype.addOptions = function (_, $options) {
+ var options = $.map($options, function ($option) {
+ return $.data($option[0], 'data');
+ });
+
+ this._currentData.push.apply(this._currentData, options);
+ };
+
+ return InputData;
+});
diff --git a/public/bower_components/select2/src/js/select2/compat/matcher.js b/public/bower_components/select2/src/js/select2/compat/matcher.js
new file mode 100644
index 0000000..a975fdd
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/compat/matcher.js
@@ -0,0 +1,42 @@
+define([
+ 'jquery'
+], function ($) {
+ function oldMatcher (matcher) {
+ function wrappedMatcher (params, data) {
+ var match = $.extend(true, {}, data);
+
+ if (params.term == null || $.trim(params.term) === '') {
+ return match;
+ }
+
+ if (data.children) {
+ for (var c = data.children.length - 1; c >= 0; c--) {
+ var child = data.children[c];
+
+ // Check if the child object matches
+ // The old matcher returned a boolean true or false
+ var doesMatch = matcher(params.term, child.text, child);
+
+ // If the child didn't match, pop it off
+ if (!doesMatch) {
+ match.children.splice(c, 1);
+ }
+ }
+
+ if (match.children.length > 0) {
+ return match;
+ }
+ }
+
+ if (matcher(params.term, data.text, data)) {
+ return match;
+ }
+
+ return null;
+ }
+
+ return wrappedMatcher;
+ }
+
+ return oldMatcher;
+});
diff --git a/public/bower_components/select2/src/js/select2/compat/query.js b/public/bower_components/select2/src/js/select2/compat/query.js
new file mode 100644
index 0000000..f2884a7
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/compat/query.js
@@ -0,0 +1,26 @@
+define([
+
+], function () {
+ function Query (decorated, $element, options) {
+ if (options.get('debug') && window.console && console.warn) {
+ console.warn(
+ 'Select2: The `query` option has been deprecated in favor of a ' +
+ 'custom data adapter that overrides the `query` method. Support ' +
+ 'will be removed for the `query` option in future versions of ' +
+ 'Select2.'
+ );
+ }
+
+ decorated.call(this, $element, options);
+ }
+
+ Query.prototype.query = function (_, params, callback) {
+ params.callback = callback;
+
+ var query = this.options.get('query');
+
+ query.call(null, params);
+ };
+
+ return Query;
+});
diff --git a/public/bower_components/select2/src/js/select2/compat/utils.js b/public/bower_components/select2/src/js/select2/compat/utils.js
new file mode 100644
index 0000000..5a3ea1c
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/compat/utils.js
@@ -0,0 +1,43 @@
+define([
+ 'jquery'
+], function ($) {
+ function syncCssClasses ($dest, $src, adapter) {
+ var classes, replacements = [], adapted;
+
+ classes = $.trim($dest.attr('class'));
+
+ if (classes) {
+ classes = '' + classes; // for IE which returns object
+
+ $(classes.split(/\s+/)).each(function () {
+ // Save all Select2 classes
+ if (this.indexOf('select2-') === 0) {
+ replacements.push(this);
+ }
+ });
+ }
+
+ classes = $.trim($src.attr('class'));
+
+ if (classes) {
+ classes = '' + classes; // for IE which returns object
+
+ $(classes.split(/\s+/)).each(function () {
+ // Only adapt non-Select2 classes
+ if (this.indexOf('select2-') !== 0) {
+ adapted = adapter(this);
+
+ if (adapted != null) {
+ replacements.push(adapted);
+ }
+ }
+ });
+ }
+
+ $dest.attr('class', replacements.join(' '));
+ }
+
+ return {
+ syncCssClasses: syncCssClasses
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/core.js b/public/bower_components/select2/src/js/select2/core.js
new file mode 100644
index 0000000..4ba06ed
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/core.js
@@ -0,0 +1,612 @@
+define([
+ 'jquery',
+ './options',
+ './utils',
+ './keys'
+], function ($, Options, Utils, KEYS) {
+ var Select2 = function ($element, options) {
+ if ($element.data('select2') != null) {
+ $element.data('select2').destroy();
+ }
+
+ this.$element = $element;
+
+ this.id = this._generateId($element);
+
+ options = options || {};
+
+ this.options = new Options(options, $element);
+
+ Select2.__super__.constructor.call(this);
+
+ // Set up the tabindex
+
+ var tabindex = $element.attr('tabindex') || 0;
+ $element.data('old-tabindex', tabindex);
+ $element.attr('tabindex', '-1');
+
+ // Set up containers and adapters
+
+ var DataAdapter = this.options.get('dataAdapter');
+ this.dataAdapter = new DataAdapter($element, this.options);
+
+ var $container = this.render();
+
+ this._placeContainer($container);
+
+ var SelectionAdapter = this.options.get('selectionAdapter');
+ this.selection = new SelectionAdapter($element, this.options);
+ this.$selection = this.selection.render();
+
+ this.selection.position(this.$selection, $container);
+
+ var DropdownAdapter = this.options.get('dropdownAdapter');
+ this.dropdown = new DropdownAdapter($element, this.options);
+ this.$dropdown = this.dropdown.render();
+
+ this.dropdown.position(this.$dropdown, $container);
+
+ var ResultsAdapter = this.options.get('resultsAdapter');
+ this.results = new ResultsAdapter($element, this.options, this.dataAdapter);
+ this.$results = this.results.render();
+
+ this.results.position(this.$results, this.$dropdown);
+
+ // Bind events
+
+ var self = this;
+
+ // Bind the container to all of the adapters
+ this._bindAdapters();
+
+ // Register any DOM event handlers
+ this._registerDomEvents();
+
+ // Register any internal event handlers
+ this._registerDataEvents();
+ this._registerSelectionEvents();
+ this._registerDropdownEvents();
+ this._registerResultsEvents();
+ this._registerEvents();
+
+ // Set the initial state
+ this.dataAdapter.current(function (initialData) {
+ self.trigger('selection:update', {
+ data: initialData
+ });
+ });
+
+ // Hide the original select
+ $element.addClass('select2-hidden-accessible');
+ $element.attr('aria-hidden', 'true');
+
+ // Synchronize any monitored attributes
+ this._syncAttributes();
+
+ $element.data('select2', this);
+ };
+
+ Utils.Extend(Select2, Utils.Observable);
+
+ Select2.prototype._generateId = function ($element) {
+ var id = '';
+
+ if ($element.attr('id') != null) {
+ id = $element.attr('id');
+ } else if ($element.attr('name') != null) {
+ id = $element.attr('name') + '-' + Utils.generateChars(2);
+ } else {
+ id = Utils.generateChars(4);
+ }
+
+ id = id.replace(/(:|\.|\[|\]|,)/g, '');
+ id = 'select2-' + id;
+
+ return id;
+ };
+
+ Select2.prototype._placeContainer = function ($container) {
+ $container.insertAfter(this.$element);
+
+ var width = this._resolveWidth(this.$element, this.options.get('width'));
+
+ if (width != null) {
+ $container.css('width', width);
+ }
+ };
+
+ Select2.prototype._resolveWidth = function ($element, method) {
+ var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;
+
+ if (method == 'resolve') {
+ var styleWidth = this._resolveWidth($element, 'style');
+
+ if (styleWidth != null) {
+ return styleWidth;
+ }
+
+ return this._resolveWidth($element, 'element');
+ }
+
+ if (method == 'element') {
+ var elementWidth = $element.outerWidth(false);
+
+ if (elementWidth <= 0) {
+ return 'auto';
+ }
+
+ return elementWidth + 'px';
+ }
+
+ if (method == 'style') {
+ var style = $element.attr('style');
+
+ if (typeof(style) !== 'string') {
+ return null;
+ }
+
+ var attrs = style.split(';');
+
+ for (var i = 0, l = attrs.length; i < l; i = i + 1) {
+ var attr = attrs[i].replace(/\s/g, '');
+ var matches = attr.match(WIDTH);
+
+ if (matches !== null && matches.length >= 1) {
+ return matches[1];
+ }
+ }
+
+ return null;
+ }
+
+ return method;
+ };
+
+ Select2.prototype._bindAdapters = function () {
+ this.dataAdapter.bind(this, this.$container);
+ this.selection.bind(this, this.$container);
+
+ this.dropdown.bind(this, this.$container);
+ this.results.bind(this, this.$container);
+ };
+
+ Select2.prototype._registerDomEvents = function () {
+ var self = this;
+
+ this.$element.on('change.select2', function () {
+ self.dataAdapter.current(function (data) {
+ self.trigger('selection:update', {
+ data: data
+ });
+ });
+ });
+
+ this.$element.on('focus.select2', function (evt) {
+ self.trigger('focus', evt);
+ });
+
+ this._syncA = Utils.bind(this._syncAttributes, this);
+ this._syncS = Utils.bind(this._syncSubtree, this);
+
+ if (this.$element[0].attachEvent) {
+ this.$element[0].attachEvent('onpropertychange', this._syncA);
+ }
+
+ var observer = window.MutationObserver ||
+ window.WebKitMutationObserver ||
+ window.MozMutationObserver
+ ;
+
+ if (observer != null) {
+ this._observer = new observer(function (mutations) {
+ $.each(mutations, self._syncA);
+ $.each(mutations, self._syncS);
+ });
+ this._observer.observe(this.$element[0], {
+ attributes: true,
+ childList: true,
+ subtree: false
+ });
+ } else if (this.$element[0].addEventListener) {
+ this.$element[0].addEventListener(
+ 'DOMAttrModified',
+ self._syncA,
+ false
+ );
+ this.$element[0].addEventListener(
+ 'DOMNodeInserted',
+ self._syncS,
+ false
+ );
+ this.$element[0].addEventListener(
+ 'DOMNodeRemoved',
+ self._syncS,
+ false
+ );
+ }
+ };
+
+ Select2.prototype._registerDataEvents = function () {
+ var self = this;
+
+ this.dataAdapter.on('*', function (name, params) {
+ self.trigger(name, params);
+ });
+ };
+
+ Select2.prototype._registerSelectionEvents = function () {
+ var self = this;
+ var nonRelayEvents = ['toggle', 'focus'];
+
+ this.selection.on('toggle', function () {
+ self.toggleDropdown();
+ });
+
+ this.selection.on('focus', function (params) {
+ self.focus(params);
+ });
+
+ this.selection.on('*', function (name, params) {
+ if ($.inArray(name, nonRelayEvents) !== -1) {
+ return;
+ }
+
+ self.trigger(name, params);
+ });
+ };
+
+ Select2.prototype._registerDropdownEvents = function () {
+ var self = this;
+
+ this.dropdown.on('*', function (name, params) {
+ self.trigger(name, params);
+ });
+ };
+
+ Select2.prototype._registerResultsEvents = function () {
+ var self = this;
+
+ this.results.on('*', function (name, params) {
+ self.trigger(name, params);
+ });
+ };
+
+ Select2.prototype._registerEvents = function () {
+ var self = this;
+
+ this.on('open', function () {
+ self.$container.addClass('select2-container--open');
+ });
+
+ this.on('close', function () {
+ self.$container.removeClass('select2-container--open');
+ });
+
+ this.on('enable', function () {
+ self.$container.removeClass('select2-container--disabled');
+ });
+
+ this.on('disable', function () {
+ self.$container.addClass('select2-container--disabled');
+ });
+
+ this.on('blur', function () {
+ self.$container.removeClass('select2-container--focus');
+ });
+
+ this.on('query', function (params) {
+ if (!self.isOpen()) {
+ self.trigger('open', {});
+ }
+
+ this.dataAdapter.query(params, function (data) {
+ self.trigger('results:all', {
+ data: data,
+ query: params
+ });
+ });
+ });
+
+ this.on('query:append', function (params) {
+ this.dataAdapter.query(params, function (data) {
+ self.trigger('results:append', {
+ data: data,
+ query: params
+ });
+ });
+ });
+
+ this.on('keypress', function (evt) {
+ var key = evt.which;
+
+ if (self.isOpen()) {
+ if (key === KEYS.ESC || key === KEYS.TAB ||
+ (key === KEYS.UP && evt.altKey)) {
+ self.close();
+
+ evt.preventDefault();
+ } else if (key === KEYS.ENTER) {
+ self.trigger('results:select', {});
+
+ evt.preventDefault();
+ } else if ((key === KEYS.SPACE && evt.ctrlKey)) {
+ self.trigger('results:toggle', {});
+
+ evt.preventDefault();
+ } else if (key === KEYS.UP) {
+ self.trigger('results:previous', {});
+
+ evt.preventDefault();
+ } else if (key === KEYS.DOWN) {
+ self.trigger('results:next', {});
+
+ evt.preventDefault();
+ }
+ } else {
+ if (key === KEYS.ENTER || key === KEYS.SPACE ||
+ (key === KEYS.DOWN && evt.altKey)) {
+ self.open();
+
+ evt.preventDefault();
+ }
+ }
+ });
+ };
+
+ Select2.prototype._syncAttributes = function () {
+ this.options.set('disabled', this.$element.prop('disabled'));
+
+ if (this.options.get('disabled')) {
+ if (this.isOpen()) {
+ this.close();
+ }
+
+ this.trigger('disable', {});
+ } else {
+ this.trigger('enable', {});
+ }
+ };
+
+ Select2.prototype._syncSubtree = function (evt, mutations) {
+ var changed = false;
+ var self = this;
+
+ // Ignore any mutation events raised for elements that aren't options or
+ // optgroups. This handles the case when the select element is destroyed
+ if (
+ evt && evt.target && (
+ evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'
+ )
+ ) {
+ return;
+ }
+
+ if (!mutations) {
+ // If mutation events aren't supported, then we can only assume that the
+ // change affected the selections
+ changed = true;
+ } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {
+ for (var n = 0; n < mutations.addedNodes.length; n++) {
+ var node = mutations.addedNodes[n];
+
+ if (node.selected) {
+ changed = true;
+ }
+ }
+ } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {
+ changed = true;
+ }
+
+ // Only re-pull the data if we think there is a change
+ if (changed) {
+ this.dataAdapter.current(function (currentData) {
+ self.trigger('selection:update', {
+ data: currentData
+ });
+ });
+ }
+ };
+
+ /**
+ * Override the trigger method to automatically trigger pre-events when
+ * there are events that can be prevented.
+ */
+ Select2.prototype.trigger = function (name, args) {
+ var actualTrigger = Select2.__super__.trigger;
+ var preTriggerMap = {
+ 'open': 'opening',
+ 'close': 'closing',
+ 'select': 'selecting',
+ 'unselect': 'unselecting'
+ };
+
+ if (args === undefined) {
+ args = {};
+ }
+
+ if (name in preTriggerMap) {
+ var preTriggerName = preTriggerMap[name];
+ var preTriggerArgs = {
+ prevented: false,
+ name: name,
+ args: args
+ };
+
+ actualTrigger.call(this, preTriggerName, preTriggerArgs);
+
+ if (preTriggerArgs.prevented) {
+ args.prevented = true;
+
+ return;
+ }
+ }
+
+ actualTrigger.call(this, name, args);
+ };
+
+ Select2.prototype.toggleDropdown = function () {
+ if (this.options.get('disabled')) {
+ return;
+ }
+
+ if (this.isOpen()) {
+ this.close();
+ } else {
+ this.open();
+ }
+ };
+
+ Select2.prototype.open = function () {
+ if (this.isOpen()) {
+ return;
+ }
+
+ this.trigger('query', {});
+ };
+
+ Select2.prototype.close = function () {
+ if (!this.isOpen()) {
+ return;
+ }
+
+ this.trigger('close', {});
+ };
+
+ Select2.prototype.isOpen = function () {
+ return this.$container.hasClass('select2-container--open');
+ };
+
+ Select2.prototype.hasFocus = function () {
+ return this.$container.hasClass('select2-container--focus');
+ };
+
+ Select2.prototype.focus = function (data) {
+ // No need to re-trigger focus events if we are already focused
+ if (this.hasFocus()) {
+ return;
+ }
+
+ this.$container.addClass('select2-container--focus');
+ this.trigger('focus', {});
+ };
+
+ Select2.prototype.enable = function (args) {
+ if (this.options.get('debug') && window.console && console.warn) {
+ console.warn(
+ 'Select2: The `select2("enable")` method has been deprecated and will' +
+ ' be removed in later Select2 versions. Use $element.prop("disabled")' +
+ ' instead.'
+ );
+ }
+
+ if (args == null || args.length === 0) {
+ args = [true];
+ }
+
+ var disabled = !args[0];
+
+ this.$element.prop('disabled', disabled);
+ };
+
+ Select2.prototype.data = function () {
+ if (this.options.get('debug') &&
+ arguments.length > 0 && window.console && console.warn) {
+ console.warn(
+ 'Select2: Data can no longer be set using `select2("data")`. You ' +
+ 'should consider setting the value instead using `$element.val()`.'
+ );
+ }
+
+ var data = [];
+
+ this.dataAdapter.current(function (currentData) {
+ data = currentData;
+ });
+
+ return data;
+ };
+
+ Select2.prototype.val = function (args) {
+ if (this.options.get('debug') && window.console && console.warn) {
+ console.warn(
+ 'Select2: The `select2("val")` method has been deprecated and will be' +
+ ' removed in later Select2 versions. Use $element.val() instead.'
+ );
+ }
+
+ if (args == null || args.length === 0) {
+ return this.$element.val();
+ }
+
+ var newVal = args[0];
+
+ if ($.isArray(newVal)) {
+ newVal = $.map(newVal, function (obj) {
+ return obj.toString();
+ });
+ }
+
+ this.$element.val(newVal).trigger('change');
+ };
+
+ Select2.prototype.destroy = function () {
+ this.$container.remove();
+
+ if (this.$element[0].detachEvent) {
+ this.$element[0].detachEvent('onpropertychange', this._syncA);
+ }
+
+ if (this._observer != null) {
+ this._observer.disconnect();
+ this._observer = null;
+ } else if (this.$element[0].removeEventListener) {
+ this.$element[0]
+ .removeEventListener('DOMAttrModified', this._syncA, false);
+ this.$element[0]
+ .removeEventListener('DOMNodeInserted', this._syncS, false);
+ this.$element[0]
+ .removeEventListener('DOMNodeRemoved', this._syncS, false);
+ }
+
+ this._syncA = null;
+ this._syncS = null;
+
+ this.$element.off('.select2');
+ this.$element.attr('tabindex', this.$element.data('old-tabindex'));
+
+ this.$element.removeClass('select2-hidden-accessible');
+ this.$element.attr('aria-hidden', 'false');
+ this.$element.removeData('select2');
+
+ this.dataAdapter.destroy();
+ this.selection.destroy();
+ this.dropdown.destroy();
+ this.results.destroy();
+
+ this.dataAdapter = null;
+ this.selection = null;
+ this.dropdown = null;
+ this.results = null;
+ };
+
+ Select2.prototype.render = function () {
+ var $container = $(
+ '<span class="select2 select2-container">' +
+ '<span class="selection"></span>' +
+ '<span class="dropdown-wrapper" aria-hidden="true"></span>' +
+ '</span>'
+ );
+
+ $container.attr('dir', this.options.get('dir'));
+
+ this.$container = $container;
+
+ this.$container.addClass('select2-container--' + this.options.get('theme'));
+
+ $container.data('element', this.$element);
+
+ return $container;
+ };
+
+ return Select2;
+});
diff --git a/public/bower_components/select2/src/js/select2/data/ajax.js b/public/bower_components/select2/src/js/select2/data/ajax.js
new file mode 100644
index 0000000..97d3416
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/data/ajax.js
@@ -0,0 +1,109 @@
+define([
+ './array',
+ '../utils',
+ 'jquery'
+], function (ArrayAdapter, Utils, $) {
+ function AjaxAdapter ($element, options) {
+ this.ajaxOptions = this._applyDefaults(options.get('ajax'));
+
+ if (this.ajaxOptions.processResults != null) {
+ this.processResults = this.ajaxOptions.processResults;
+ }
+
+ AjaxAdapter.__super__.constructor.call(this, $element, options);
+ }
+
+ Utils.Extend(AjaxAdapter, ArrayAdapter);
+
+ AjaxAdapter.prototype._applyDefaults = function (options) {
+ var defaults = {
+ data: function (params) {
+ return $.extend({}, params, {
+ q: params.term
+ });
+ },
+ transport: function (params, success, failure) {
+ var $request = $.ajax(params);
+
+ $request.then(success);
+ $request.fail(failure);
+
+ return $request;
+ }
+ };
+
+ return $.extend({}, defaults, options, true);
+ };
+
+ AjaxAdapter.prototype.processResults = function (results) {
+ return results;
+ };
+
+ AjaxAdapter.prototype.query = function (params, callback) {
+ var matches = [];
+ var self = this;
+
+ if (this._request != null) {
+ // JSONP requests cannot always be aborted
+ if ($.isFunction(this._request.abort)) {
+ this._request.abort();
+ }
+
+ this._request = null;
+ }
+
+ var options = $.extend({
+ type: 'GET'
+ }, this.ajaxOptions);
+
+ if (typeof options.url === 'function') {
+ options.url = options.url.call(this.$element, params);
+ }
+
+ if (typeof options.data === 'function') {
+ options.data = options.data.call(this.$element, params);
+ }
+
+ function request () {
+ var $request = options.transport(options, function (data) {
+ var results = self.processResults(data, params);
+
+ if (self.options.get('debug') && window.console && console.error) {
+ // Check to make sure that the response included a `results` key.
+ if (!results || !results.results || !$.isArray(results.results)) {
+ console.error(
+ 'Select2: The AJAX results did not return an array in the ' +
+ '`results` key of the response.'
+ );
+ }
+ }
+
+ callback(results);
+ }, function () {
+ // Attempt to detect if a request was aborted
+ // Only works if the transport exposes a status property
+ if ($request.status && $request.status === '0') {
+ return;
+ }
+
+ self.trigger('results:message', {
+ message: 'errorLoading'
+ });
+ });
+
+ self._request = $request;
+ }
+
+ if (this.ajaxOptions.delay && params.term != null) {
+ if (this._queryTimeout) {
+ window.clearTimeout(this._queryTimeout);
+ }
+
+ this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);
+ } else {
+ request();
+ }
+ };
+
+ return AjaxAdapter;
+});
diff --git a/public/bower_components/select2/src/js/select2/data/array.js b/public/bower_components/select2/src/js/select2/data/array.js
new file mode 100644
index 0000000..b889966
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/data/array.js
@@ -0,0 +1,79 @@
+define([
+ './select',
+ '../utils',
+ 'jquery'
+], function (SelectAdapter, Utils, $) {
+ function ArrayAdapter ($element, options) {
+ var data = options.get('data') || [];
+
+ ArrayAdapter.__super__.constructor.call(this, $element, options);
+
+ this.addOptions(this.convertToOptions(data));
+ }
+
+ Utils.Extend(ArrayAdapter, SelectAdapter);
+
+ ArrayAdapter.prototype.select = function (data) {
+ var $option = this.$element.find('option').filter(function (i, elm) {
+ return elm.value == data.id.toString();
+ });
+
+ if ($option.length === 0) {
+ $option = this.option(data);
+
+ this.addOptions($option);
+ }
+
+ ArrayAdapter.__super__.select.call(this, data);
+ };
+
+ ArrayAdapter.prototype.convertToOptions = function (data) {
+ var self = this;
+
+ var $existing = this.$element.find('option');
+ var existingIds = $existing.map(function () {
+ return self.item($(this)).id;
+ }).get();
+
+ var $options = [];
+
+ // Filter out all items except for the one passed in the argument
+ function onlyItem (item) {
+ return function () {
+ return $(this).val() == item.id;
+ };
+ }
+
+ for (var d = 0; d < data.length; d++) {
+ var item = this._normalizeItem(data[d]);
+
+ // Skip items which were pre-loaded, only merge the data
+ if ($.inArray(item.id, existingIds) >= 0) {
+ var $existingOption = $existing.filter(onlyItem(item));
+
+ var existingData = this.item($existingOption);
+ var newData = $.extend(true, {}, item, existingData);
+
+ var $newOption = this.option(newData);
+
+ $existingOption.replaceWith($newOption);
+
+ continue;
+ }
+
+ var $option = this.option(item);
+
+ if (item.children) {
+ var $children = this.convertToOptions(item.children);
+
+ Utils.appendMany($option, $children);
+ }
+
+ $options.push($option);
+ }
+
+ return $options;
+ };
+
+ return ArrayAdapter;
+});
diff --git a/public/bower_components/select2/src/js/select2/data/base.js b/public/bower_components/select2/src/js/select2/data/base.js
new file mode 100644
index 0000000..e35054d
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/data/base.js
@@ -0,0 +1,40 @@
+define([
+ '../utils'
+], function (Utils) {
+ function BaseAdapter ($element, options) {
+ BaseAdapter.__super__.constructor.call(this);
+ }
+
+ Utils.Extend(BaseAdapter, Utils.Observable);
+
+ BaseAdapter.prototype.current = function (callback) {
+ throw new Error('The `current` method must be defined in child classes.');
+ };
+
+ BaseAdapter.prototype.query = function (params, callback) {
+ throw new Error('The `query` method must be defined in child classes.');
+ };
+
+ BaseAdapter.prototype.bind = function (container, $container) {
+ // Can be implemented in subclasses
+ };
+
+ BaseAdapter.prototype.destroy = function () {
+ // Can be implemented in subclasses
+ };
+
+ BaseAdapter.prototype.generateResultId = function (container, data) {
+ var id = container.id + '-result-';
+
+ id += Utils.generateChars(4);
+
+ if (data.id != null) {
+ id += '-' + data.id.toString();
+ } else {
+ id += '-' + Utils.generateChars(4);
+ }
+ return id;
+ };
+
+ return BaseAdapter;
+});
diff --git a/public/bower_components/select2/src/js/select2/data/maximumInputLength.js b/public/bower_components/select2/src/js/select2/data/maximumInputLength.js
new file mode 100644
index 0000000..f303ba8
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/data/maximumInputLength.js
@@ -0,0 +1,31 @@
+define([
+
+], function () {
+ function MaximumInputLength (decorated, $e, options) {
+ this.maximumInputLength = options.get('maximumInputLength');
+
+ decorated.call(this, $e, options);
+ }
+
+ MaximumInputLength.prototype.query = function (decorated, params, callback) {
+ params.term = params.term || '';
+
+ if (this.maximumInputLength > 0 &&
+ params.term.length > this.maximumInputLength) {
+ this.trigger('results:message', {
+ message: 'inputTooLong',
+ args: {
+ maximum: this.maximumInputLength,
+ input: params.term,
+ params: params
+ }
+ });
+
+ return;
+ }
+
+ decorated.call(this, params, callback);
+ };
+
+ return MaximumInputLength;
+});
diff --git a/public/bower_components/select2/src/js/select2/data/maximumSelectionLength.js b/public/bower_components/select2/src/js/select2/data/maximumSelectionLength.js
new file mode 100644
index 0000000..ae72752
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/data/maximumSelectionLength.js
@@ -0,0 +1,31 @@
+define([
+
+], function (){
+ function MaximumSelectionLength (decorated, $e, options) {
+ this.maximumSelectionLength = options.get('maximumSelectionLength');
+
+ decorated.call(this, $e, options);
+ }
+
+ MaximumSelectionLength.prototype.query =
+ function (decorated, params, callback) {
+ var self = this;
+
+ this.current(function (currentData) {
+ var count = currentData != null ? currentData.length : 0;
+ if (self.maximumSelectionLength > 0 &&
+ count >= self.maximumSelectionLength) {
+ self.trigger('results:message', {
+ message: 'maximumSelected',
+ args: {
+ maximum: self.maximumSelectionLength
+ }
+ });
+ return;
+ }
+ decorated.call(self, params, callback);
+ });
+ };
+
+ return MaximumSelectionLength;
+});
diff --git a/public/bower_components/select2/src/js/select2/data/minimumInputLength.js b/public/bower_components/select2/src/js/select2/data/minimumInputLength.js
new file mode 100644
index 0000000..c19f71c
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/data/minimumInputLength.js
@@ -0,0 +1,30 @@
+define([
+
+], function () {
+ function MinimumInputLength (decorated, $e, options) {
+ this.minimumInputLength = options.get('minimumInputLength');
+
+ decorated.call(this, $e, options);
+ }
+
+ MinimumInputLength.prototype.query = function (decorated, params, callback) {
+ params.term = params.term || '';
+
+ if (params.term.length < this.minimumInputLength) {
+ this.trigger('results:message', {
+ message: 'inputTooShort',
+ args: {
+ minimum: this.minimumInputLength,
+ input: params.term,
+ params: params
+ }
+ });
+
+ return;
+ }
+
+ decorated.call(this, params, callback);
+ };
+
+ return MinimumInputLength;
+});
diff --git a/public/bower_components/select2/src/js/select2/data/select.js b/public/bower_components/select2/src/js/select2/data/select.js
new file mode 100644
index 0000000..6865a47
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/data/select.js
@@ -0,0 +1,285 @@
+define([
+ './base',
+ '../utils',
+ 'jquery'
+], function (BaseAdapter, Utils, $) {
+ function SelectAdapter ($element, options) {
+ this.$element = $element;
+ this.options = options;
+
+ SelectAdapter.__super__.constructor.call(this);
+ }
+
+ Utils.Extend(SelectAdapter, BaseAdapter);
+
+ SelectAdapter.prototype.current = function (callback) {
+ var data = [];
+ var self = this;
+
+ this.$element.find(':selected').each(function () {
+ var $option = $(this);
+
+ var option = self.item($option);
+
+ data.push(option);
+ });
+
+ callback(data);
+ };
+
+ SelectAdapter.prototype.select = function (data) {
+ var self = this;
+
+ data.selected = true;
+
+ // If data.element is a DOM node, use it instead
+ if ($(data.element).is('option')) {
+ data.element.selected = true;
+
+ this.$element.trigger('change');
+
+ return;
+ }
+
+ 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++) {
+ var id = data[d].id;
+
+ if ($.inArray(id, val) === -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;
+ }
+
+ data.selected = false;
+
+ if ($(data.element).is('option')) {
+ data.element.selected = false;
+
+ this.$element.trigger('change');
+
+ return;
+ }
+
+ this.current(function (currentData) {
+ var val = [];
+
+ for (var d = 0; d < currentData.length; d++) {
+ var id = currentData[d].id;
+
+ if (id !== data.id && $.inArray(id, val) === -1) {
+ val.push(id);
+ }
+ }
+
+ self.$element.val(val);
+
+ self.$element.trigger('change');
+ });
+ };
+
+ SelectAdapter.prototype.bind = function (container, $container) {
+ var self = this;
+
+ this.container = container;
+
+ container.on('select', function (params) {
+ self.select(params.data);
+ });
+
+ container.on('unselect', function (params) {
+ self.unselect(params.data);
+ });
+ };
+
+ SelectAdapter.prototype.destroy = function () {
+ // Remove anything added to child elements
+ this.$element.find('*').each(function () {
+ // Remove any custom data set by Select2
+ $.removeData(this, 'data');
+ });
+ };
+
+ SelectAdapter.prototype.query = function (params, callback) {
+ var data = [];
+ var self = this;
+
+ var $options = this.$element.children();
+
+ $options.each(function () {
+ var $option = $(this);
+
+ if (!$option.is('option') && !$option.is('optgroup')) {
+ return;
+ }
+
+ var option = self.item($option);
+
+ var matches = self.matches(params, option);
+
+ if (matches !== null) {
+ data.push(matches);
+ }
+ });
+
+ callback({
+ results: data
+ });
+ };
+
+ SelectAdapter.prototype.addOptions = function ($options) {
+ Utils.appendMany(this.$element, $options);
+ };
+
+ SelectAdapter.prototype.option = function (data) {
+ var option;
+
+ if (data.children) {
+ option = document.createElement('optgroup');
+ option.label = data.text;
+ } else {
+ option = document.createElement('option');
+
+ if (option.textContent !== undefined) {
+ option.textContent = data.text;
+ } else {
+ option.innerText = data.text;
+ }
+ }
+
+ if (data.id !== undefined) {
+ option.value = data.id;
+ }
+
+ if (data.disabled) {
+ option.disabled = true;
+ }
+
+ if (data.selected) {
+ option.selected = true;
+ }
+
+ if (data.title) {
+ option.title = data.title;
+ }
+
+ var $option = $(option);
+
+ var normalizedData = this._normalizeItem(data);
+ normalizedData.element = option;
+
+ // Override the option's data with the combined data
+ $.data(option, 'data', normalizedData);
+
+ return $option;
+ };
+
+ SelectAdapter.prototype.item = function ($option) {
+ var data = {};
+
+ data = $.data($option[0], 'data');
+
+ if (data != null) {
+ return data;
+ }
+
+ if ($option.is('option')) {
+ data = {
+ id: $option.val(),
+ text: $option.text(),
+ disabled: $option.prop('disabled'),
+ selected: $option.prop('selected'),
+ title: $option.prop('title')
+ };
+ } else if ($option.is('optgroup')) {
+ data = {
+ text: $option.prop('label'),
+ children: [],
+ title: $option.prop('title')
+ };
+
+ var $children = $option.children('option');
+ var children = [];
+
+ for (var c = 0; c < $children.length; c++) {
+ var $child = $($children[c]);
+
+ var child = this.item($child);
+
+ children.push(child);
+ }
+
+ data.children = children;
+ }
+
+ data = this._normalizeItem(data);
+ data.element = $option[0];
+
+ $.data($option[0], 'data', data);
+
+ return data;
+ };
+
+ SelectAdapter.prototype._normalizeItem = function (item) {
+ if (!$.isPlainObject(item)) {
+ item = {
+ id: item,
+ text: item
+ };
+ }
+
+ item = $.extend({}, {
+ text: ''
+ }, item);
+
+ var defaults = {
+ selected: false,
+ disabled: false
+ };
+
+ if (item.id != null) {
+ item.id = item.id.toString();
+ }
+
+ if (item.text != null) {
+ item.text = item.text.toString();
+ }
+
+ if (item._resultId == null && item.id && this.container != null) {
+ item._resultId = this.generateResultId(this.container, item);
+ }
+
+ return $.extend({}, defaults, item);
+ };
+
+ SelectAdapter.prototype.matches = function (params, data) {
+ var matcher = this.options.get('matcher');
+
+ return matcher(params, data);
+ };
+
+ return SelectAdapter;
+});
diff --git a/public/bower_components/select2/src/js/select2/data/tags.js b/public/bower_components/select2/src/js/select2/data/tags.js
new file mode 100644
index 0000000..7bb45c9
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/data/tags.js
@@ -0,0 +1,128 @@
+define([
+ 'jquery'
+], function ($) {
+ function Tags (decorated, $element, options) {
+ var tags = options.get('tags');
+
+ var createTag = options.get('createTag');
+
+ if (createTag !== undefined) {
+ this.createTag = createTag;
+ }
+
+ var insertTag = options.get('insertTag');
+
+ if (insertTag !== undefined) {
+ this.insertTag = insertTag;
+ }
+
+ decorated.call(this, $element, options);
+
+ if ($.isArray(tags)) {
+ for (var t = 0; t < tags.length; t++) {
+ var tag = tags[t];
+ var item = this._normalizeItem(tag);
+
+ var $option = this.option(item);
+
+ this.$element.append($option);
+ }
+ }
+ }
+
+ Tags.prototype.query = function (decorated, params, callback) {
+ var self = this;
+
+ this._removeOldTags();
+
+ if (params.term == null || params.page != null) {
+ decorated.call(this, params, callback);
+ return;
+ }
+
+ function wrapper (obj, child) {
+ var data = obj.results;
+
+ for (var i = 0; i < data.length; i++) {
+ var option = data[i];
+
+ var checkChildren = (
+ option.children != null &&
+ !wrapper({
+ results: option.children
+ }, true)
+ );
+
+ var optionText = (option.text || '').toUpperCase();
+ var paramsTerm = (params.term || '').toUpperCase();
+
+ var checkText = optionText === paramsTerm;
+
+ if (checkText || checkChildren) {
+ if (child) {
+ return false;
+ }
+
+ obj.data = data;
+ callback(obj);
+
+ return;
+ }
+ }
+
+ if (child) {
+ return true;
+ }
+
+ var tag = self.createTag(params);
+
+ if (tag != null) {
+ var $option = self.option(tag);
+ $option.attr('data-select2-tag', true);
+
+ self.addOptions([$option]);
+
+ self.insertTag(data, tag);
+ }
+
+ obj.results = data;
+
+ callback(obj);
+ }
+
+ decorated.call(this, params, wrapper);
+ };
+
+ Tags.prototype.createTag = function (decorated, params) {
+ var term = $.trim(params.term);
+
+ if (term === '') {
+ return null;
+ }
+
+ return {
+ id: term,
+ text: term
+ };
+ };
+
+ Tags.prototype.insertTag = function (_, data, tag) {
+ data.unshift(tag);
+ };
+
+ Tags.prototype._removeOldTags = function (_) {
+ var tag = this._lastTag;
+
+ var $options = this.$element.find('option[data-select2-tag]');
+
+ $options.each(function () {
+ if (this.selected) {
+ return;
+ }
+
+ $(this).remove();
+ });
+ };
+
+ return Tags;
+});
diff --git a/public/bower_components/select2/src/js/select2/data/tokenizer.js b/public/bower_components/select2/src/js/select2/data/tokenizer.js
new file mode 100644
index 0000000..7757655
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/data/tokenizer.js
@@ -0,0 +1,116 @@
+define([
+ 'jquery'
+], function ($) {
+ function Tokenizer (decorated, $element, options) {
+ var tokenizer = options.get('tokenizer');
+
+ if (tokenizer !== undefined) {
+ this.tokenizer = tokenizer;
+ }
+
+ decorated.call(this, $element, options);
+ }
+
+ Tokenizer.prototype.bind = function (decorated, container, $container) {
+ decorated.call(this, container, $container);
+
+ this.$search = container.dropdown.$search || container.selection.$search ||
+ $container.find('.select2-search__field');
+ };
+
+ Tokenizer.prototype.query = function (decorated, params, callback) {
+ var self = this;
+
+ function createAndSelect (data) {
+ // Normalize the data object so we can use it for checks
+ var item = self._normalizeItem(data);
+
+ // Check if the data object already exists as a tag
+ // Select it if it doesn't
+ var $existingOptions = self.$element.find('option').filter(function () {
+ return $(this).val() === item.id;
+ });
+
+ // If an existing option wasn't found for it, create the option
+ if (!$existingOptions.length) {
+ var $option = self.option(item);
+ $option.attr('data-select2-tag', true);
+
+ self._removeOldTags();
+ self.addOptions([$option]);
+ }
+
+ // Select the item, now that we know there is an option for it
+ select(item);
+ }
+
+ function select (data) {
+ self.trigger('select', {
+ data: data
+ });
+ }
+
+ params.term = params.term || '';
+
+ var tokenData = this.tokenizer(params, this.options, createAndSelect);
+
+ if (tokenData.term !== params.term) {
+ // Replace the search term if we have the search box
+ if (this.$search.length) {
+ this.$search.val(tokenData.term);
+ this.$search.focus();
+ }
+
+ params.term = tokenData.term;
+ }
+
+ decorated.call(this, params, callback);
+ };
+
+ Tokenizer.prototype.tokenizer = function (_, params, options, callback) {
+ var separators = options.get('tokenSeparators') || [];
+ var term = params.term;
+ var i = 0;
+
+ var createTag = this.createTag || function (params) {
+ return {
+ id: params.term,
+ text: params.term
+ };
+ };
+
+ while (i < term.length) {
+ var termChar = term[i];
+
+ if ($.inArray(termChar, separators) === -1) {
+ i++;
+
+ continue;
+ }
+
+ var part = term.substr(0, i);
+ var partParams = $.extend({}, params, {
+ term: part
+ });
+
+ var data = createTag(partParams);
+
+ if (data == null) {
+ i++;
+ continue;
+ }
+
+ callback(data);
+
+ // Reset the term to not include the tokenized portion
+ term = term.substr(i + 1) || '';
+ i = 0;
+ }
+
+ return {
+ term: term
+ };
+ };
+
+ return Tokenizer;
+});
diff --git a/public/bower_components/select2/src/js/select2/defaults.js b/public/bower_components/select2/src/js/select2/defaults.js
new file mode 100644
index 0000000..ad4d224
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/defaults.js
@@ -0,0 +1,396 @@
+define([
+ 'jquery',
+ 'require',
+
+ './results',
+
+ './selection/single',
+ './selection/multiple',
+ './selection/placeholder',
+ './selection/allowClear',
+ './selection/search',
+ './selection/eventRelay',
+
+ './utils',
+ './translation',
+ './diacritics',
+
+ './data/select',
+ './data/array',
+ './data/ajax',
+ './data/tags',
+ './data/tokenizer',
+ './data/minimumInputLength',
+ './data/maximumInputLength',
+ './data/maximumSelectionLength',
+
+ './dropdown',
+ './dropdown/search',
+ './dropdown/hidePlaceholder',
+ './dropdown/infiniteScroll',
+ './dropdown/attachBody',
+ './dropdown/minimumResultsForSearch',
+ './dropdown/selectOnClose',
+ './dropdown/closeOnSelect',
+
+ './i18n/en'
+], function ($, require,
+
+ ResultsList,
+
+ SingleSelection, MultipleSelection, Placeholder, AllowClear,
+ SelectionSearch, EventRelay,
+
+ Utils, Translation, DIACRITICS,
+
+ SelectData, ArrayData, AjaxData, Tags, Tokenizer,
+ MinimumInputLength, MaximumInputLength, MaximumSelectionLength,
+
+ Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,
+ AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,
+
+ EnglishTranslation) {
+ function Defaults () {
+ this.reset();
+ }
+
+ Defaults.prototype.apply = function (options) {
+ options = $.extend(true, {}, this.defaults, options);
+
+ if (options.dataAdapter == null) {
+ if (options.ajax != null) {
+ options.dataAdapter = AjaxData;
+ } else if (options.data != null) {
+ options.dataAdapter = ArrayData;
+ } else {
+ options.dataAdapter = SelectData;
+ }
+
+ if (options.minimumInputLength > 0) {
+ options.dataAdapter = Utils.Decorate(
+ options.dataAdapter,
+ MinimumInputLength
+ );
+ }
+
+ if (options.maximumInputLength > 0) {
+ options.dataAdapter = Utils.Decorate(
+ options.dataAdapter,
+ MaximumInputLength
+ );
+ }
+
+ if (options.maximumSelectionLength > 0) {
+ options.dataAdapter = Utils.Decorate(
+ options.dataAdapter,
+ MaximumSelectionLength
+ );
+ }
+
+ if (options.tags) {
+ options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);
+ }
+
+ if (options.tokenSeparators != null || options.tokenizer != null) {
+ options.dataAdapter = Utils.Decorate(
+ options.dataAdapter,
+ Tokenizer
+ );
+ }
+
+ if (options.query != null) {
+ var Query = require(options.amdBase + 'compat/query');
+
+ options.dataAdapter = Utils.Decorate(
+ options.dataAdapter,
+ Query
+ );
+ }
+
+ if (options.initSelection != null) {
+ var InitSelection = require(options.amdBase + 'compat/initSelection');
+
+ options.dataAdapter = Utils.Decorate(
+ options.dataAdapter,
+ InitSelection
+ );
+ }
+ }
+
+ if (options.resultsAdapter == null) {
+ options.resultsAdapter = ResultsList;
+
+ if (options.ajax != null) {
+ options.resultsAdapter = Utils.Decorate(
+ options.resultsAdapter,
+ InfiniteScroll
+ );
+ }
+
+ if (options.placeholder != null) {
+ options.resultsAdapter = Utils.Decorate(
+ options.resultsAdapter,
+ HidePlaceholder
+ );
+ }
+
+ if (options.selectOnClose) {
+ options.resultsAdapter = Utils.Decorate(
+ options.resultsAdapter,
+ SelectOnClose
+ );
+ }
+ }
+
+ if (options.dropdownAdapter == null) {
+ if (options.multiple) {
+ options.dropdownAdapter = Dropdown;
+ } else {
+ var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);
+
+ options.dropdownAdapter = SearchableDropdown;
+ }
+
+ if (options.minimumResultsForSearch !== 0) {
+ options.dropdownAdapter = Utils.Decorate(
+ options.dropdownAdapter,
+ MinimumResultsForSearch
+ );
+ }
+
+ if (options.closeOnSelect) {
+ options.dropdownAdapter = Utils.Decorate(
+ options.dropdownAdapter,
+ CloseOnSelect
+ );
+ }
+
+ if (
+ options.dropdownCssClass != null ||
+ options.dropdownCss != null ||
+ options.adaptDropdownCssClass != null
+ ) {
+ var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');
+
+ options.dropdownAdapter = Utils.Decorate(
+ options.dropdownAdapter,
+ DropdownCSS
+ );
+ }
+
+ options.dropdownAdapter = Utils.Decorate(
+ options.dropdownAdapter,
+ AttachBody
+ );
+ }
+
+ if (options.selectionAdapter == null) {
+ if (options.multiple) {
+ options.selectionAdapter = MultipleSelection;
+ } else {
+ options.selectionAdapter = SingleSelection;
+ }
+
+ // Add the placeholder mixin if a placeholder was specified
+ if (options.placeholder != null) {
+ options.selectionAdapter = Utils.Decorate(
+ options.selectionAdapter,
+ Placeholder
+ );
+ }
+
+ if (options.allowClear) {
+ options.selectionAdapter = Utils.Decorate(
+ options.selectionAdapter,
+ AllowClear
+ );
+ }
+
+ if (options.multiple) {
+ options.selectionAdapter = Utils.Decorate(
+ options.selectionAdapter,
+ SelectionSearch
+ );
+ }
+
+ if (
+ options.containerCssClass != null ||
+ options.containerCss != null ||
+ options.adaptContainerCssClass != null
+ ) {
+ var ContainerCSS = require(options.amdBase + 'compat/containerCss');
+
+ options.selectionAdapter = Utils.Decorate(
+ options.selectionAdapter,
+ ContainerCSS
+ );
+ }
+
+ options.selectionAdapter = Utils.Decorate(
+ options.selectionAdapter,
+ EventRelay
+ );
+ }
+
+ if (typeof options.language === 'string') {
+ // Check if the language is specified with a region
+ if (options.language.indexOf('-') > 0) {
+ // Extract the region information if it is included
+ var languageParts = options.language.split('-');
+ var baseLanguage = languageParts[0];
+
+ options.language = [options.language, baseLanguage];
+ } else {
+ options.language = [options.language];
+ }
+ }
+
+ if ($.isArray(options.language)) {
+ var languages = new Translation();
+ options.language.push('en');
+
+ var languageNames = options.language;
+
+ for (var l = 0; l < languageNames.length; l++) {
+ var name = languageNames[l];
+ var language = {};
+
+ try {
+ // Try to load it with the original name
+ language = Translation.loadPath(name);
+ } catch (e) {
+ try {
+ // If we couldn't load it, check if it wasn't the full path
+ name = this.defaults.amdLanguageBase + name;
+ language = Translation.loadPath(name);
+ } catch (ex) {
+ // The translation could not be loaded at all. Sometimes this is
+ // because of a configuration problem, other times this can be
+ // because of how Select2 helps load all possible translation files.
+ if (options.debug && window.console && console.warn) {
+ console.warn(
+ 'Select2: The language file for "' + name + '" could not be ' +
+ 'automatically loaded. A fallback will be used instead.'
+ );
+ }
+
+ continue;
+ }
+ }
+
+ languages.extend(language);
+ }
+
+ options.translations = languages;
+ } else {
+ var baseTranslation = Translation.loadPath(
+ this.defaults.amdLanguageBase + 'en'
+ );
+ var customTranslation = new Translation(options.language);
+
+ customTranslation.extend(baseTranslation);
+
+ options.translations = customTranslation;
+ }
+
+ return options;
+ };
+
+ Defaults.prototype.reset = function () {
+ function stripDiacritics (text) {
+ // Used 'uni range + named function' from http://jsperf.com/diacritics/18
+ function match(a) {
+ return DIACRITICS[a] || a;
+ }
+
+ return text.replace(/[^\u0000-\u007E]/g, match);
+ }
+
+ function matcher (params, data) {
+ // Always return the object if there is nothing to compare
+ if ($.trim(params.term) === '') {
+ return data;
+ }
+
+ // Do a recursive check for options with children
+ if (data.children && data.children.length > 0) {
+ // Clone the data object if there are children
+ // This is required as we modify the object to remove any non-matches
+ var match = $.extend(true, {}, data);
+
+ // Check each child of the option
+ for (var c = data.children.length - 1; c >= 0; c--) {
+ var child = data.children[c];
+
+ var matches = matcher(params, child);
+
+ // If there wasn't a match, remove the object in the array
+ if (matches == null) {
+ match.children.splice(c, 1);
+ }
+ }
+
+ // If any children matched, return the new object
+ if (match.children.length > 0) {
+ return match;
+ }
+
+ // If there were no matching children, check just the plain object
+ return matcher(params, match);
+ }
+
+ var original = stripDiacritics(data.text).toUpperCase();
+ var term = stripDiacritics(params.term).toUpperCase();
+
+ // Check if the text contains the term
+ if (original.indexOf(term) > -1) {
+ return data;
+ }
+
+ // If it doesn't contain the term, don't return anything
+ return null;
+ }
+
+ this.defaults = {
+ amdBase: './',
+ amdLanguageBase: './i18n/',
+ closeOnSelect: true,
+ debug: false,
+ dropdownAutoWidth: false,
+ escapeMarkup: Utils.escapeMarkup,
+ language: EnglishTranslation,
+ matcher: matcher,
+ minimumInputLength: 0,
+ maximumInputLength: 0,
+ maximumSelectionLength: 0,
+ minimumResultsForSearch: 0,
+ selectOnClose: false,
+ sorter: function (data) {
+ return data;
+ },
+ templateResult: function (result) {
+ return result.text;
+ },
+ templateSelection: function (selection) {
+ return selection.text;
+ },
+ theme: 'default',
+ width: 'resolve'
+ };
+ };
+
+ Defaults.prototype.set = function (key, value) {
+ var camelKey = $.camelCase(key);
+
+ var data = {};
+ data[camelKey] = value;
+
+ var convertedData = Utils._convertData(data);
+
+ $.extend(this.defaults, convertedData);
+ };
+
+ var defaults = new Defaults();
+
+ return defaults;
+});
diff --git a/public/bower_components/select2/src/js/select2/diacritics.js b/public/bower_components/select2/src/js/select2/diacritics.js
new file mode 100644
index 0000000..c99ae61
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/diacritics.js
@@ -0,0 +1,847 @@
+define([
+
+], function () {
+ var 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',
+ '\u0386': '\u0391',
+ '\u0388': '\u0395',
+ '\u0389': '\u0397',
+ '\u038A': '\u0399',
+ '\u03AA': '\u0399',
+ '\u038C': '\u039F',
+ '\u038E': '\u03A5',
+ '\u03AB': '\u03A5',
+ '\u038F': '\u03A9',
+ '\u03AC': '\u03B1',
+ '\u03AD': '\u03B5',
+ '\u03AE': '\u03B7',
+ '\u03AF': '\u03B9',
+ '\u03CA': '\u03B9',
+ '\u0390': '\u03B9',
+ '\u03CC': '\u03BF',
+ '\u03CD': '\u03C5',
+ '\u03CB': '\u03C5',
+ '\u03B0': '\u03C5',
+ '\u03C9': '\u03C9',
+ '\u03C2': '\u03C3'
+ };
+
+ return diacritics;
+});
diff --git a/public/bower_components/select2/src/js/select2/dropdown.js b/public/bower_components/select2/src/js/select2/dropdown.js
new file mode 100644
index 0000000..a6fc40b
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/dropdown.js
@@ -0,0 +1,42 @@
+define([
+ 'jquery',
+ './utils'
+], function ($, Utils) {
+ function Dropdown ($element, options) {
+ this.$element = $element;
+ this.options = options;
+
+ Dropdown.__super__.constructor.call(this);
+ }
+
+ Utils.Extend(Dropdown, Utils.Observable);
+
+ Dropdown.prototype.render = function () {
+ var $dropdown = $(
+ '<span class="select2-dropdown">' +
+ '<span class="select2-results"></span>' +
+ '</span>'
+ );
+
+ $dropdown.attr('dir', this.options.get('dir'));
+
+ this.$dropdown = $dropdown;
+
+ return $dropdown;
+ };
+
+ Dropdown.prototype.bind = function () {
+ // Should be implemented in subclasses
+ };
+
+ Dropdown.prototype.position = function ($dropdown, $container) {
+ // Should be implmented in subclasses
+ };
+
+ Dropdown.prototype.destroy = function () {
+ // Remove the dropdown from the DOM
+ this.$dropdown.remove();
+ };
+
+ return Dropdown;
+});
diff --git a/public/bower_components/select2/src/js/select2/dropdown/attachBody.js b/public/bower_components/select2/src/js/select2/dropdown/attachBody.js
new file mode 100644
index 0000000..70a10d4
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/dropdown/attachBody.js
@@ -0,0 +1,222 @@
+define([
+ 'jquery',
+ '../utils'
+], function ($, Utils) {
+ function AttachBody (decorated, $element, options) {
+ this.$dropdownParent = options.get('dropdownParent') || $(document.body);
+
+ decorated.call(this, $element, options);
+ }
+
+ AttachBody.prototype.bind = function (decorated, container, $container) {
+ var self = this;
+
+ var setupResultsEvents = false;
+
+ decorated.call(this, container, $container);
+
+ container.on('open', function () {
+ self._showDropdown();
+ self._attachPositioningHandler(container);
+
+ if (!setupResultsEvents) {
+ setupResultsEvents = true;
+
+ container.on('results:all', function () {
+ self._positionDropdown();
+ self._resizeDropdown();
+ });
+
+ container.on('results:append', function () {
+ self._positionDropdown();
+ self._resizeDropdown();
+ });
+ }
+ });
+
+ container.on('close', function () {
+ self._hideDropdown();
+ self._detachPositioningHandler(container);
+ });
+
+ this.$dropdownContainer.on('mousedown', function (evt) {
+ evt.stopPropagation();
+ });
+ };
+
+ AttachBody.prototype.destroy = function (decorated) {
+ decorated.call(this);
+
+ this.$dropdownContainer.remove();
+ };
+
+ AttachBody.prototype.position = function (decorated, $dropdown, $container) {
+ // Clone all of the container classes
+ $dropdown.attr('class', $container.attr('class'));
+
+ $dropdown.removeClass('select2');
+ $dropdown.addClass('select2-container--open');
+
+ $dropdown.css({
+ position: 'absolute',
+ top: -999999
+ });
+
+ this.$container = $container;
+ };
+
+ AttachBody.prototype.render = function (decorated) {
+ var $container = $('<span></span>');
+
+ var $dropdown = decorated.call(this);
+ $container.append($dropdown);
+
+ this.$dropdownContainer = $container;
+
+ return $container;
+ };
+
+ AttachBody.prototype._hideDropdown = function (decorated) {
+ this.$dropdownContainer.detach();
+ };
+
+ AttachBody.prototype._attachPositioningHandler =
+ function (decorated, container) {
+ var self = this;
+
+ var scrollEvent = 'scroll.select2.' + container.id;
+ var resizeEvent = 'resize.select2.' + container.id;
+ var orientationEvent = 'orientationchange.select2.' + container.id;
+
+ var $watchers = this.$container.parents().filter(Utils.hasScroll);
+ $watchers.each(function () {
+ $(this).data('select2-scroll-position', {
+ x: $(this).scrollLeft(),
+ y: $(this).scrollTop()
+ });
+ });
+
+ $watchers.on(scrollEvent, function (ev) {
+ var position = $(this).data('select2-scroll-position');
+ $(this).scrollTop(position.y);
+ });
+
+ $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,
+ function (e) {
+ self._positionDropdown();
+ self._resizeDropdown();
+ });
+ };
+
+ AttachBody.prototype._detachPositioningHandler =
+ function (decorated, container) {
+ var scrollEvent = 'scroll.select2.' + container.id;
+ var resizeEvent = 'resize.select2.' + container.id;
+ var orientationEvent = 'orientationchange.select2.' + container.id;
+
+ var $watchers = this.$container.parents().filter(Utils.hasScroll);
+ $watchers.off(scrollEvent);
+
+ $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);
+ };
+
+ AttachBody.prototype._positionDropdown = function () {
+ var $window = $(window);
+
+ var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');
+ var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');
+
+ var newDirection = null;
+
+ var offset = this.$container.offset();
+
+ offset.bottom = offset.top + this.$container.outerHeight(false);
+
+ var container = {
+ height: this.$container.outerHeight(false)
+ };
+
+ container.top = offset.top;
+ container.bottom = offset.top + container.height;
+
+ var dropdown = {
+ height: this.$dropdown.outerHeight(false)
+ };
+
+ var viewport = {
+ top: $window.scrollTop(),
+ bottom: $window.scrollTop() + $window.height()
+ };
+
+ var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);
+ var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);
+
+ var css = {
+ left: offset.left,
+ top: container.bottom
+ };
+
+ // Determine what the parent element is to use for calciulating the offset
+ var $offsetParent = this.$dropdownParent;
+
+ // For statically positoned elements, we need to get the element
+ // that is determining the offset
+ if ($offsetParent.css('position') === 'static') {
+ $offsetParent = $offsetParent.offsetParent();
+ }
+
+ var parentOffset = $offsetParent.offset();
+
+ css.top -= parentOffset.top;
+ css.left -= parentOffset.left;
+
+ if (!isCurrentlyAbove && !isCurrentlyBelow) {
+ newDirection = 'below';
+ }
+
+ if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {
+ newDirection = 'above';
+ } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {
+ newDirection = 'below';
+ }
+
+ if (newDirection == 'above' ||
+ (isCurrentlyAbove && newDirection !== 'below')) {
+ css.top = container.top - parentOffset.top - dropdown.height;
+ }
+
+ if (newDirection != null) {
+ this.$dropdown
+ .removeClass('select2-dropdown--below select2-dropdown--above')
+ .addClass('select2-dropdown--' + newDirection);
+ this.$container
+ .removeClass('select2-container--below select2-container--above')
+ .addClass('select2-container--' + newDirection);
+ }
+
+ this.$dropdownContainer.css(css);
+ };
+
+ AttachBody.prototype._resizeDropdown = function () {
+ var css = {
+ width: this.$container.outerWidth(false) + 'px'
+ };
+
+ if (this.options.get('dropdownAutoWidth')) {
+ css.minWidth = css.width;
+ css.position = 'relative';
+ css.width = 'auto';
+ }
+
+ this.$dropdown.css(css);
+ };
+
+ AttachBody.prototype._showDropdown = function (decorated) {
+ this.$dropdownContainer.appendTo(this.$dropdownParent);
+
+ this._positionDropdown();
+ this._resizeDropdown();
+ };
+
+ return AttachBody;
+});
diff --git a/public/bower_components/select2/src/js/select2/dropdown/attachContainer.js b/public/bower_components/select2/src/js/select2/dropdown/attachContainer.js
new file mode 100644
index 0000000..4995df4
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/dropdown/attachContainer.js
@@ -0,0 +1,18 @@
+define([
+
+], function () {
+ function AttachContainer (decorated, $element, options) {
+ decorated.call(this, $element, options);
+ }
+
+ AttachContainer.prototype.position =
+ function (decorated, $dropdown, $container) {
+ var $dropdownContainer = $container.find('.dropdown-wrapper');
+ $dropdownContainer.append($dropdown);
+
+ $dropdown.addClass('select2-dropdown--below');
+ $container.addClass('select2-container--below');
+ };
+
+ return AttachContainer;
+});
diff --git a/public/bower_components/select2/src/js/select2/dropdown/closeOnSelect.js b/public/bower_components/select2/src/js/select2/dropdown/closeOnSelect.js
new file mode 100644
index 0000000..fa6a82c
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/dropdown/closeOnSelect.js
@@ -0,0 +1,35 @@
+define([
+
+], function () {
+ function CloseOnSelect () { }
+
+ CloseOnSelect.prototype.bind = function (decorated, container, $container) {
+ var self = this;
+
+ decorated.call(this, container, $container);
+
+ container.on('select', function (evt) {
+ self._selectTriggered(evt);
+ });
+
+ container.on('unselect', function (evt) {
+ self._selectTriggered(evt);
+ });
+ };
+
+ CloseOnSelect.prototype._selectTriggered = function (_, evt) {
+ var originalEvent = evt.originalEvent;
+
+ // Don't close if the control key is being held
+ if (originalEvent && originalEvent.ctrlKey) {
+ return;
+ }
+
+ this.trigger('close', {
+ originalEvent: originalEvent,
+ originalSelect2Event: evt
+ });
+ };
+
+ return CloseOnSelect;
+});
diff --git a/public/bower_components/select2/src/js/select2/dropdown/hidePlaceholder.js b/public/bower_components/select2/src/js/select2/dropdown/hidePlaceholder.js
new file mode 100644
index 0000000..2901f68
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/dropdown/hidePlaceholder.js
@@ -0,0 +1,42 @@
+define([
+
+], function () {
+ function HidePlaceholder (decorated, $element, options, dataAdapter) {
+ this.placeholder = this.normalizePlaceholder(options.get('placeholder'));
+
+ decorated.call(this, $element, options, dataAdapter);
+ }
+
+ HidePlaceholder.prototype.append = function (decorated, data) {
+ data.results = this.removePlaceholder(data.results);
+
+ decorated.call(this, data);
+ };
+
+ HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {
+ if (typeof placeholder === 'string') {
+ placeholder = {
+ id: '',
+ text: placeholder
+ };
+ }
+
+ return placeholder;
+ };
+
+ HidePlaceholder.prototype.removePlaceholder = function (_, data) {
+ var modifiedData = data.slice(0);
+
+ for (var d = data.length - 1; d >= 0; d--) {
+ var item = data[d];
+
+ if (this.placeholder.id === item.id) {
+ modifiedData.splice(d, 1);
+ }
+ }
+
+ return modifiedData;
+ };
+
+ return HidePlaceholder;
+});
diff --git a/public/bower_components/select2/src/js/select2/dropdown/infiniteScroll.js b/public/bower_components/select2/src/js/select2/dropdown/infiniteScroll.js
new file mode 100644
index 0000000..41d85de
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/dropdown/infiniteScroll.js
@@ -0,0 +1,89 @@
+define([
+ 'jquery'
+], function ($) {
+ function InfiniteScroll (decorated, $element, options, dataAdapter) {
+ this.lastParams = {};
+
+ decorated.call(this, $element, options, dataAdapter);
+
+ this.$loadingMore = this.createLoadingMore();
+ this.loading = false;
+ }
+
+ InfiniteScroll.prototype.append = function (decorated, data) {
+ this.$loadingMore.remove();
+ this.loading = false;
+
+ decorated.call(this, data);
+
+ if (this.showLoadingMore(data)) {
+ this.$results.append(this.$loadingMore);
+ }
+ };
+
+ InfiniteScroll.prototype.bind = function (decorated, container, $container) {
+ var self = this;
+
+ decorated.call(this, container, $container);
+
+ container.on('query', function (params) {
+ self.lastParams = params;
+ self.loading = true;
+ });
+
+ container.on('query:append', function (params) {
+ self.lastParams = params;
+ self.loading = true;
+ });
+
+ this.$results.on('scroll', function () {
+ var isLoadMoreVisible = $.contains(
+ document.documentElement,
+ self.$loadingMore[0]
+ );
+
+ if (self.loading || !isLoadMoreVisible) {
+ return;
+ }
+
+ var currentOffset = self.$results.offset().top +
+ self.$results.outerHeight(false);
+ var loadingMoreOffset = self.$loadingMore.offset().top +
+ self.$loadingMore.outerHeight(false);
+
+ if (currentOffset + 50 >= loadingMoreOffset) {
+ self.loadMore();
+ }
+ });
+ };
+
+ InfiniteScroll.prototype.loadMore = function () {
+ this.loading = true;
+
+ var params = $.extend({}, {page: 1}, this.lastParams);
+
+ params.page++;
+
+ this.trigger('query:append', params);
+ };
+
+ InfiniteScroll.prototype.showLoadingMore = function (_, data) {
+ return data.pagination && data.pagination.more;
+ };
+
+ InfiniteScroll.prototype.createLoadingMore = function () {
+ var $option = $(
+ '<li ' +
+ 'class="select2-results__option select2-results__option--load-more"' +
+ 'role="treeitem" aria-disabled="true"></li>'
+ );
+
+ var message = this.options.get('translations').get('loadingMore');
+
+ $option.html(message(this.lastParams));
+
+ return $option;
+ };
+
+ return InfiniteScroll;
+});
diff --git a/public/bower_components/select2/src/js/select2/dropdown/minimumResultsForSearch.js b/public/bower_components/select2/src/js/select2/dropdown/minimumResultsForSearch.js
new file mode 100644
index 0000000..b3625d4
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/dropdown/minimumResultsForSearch.js
@@ -0,0 +1,39 @@
+define([
+
+], function () {
+ function countResults (data) {
+ var count = 0;
+
+ for (var d = 0; d < data.length; d++) {
+ var item = data[d];
+
+ if (item.children) {
+ count += countResults(item.children);
+ } else {
+ count++;
+ }
+ }
+
+ return count;
+ }
+
+ function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {
+ this.minimumResultsForSearch = options.get('minimumResultsForSearch');
+
+ if (this.minimumResultsForSearch < 0) {
+ this.minimumResultsForSearch = Infinity;
+ }
+
+ decorated.call(this, $element, options, dataAdapter);
+ }
+
+ MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {
+ if (countResults(params.data.results) < this.minimumResultsForSearch) {
+ return false;
+ }
+
+ return decorated.call(this, params);
+ };
+
+ return MinimumResultsForSearch;
+});
diff --git a/public/bower_components/select2/src/js/select2/dropdown/search.js b/public/bower_components/select2/src/js/select2/dropdown/search.js
new file mode 100644
index 0000000..8cbbd75
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/dropdown/search.js
@@ -0,0 +1,101 @@
+define([
+ 'jquery',
+ '../utils'
+], function ($, Utils) {
+ function Search () { }
+
+ Search.prototype.render = function (decorated) {
+ var $rendered = decorated.call(this);
+
+ var $search = $(
+ '<span class="select2-search select2-search--dropdown">' +
+ '<input class="select2-search__field" type="search" tabindex="-1"' +
+ ' autocomplete="off" autocorrect="off" autocapitalize="none"' +
+ ' spellcheck="false" role="textbox" />' +
+ '</span>'
+ );
+
+ this.$searchContainer = $search;
+ this.$search = $search.find('input');
+
+ $rendered.prepend($search);
+
+ return $rendered;
+ };
+
+ Search.prototype.bind = function (decorated, container, $container) {
+ var self = this;
+
+ decorated.call(this, container, $container);
+
+ this.$search.on('keydown', function (evt) {
+ self.trigger('keypress', evt);
+
+ self._keyUpPrevented = evt.isDefaultPrevented();
+ });
+
+ // Workaround for browsers which do not support the `input` event
+ // This will prevent double-triggering of events for browsers which support
+ // both the `keyup` and `input` events.
+ this.$search.on('input', function (evt) {
+ // Unbind the duplicated `keyup` event
+ $(this).off('keyup');
+ });
+
+ this.$search.on('keyup input', function (evt) {
+ self.handleSearch(evt);
+ });
+
+ container.on('open', function () {
+ self.$search.attr('tabindex', 0);
+
+ self.$search.focus();
+
+ window.setTimeout(function () {
+ self.$search.focus();
+ }, 0);
+ });
+
+ container.on('close', function () {
+ self.$search.attr('tabindex', -1);
+
+ self.$search.val('');
+ });
+
+ container.on('focus', function () {
+ if (!container.isOpen()) {
+ self.$search.focus();
+ }
+ });
+
+ container.on('results:all', function (params) {
+ if (params.query.term == null || params.query.term === '') {
+ var showSearch = self.showSearch(params);
+
+ if (showSearch) {
+ self.$searchContainer.removeClass('select2-search--hide');
+ } else {
+ self.$searchContainer.addClass('select2-search--hide');
+ }
+ }
+ });
+ };
+
+ Search.prototype.handleSearch = function (evt) {
+ if (!this._keyUpPrevented) {
+ var input = this.$search.val();
+
+ this.trigger('query', {
+ term: input
+ });
+ }
+
+ this._keyUpPrevented = false;
+ };
+
+ Search.prototype.showSearch = function (_, params) {
+ return true;
+ };
+
+ return Search;
+});
diff --git a/public/bower_components/select2/src/js/select2/dropdown/selectOnClose.js b/public/bower_components/select2/src/js/select2/dropdown/selectOnClose.js
new file mode 100644
index 0000000..430c032
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/dropdown/selectOnClose.js
@@ -0,0 +1,50 @@
+define([
+
+], function () {
+ function SelectOnClose () { }
+
+ SelectOnClose.prototype.bind = function (decorated, container, $container) {
+ var self = this;
+
+ decorated.call(this, container, $container);
+
+ container.on('close', function (params) {
+ self._handleSelectOnClose(params);
+ });
+ };
+
+ SelectOnClose.prototype._handleSelectOnClose = function (_, params) {
+ if (params && params.originalSelect2Event != null) {
+ var event = params.originalSelect2Event;
+
+ // Don't select an item if the close event was triggered from a select or
+ // unselect event
+ if (event._type === 'select' || event._type === 'unselect') {
+ return;
+ }
+ }
+
+ var $highlightedResults = this.getHighlightedResults();
+
+ // Only select highlighted results
+ if ($highlightedResults.length < 1) {
+ return;
+ }
+
+ var data = $highlightedResults.data('data');
+
+ // Don't re-select already selected resulte
+ if (
+ (data.element != null && data.element.selected) ||
+ (data.element == null && data.selected)
+ ) {
+ return;
+ }
+
+ this.trigger('select', {
+ data: data
+ });
+ };
+
+ return SelectOnClose;
+});
diff --git a/public/bower_components/select2/src/js/select2/dropdown/stopPropagation.js b/public/bower_components/select2/src/js/select2/dropdown/stopPropagation.js
new file mode 100644
index 0000000..4f64182
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/dropdown/stopPropagation.js
@@ -0,0 +1,38 @@
+define([
+
+], function () {
+ function StopPropagation () { }
+
+ StopPropagation.prototype.bind = function (decorated, container, $container) {
+ decorated.call(this, container, $container);
+
+ var stoppedEvents = [
+ 'blur',
+ 'change',
+ 'click',
+ 'dblclick',
+ 'focus',
+ 'focusin',
+ 'focusout',
+ 'input',
+ 'keydown',
+ 'keyup',
+ 'keypress',
+ 'mousedown',
+ 'mouseenter',
+ 'mouseleave',
+ 'mousemove',
+ 'mouseover',
+ 'mouseup',
+ 'search',
+ 'touchend',
+ 'touchstart'
+ ];
+
+ this.$dropdown.on(stoppedEvents.join(' '), function (evt) {
+ evt.stopPropagation();
+ });
+ };
+
+ return StopPropagation;
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/af.js b/public/bower_components/select2/src/js/select2/i18n/af.js
new file mode 100644
index 0000000..2651930
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/af.js
@@ -0,0 +1,44 @@
+define(function () {
+ // English
+ return {
+ errorLoading: function () {
+ return 'Die resultate kon nie gelaai word nie.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Verwyders asseblief ' + overChars + ' character';
+
+ if (overChars != 1) {
+ message += 's';
+ }
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Voer asseblief ' + remainingChars + ' of meer karakters';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Meer resultate word gelaai…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Kies asseblief net ' + args.maximum + ' item';
+
+ if (args.maximum != 1) {
+ message += 's';
+ }
+
+ return message;
+ },
+ noResults: function () {
+ return 'Geen resultate gevind';
+ },
+ searching: function () {
+ return 'Besig…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/ar.js b/public/bower_components/select2/src/js/select2/i18n/ar.js
new file mode 100644
index 0000000..be9ea68
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/ar.js
@@ -0,0 +1,30 @@
+define(function () {
+ // Arabic
+ return {
+ errorLoading: function () {
+ return 'لا يمكن تحميل النتائج';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ return 'الرجاء حذف ' + overChars + ' عناصر';
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ return 'الرجاء إضافة ' + remainingChars + ' عناصر';
+ },
+ loadingMore: function () {
+ return 'جاري تحميل نتائج إضافية...';
+ },
+ maximumSelected: function (args) {
+ return 'تستطيع إختيار ' + args.maximum + ' بنود فقط';
+ },
+ noResults: function () {
+ return 'لم يتم العثور على أي نتائج';
+ },
+ searching: function () {
+ return 'جاري البحث…';
+ }
+ };
+}); \ No newline at end of file
diff --git a/public/bower_components/select2/src/js/select2/i18n/az.js b/public/bower_components/select2/src/js/select2/i18n/az.js
new file mode 100644
index 0000000..0d9bda4
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/az.js
@@ -0,0 +1,27 @@
+define(function () {
+ // Azerbaijani
+ return {
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ return overChars + ' simvol silin';
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ return remainingChars + ' simvol daxil edin';
+ },
+ loadingMore: function () {
+ return 'Daha çox nəticə yüklənir…';
+ },
+ maximumSelected: function (args) {
+ return 'Sadəcə ' + args.maximum + ' element seçə bilərsiniz';
+ },
+ noResults: function () {
+ return 'Nəticə tapılmadı';
+ },
+ searching: function () {
+ return 'Axtarılır…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/bg.js b/public/bower_components/select2/src/js/select2/i18n/bg.js
new file mode 100644
index 0000000..909b4e5
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/bg.js
@@ -0,0 +1,47 @@
+define(function () {
+ // Bulgarian
+ return {
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Моля въведете с ' + overChars + ' по-малко символ';
+
+ if (overChars > 1) {
+ message += 'a';
+ }
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Моля въведете още ' + remainingChars + ' символ';
+
+ if (remainingChars > 1) {
+ message += 'a';
+ }
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Зареждат се още…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Можете да направите до ' + args.maximum + ' ';
+
+ if (args.maximum > 1) {
+ message += 'избора';
+ } else {
+ message += 'избор';
+ }
+
+ return message;
+ },
+ noResults: function () {
+ return 'Няма намерени съвпадения';
+ },
+ searching: function () {
+ return 'Търсене…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/bs.js b/public/bower_components/select2/src/js/select2/i18n/bs.js
new file mode 100644
index 0000000..4446a0e
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/bs.js
@@ -0,0 +1,55 @@
+define(function () {
+ // Bosnian
+ function ending (count, one, some, many) {
+ if (count % 10 == 1 && count % 100 != 11) {
+ return one;
+ }
+
+ if (count % 10 >= 2 && count % 10 <= 4 &&
+ (count % 100 < 12 || count % 100 > 14)) {
+ return some;
+ }
+
+ return many;
+ }
+
+ return {
+ errorLoading: function () {
+ return 'Preuzimanje nije uspijelo.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Obrišite ' + overChars + ' simbol';
+
+ message += ending(overChars, '', 'a', 'a');
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Ukucajte bar još ' + remainingChars + ' simbol';
+
+ message += ending(remainingChars, '', 'a', 'a');
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Preuzimanje još rezultata…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Možete izabrati samo ' + args.maximum + ' stavk';
+
+ message += ending(args.maximum, 'u', 'e', 'i');
+
+ return message;
+ },
+ noResults: function () {
+ return 'Ništa nije pronađeno';
+ },
+ searching: function () {
+ return 'Pretraga…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/ca.js b/public/bower_components/select2/src/js/select2/i18n/ca.js
new file mode 100644
index 0000000..7aa8cc6
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/ca.js
@@ -0,0 +1,52 @@
+define(function () {
+ // Catalan
+ return {
+ errorLoading: function () {
+ return 'La càrrega ha fallat';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Si us plau, elimina ' + overChars + ' car';
+
+ if (overChars == 1) {
+ message += 'àcter';
+ } else {
+ message += 'àcters';
+ }
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Si us plau, introdueix ' + remainingChars + ' car';
+
+ if (remainingChars == 1) {
+ message += 'àcter';
+ } else {
+ message += 'àcters';
+ }
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Carregant més resultats…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Només es pot seleccionar ' + args.maximum + ' element';
+
+ if (args.maximum != 1) {
+ message += 's';
+ }
+
+ return message;
+ },
+ noResults: function () {
+ return 'No s\'han trobat resultats';
+ },
+ searching: function () {
+ return 'Cercant…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/cs.js b/public/bower_components/select2/src/js/select2/i18n/cs.js
new file mode 100644
index 0000000..6d8a193
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/cs.js
@@ -0,0 +1,61 @@
+define(function () {
+ // Czech
+ function small (count, masc) {
+ switch(count) {
+ case 2:
+ return masc ? 'dva' : 'dvě';
+ case 3:
+ return 'tři';
+ case 4:
+ return 'čtyři';
+ }
+ return '';
+ }
+ return {
+ errorLoading: function () {
+ return 'Výsledky nemohly být načteny.';
+ },
+ inputTooLong: function (args) {
+ var n = args.input.length - args.maximum;
+
+ if (n == 1) {
+ return 'Prosím, zadejte o jeden znak méně.';
+ } else if (n <= 4) {
+ return 'Prosím, zadejte o ' + small(n, true) + ' znaky méně.';
+ } else {
+ return 'Prosím, zadejte o ' + n + ' znaků méně.';
+ }
+ },
+ inputTooShort: function (args) {
+ var n = args.minimum - args.input.length;
+
+ if (n == 1) {
+ return 'Prosím, zadejte ještě jeden znak.';
+ } else if (n <= 4) {
+ return 'Prosím, zadejte ještě další ' + small(n, true) + ' znaky.';
+ } else {
+ return 'Prosím, zadejte ještě dalších ' + n + ' znaků.';
+ }
+ },
+ loadingMore: function () {
+ return 'Načítají se další výsledky…';
+ },
+ maximumSelected: function (args) {
+ var n = args.maximum;
+
+ if (n == 1) {
+ return 'Můžete zvolit jen jednu položku.';
+ } else if (n <= 4) {
+ return 'Můžete zvolit maximálně ' + small(n, false) + ' položky.';
+ } else {
+ return 'Můžete zvolit maximálně ' + n + ' položek.';
+ }
+ },
+ noResults: function () {
+ return 'Nenalezeny žádné položky.';
+ },
+ searching: function () {
+ return 'Vyhledávání…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/da.js b/public/bower_components/select2/src/js/select2/i18n/da.js
new file mode 100644
index 0000000..2ce169f
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/da.js
@@ -0,0 +1,36 @@
+define(function () {
+ // Danish
+ return {
+ errorLoading: function () {
+ return 'Resultaterne kunne ikke indlæses.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ return 'Angiv venligst ' + overChars + ' tegn mindre';
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ return 'Angiv venligst ' + remainingChars + ' tegn mere';
+ },
+ loadingMore: function () {
+ return 'Indlæser flere resultater…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Du kan kun vælge ' + args.maximum + ' emne';
+
+ if (args.maximum != 1) {
+ message += 'r';
+ }
+
+ return message;
+ },
+ noResults: function () {
+ return 'Ingen resultater fundet';
+ },
+ searching: function () {
+ return 'Søger…';
+ }
+ };
+}); \ No newline at end of file
diff --git a/public/bower_components/select2/src/js/select2/i18n/de.js b/public/bower_components/select2/src/js/select2/i18n/de.js
new file mode 100644
index 0000000..c804fed
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/de.js
@@ -0,0 +1,40 @@
+define(function () {
+ // German
+ return {
+ errorLoading: function () {
+ return 'Die Ergebnisse konnten nicht geladen werden.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ return 'Bitte ' + overChars + ' Zeichen weniger eingeben';
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ return 'Bitte ' + remainingChars + ' Zeichen mehr eingeben';
+ },
+ loadingMore: function () {
+ return 'Lade mehr Ergebnisse…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Sie können nur ' + args.maximum + ' Eintr';
+
+ if (args.maximum === 1) {
+ message += 'ag';
+ } else {
+ message += 'äge';
+ }
+
+ message += ' auswählen';
+
+ return message;
+ },
+ noResults: function () {
+ return 'Keine Übereinstimmungen gefunden';
+ },
+ searching: function () {
+ return 'Suche…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/dsb.js b/public/bower_components/select2/src/js/select2/i18n/dsb.js
new file mode 100644
index 0000000..8180b21
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/dsb.js
@@ -0,0 +1,48 @@
+define(function () {
+ // Lower Sorbian
+ var charsWords = ['znamuško', 'znamušce', 'znamuška','znamuškow'];
+ var itemsWords = ['zapisk', 'zapiska', 'zapiski','zapiskow'];
+
+ var pluralWord = function pluralWord(numberOfChars, words) {
+ if (numberOfChars === 1) {
+ return words[0];
+ } else if (numberOfChars === 2) {
+ return words[1];
+ } else if (numberOfChars > 2 && numberOfChars <= 4) {
+ return words[2];
+ } else if (numberOfChars >= 5) {
+ return words[3];
+ }
+ };
+
+ return {
+ errorLoading: function () {
+ return 'Wuslědki njejsu se dali zacytaś.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ return 'Pšosym lašuj ' + overChars + ' ' +
+ pluralWord(overChars, charsWords);
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ return 'Pšosym zapódaj nanejmjenjej ' + remainingChars + ' ' +
+ pluralWord(remainingChars, charsWords);
+ },
+ loadingMore: function () {
+ return 'Dalšne wuslědki se zacytaju…';
+ },
+ maximumSelected: function (args) {
+ return 'Móžoš jano ' + args.maximum + ' ' +
+ pluralWord(args.maximum, itemsWords) + 'wubraś.';
+ },
+ noResults: function () {
+ return 'Žedne wuslědki namakane';
+ },
+ searching: function () {
+ return 'Pyta se…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/el.js b/public/bower_components/select2/src/js/select2/i18n/el.js
new file mode 100644
index 0000000..9cf8ee4
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/el.js
@@ -0,0 +1,52 @@
+define(function () {
+ // Greek (el)
+ return {
+ errorLoading: function () {
+ return 'Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Παρακαλώ διαγράψτε ' + overChars + ' χαρακτήρ';
+
+ if (overChars == 1) {
+ message += 'α';
+ }
+ if (overChars != 1) {
+ message += 'ες';
+ }
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Παρακαλώ συμπληρώστε ' + remainingChars +
+ ' ή περισσότερους χαρακτήρες';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Φόρτωση περισσότερων αποτελεσμάτων…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Μπορείτε να επιλέξετε μόνο ' + args.maximum + ' επιλογ';
+
+ if (args.maximum == 1) {
+ message += 'ή';
+ }
+
+ if (args.maximum != 1) {
+ message += 'ές';
+ }
+
+ return message;
+ },
+ noResults: function () {
+ return 'Δεν βρέθηκαν αποτελέσματα';
+ },
+ searching: function () {
+ return 'Αναζήτηση…';
+ }
+ };
+}); \ No newline at end of file
diff --git a/public/bower_components/select2/src/js/select2/i18n/en.js b/public/bower_components/select2/src/js/select2/i18n/en.js
new file mode 100644
index 0000000..f226f2c
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/en.js
@@ -0,0 +1,44 @@
+define(function () {
+ // English
+ return {
+ errorLoading: function () {
+ return 'The results could not be loaded.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Please delete ' + overChars + ' character';
+
+ if (overChars != 1) {
+ message += 's';
+ }
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Please enter ' + remainingChars + ' or more characters';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Loading more results…';
+ },
+ maximumSelected: function (args) {
+ var message = 'You can only select ' + args.maximum + ' item';
+
+ if (args.maximum != 1) {
+ message += 's';
+ }
+
+ return message;
+ },
+ noResults: function () {
+ return 'No results found';
+ },
+ searching: function () {
+ return 'Searching…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/es.js b/public/bower_components/select2/src/js/select2/i18n/es.js
new file mode 100644
index 0000000..10884bd
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/es.js
@@ -0,0 +1,52 @@
+define(function () {
+ // Spanish
+ return {
+ errorLoading: function () {
+ return 'No se pudieron cargar los resultados';
+ },
+ inputTooLong: function (args) {
+ var remainingChars = args.input.length - args.maximum;
+
+ var message = 'Por favor, elimine ' + remainingChars + ' car';
+
+ if (remainingChars == 1) {
+ message += 'ácter';
+ } else {
+ message += 'acteres';
+ }
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Por favor, introduzca ' + remainingChars + ' car';
+
+ if (remainingChars == 1) {
+ message += 'ácter';
+ } else {
+ message += 'acteres';
+ }
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Cargando más resultados…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Sólo puede seleccionar ' + args.maximum + ' elemento';
+
+ if (args.maximum != 1) {
+ message += 's';
+ }
+
+ return message;
+ },
+ noResults: function () {
+ return 'No se encontraron resultados';
+ },
+ searching: function () {
+ return 'Buscando…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/et.js b/public/bower_components/select2/src/js/select2/i18n/et.js
new file mode 100644
index 0000000..d546ade
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/et.js
@@ -0,0 +1,53 @@
+define(function () {
+ // Estonian
+ return {
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Sisesta ' + overChars + ' täht';
+
+ if (overChars != 1) {
+ message += 'e';
+ }
+
+ message += ' vähem';
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Sisesta ' + remainingChars + ' täht';
+
+ if (remainingChars != 1) {
+ message += 'e';
+ }
+
+ message += ' rohkem';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Laen tulemusi…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Saad vaid ' + args.maximum + ' tulemus';
+
+ if (args.maximum == 1) {
+ message += 'e';
+ } else {
+ message += 't';
+ }
+
+ message += ' valida';
+
+ return message;
+ },
+ noResults: function () {
+ return 'Tulemused puuduvad';
+ },
+ searching: function () {
+ return 'Otsin…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/eu.js b/public/bower_components/select2/src/js/select2/i18n/eu.js
new file mode 100644
index 0000000..4a1f894
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/eu.js
@@ -0,0 +1,51 @@
+define(function () {
+ // Basque
+ return {
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Idatzi ';
+
+ if (overChars == 1) {
+ message += 'karaktere bat';
+ } else {
+ message += overChars + ' karaktere';
+ }
+
+ message += ' gutxiago';
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Idatzi ';
+
+ if (remainingChars == 1) {
+ message += 'karaktere bat';
+ } else {
+ message += remainingChars + ' karaktere';
+ }
+
+ message += ' gehiago';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Emaitza gehiago kargatzen…';
+ },
+ maximumSelected: function (args) {
+ if (args.maximum === 1) {
+ return 'Elementu bakarra hauta dezakezu';
+ } else {
+ return args.maximum + ' elementu hauta ditzakezu soilik';
+ }
+ },
+ noResults: function () {
+ return 'Ez da bat datorrenik aurkitu';
+ },
+ searching: function () {
+ return 'Bilatzen…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/fa.js b/public/bower_components/select2/src/js/select2/i18n/fa.js
new file mode 100644
index 0000000..64ce1a5
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/fa.js
@@ -0,0 +1,38 @@
+/* jshint -W100 */
+/* jslint maxlen: 86 */
+define(function () {
+ // Farsi (Persian)
+ return {
+ errorLoading: function () {
+ return 'امکان بارگذاری نتایج وجود ندارد.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'لطفاً ' + overChars + ' کاراکتر را حذف نمایید';
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'لطفاً تعداد ' + remainingChars + ' کاراکتر یا بیشتر وارد نمایید';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'در حال بارگذاری نتایج بیشتر...';
+ },
+ maximumSelected: function (args) {
+ var message = 'شما تنها می‌توانید ' + args.maximum + ' آیتم را انتخاب نمایید';
+
+ return message;
+ },
+ noResults: function () {
+ return 'هیچ نتیجه‌ای یافت نشد';
+ },
+ searching: function () {
+ return 'در حال جستجو...';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/fi.js b/public/bower_components/select2/src/js/select2/i18n/fi.js
new file mode 100644
index 0000000..cf33a43
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/fi.js
@@ -0,0 +1,30 @@
+define(function () {
+ // Finnish
+ return {
+ errorLoading: function () {
+ return 'Tuloksia ei saatu ladattua.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ return 'Ole hyvä ja anna ' + overChars + ' merkkiä vähemmän';
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ return 'Ole hyvä ja anna ' + remainingChars + ' merkkiä lisää';
+ },
+ loadingMore: function () {
+ return 'Ladataan lisää tuloksia…';
+ },
+ maximumSelected: function (args) {
+ return 'Voit valita ainoastaan ' + args.maximum + ' kpl';
+ },
+ noResults: function () {
+ return 'Ei tuloksia';
+ },
+ searching: function () {
+ return 'Haetaan…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/fr.js b/public/bower_components/select2/src/js/select2/i18n/fr.js
new file mode 100644
index 0000000..4f0cba1
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/fr.js
@@ -0,0 +1,33 @@
+define(function () {
+ // French
+ return {
+ errorLoading: function () {
+ return 'Les résultats ne peuvent pas être chargés.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ return 'Supprimez ' + overChars + ' caractère' +
+ (overChars > 1) ? 's' : '';
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ return 'Saisissez au moins ' + remainingChars + ' caractère' +
+ (remainingChars > 1) ? 's' : '';
+ },
+ loadingMore: function () {
+ return 'Chargement de résultats supplémentaires…';
+ },
+ maximumSelected: function (args) {
+ return 'Vous pouvez seulement sélectionner ' + args.maximum +
+ ' élément' + (args.maximum > 1) ? 's' : '';
+ },
+ noResults: function () {
+ return 'Aucun résultat trouvé';
+ },
+ searching: function () {
+ return 'Recherche en cours…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/gl.js b/public/bower_components/select2/src/js/select2/i18n/gl.js
new file mode 100644
index 0000000..3a9ffe3
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/gl.js
@@ -0,0 +1,39 @@
+define(function () {
+ // Galician
+ return {
+ errorLoading: function () {
+ return 'Non foi posíbel cargar os resultados.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ if (overChars === 1) {
+ return 'Elimine un carácter';
+ }
+ return 'Elimine ' + overChars + ' caracteres';
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ if (remainingChars === 1) {
+ return 'Engada un carácter';
+ }
+ return 'Engada ' + remainingChars + ' caracteres';
+ },
+ loadingMore: function () {
+ return 'Cargando máis resultados…';
+ },
+ maximumSelected: function (args) {
+ if (args.maximum === 1) {
+ return 'Só pode seleccionar un elemento';
+ }
+ return 'Só pode seleccionar ' + args.maximum + ' elementos';
+ },
+ noResults: function () {
+ return 'Non se atoparon resultados';
+ },
+ searching: function () {
+ return 'Buscando…';
+ }
+ };
+}); \ No newline at end of file
diff --git a/public/bower_components/select2/src/js/select2/i18n/he.js b/public/bower_components/select2/src/js/select2/i18n/he.js
new file mode 100644
index 0000000..5a27f81
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/he.js
@@ -0,0 +1,56 @@
+define(function () {
+ // Hebrew
+ return {
+ errorLoading: function () {
+ return 'שגיאה בטעינת התוצאות';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'נא למחוק ';
+
+ if (overChars === 1) {
+ message += 'תו אחד';
+ } else {
+ message += overChars + ' תווים';
+ }
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'נא להכניס ';
+
+ if (remainingChars === 1) {
+ message += 'תו אחד';
+ } else {
+ message += remainingChars + ' תווים';
+ }
+
+ message += ' או יותר';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'טוען תוצאות נוספות…';
+ },
+ maximumSelected: function (args) {
+ var message = 'באפשרותך לבחור עד ';
+
+ if (args.maximum === 1) {
+ message += 'פריט אחד';
+ } else {
+ message += args.maximum + ' פריטים';
+ }
+
+ return message;
+ },
+ noResults: function () {
+ return 'לא נמצאו תוצאות';
+ },
+ searching: function () {
+ return 'מחפש…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/hi.js b/public/bower_components/select2/src/js/select2/i18n/hi.js
new file mode 100644
index 0000000..e8ee153
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/hi.js
@@ -0,0 +1,39 @@
+define(function () {
+ // Hindi
+ return {
+ errorLoading: function () {
+ return 'परिणामों को लोड नहीं किया जा सका।';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = overChars + ' अक्षर को हटा दें';
+
+ if (overChars > 1) {
+ message = overChars + ' अक्षरों को हटा दें ';
+ }
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'कृपया ' + remainingChars + ' या अधिक अक्षर दर्ज करें';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'अधिक परिणाम लोड हो रहे है...';
+ },
+ maximumSelected: function (args) {
+ var message = 'आप केवल ' + args.maximum + ' आइटम का चयन कर सकते हैं';
+ return message;
+ },
+ noResults: function () {
+ return 'कोई परिणाम नहीं मिला';
+ },
+ searching: function () {
+ return 'खोज रहा है...';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/hr.js b/public/bower_components/select2/src/js/select2/i18n/hr.js
new file mode 100644
index 0000000..81462a5
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/hr.js
@@ -0,0 +1,44 @@
+define(function () {
+ // Croatian
+ function character (n) {
+ var message = ' ' + n + ' znak';
+
+ if (n % 10 < 5 && n % 10 > 0 && (n % 100 < 5 || n % 100 > 19)) {
+ if (n % 10 > 1) {
+ message += 'a';
+ }
+ } else {
+ message += 'ova';
+ }
+
+ return message;
+ }
+
+ return {
+ errorLoading: function () {
+ return 'Preuzimanje nije uspjelo.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ return 'Unesite ' + character(overChars);
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ return 'Unesite još ' + character(remainingChars);
+ },
+ loadingMore: function () {
+ return 'Učitavanje rezultata…';
+ },
+ maximumSelected: function (args) {
+ return 'Maksimalan broj odabranih stavki je ' + args.maximum;
+ },
+ noResults: function () {
+ return 'Nema rezultata';
+ },
+ searching: function () {
+ return 'Pretraga…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/hsb.js b/public/bower_components/select2/src/js/select2/i18n/hsb.js
new file mode 100644
index 0000000..14b1eda
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/hsb.js
@@ -0,0 +1,48 @@
+define(function () {
+ // Upper Sorbian
+ var charsWords = ['znamješko', 'znamješce', 'znamješka','znamješkow'];
+ var itemsWords = ['zapisk', 'zapiskaj', 'zapiski','zapiskow'];
+
+ var pluralWord = function pluralWord(numberOfChars, words) {
+ if (numberOfChars === 1) {
+ return words[0];
+ } else if (numberOfChars === 2) {
+ return words[1];
+ } else if (numberOfChars > 2 && numberOfChars <= 4) {
+ return words[2];
+ } else if (numberOfChars >= 5) {
+ return words[3];
+ }
+ };
+
+ return {
+ errorLoading: function () {
+ return 'Wuslědki njedachu so začitać.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ return 'Prošu zhašej ' + overChars + ' ' +
+ pluralWord(overChars, charsWords);
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ return 'Prošu zapodaj znajmjeńša ' + remainingChars + ' ' +
+ pluralWord(remainingChars, charsWords);
+ },
+ loadingMore: function () {
+ return 'Dalše wuslědki so začitaja…';
+ },
+ maximumSelected: function (args) {
+ return 'Móžeš jenož ' + args.maximum + ' ' +
+ pluralWord(args.maximum, itemsWords) + 'wubrać';
+ },
+ noResults: function () {
+ return 'Žane wuslědki namakane';
+ },
+ searching: function () {
+ return 'Pyta so…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/hu.js b/public/bower_components/select2/src/js/select2/i18n/hu.js
new file mode 100644
index 0000000..fbe1d77
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/hu.js
@@ -0,0 +1,30 @@
+define(function () {
+ // Hungarian
+ return {
+ errorLoading: function () {
+ return 'Az eredmények betöltése nem sikerült.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ return 'Túl hosszú. ' + overChars + ' karakterrel több, mint kellene.';
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ return 'Túl rövid. Még ' + remainingChars + ' karakter hiányzik.';
+ },
+ loadingMore: function () {
+ return 'Töltés…';
+ },
+ maximumSelected: function (args) {
+ return 'Csak ' + args.maximum + ' elemet lehet kiválasztani.';
+ },
+ noResults: function () {
+ return 'Nincs találat.';
+ },
+ searching: function () {
+ return 'Keresés…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/hy.js b/public/bower_components/select2/src/js/select2/i18n/hy.js
new file mode 100644
index 0000000..098c350
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/hy.js
@@ -0,0 +1,38 @@
+define(function () {
+ // Armenian
+ return {
+ errorLoading: function () {
+ return 'Արդյունքները հնարավոր չէ բեռնել։';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Խնդրում ենք հեռացնել ' + overChars + ' նշան';
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Խնդրում ենք մուտքագրել ' + remainingChars +
+ ' կամ ավել նշաններ';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Բեռնվում են նոր արդյունքներ․․․';
+ },
+ maximumSelected: function (args) {
+ var message = 'Դուք կարող եք ընտրել առավելագույնը ' + args.maximum +
+ ' կետ';
+
+ return message;
+ },
+ noResults: function () {
+ return 'Արդյունքներ չեն գտնվել';
+ },
+ searching: function () {
+ return 'Որոնում․․․';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/id.js b/public/bower_components/select2/src/js/select2/i18n/id.js
new file mode 100644
index 0000000..43b632e
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/id.js
@@ -0,0 +1,30 @@
+define(function () {
+ // Indonesian
+ return {
+ errorLoading: function () {
+ return 'Data tidak boleh diambil.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ return 'Hapuskan ' + overChars + ' huruf';
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ return 'Masukkan ' + remainingChars + ' huruf lagi';
+ },
+ loadingMore: function () {
+ return 'Mengambil data…';
+ },
+ maximumSelected: function (args) {
+ return 'Anda hanya dapat memilih ' + args.maximum + ' pilihan';
+ },
+ noResults: function () {
+ return 'Tidak ada data yang sesuai';
+ },
+ searching: function () {
+ return 'Mencari…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/is.js b/public/bower_components/select2/src/js/select2/i18n/is.js
new file mode 100644
index 0000000..7a835f5
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/is.js
@@ -0,0 +1,41 @@
+define(function () {
+ // Icelandic
+ return {
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Vinsamlegast styttið texta um ' + overChars + ' staf';
+
+ if (overChars <= 1) {
+ return message;
+ }
+
+ return message + 'i';
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Vinsamlegast skrifið ' + remainingChars + ' staf';
+
+ if (remainingChars > 1) {
+ message += 'i';
+ }
+
+ message += ' í viðbót';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Sæki fleiri niðurstöður…';
+ },
+ maximumSelected: function (args) {
+ return 'Þú getur aðeins valið ' + args.maximum + ' atriði';
+ },
+ noResults: function () {
+ return 'Ekkert fannst';
+ },
+ searching: function () {
+ return 'Leita…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/it.js b/public/bower_components/select2/src/js/select2/i18n/it.js
new file mode 100644
index 0000000..76c2e4b
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/it.js
@@ -0,0 +1,48 @@
+define(function () {
+ // Italian
+ return {
+ errorLoading: function () {
+ return 'I risultati non possono essere caricati.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Per favore cancella ' + overChars + ' caratter';
+
+ if (overChars !== 1) {
+ message += 'i';
+ } else {
+ message += 'e';
+ }
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Per favore inserisci ' +remainingChars+ ' o più caratteri';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Caricando più risultati…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Puoi selezionare solo ' + args.maximum + ' element';
+
+ if (args.maximum !== 1) {
+ message += 'i';
+ } else {
+ message += 'o';
+ }
+
+ return message;
+ },
+ noResults: function () {
+ return 'Nessun risultato trovato';
+ },
+ searching: function () {
+ return 'Sto cercando…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/ja.js b/public/bower_components/select2/src/js/select2/i18n/ja.js
new file mode 100644
index 0000000..c954c4f
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/ja.js
@@ -0,0 +1,36 @@
+define(function () {
+ // Japanese
+ return {
+ errorLoading: function () {
+ return '結果が読み込まれませんでした';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = overChars + ' 文字を削除してください';
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = '少なくとも ' + remainingChars + ' 文字を入力してください';
+
+ return message;
+ },
+ loadingMore: function () {
+ return '読み込み中…';
+ },
+ maximumSelected: function (args) {
+ var message = args.maximum + ' 件しか選択できません';
+
+ return message;
+ },
+ noResults: function () {
+ return '対象が見つかりません';
+ },
+ searching: function () {
+ return '検索しています…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/km.js b/public/bower_components/select2/src/js/select2/i18n/km.js
new file mode 100644
index 0000000..10e3d7e
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/km.js
@@ -0,0 +1,36 @@
+define(function () {
+ // Khmer
+ return {
+ errorLoading: function () {
+ return 'មិនអាចទាញយកទិន្នន័យ';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'សូមលុបចេញ ' + overChars + ' អក្សរ';
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'សូមបញ្ចូល' + remainingChars + ' អក្សរ រឺ ច្រើនជាងនេះ';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'កំពុងទាញយកទិន្នន័យបន្ថែម...';
+ },
+ maximumSelected: function (args) {
+ var message = 'អ្នកអាចជ្រើសរើសបានតែ ' + args.maximum + ' ជម្រើសប៉ុណ្ណោះ';
+
+ return message;
+ },
+ noResults: function () {
+ return 'មិនមានលទ្ធផល';
+ },
+ searching: function () {
+ return 'កំពុងស្វែងរក...';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/ko.js b/public/bower_components/select2/src/js/select2/i18n/ko.js
new file mode 100644
index 0000000..9a2de10
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/ko.js
@@ -0,0 +1,36 @@
+define(function () {
+ // Korean
+ return {
+ errorLoading: function () {
+ return '결과를 불러올 수 없습니다.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = '너무 깁니다. ' + overChars + ' 글자 지워주세요.';
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = '너무 짧습니다. ' + remainingChars + ' 글자 더 입력해주세요.';
+
+ return message;
+ },
+ loadingMore: function () {
+ return '불러오는 중…';
+ },
+ maximumSelected: function (args) {
+ var message = '최대 ' + args.maximum + '개까지만 선택 가능합니다.';
+
+ return message;
+ },
+ noResults: function () {
+ return '결과가 없습니다.';
+ },
+ searching: function () {
+ return '검색 중…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/lt.js b/public/bower_components/select2/src/js/select2/i18n/lt.js
new file mode 100644
index 0000000..500a519
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/lt.js
@@ -0,0 +1,52 @@
+define(function () {
+ // rules from
+ // http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html#lt
+ function ending(count, one, few, other) {
+ if (count % 10 === 1 && (count % 100 < 11 || count % 100 > 19)) {
+ return one;
+ } else if (
+ (count % 10 >= 2 && count % 10 <= 9) &&
+ (count % 100 < 11 || count % 100 > 19)) {
+ return few;
+ } else {
+ return other;
+ }
+ }
+
+ return {
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Pašalinkite ' + overChars + ' simbol';
+
+ message += ending(overChars, 'į', 'ius', 'ių');
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Įrašykite dar ' + remainingChars + ' simbol';
+
+ message += ending(remainingChars, 'į', 'ius', 'ių');
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Kraunama daugiau rezultatų…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Jūs galite pasirinkti tik ' + args.maximum + ' element';
+
+ message += ending(args.maximum, 'ą', 'us', 'ų');
+
+ return message;
+ },
+ noResults: function () {
+ return 'Atitikmenų nerasta';
+ },
+ searching: function () {
+ return 'Ieškoma…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/lv.js b/public/bower_components/select2/src/js/select2/i18n/lv.js
new file mode 100644
index 0000000..560cab0
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/lv.js
@@ -0,0 +1,51 @@
+define(function () {
+ // Latvian
+ function ending (count, eleven, singular, other) {
+ if (count === 11) {
+ return eleven;
+ }
+
+ if (count % 10 === 1) {
+ return singular;
+ }
+
+ return other;
+ }
+
+ return {
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Lūdzu ievadiet par ' + overChars;
+
+ message += ' simbol' + ending(overChars, 'iem', 'u', 'iem');
+
+ return message + ' mazāk';
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Lūdzu ievadiet vēl ' + remainingChars;
+
+ message += ' simbol' + ending(remainingChars, 'us', 'u', 'us');
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Datu ielāde…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Jūs varat izvēlēties ne vairāk kā ' + args.maximum;
+
+ message += ' element' + ending(args.maximum, 'us', 'u', 'us');
+
+ return message;
+ },
+ noResults: function () {
+ return 'Sakritību nav';
+ },
+ searching: function () {
+ return 'Meklēšana…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/mk.js b/public/bower_components/select2/src/js/select2/i18n/mk.js
new file mode 100644
index 0000000..a27f0e8
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/mk.js
@@ -0,0 +1,47 @@
+define(function () {
+ // Macedonian
+ return {
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Ве молиме внесете ' + args.maximum + ' помалку карактер';
+
+ if (args.maximum !== 1) {
+ message += 'и';
+ }
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Ве молиме внесете уште ' + args.maximum + ' карактер';
+
+ if (args.maximum !== 1) {
+ message += 'и';
+ }
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Вчитување резултати…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Можете да изберете само ' + args.maximum + ' ставк';
+
+ if (args.maximum === 1) {
+ message += 'а';
+ } else {
+ message += 'и';
+ }
+
+ return message;
+ },
+ noResults: function () {
+ return 'Нема пронајдено совпаѓања';
+ },
+ searching: function () {
+ return 'Пребарување…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/ms.js b/public/bower_components/select2/src/js/select2/i18n/ms.js
new file mode 100644
index 0000000..3c11562
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/ms.js
@@ -0,0 +1,30 @@
+define(function () {
+ // Malay
+ return {
+ errorLoading: function () {
+ return 'Keputusan tidak berjaya dimuatkan.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ return 'Sila hapuskan ' + overChars + ' aksara';
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ return 'Sila masukkan ' + remainingChars + ' atau lebih aksara';
+ },
+ loadingMore: function () {
+ return 'Sedang memuatkan keputusan…';
+ },
+ maximumSelected: function (args) {
+ return 'Anda hanya boleh memilih ' + args.maximum + ' pilihan';
+ },
+ noResults: function () {
+ return 'Tiada padanan yang ditemui';
+ },
+ searching: function () {
+ return 'Mencari…';
+ }
+ };
+}); \ No newline at end of file
diff --git a/public/bower_components/select2/src/js/select2/i18n/nb.js b/public/bower_components/select2/src/js/select2/i18n/nb.js
new file mode 100644
index 0000000..d42fb7d
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/nb.js
@@ -0,0 +1,32 @@
+define(function () {
+ // Norwegian (Bokmål)
+ return {
+ errorLoading: function () {
+ return 'Kunne ikke hente resultater.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ return 'Vennligst fjern ' + overChars + ' tegn';
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Vennligst skriv inn ' + remainingChars + ' tegn til';
+
+ return message + ' tegn til';
+ },
+ loadingMore: function () {
+ return 'Laster flere resultater…';
+ },
+ maximumSelected: function (args) {
+ return 'Du kan velge maks ' + args.maximum + ' elementer';
+ },
+ noResults: function () {
+ return 'Ingen treff';
+ },
+ searching: function () {
+ return 'Søker…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/nl.js b/public/bower_components/select2/src/js/select2/i18n/nl.js
new file mode 100644
index 0000000..e8c016a
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/nl.js
@@ -0,0 +1,43 @@
+define(function () {
+ // Dutch
+ return {
+ errorLoading: function () {
+ return 'De resultaten konden niet worden geladen.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Gelieve ' + overChars + ' karakters te verwijderen';
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Gelieve ' + remainingChars +
+ ' of meer karakters in te voeren';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Meer resultaten laden…';
+ },
+ maximumSelected: function (args) {
+ var verb = args.maximum == 1 ? 'kan' : 'kunnen';
+ var message = 'Er ' + verb + ' maar ' + args.maximum + ' item';
+
+ if (args.maximum != 1) {
+ message += 's';
+ }
+ message += ' worden geselecteerd';
+
+ return message;
+ },
+ noResults: function () {
+ return 'Geen resultaten gevonden…';
+ },
+ searching: function () {
+ return 'Zoeken…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/pl.js b/public/bower_components/select2/src/js/select2/i18n/pl.js
new file mode 100644
index 0000000..030a4dd
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/pl.js
@@ -0,0 +1,45 @@
+define(function () {
+ // Polish
+ var charsWords = ['znak', 'znaki', 'znaków'];
+ var itemsWords = ['element', 'elementy', 'elementów'];
+
+ var pluralWord = function pluralWord(numberOfChars, words) {
+ if (numberOfChars === 1) {
+ return words[0];
+ } else if (numberOfChars > 1 && numberOfChars <= 4) {
+ return words[1];
+ } else if (numberOfChars >= 5) {
+ return words[2];
+ }
+ };
+
+ return {
+ errorLoading: function () {
+ return 'Nie można załadować wyników.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ return 'Usuń ' + overChars + ' ' + pluralWord(overChars, charsWords);
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ return 'Podaj przynajmniej ' + remainingChars + ' ' +
+ pluralWord(remainingChars, charsWords);
+ },
+ loadingMore: function () {
+ return 'Trwa ładowanie…';
+ },
+ maximumSelected: function (args) {
+ return 'Możesz zaznaczyć tylko ' + args.maximum + ' ' +
+ pluralWord(args.maximum, itemsWords);
+ },
+ noResults: function () {
+ return 'Brak wyników';
+ },
+ searching: function () {
+ return 'Trwa wyszukiwanie…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/ps.js b/public/bower_components/select2/src/js/select2/i18n/ps.js
new file mode 100644
index 0000000..9c70af9
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/ps.js
@@ -0,0 +1,45 @@
+/* jslint maxlen: 87 */
+define(function () {
+ // Pashto (پښتو)
+ return {
+ errorLoading: function () {
+ return 'پايلي نه سي ترلاسه کېدای';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'د مهربانۍ لمخي ' + overChars + ' توری ړنګ کړئ';
+
+ if (overChars != 1) {
+ message = message.replace('توری', 'توري');
+ }
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'لږ تر لږه ' + remainingChars + ' يا ډېر توري وليکئ';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'نوري پايلي ترلاسه کيږي...';
+ },
+ maximumSelected: function (args) {
+ var message = 'تاسو يوازي ' + args.maximum + ' قلم په نښه کولای سی';
+
+ if (args.maximum != 1) {
+ message = message.replace('قلم', 'قلمونه');
+ }
+
+ return message;
+ },
+ noResults: function () {
+ return 'پايلي و نه موندل سوې';
+ },
+ searching: function () {
+ return 'لټول کيږي...';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/pt-BR.js b/public/bower_components/select2/src/js/select2/i18n/pt-BR.js
new file mode 100644
index 0000000..7f769b6
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/pt-BR.js
@@ -0,0 +1,46 @@
+define(function () {
+ // Brazilian Portuguese
+ return {
+ errorLoading: function () {
+ return 'Os resultados não puderam ser carregados.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Apague ' + overChars + ' caracter';
+
+ if (overChars != 1) {
+ message += 'es';
+ }
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Digite ' + remainingChars + ' ou mais caracteres';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Carregando mais resultados…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Você só pode selecionar ' + args.maximum + ' ite';
+
+ if (args.maximum == 1) {
+ message += 'm';
+ } else {
+ message += 'ns';
+ }
+
+ return message;
+ },
+ noResults: function () {
+ return 'Nenhum resultado encontrado';
+ },
+ searching: function () {
+ return 'Buscando…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/pt.js b/public/bower_components/select2/src/js/select2/i18n/pt.js
new file mode 100644
index 0000000..e66a8a2
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/pt.js
@@ -0,0 +1,40 @@
+define(function () {
+ // European Portuguese
+ return {
+ errorLoading: function () {
+ return 'Os resultados não puderam ser carregados.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Por favor apague ' + overChars + ' ';
+
+ message += overChars != 1 ? 'caracteres' : 'caractere';
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Introduza ' + remainingChars + ' ou mais caracteres';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'A carregar mais resultados…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Apenas pode seleccionar ' + args.maximum + ' ';
+
+ message += args.maximum != 1 ? 'itens' : 'item';
+
+ return message;
+ },
+ noResults: function () {
+ return 'Sem resultados';
+ },
+ searching: function () {
+ return 'A procurar…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/ro.js b/public/bower_components/select2/src/js/select2/i18n/ro.js
new file mode 100644
index 0000000..3faa7a7
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/ro.js
@@ -0,0 +1,46 @@
+define(function () {
+ // Romanian
+ return {
+ errorLoading: function () {
+ return 'Rezultatele nu au putut fi incărcate.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Vă rugăm să ștergeți' + overChars + ' caracter';
+
+ if (overChars !== 1) {
+ message += 'e';
+ }
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Vă rugăm să introduceți ' + remainingChars +
+ ' sau mai multe caractere';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Se încarcă mai multe rezultate…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Aveți voie să selectați cel mult ' + args.maximum;
+ message += ' element';
+
+ if (args.maximum !== 1) {
+ message += 'e';
+ }
+
+ return message;
+ },
+ noResults: function () {
+ return 'Nu au fost găsite rezultate';
+ },
+ searching: function () {
+ return 'Căutare…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/ru.js b/public/bower_components/select2/src/js/select2/i18n/ru.js
new file mode 100644
index 0000000..2ac11ec
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/ru.js
@@ -0,0 +1,58 @@
+define(function () {
+ // Russian
+ function ending (count, one, couple, more) {
+ if (count % 10 < 5 && count % 10 > 0 &&
+ count % 100 < 5 || count % 100 > 20) {
+ if (count % 10 > 1) {
+ return couple;
+ }
+ } else {
+ return more;
+ }
+
+ return one;
+ }
+
+ return {
+ errorLoading: function () {
+ return 'Невозможно загрузить результаты';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Пожалуйста, введите на ' + overChars + ' символ';
+
+ message += ending(overChars, '', 'a', 'ов');
+
+ message += ' меньше';
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Пожалуйста, введите еще хотя бы ' + remainingChars +
+ ' символ';
+
+ message += ending(remainingChars, '', 'a', 'ов');
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Загрузка данных…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Вы можете выбрать не более ' + args.maximum + ' элемент';
+
+ message += ending(args.maximum, '', 'a', 'ов');
+
+ return message;
+ },
+ noResults: function () {
+ return 'Совпадений не найдено';
+ },
+ searching: function () {
+ return 'Поиск…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/sk.js b/public/bower_components/select2/src/js/select2/i18n/sk.js
new file mode 100644
index 0000000..7c9bfb9
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/sk.js
@@ -0,0 +1,59 @@
+define(function () {
+ // Slovak
+
+ // use text for the numbers 2 through 4
+ var smallNumbers = {
+ 2: function (masc) { return (masc ? 'dva' : 'dve'); },
+ 3: function () { return 'tri'; },
+ 4: function () { return 'štyri'; }
+ };
+
+ return {
+ errorLoading: function () {
+ return 'Výsledky sa nepodarilo načítať.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ if (overChars == 1) {
+ return 'Prosím, zadajte o jeden znak menej';
+ } else if (overChars >= 2 && overChars <= 4) {
+ return 'Prosím, zadajte o ' + smallNumbers[overChars](true) +
+ ' znaky menej';
+ } else {
+ return 'Prosím, zadajte o ' + overChars + ' znakov menej';
+ }
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ if (remainingChars == 1) {
+ return 'Prosím, zadajte ešte jeden znak';
+ } else if (remainingChars <= 4) {
+ return 'Prosím, zadajte ešte ďalšie ' +
+ smallNumbers[remainingChars](true) + ' znaky';
+ } else {
+ return 'Prosím, zadajte ešte ďalších ' + remainingChars + ' znakov';
+ }
+ },
+ loadingMore: function () {
+ return 'Načítanie ďalších výsledkov…';
+ },
+ maximumSelected: function (args) {
+ if (args.maximum == 1) {
+ return 'Môžete zvoliť len jednu položku';
+ } else if (args.maximum >= 2 && args.maximum <= 4) {
+ return 'Môžete zvoliť najviac ' + smallNumbers[args.maximum](false) +
+ ' položky';
+ } else {
+ return 'Môžete zvoliť najviac ' + args.maximum + ' položiek';
+ }
+ },
+ noResults: function () {
+ return 'Nenašli sa žiadne položky';
+ },
+ searching: function () {
+ return 'Vyhľadávanie…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/sl.js b/public/bower_components/select2/src/js/select2/i18n/sl.js
new file mode 100644
index 0000000..a164044
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/sl.js
@@ -0,0 +1,54 @@
+define(function () {
+ // Slovene
+ return {
+ errorLoading: function () {
+ return 'Zadetkov iskanja ni bilo mogoče naložiti.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Prosim zbrišite ' + overChars + ' znak';
+
+ if (overChars == 2) {
+ message += 'a';
+ } else if (overChars != 1) {
+ message += 'e';
+ }
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Prosim vpišite še ' + remainingChars + ' znak';
+
+ if (remainingChars == 2) {
+ message += 'a';
+ } else if (remainingChars != 1) {
+ message += 'e';
+ }
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Nalagam več zadetkov…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Označite lahko največ ' + args.maximum + ' predmet';
+
+ if (args.maximum == 2) {
+ message += 'a';
+ } else if (args.maximum != 1) {
+ message += 'e';
+ }
+
+ return message;
+ },
+ noResults: function () {
+ return 'Ni zadetkov.';
+ },
+ searching: function () {
+ return 'Iščem…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/sr-Cyrl.js b/public/bower_components/select2/src/js/select2/i18n/sr-Cyrl.js
new file mode 100644
index 0000000..c61184e
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/sr-Cyrl.js
@@ -0,0 +1,55 @@
+define(function () {
+ // Serbian Cyrilic
+ function ending (count, one, some, many) {
+ if (count % 10 == 1 && count % 100 != 11) {
+ return one;
+ }
+
+ if (count % 10 >= 2 && count % 10 <= 4 &&
+ (count % 100 < 12 || count % 100 > 14)) {
+ return some;
+ }
+
+ return many;
+ }
+
+ return {
+ errorLoading: function () {
+ return 'Преузимање није успело.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Обришите ' + overChars + ' симбол';
+
+ message += ending(overChars, '', 'а', 'а');
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Укуцајте бар још ' + remainingChars + ' симбол';
+
+ message += ending(remainingChars, '', 'а', 'а');
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Преузимање још резултата…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Можете изабрати само ' + args.maximum + ' ставк';
+
+ message += ending(args.maximum, 'у', 'е', 'и');
+
+ return message;
+ },
+ noResults: function () {
+ return 'Ништа није пронађено';
+ },
+ searching: function () {
+ return 'Претрага…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/sr.js b/public/bower_components/select2/src/js/select2/i18n/sr.js
new file mode 100644
index 0000000..7821b2b
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/sr.js
@@ -0,0 +1,55 @@
+define(function () {
+ // Serbian
+ function ending (count, one, some, many) {
+ if (count % 10 == 1 && count % 100 != 11) {
+ return one;
+ }
+
+ if (count % 10 >= 2 && count % 10 <= 4 &&
+ (count % 100 < 12 || count % 100 > 14)) {
+ return some;
+ }
+
+ return many;
+ }
+
+ return {
+ errorLoading: function () {
+ return 'Preuzimanje nije uspelo.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Obrišite ' + overChars + ' simbol';
+
+ message += ending(overChars, '', 'a', 'a');
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Ukucajte bar još ' + remainingChars + ' simbol';
+
+ message += ending(remainingChars, '', 'a', 'a');
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Preuzimanje još rezultata…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Možete izabrati samo ' + args.maximum + ' stavk';
+
+ message += ending(args.maximum, 'u', 'e', 'i');
+
+ return message;
+ },
+ noResults: function () {
+ return 'Ništa nije pronađeno';
+ },
+ searching: function () {
+ return 'Pretraga…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/sv.js b/public/bower_components/select2/src/js/select2/i18n/sv.js
new file mode 100644
index 0000000..42bed7e
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/sv.js
@@ -0,0 +1,37 @@
+define(function () {
+ // Swedish
+ return {
+ errorLoading: function () {
+ return 'Resultat kunde inte laddas.';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Vänligen sudda ut ' + overChars + ' tecken';
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Vänligen skriv in ' + remainingChars +
+ ' eller fler tecken';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Laddar fler resultat…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Du kan max välja ' + args.maximum + ' element';
+
+ return message;
+ },
+ noResults: function () {
+ return 'Inga träffar';
+ },
+ searching: function () {
+ return 'Söker…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/th.js b/public/bower_components/select2/src/js/select2/i18n/th.js
new file mode 100644
index 0000000..a7921ee
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/th.js
@@ -0,0 +1,36 @@
+define(function () {
+ // Thai
+ return {
+ errorLoading: function () {
+ return 'ไม่สามารถค้นข้อมูลได้';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'โปรดลบออก ' + overChars + ' ตัวอักษร';
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'โปรดพิมพ์เพิ่มอีก ' + remainingChars + ' ตัวอักษร';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'กำลังค้นข้อมูลเพิ่ม…';
+ },
+ maximumSelected: function (args) {
+ var message = 'คุณสามารถเลือกได้ไม่เกิน ' + args.maximum + ' รายการ';
+
+ return message;
+ },
+ noResults: function () {
+ return 'ไม่พบข้อมูล';
+ },
+ searching: function () {
+ return 'กำลังค้นข้อมูล…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/tr.js b/public/bower_components/select2/src/js/select2/i18n/tr.js
new file mode 100644
index 0000000..fd8ffd3
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/tr.js
@@ -0,0 +1,36 @@
+define(function () {
+ // Turkish
+ return {
+ errorLoading: function (){
+ return 'Sonuç yüklenemedi';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = overChars + ' karakter daha girmelisiniz';
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'En az ' + remainingChars + ' karakter daha girmelisiniz';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Daha fazla…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Sadece ' + args.maximum + ' seçim yapabilirsiniz';
+
+ return message;
+ },
+ noResults: function () {
+ return 'Sonuç bulunamadı';
+ },
+ searching: function () {
+ return 'Aranıyor…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/uk.js b/public/bower_components/select2/src/js/select2/i18n/uk.js
new file mode 100644
index 0000000..72067c9
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/uk.js
@@ -0,0 +1,43 @@
+define(function () {
+ // Ukranian
+ function ending (count, one, couple, more) {
+ if (count % 100 > 10 && count % 100 < 15) {
+ return more;
+ }
+ if (count % 10 === 1) {
+ return one;
+ }
+ if (count % 10 > 1 && count % 10 < 5) {
+ return couple;
+ }
+ return more;
+ }
+
+ return {
+ errorLoading: function () {
+ return 'Неможливо завантажити результати';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+ return 'Будь ласка, видаліть ' + overChars + ' ' +
+ ending(args.maximum, 'літеру', 'літери', 'літер');
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+ return 'Будь ласка, введіть ' + remainingChars + ' або більше літер';
+ },
+ loadingMore: function () {
+ return 'Завантаження інших результатів…';
+ },
+ maximumSelected: function (args) {
+ return 'Ви можете вибрати лише ' + args.maximum + ' ' +
+ ending(args.maximum, 'пункт', 'пункти', 'пунктів');
+ },
+ noResults: function () {
+ return 'Нічого не знайдено';
+ },
+ searching: function () {
+ return 'Пошук…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/vi.js b/public/bower_components/select2/src/js/select2/i18n/vi.js
new file mode 100644
index 0000000..3d4b50e
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/vi.js
@@ -0,0 +1,37 @@
+define(function () {
+ // Vietnamese
+ return {
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = 'Vui lòng nhập ít hơn ' + overChars + ' ký tự';
+
+ if (overChars != 1) {
+ message += 's';
+ }
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = 'Vui lòng nhập nhiều hơn ' + remainingChars + ' ký tự';
+
+ return message;
+ },
+ loadingMore: function () {
+ return 'Đang lấy thêm kết quả…';
+ },
+ maximumSelected: function (args) {
+ var message = 'Chỉ có thể chọn được ' + args.maximum + ' lựa chọn';
+
+ return message;
+ },
+ noResults: function () {
+ return 'Không tìm thấy kết quả';
+ },
+ searching: function () {
+ return 'Đang tìm…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/zh-CN.js b/public/bower_components/select2/src/js/select2/i18n/zh-CN.js
new file mode 100644
index 0000000..4aaec39
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/zh-CN.js
@@ -0,0 +1,36 @@
+define(function () {
+ // Chinese (Simplified)
+ return {
+ errorLoading: function () {
+ return '无法载入结果。';
+ },
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = '请删除' + overChars + '个字符';
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = '请再输入至少' + remainingChars + '个字符';
+
+ return message;
+ },
+ loadingMore: function () {
+ return '载入更多结果…';
+ },
+ maximumSelected: function (args) {
+ var message = '最多只能选择' + args.maximum + '个项目';
+
+ return message;
+ },
+ noResults: function () {
+ return '未找到结果';
+ },
+ searching: function () {
+ return '搜索中…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/i18n/zh-TW.js b/public/bower_components/select2/src/js/select2/i18n/zh-TW.js
new file mode 100644
index 0000000..80624f1
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/i18n/zh-TW.js
@@ -0,0 +1,33 @@
+define(function () {
+ // Chinese (Traditional)
+ return {
+ inputTooLong: function (args) {
+ var overChars = args.input.length - args.maximum;
+
+ var message = '請刪掉' + overChars + '個字元';
+
+ return message;
+ },
+ inputTooShort: function (args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = '請再輸入' + remainingChars + '個字元';
+
+ return message;
+ },
+ loadingMore: function () {
+ return '載入中…';
+ },
+ maximumSelected: function (args) {
+ var message = '你只能選擇最多' + args.maximum + '項';
+
+ return message;
+ },
+ noResults: function () {
+ return '沒有找到相符的項目';
+ },
+ searching: function () {
+ return '搜尋中…';
+ }
+ };
+});
diff --git a/public/bower_components/select2/src/js/select2/keys.js b/public/bower_components/select2/src/js/select2/keys.js
new file mode 100644
index 0000000..f449ba4
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/keys.js
@@ -0,0 +1,25 @@
+define([
+
+], function () {
+ var KEYS = {
+ BACKSPACE: 8,
+ TAB: 9,
+ ENTER: 13,
+ SHIFT: 16,
+ CTRL: 17,
+ ALT: 18,
+ ESC: 27,
+ SPACE: 32,
+ PAGE_UP: 33,
+ PAGE_DOWN: 34,
+ END: 35,
+ HOME: 36,
+ LEFT: 37,
+ UP: 38,
+ RIGHT: 39,
+ DOWN: 40,
+ DELETE: 46
+ };
+
+ return KEYS;
+});
diff --git a/public/bower_components/select2/src/js/select2/options.js b/public/bower_components/select2/src/js/select2/options.js
new file mode 100644
index 0000000..3e48dee
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/options.js
@@ -0,0 +1,122 @@
+define([
+ 'require',
+ 'jquery',
+ './defaults',
+ './utils'
+], function (require, $, Defaults, Utils) {
+ function Options (options, $element) {
+ this.options = options;
+
+ if ($element != null) {
+ this.fromElement($element);
+ }
+
+ this.options = Defaults.apply(this.options);
+
+ if ($element && $element.is('input')) {
+ var InputCompat = require(this.get('amdBase') + 'compat/inputData');
+
+ this.options.dataAdapter = Utils.Decorate(
+ this.options.dataAdapter,
+ InputCompat
+ );
+ }
+ }
+
+ Options.prototype.fromElement = function ($e) {
+ var excludedData = ['select2'];
+
+ if (this.options.multiple == null) {
+ this.options.multiple = $e.prop('multiple');
+ }
+
+ if (this.options.disabled == null) {
+ this.options.disabled = $e.prop('disabled');
+ }
+
+ if (this.options.language == null) {
+ if ($e.prop('lang')) {
+ this.options.language = $e.prop('lang').toLowerCase();
+ } else if ($e.closest('[lang]').prop('lang')) {
+ this.options.language = $e.closest('[lang]').prop('lang');
+ }
+ }
+
+ if (this.options.dir == null) {
+ if ($e.prop('dir')) {
+ this.options.dir = $e.prop('dir');
+ } else if ($e.closest('[dir]').prop('dir')) {
+ this.options.dir = $e.closest('[dir]').prop('dir');
+ } else {
+ this.options.dir = 'ltr';
+ }
+ }
+
+ $e.prop('disabled', this.options.disabled);
+ $e.prop('multiple', this.options.multiple);
+
+ if ($e.data('select2Tags')) {
+ if (this.options.debug && window.console && console.warn) {
+ console.warn(
+ 'Select2: The `data-select2-tags` attribute has been changed to ' +
+ 'use the `data-data` and `data-tags="true"` attributes and will be ' +
+ 'removed in future versions of Select2.'
+ );
+ }
+
+ $e.data('data', $e.data('select2Tags'));
+ $e.data('tags', true);
+ }
+
+ if ($e.data('ajaxUrl')) {
+ if (this.options.debug && window.console && console.warn) {
+ console.warn(
+ 'Select2: The `data-ajax-url` attribute has been changed to ' +
+ '`data-ajax--url` and support for the old attribute will be removed' +
+ ' in future versions of Select2.'
+ );
+ }
+
+ $e.attr('ajax--url', $e.data('ajaxUrl'));
+ $e.data('ajax--url', $e.data('ajaxUrl'));
+ }
+
+ var dataset = {};
+
+ // Prefer the element's `dataset` attribute if it exists
+ // jQuery 1.x does not correctly handle data attributes with multiple dashes
+ if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {
+ dataset = $.extend(true, {}, $e[0].dataset, $e.data());
+ } else {
+ dataset = $e.data();
+ }
+
+ var data = $.extend(true, {}, dataset);
+
+ data = Utils._convertData(data);
+
+ for (var key in data) {
+ if ($.inArray(key, excludedData) > -1) {
+ continue;
+ }
+
+ if ($.isPlainObject(this.options[key])) {
+ $.extend(this.options[key], data[key]);
+ } else {
+ this.options[key] = data[key];
+ }
+ }
+
+ return this;
+ };
+
+ Options.prototype.get = function (key) {
+ return this.options[key];
+ };
+
+ Options.prototype.set = function (key, val) {
+ this.options[key] = val;
+ };
+
+ return Options;
+});
diff --git a/public/bower_components/select2/src/js/select2/results.js b/public/bower_components/select2/src/js/select2/results.js
new file mode 100644
index 0000000..a16b65f
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/results.js
@@ -0,0 +1,523 @@
+define([
+ 'jquery',
+ './utils'
+], function ($, Utils) {
+ function Results ($element, options, dataAdapter) {
+ this.$element = $element;
+ this.data = dataAdapter;
+ this.options = options;
+
+ Results.__super__.constructor.call(this);
+ }
+
+ Utils.Extend(Results, Utils.Observable);
+
+ Results.prototype.render = function () {
+ var $results = $(
+ '<ul class="select2-results__options" role="tree"></ul>'
+ );
+
+ if (this.options.get('multiple')) {
+ $results.attr('aria-multiselectable', 'true');
+ }
+
+ this.$results = $results;
+
+ return $results;
+ };
+
+ Results.prototype.clear = function () {
+ this.$results.empty();
+ };
+
+ Results.prototype.displayMessage = function (params) {
+ var escapeMarkup = this.options.get('escapeMarkup');
+
+ this.clear();
+ this.hideLoading();
+
+ var $message = $(
+ '<li role="treeitem" aria-live="assertive"' +
+ ' class="select2-results__option"></li>'
+ );
+
+ var message = this.options.get('translations').get(params.message);
+
+ $message.append(
+ escapeMarkup(
+ message(params.args)
+ )
+ );
+
+ $message[0].className += ' select2-results__message';
+
+ this.$results.append($message);
+ };
+
+ Results.prototype.hideMessages = function () {
+ this.$results.find('.select2-results__message').remove();
+ };
+
+ Results.prototype.append = function (data) {
+ this.hideLoading();
+
+ var $options = [];
+
+ if (data.results == null || data.results.length === 0) {
+ if (this.$results.children().length === 0) {
+ this.trigger('results:message', {
+ message: 'noResults'
+ });
+ }
+
+ return;
+ }
+
+ data.results = this.sort(data.results);
+
+ for (var d = 0; d < data.results.length; d++) {
+ var item = data.results[d];
+
+ var $option = this.option(item);
+
+ $options.push($option);
+ }
+
+ this.$results.append($options);
+ };
+
+ Results.prototype.position = function ($results, $dropdown) {
+ var $resultsContainer = $dropdown.find('.select2-results');
+ $resultsContainer.append($results);
+ };
+
+ Results.prototype.sort = function (data) {
+ var sorter = this.options.get('sorter');
+
+ return sorter(data);
+ };
+
+ Results.prototype.highlightFirstItem = function () {
+ var $options = this.$results
+ .find('.select2-results__option[aria-selected]');
+
+ var $selected = $options.filter('[aria-selected=true]');
+
+ // Check if there are any selected options
+ if ($selected.length > 0) {
+ // If there are selected options, highlight the first
+ $selected.first().trigger('mouseenter');
+ } else {
+ // If there are no selected options, highlight the first option
+ // in the dropdown
+ $options.first().trigger('mouseenter');
+ }
+
+ this.ensureHighlightVisible();
+ };
+
+ Results.prototype.setClasses = function () {
+ var self = this;
+
+ this.data.current(function (selected) {
+ var selectedIds = $.map(selected, function (s) {
+ return s.id.toString();
+ });
+
+ var $options = self.$results
+ .find('.select2-results__option[aria-selected]');
+
+ $options.each(function () {
+ var $option = $(this);
+
+ var item = $.data(this, 'data');
+
+ // id needs to be converted to a string when comparing
+ var id = '' + item.id;
+
+ if ((item.element != null && item.element.selected) ||
+ (item.element == null && $.inArray(id, selectedIds) > -1)) {
+ $option.attr('aria-selected', 'true');
+ } else {
+ $option.attr('aria-selected', 'false');
+ }
+ });
+
+ });
+ };
+
+ Results.prototype.showLoading = function (params) {
+ this.hideLoading();
+
+ var loadingMore = this.options.get('translations').get('searching');
+
+ var loading = {
+ disabled: true,
+ loading: true,
+ text: loadingMore(params)
+ };
+ var $loading = this.option(loading);
+ $loading.className += ' loading-results';
+
+ this.$results.prepend($loading);
+ };
+
+ Results.prototype.hideLoading = function () {
+ this.$results.find('.loading-results').remove();
+ };
+
+ Results.prototype.option = function (data) {
+ var option = document.createElement('li');
+ option.className = 'select2-results__option';
+
+ var attrs = {
+ 'role': 'treeitem',
+ 'aria-selected': 'false'
+ };
+
+ if (data.disabled) {
+ delete attrs['aria-selected'];
+ attrs['aria-disabled'] = 'true';
+ }
+
+ if (data.id == null) {
+ delete attrs['aria-selected'];
+ }
+
+ if (data._resultId != null) {
+ option.id = data._resultId;
+ }
+
+ if (data.title) {
+ option.title = data.title;
+ }
+
+ if (data.children) {
+ attrs.role = 'group';
+ attrs['aria-label'] = data.text;
+ delete attrs['aria-selected'];
+ }
+
+ for (var attr in attrs) {
+ var val = attrs[attr];
+
+ option.setAttribute(attr, val);
+ }
+
+ if (data.children) {
+ var $option = $(option);
+
+ var label = document.createElement('strong');
+ label.className = 'select2-results__group';
+
+ var $label = $(label);
+ this.template(data, label);
+
+ var $children = [];
+
+ for (var c = 0; c < data.children.length; c++) {
+ var child = data.children[c];
+
+ var $child = this.option(child);
+
+ $children.push($child);
+ }
+
+ var $childrenContainer = $('<ul></ul>', {
+ 'class': 'select2-results__options select2-results__options--nested'
+ });
+
+ $childrenContainer.append($children);
+
+ $option.append(label);
+ $option.append($childrenContainer);
+ } else {
+ this.template(data, option);
+ }
+
+ $.data(option, 'data', data);
+
+ return option;
+ };
+
+ Results.prototype.bind = function (container, $container) {
+ var self = this;
+
+ var id = container.id + '-results';
+
+ this.$results.attr('id', id);
+
+ container.on('results:all', function (params) {
+ self.clear();
+ self.append(params.data);
+
+ if (container.isOpen()) {
+ self.setClasses();
+ self.highlightFirstItem();
+ }
+ });
+
+ container.on('results:append', function (params) {
+ self.append(params.data);
+
+ if (container.isOpen()) {
+ self.setClasses();
+ }
+ });
+
+ container.on('query', function (params) {
+ self.hideMessages();
+ self.showLoading(params);
+ });
+
+ container.on('select', function () {
+ if (!container.isOpen()) {
+ return;
+ }
+
+ self.setClasses();
+ self.highlightFirstItem();
+ });
+
+ container.on('unselect', function () {
+ if (!container.isOpen()) {
+ return;
+ }
+
+ self.setClasses();
+ self.highlightFirstItem();
+ });
+
+ container.on('open', function () {
+ // When the dropdown is open, aria-expended="true"
+ self.$results.attr('aria-expanded', 'true');
+ self.$results.attr('aria-hidden', 'false');
+
+ self.setClasses();
+ self.ensureHighlightVisible();
+ });
+
+ container.on('close', function () {
+ // When the dropdown is closed, aria-expended="false"
+ self.$results.attr('aria-expanded', 'false');
+ self.$results.attr('aria-hidden', 'true');
+ self.$results.removeAttr('aria-activedescendant');
+ });
+
+ container.on('results:toggle', function () {
+ var $highlighted = self.getHighlightedResults();
+
+ if ($highlighted.length === 0) {
+ return;
+ }
+
+ $highlighted.trigger('mouseup');
+ });
+
+ container.on('results:select', function () {
+ var $highlighted = self.getHighlightedResults();
+
+ if ($highlighted.length === 0) {
+ return;
+ }
+
+ var data = $highlighted.data('data');
+
+ if ($highlighted.attr('aria-selected') == 'true') {
+ self.trigger('close', {});
+ } else {
+ self.trigger('select', {
+ data: data
+ });
+ }
+ });
+
+ container.on('results:previous', function () {
+ var $highlighted = self.getHighlightedResults();
+
+ var $options = self.$results.find('[aria-selected]');
+
+ var currentIndex = $options.index($highlighted);
+
+ // If we are already at te top, don't move further
+ if (currentIndex === 0) {
+ return;
+ }
+
+ var nextIndex = currentIndex - 1;
+
+ // If none are highlighted, highlight the first
+ if ($highlighted.length === 0) {
+ nextIndex = 0;
+ }
+
+ var $next = $options.eq(nextIndex);
+
+ $next.trigger('mouseenter');
+
+ var currentOffset = self.$results.offset().top;
+ var nextTop = $next.offset().top;
+ var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);
+
+ if (nextIndex === 0) {
+ self.$results.scrollTop(0);
+ } else if (nextTop - currentOffset < 0) {
+ self.$results.scrollTop(nextOffset);
+ }
+ });
+
+ container.on('results:next', function () {
+ var $highlighted = self.getHighlightedResults();
+
+ var $options = self.$results.find('[aria-selected]');
+
+ var currentIndex = $options.index($highlighted);
+
+ var nextIndex = currentIndex + 1;
+
+ // If we are at the last option, stay there
+ if (nextIndex >= $options.length) {
+ return;
+ }
+
+ var $next = $options.eq(nextIndex);
+
+ $next.trigger('mouseenter');
+
+ var currentOffset = self.$results.offset().top +
+ self.$results.outerHeight(false);
+ var nextBottom = $next.offset().top + $next.outerHeight(false);
+ var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;
+
+ if (nextIndex === 0) {
+ self.$results.scrollTop(0);
+ } else if (nextBottom > currentOffset) {
+ self.$results.scrollTop(nextOffset);
+ }
+ });
+
+ container.on('results:focus', function (params) {
+ params.element.addClass('select2-results__option--highlighted');
+ });
+
+ container.on('results:message', function (params) {
+ self.displayMessage(params);
+ });
+
+ if ($.fn.mousewheel) {
+ this.$results.on('mousewheel', function (e) {
+ var top = self.$results.scrollTop();
+
+ var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;
+
+ var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;
+ var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();
+
+ if (isAtTop) {
+ self.$results.scrollTop(0);
+
+ e.preventDefault();
+ e.stopPropagation();
+ } else if (isAtBottom) {
+ self.$results.scrollTop(
+ self.$results.get(0).scrollHeight - self.$results.height()
+ );
+
+ e.preventDefault();
+ e.stopPropagation();
+ }
+ });
+ }
+
+ this.$results.on('mouseup', '.select2-results__option[aria-selected]',
+ function (evt) {
+ var $this = $(this);
+
+ var data = $this.data('data');
+
+ if ($this.attr('aria-selected') === 'true') {
+ if (self.options.get('multiple')) {
+ self.trigger('unselect', {
+ originalEvent: evt,
+ data: data
+ });
+ } else {
+ self.trigger('close', {});
+ }
+
+ return;
+ }
+
+ self.trigger('select', {
+ originalEvent: evt,
+ data: data
+ });
+ });
+
+ this.$results.on('mouseenter', '.select2-results__option[aria-selected]',
+ function (evt) {
+ var data = $(this).data('data');
+
+ self.getHighlightedResults()
+ .removeClass('select2-results__option--highlighted');
+
+ self.trigger('results:focus', {
+ data: data,
+ element: $(this)
+ });
+ });
+ };
+
+ Results.prototype.getHighlightedResults = function () {
+ var $highlighted = this.$results
+ .find('.select2-results__option--highlighted');
+
+ return $highlighted;
+ };
+
+ Results.prototype.destroy = function () {
+ this.$results.remove();
+ };
+
+ Results.prototype.ensureHighlightVisible = function () {
+ var $highlighted = this.getHighlightedResults();
+
+ if ($highlighted.length === 0) {
+ return;
+ }
+
+ var $options = this.$results.find('[aria-selected]');
+
+ var currentIndex = $options.index($highlighted);
+
+ var currentOffset = this.$results.offset().top;
+ var nextTop = $highlighted.offset().top;
+ var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
+
+ var offsetDelta = nextTop - currentOffset;
+ nextOffset -= $highlighted.outerHeight(false) * 2;
+
+ if (currentIndex <= 2) {
+ this.$results.scrollTop(0);
+ } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
+ this.$results.scrollTop(nextOffset);
+ }
+ };
+
+ Results.prototype.template = function (result, container) {
+ var template = this.options.get('templateResult');
+ var escapeMarkup = this.options.get('escapeMarkup');
+
+ var content = template(result, container);
+
+ if (content == null) {
+ container.style.display = 'none';
+ } else if (typeof content === 'string') {
+ container.innerHTML = escapeMarkup(content);
+ } else {
+ $(container).append(content);
+ }
+ };
+
+ return Results;
+});
diff --git a/public/bower_components/select2/src/js/select2/selection/allowClear.js b/public/bower_components/select2/src/js/select2/selection/allowClear.js
new file mode 100644
index 0000000..d350206
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/selection/allowClear.js
@@ -0,0 +1,97 @@
+define([
+ 'jquery',
+ '../keys'
+], function ($, KEYS) {
+ function AllowClear () { }
+
+ AllowClear.prototype.bind = function (decorated, container, $container) {
+ var self = this;
+
+ decorated.call(this, container, $container);
+
+ if (this.placeholder == null) {
+ if (this.options.get('debug') && window.console && console.error) {
+ console.error(
+ 'Select2: The `allowClear` option should be used in combination ' +
+ 'with the `placeholder` option.'
+ );
+ }
+ }
+
+ this.$selection.on('mousedown', '.select2-selection__clear',
+ function (evt) {
+ self._handleClear(evt);
+ });
+
+ container.on('keypress', function (evt) {
+ self._handleKeyboardClear(evt, container);
+ });
+ };
+
+ AllowClear.prototype._handleClear = function (_, evt) {
+ // Ignore the event if it is disabled
+ if (this.options.get('disabled')) {
+ return;
+ }
+
+ var $clear = this.$selection.find('.select2-selection__clear');
+
+ // Ignore the event if nothing has been selected
+ if ($clear.length === 0) {
+ return;
+ }
+
+ evt.stopPropagation();
+
+ var data = $clear.data('data');
+
+ for (var d = 0; d < data.length; d++) {
+ var unselectData = {
+ data: data[d]
+ };
+
+ // Trigger the `unselect` event, so people can prevent it from being
+ // cleared.
+ this.trigger('unselect', unselectData);
+
+ // If the event was prevented, don't clear it out.
+ if (unselectData.prevented) {
+ return;
+ }
+ }
+
+ this.$element.val(this.placeholder.id).trigger('change');
+
+ this.trigger('toggle', {});
+ };
+
+ AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {
+ if (container.isOpen()) {
+ return;
+ }
+
+ if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {
+ this._handleClear(evt);
+ }
+ };
+
+ AllowClear.prototype.update = function (decorated, data) {
+ decorated.call(this, data);
+
+ if (this.$selection.find('.select2-selection__placeholder').length > 0 ||
+ data.length === 0) {
+ return;
+ }
+
+ var $remove = $(
+ '<span class="select2-selection__clear">' +
+ '&times;' +
+ '</span>'
+ );
+ $remove.data('data', data);
+
+ this.$selection.find('.select2-selection__rendered').prepend($remove);
+ };
+
+ return AllowClear;
+});
diff --git a/public/bower_components/select2/src/js/select2/selection/base.js b/public/bower_components/select2/src/js/select2/selection/base.js
new file mode 100644
index 0000000..cd3aafd
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/selection/base.js
@@ -0,0 +1,158 @@
+define([
+ 'jquery',
+ '../utils',
+ '../keys'
+], function ($, Utils, KEYS) {
+ function BaseSelection ($element, options) {
+ this.$element = $element;
+ this.options = options;
+
+ BaseSelection.__super__.constructor.call(this);
+ }
+
+ Utils.Extend(BaseSelection, Utils.Observable);
+
+ BaseSelection.prototype.render = function () {
+ var $selection = $(
+ '<span class="select2-selection" role="combobox" ' +
+ ' aria-haspopup="true" aria-expanded="false">' +
+ '</span>'
+ );
+
+ this._tabindex = 0;
+
+ if (this.$element.data('old-tabindex') != null) {
+ this._tabindex = this.$element.data('old-tabindex');
+ } else if (this.$element.attr('tabindex') != null) {
+ this._tabindex = this.$element.attr('tabindex');
+ }
+
+ $selection.attr('title', this.$element.attr('title'));
+ $selection.attr('tabindex', this._tabindex);
+
+ this.$selection = $selection;
+
+ return $selection;
+ };
+
+ BaseSelection.prototype.bind = function (container, $container) {
+ var self = this;
+
+ var id = container.id + '-container';
+ var resultsId = container.id + '-results';
+
+ this.container = container;
+
+ this.$selection.on('focus', function (evt) {
+ self.trigger('focus', evt);
+ });
+
+ this.$selection.on('blur', function (evt) {
+ self._handleBlur(evt);
+ });
+
+ this.$selection.on('keydown', function (evt) {
+ self.trigger('keypress', evt);
+
+ if (evt.which === KEYS.SPACE) {
+ evt.preventDefault();
+ }
+ });
+
+ container.on('results:focus', function (params) {
+ self.$selection.attr('aria-activedescendant', params.data._resultId);
+ });
+
+ container.on('selection:update', function (params) {
+ self.update(params.data);
+ });
+
+ container.on('open', function () {
+ // When the dropdown is open, aria-expanded="true"
+ self.$selection.attr('aria-expanded', 'true');
+ self.$selection.attr('aria-owns', resultsId);
+
+ self._attachCloseHandler(container);
+ });
+
+ container.on('close', function () {
+ // When the dropdown is closed, aria-expanded="false"
+ self.$selection.attr('aria-expanded', 'false');
+ self.$selection.removeAttr('aria-activedescendant');
+ self.$selection.removeAttr('aria-owns');
+
+ self.$selection.focus();
+
+ self._detachCloseHandler(container);
+ });
+
+ container.on('enable', function () {
+ self.$selection.attr('tabindex', self._tabindex);
+ });
+
+ container.on('disable', function () {
+ self.$selection.attr('tabindex', '-1');
+ });
+ };
+
+ BaseSelection.prototype._handleBlur = function (evt) {
+ var self = this;
+
+ // This needs to be delayed as the active element is the body when the tab
+ // key is pressed, possibly along with others.
+ window.setTimeout(function () {
+ // Don't trigger `blur` if the focus is still in the selection
+ if (
+ (document.activeElement == self.$selection[0]) ||
+ ($.contains(self.$selection[0], document.activeElement))
+ ) {
+ return;
+ }
+
+ self.trigger('blur', evt);
+ }, 1);
+ };
+
+ BaseSelection.prototype._attachCloseHandler = function (container) {
+ var self = this;
+
+ $(document.body).on('mousedown.select2.' + container.id, function (e) {
+ var $target = $(e.target);
+
+ var $select = $target.closest('.select2');
+
+ var $all = $('.select2.select2-container--open');
+
+ $all.each(function () {
+ var $this = $(this);
+
+ if (this == $select[0]) {
+ return;
+ }
+
+ var $element = $this.data('element');
+
+ $element.select2('close');
+ });
+ });
+ };
+
+ BaseSelection.prototype._detachCloseHandler = function (container) {
+ $(document.body).off('mousedown.select2.' + container.id);
+ };
+
+ BaseSelection.prototype.position = function ($selection, $container) {
+ var $selectionContainer = $container.find('.selection');
+ $selectionContainer.append($selection);
+ };
+
+ BaseSelection.prototype.destroy = function () {
+ this._detachCloseHandler(this.container);
+ };
+
+ BaseSelection.prototype.update = function (data) {
+ throw new Error('The `update` method must be defined in child classes.');
+ };
+
+ return BaseSelection;
+});
diff --git a/public/bower_components/select2/src/js/select2/selection/clickMask.js b/public/bower_components/select2/src/js/select2/selection/clickMask.js
new file mode 100644
index 0000000..2b4ac30
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/selection/clickMask.js
@@ -0,0 +1,29 @@
+define([
+ 'jquery'
+], function ($) {
+ function ClickMask () { }
+
+ ClickMask.prototype.bind = function (decorate, $container, container) {
+ var self = this;
+
+ decorate.call(this, $container, container);
+
+ this.$mask = $(
+ '<div class="select2-close-mask"></div>'
+ );
+
+ this.$mask.on('mousedown touchstart click', function () {
+ self.trigger('close', {});
+ });
+ };
+
+ ClickMask.prototype._attachCloseHandler = function (decorate, container) {
+ $(document.body).append(this.$mask);
+ };
+
+ ClickMask.prototype._detachCloseHandler = function (deocrate, container) {
+ this.$mask.detach();
+ };
+
+ return ClickMask;
+});
diff --git a/public/bower_components/select2/src/js/select2/selection/eventRelay.js b/public/bower_components/select2/src/js/select2/selection/eventRelay.js
new file mode 100644
index 0000000..a91e9c5
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/selection/eventRelay.js
@@ -0,0 +1,45 @@
+define([
+ 'jquery'
+], function ($) {
+ function EventRelay () { }
+
+ EventRelay.prototype.bind = function (decorated, container, $container) {
+ var self = this;
+ var relayEvents = [
+ 'open', 'opening',
+ 'close', 'closing',
+ 'select', 'selecting',
+ 'unselect', 'unselecting'
+ ];
+
+ var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting'];
+
+ decorated.call(this, container, $container);
+
+ container.on('*', function (name, params) {
+ // Ignore events that should not be relayed
+ if ($.inArray(name, relayEvents) === -1) {
+ return;
+ }
+
+ // The parameters should always be an object
+ params = params || {};
+
+ // Generate the jQuery event for the Select2 event
+ var evt = $.Event('select2:' + name, {
+ params: params
+ });
+
+ self.$element.trigger(evt);
+
+ // Only handle preventable events if it was one
+ if ($.inArray(name, preventableEvents) === -1) {
+ return;
+ }
+
+ params.prevented = evt.isDefaultPrevented();
+ });
+ };
+
+ return EventRelay;
+});
diff --git a/public/bower_components/select2/src/js/select2/selection/multiple.js b/public/bower_components/select2/src/js/select2/selection/multiple.js
new file mode 100644
index 0000000..ae0f7cc
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/selection/multiple.js
@@ -0,0 +1,109 @@
+define([
+ 'jquery',
+ './base',
+ '../utils'
+], function ($, BaseSelection, Utils) {
+ function MultipleSelection ($element, options) {
+ MultipleSelection.__super__.constructor.apply(this, arguments);
+ }
+
+ Utils.Extend(MultipleSelection, BaseSelection);
+
+ MultipleSelection.prototype.render = function () {
+ var $selection = MultipleSelection.__super__.render.call(this);
+
+ $selection.addClass('select2-selection--multiple');
+
+ $selection.html(
+ '<ul class="select2-selection__rendered"></ul>'
+ );
+
+ return $selection;
+ };
+
+ MultipleSelection.prototype.bind = function (container, $container) {
+ var self = this;
+
+ MultipleSelection.__super__.bind.apply(this, arguments);
+
+ this.$selection.on('click', function (evt) {
+ self.trigger('toggle', {
+ originalEvent: evt
+ });
+ });
+
+ this.$selection.on(
+ 'click',
+ '.select2-selection__choice__remove',
+ function (evt) {
+ // Ignore the event if it is disabled
+ if (self.options.get('disabled')) {
+ return;
+ }
+
+ var $remove = $(this);
+ var $selection = $remove.parent();
+
+ var data = $selection.data('data');
+
+ self.trigger('unselect', {
+ originalEvent: evt,
+ data: data
+ });
+ }
+ );
+ };
+
+ MultipleSelection.prototype.clear = function () {
+ this.$selection.find('.select2-selection__rendered').empty();
+ };
+
+ MultipleSelection.prototype.display = function (data, container) {
+ var template = this.options.get('templateSelection');
+ var escapeMarkup = this.options.get('escapeMarkup');
+
+ return escapeMarkup(template(data, container));
+ };
+
+ MultipleSelection.prototype.selectionContainer = function () {
+ var $container = $(
+ '<li class="select2-selection__choice">' +
+ '<span class="select2-selection__choice__remove" role="presentation">' +
+ '&times;' +
+ '</span>' +
+ '</li>'
+ );
+
+ return $container;
+ };
+
+ MultipleSelection.prototype.update = function (data) {
+ this.clear();
+
+ if (data.length === 0) {
+ return;
+ }
+
+ var $selections = [];
+
+ for (var d = 0; d < data.length; d++) {
+ var selection = data[d];
+
+ var $selection = this.selectionContainer();
+ var formatted = this.display(selection, $selection);
+
+ $selection.append(formatted);
+ $selection.prop('title', selection.title || selection.text);
+
+ $selection.data('data', selection);
+
+ $selections.push($selection);
+ }
+
+ var $rendered = this.$selection.find('.select2-selection__rendered');
+
+ Utils.appendMany($rendered, $selections);
+ };
+
+ return MultipleSelection;
+});
diff --git a/public/bower_components/select2/src/js/select2/selection/placeholder.js b/public/bower_components/select2/src/js/select2/selection/placeholder.js
new file mode 100644
index 0000000..87fbeda
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/selection/placeholder.js
@@ -0,0 +1,49 @@
+define([
+ '../utils'
+], function (Utils) {
+ function Placeholder (decorated, $element, options) {
+ this.placeholder = this.normalizePlaceholder(options.get('placeholder'));
+
+ decorated.call(this, $element, options);
+ }
+
+ Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {
+ if (typeof placeholder === 'string') {
+ placeholder = {
+ id: '',
+ text: placeholder
+ };
+ }
+
+ return placeholder;
+ };
+
+ Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {
+ var $placeholder = this.selectionContainer();
+
+ $placeholder.html(this.display(placeholder));
+ $placeholder.addClass('select2-selection__placeholder')
+ .removeClass('select2-selection__choice');
+
+ return $placeholder;
+ };
+
+ Placeholder.prototype.update = function (decorated, data) {
+ var singlePlaceholder = (
+ data.length == 1 && data[0].id != this.placeholder.id
+ );
+ var multipleSelections = data.length > 1;
+
+ if (multipleSelections || singlePlaceholder) {
+ return decorated.call(this, data);
+ }
+
+ this.clear();
+
+ var $placeholder = this.createPlaceholder(this.placeholder);
+
+ this.$selection.find('.select2-selection__rendered').append($placeholder);
+ };
+
+ return Placeholder;
+});
diff --git a/public/bower_components/select2/src/js/select2/selection/search.js b/public/bower_components/select2/src/js/select2/selection/search.js
new file mode 100644
index 0000000..1bc4b09
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/selection/search.js
@@ -0,0 +1,222 @@
+define([
+ 'jquery',
+ '../utils',
+ '../keys'
+], function ($, Utils, KEYS) {
+ function Search (decorated, $element, options) {
+ decorated.call(this, $element, options);
+ }
+
+ Search.prototype.render = function (decorated) {
+ var $search = $(
+ '<li class="select2-search select2-search--inline">' +
+ '<input class="select2-search__field" type="search" tabindex="-1"' +
+ ' autocomplete="off" autocorrect="off" autocapitalize="none"' +
+ ' spellcheck="false" role="textbox" aria-autocomplete="list" />' +
+ '</li>'
+ );
+
+ this.$searchContainer = $search;
+ this.$search = $search.find('input');
+
+ var $rendered = decorated.call(this);
+
+ this._transferTabIndex();
+
+ return $rendered;
+ };
+
+ Search.prototype.bind = function (decorated, container, $container) {
+ var self = this;
+
+ decorated.call(this, container, $container);
+
+ container.on('open', function () {
+ self.$search.trigger('focus');
+ });
+
+ container.on('close', function () {
+ self.$search.val('');
+ self.$search.removeAttr('aria-activedescendant');
+ self.$search.trigger('focus');
+ });
+
+ container.on('enable', function () {
+ self.$search.prop('disabled', false);
+
+ self._transferTabIndex();
+ });
+
+ container.on('disable', function () {
+ self.$search.prop('disabled', true);
+ });
+
+ container.on('focus', function (evt) {
+ self.$search.trigger('focus');
+ });
+
+ container.on('results:focus', function (params) {
+ self.$search.attr('aria-activedescendant', params.id);
+ });
+
+ this.$selection.on('focusin', '.select2-search--inline', function (evt) {
+ self.trigger('focus', evt);
+ });
+
+ this.$selection.on('focusout', '.select2-search--inline', function (evt) {
+ self._handleBlur(evt);
+ });
+
+ this.$selection.on('keydown', '.select2-search--inline', function (evt) {
+ evt.stopPropagation();
+
+ self.trigger('keypress', evt);
+
+ self._keyUpPrevented = evt.isDefaultPrevented();
+
+ var key = evt.which;
+
+ if (key === KEYS.BACKSPACE && self.$search.val() === '') {
+ var $previousChoice = self.$searchContainer
+ .prev('.select2-selection__choice');
+
+ if ($previousChoice.length > 0) {
+ var item = $previousChoice.data('data');
+
+ self.searchRemoveChoice(item);
+
+ evt.preventDefault();
+ }
+ }
+ });
+
+ // Try to detect the IE version should the `documentMode` property that
+ // is stored on the document. This is only implemented in IE and is
+ // slightly cleaner than doing a user agent check.
+ // This property is not available in Edge, but Edge also doesn't have
+ // this bug.
+ var msie = document.documentMode;
+ var disableInputEvents = msie && msie <= 11;
+
+ // Workaround for browsers which do not support the `input` event
+ // This will prevent double-triggering of events for browsers which support
+ // both the `keyup` and `input` events.
+ this.$selection.on(
+ 'input.searchcheck',
+ '.select2-search--inline',
+ function (evt) {
+ // IE will trigger the `input` event when a placeholder is used on a
+ // search box. To get around this issue, we are forced to ignore all
+ // `input` events in IE and keep using `keyup`.
+ if (disableInputEvents) {
+ self.$selection.off('input.search input.searchcheck');
+ return;
+ }
+
+ // Unbind the duplicated `keyup` event
+ self.$selection.off('keyup.search');
+ }
+ );
+
+ this.$selection.on(
+ 'keyup.search input.search',
+ '.select2-search--inline',
+ function (evt) {
+ // IE will trigger the `input` event when a placeholder is used on a
+ // search box. To get around this issue, we are forced to ignore all
+ // `input` events in IE and keep using `keyup`.
+ if (disableInputEvents && evt.type === 'input') {
+ self.$selection.off('input.search input.searchcheck');
+ return;
+ }
+
+ var key = evt.which;
+
+ // We can freely ignore events from modifier keys
+ if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {
+ return;
+ }
+
+ // Tabbing will be handled during the `keydown` phase
+ if (key == KEYS.TAB) {
+ return;
+ }
+
+ self.handleSearch(evt);
+ }
+ );
+ };
+
+ /**
+ * This method will transfer the tabindex attribute from the rendered
+ * selection to the search box. This allows for the search box to be used as
+ * the primary focus instead of the selection container.
+ *
+ * @private
+ */
+ Search.prototype._transferTabIndex = function (decorated) {
+ this.$search.attr('tabindex', this.$selection.attr('tabindex'));
+ this.$selection.attr('tabindex', '-1');
+ };
+
+ Search.prototype.createPlaceholder = function (decorated, placeholder) {
+ this.$search.attr('placeholder', placeholder.text);
+ };
+
+ Search.prototype.update = function (decorated, data) {
+ var searchHadFocus = this.$search[0] == document.activeElement;
+
+ this.$search.attr('placeholder', '');
+
+ decorated.call(this, data);
+
+ this.$selection.find('.select2-selection__rendered')
+ .append(this.$searchContainer);
+
+ this.resizeSearch();
+ if (searchHadFocus) {
+ this.$search.focus();
+ }
+ };
+
+ Search.prototype.handleSearch = function () {
+ this.resizeSearch();
+
+ if (!this._keyUpPrevented) {
+ var input = this.$search.val();
+
+ this.trigger('query', {
+ term: input
+ });
+ }
+
+ this._keyUpPrevented = false;
+ };
+
+ Search.prototype.searchRemoveChoice = function (decorated, item) {
+ this.trigger('unselect', {
+ data: item
+ });
+
+ this.$search.val(item.text);
+ this.handleSearch();
+ };
+
+ Search.prototype.resizeSearch = function () {
+ this.$search.css('width', '25px');
+
+ var width = '';
+
+ if (this.$search.attr('placeholder') !== '') {
+ width = this.$selection.find('.select2-selection__rendered').innerWidth();
+ } else {
+ var minimumWidth = this.$search.val().length + 1;
+
+ width = (minimumWidth * 0.75) + 'em';
+ }
+
+ this.$search.css('width', width);
+ };
+
+ return Search;
+});
diff --git a/public/bower_components/select2/src/js/select2/selection/single.js b/public/bower_components/select2/src/js/select2/selection/single.js
new file mode 100644
index 0000000..89c21db
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/selection/single.js
@@ -0,0 +1,99 @@
+define([
+ 'jquery',
+ './base',
+ '../utils',
+ '../keys'
+], function ($, BaseSelection, Utils, KEYS) {
+ function SingleSelection () {
+ SingleSelection.__super__.constructor.apply(this, arguments);
+ }
+
+ Utils.Extend(SingleSelection, BaseSelection);
+
+ SingleSelection.prototype.render = function () {
+ var $selection = SingleSelection.__super__.render.call(this);
+
+ $selection.addClass('select2-selection--single');
+
+ $selection.html(
+ '<span class="select2-selection__rendered"></span>' +
+ '<span class="select2-selection__arrow" role="presentation">' +
+ '<b role="presentation"></b>' +
+ '</span>'
+ );
+
+ return $selection;
+ };
+
+ SingleSelection.prototype.bind = function (container, $container) {
+ var self = this;
+
+ SingleSelection.__super__.bind.apply(this, arguments);
+
+ var id = container.id + '-container';
+
+ this.$selection.find('.select2-selection__rendered').attr('id', id);
+ this.$selection.attr('aria-labelledby', id);
+
+ this.$selection.on('mousedown', function (evt) {
+ // Only respond to left clicks
+ if (evt.which !== 1) {
+ return;
+ }
+
+ self.trigger('toggle', {
+ originalEvent: evt
+ });
+ });
+
+ this.$selection.on('focus', function (evt) {
+ // User focuses on the container
+ });
+
+ this.$selection.on('blur', function (evt) {
+ // User exits the container
+ });
+
+ container.on('focus', function (evt) {
+ if (!container.isOpen()) {
+ self.$selection.focus();
+ }
+ });
+
+ container.on('selection:update', function (params) {
+ self.update(params.data);
+ });
+ };
+
+ SingleSelection.prototype.clear = function () {
+ this.$selection.find('.select2-selection__rendered').empty();
+ };
+
+ SingleSelection.prototype.display = function (data, container) {
+ var template = this.options.get('templateSelection');
+ var escapeMarkup = this.options.get('escapeMarkup');
+
+ return escapeMarkup(template(data, container));
+ };
+
+ SingleSelection.prototype.selectionContainer = function () {
+ return $('<span></span>');
+ };
+
+ SingleSelection.prototype.update = function (data) {
+ if (data.length === 0) {
+ this.clear();
+ return;
+ }
+
+ var selection = data[0];
+
+ var $rendered = this.$selection.find('.select2-selection__rendered');
+ var formatted = this.display(selection, $rendered);
+
+ $rendered.empty().append(formatted);
+ $rendered.prop('title', selection.title || selection.text);
+ };
+
+ return SingleSelection;
+});
diff --git a/public/bower_components/select2/src/js/select2/selection/stopPropagation.js b/public/bower_components/select2/src/js/select2/selection/stopPropagation.js
new file mode 100644
index 0000000..382f1e7
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/selection/stopPropagation.js
@@ -0,0 +1,38 @@
+define([
+
+], function () {
+ function StopPropagation () { }
+
+ StopPropagation.prototype.bind = function (decorated, container, $container) {
+ decorated.call(this, container, $container);
+
+ var stoppedEvents = [
+ 'blur',
+ 'change',
+ 'click',
+ 'dblclick',
+ 'focus',
+ 'focusin',
+ 'focusout',
+ 'input',
+ 'keydown',
+ 'keyup',
+ 'keypress',
+ 'mousedown',
+ 'mouseenter',
+ 'mouseleave',
+ 'mousemove',
+ 'mouseover',
+ 'mouseup',
+ 'search',
+ 'touchend',
+ 'touchstart'
+ ];
+
+ this.$selection.on(stoppedEvents.join(' '), function (evt) {
+ evt.stopPropagation();
+ });
+ };
+
+ return StopPropagation;
+});
diff --git a/public/bower_components/select2/src/js/select2/translation.js b/public/bower_components/select2/src/js/select2/translation.js
new file mode 100644
index 0000000..5394c18
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/translation.js
@@ -0,0 +1,36 @@
+define([
+ 'jquery',
+ 'require'
+], function ($, require) {
+ function Translation (dict) {
+ this.dict = dict || {};
+ }
+
+ Translation.prototype.all = function () {
+ return this.dict;
+ };
+
+ Translation.prototype.get = function (key) {
+ return this.dict[key];
+ };
+
+ Translation.prototype.extend = function (translation) {
+ this.dict = $.extend({}, translation.all(), this.dict);
+ };
+
+ // Static functions
+
+ Translation._cache = {};
+
+ Translation.loadPath = function (path) {
+ if (!(path in Translation._cache)) {
+ var translations = require(path);
+
+ Translation._cache[path] = translations;
+ }
+
+ return new Translation(Translation._cache[path]);
+ };
+
+ return Translation;
+});
diff --git a/public/bower_components/select2/src/js/select2/utils.js b/public/bower_components/select2/src/js/select2/utils.js
new file mode 100644
index 0000000..d1a23d2
--- /dev/null
+++ b/public/bower_components/select2/src/js/select2/utils.js
@@ -0,0 +1,276 @@
+define([
+ 'jquery'
+], 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;
+ }
+
+ if (methodName === 'constructor') {
+ continue;
+ }
+
+ methods.push(methodName);
+ }
+
+ return methods;
+ }
+
+ Utils.Decorate = function (SuperClass, DecoratorClass) {
+ var decoratedMethods = getMethods(DecoratorClass);
+ var superMethods = getMethods(SuperClass);
+
+ function DecoratedClass () {
+ var unshift = Array.prototype.unshift;
+
+ var argCount = DecoratorClass.prototype.constructor.length;
+
+ var calledConstructor = SuperClass.prototype.constructor;
+
+ if (argCount > 0) {
+ unshift.call(arguments, SuperClass.prototype.constructor);
+
+ calledConstructor = DecoratorClass.prototype.constructor;
+ }
+
+ calledConstructor.apply(this, arguments);
+ }
+
+ DecoratorClass.displayName = SuperClass.displayName;
+
+ function ctr () {
+ this.constructor = DecoratedClass;
+ }
+
+ DecoratedClass.prototype = new ctr();
+
+ for (var m = 0; m < superMethods.length; m++) {
+ var superMethod = superMethods[m];
+
+ DecoratedClass.prototype[superMethod] =
+ SuperClass.prototype[superMethod];
+ }
+
+ var calledMethod = function (methodName) {
+ // Stub out the original method if it's not decorating an actual method
+ var originalMethod = function () {};
+
+ if (methodName in DecoratedClass.prototype) {
+ originalMethod = DecoratedClass.prototype[methodName];
+ }
+
+ var decoratedMethod = DecoratorClass.prototype[methodName];
+
+ return function () {
+ var unshift = Array.prototype.unshift;
+
+ unshift.call(arguments, originalMethod);
+
+ return decoratedMethod.apply(this, arguments);
+ };
+ };
+
+ for (var d = 0; d < decoratedMethods.length; d++) {
+ var decoratedMethod = decoratedMethods[d];
+
+ DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);
+ }
+
+ return DecoratedClass;
+ };
+
+ var Observable = function () {
+ this.listeners = {};
+ };
+
+ Observable.prototype.on = function (event, callback) {
+ this.listeners = this.listeners || {};
+
+ if (event in this.listeners) {
+ this.listeners[event].push(callback);
+ } else {
+ this.listeners[event] = [callback];
+ }
+ };
+
+ Observable.prototype.trigger = function (event) {
+ var slice = Array.prototype.slice;
+ var params = slice.call(arguments, 1);
+
+ this.listeners = this.listeners || {};
+
+ // Params should always come in as an array
+ if (params == null) {
+ params = [];
+ }
+
+ // If there are no arguments to the event, use a temporary object
+ if (params.length === 0) {
+ params.push({});
+ }
+
+ // Set the `_type` of the first object to the event
+ params[0]._type = event;
+
+ if (event in this.listeners) {
+ this.invoke(this.listeners[event], slice.call(arguments, 1));
+ }
+
+ if ('*' in this.listeners) {
+ this.invoke(this.listeners['*'], arguments);
+ }
+ };
+
+ Observable.prototype.invoke = function (listeners, params) {
+ for (var i = 0, len = listeners.length; i < len; i++) {
+ listeners[i].apply(this, params);
+ }
+ };
+
+ Utils.Observable = Observable;
+
+ Utils.generateChars = function (length) {
+ var chars = '';
+
+ for (var i = 0; i < length; i++) {
+ var randomChar = Math.floor(Math.random() * 36);
+ chars += randomChar.toString(36);
+ }
+
+ return chars;
+ };
+
+ Utils.bind = function (func, context) {
+ return function () {
+ func.apply(context, arguments);
+ };
+ };
+
+ Utils._convertData = function (data) {
+ for (var originalKey in data) {
+ var keys = originalKey.split('-');
+
+ var dataLevel = data;
+
+ if (keys.length === 1) {
+ continue;
+ }
+
+ for (var k = 0; k < keys.length; k++) {
+ var key = keys[k];
+
+ // Lowercase the first letter
+ // By default, dash-separated becomes camelCase
+ key = key.substring(0, 1).toLowerCase() + key.substring(1);
+
+ if (!(key in dataLevel)) {
+ dataLevel[key] = {};
+ }
+
+ if (k == keys.length - 1) {
+ dataLevel[key] = data[originalKey];
+ }
+
+ dataLevel = dataLevel[key];
+ }
+
+ delete data[originalKey];
+ }
+
+ return data;
+ };
+
+ Utils.hasScroll = function (index, el) {
+ // Adapted from the function created by @ShadowScripter
+ // and adapted by @BillBarry on the Stack Exchange Code Review website.
+ // The original code can be found at
+ // http://codereview.stackexchange.com/q/13338
+ // and was designed to be used with the Sizzle selector engine.
+
+ var $el = $(el);
+ var overflowX = el.style.overflowX;
+ var overflowY = el.style.overflowY;
+
+ //Check both x and y declarations
+ if (overflowX === overflowY &&
+ (overflowY === 'hidden' || overflowY === 'visible')) {
+ return false;
+ }
+
+ if (overflowX === 'scroll' || overflowY === 'scroll') {
+ return true;
+ }
+
+ return ($el.innerHeight() < el.scrollHeight ||
+ $el.innerWidth() < el.scrollWidth);
+ };
+
+ Utils.escapeMarkup = function (markup) {
+ var replaceMap = {
+ '\\': '&#92;',
+ '&': '&amp;',
+ '<': '&lt;',
+ '>': '&gt;',
+ '"': '&quot;',
+ '\'': '&#39;',
+ '/': '&#47;'
+ };
+
+ // Do not try to escape the markup if it's not a string
+ if (typeof markup !== 'string') {
+ return markup;
+ }
+
+ return String(markup).replace(/[&<>"'\/\\]/g, function (match) {
+ return replaceMap[match];
+ });
+ };
+
+ // Append an array of jQuery nodes to a given element.
+ Utils.appendMany = function ($element, $nodes) {
+ // jQuery 1.7.x does not support $.fn.append() with an array
+ // Fall back to a jQuery object collection using $.fn.add()
+ if ($.fn.jquery.substr(0, 3) === '1.7') {
+ var $jqNodes = $();
+
+ $.map($nodes, function (node) {
+ $jqNodes = $jqNodes.add(node);
+ });
+
+ $nodes = $jqNodes;
+ }
+
+ $element.append($nodes);
+ };
+
+ return Utils;
+});
diff --git a/public/bower_components/select2/src/js/wrapper.end.js b/public/bower_components/select2/src/js/wrapper.end.js
new file mode 100644
index 0000000..4367829
--- /dev/null
+++ b/public/bower_components/select2/src/js/wrapper.end.js
@@ -0,0 +1,12 @@
+ // Autoload the jQuery bindings
+ // We know that all of the modules exist above this, so we're safe
+ var select2 = S2.require('jquery.select2');
+
+ // Hold the AMD module references on the jQuery function that was just loaded
+ // This allows Select2 to use the internal loader outside of this file, such
+ // as in the language files.
+ jQuery.fn.select2.amd = S2;
+
+ // Return the Select2 instance for anyone who is importing it.
+ return select2;
+}));
diff --git a/public/bower_components/select2/src/js/wrapper.start.js b/public/bower_components/select2/src/js/wrapper.start.js
new file mode 100644
index 0000000..4df0e05
--- /dev/null
+++ b/public/bower_components/select2/src/js/wrapper.start.js
@@ -0,0 +1,38 @@
+/*!
+ * Select2 <%= package.version %>
+ * https://select2.github.io
+ *
+ * Released under the MIT license
+ * https://github.com/select2/select2/blob/master/LICENSE.md
+ */
+(function (factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['jquery'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // Node/CommonJS
+ module.exports = function (root, jQuery) {
+ if (jQuery === undefined) {
+ // require('jQuery') returns a factory that requires window to
+ // build a jQuery instance, we normalize how we use modules
+ // that require this pattern but the window provided is a noop
+ // if it's defined (how jquery works)
+ if (typeof window !== 'undefined') {
+ jQuery = require('jquery');
+ }
+ else {
+ jQuery = require('jquery')(root);
+ }
+ }
+ factory(jQuery);
+ return jQuery;
+ };
+ } else {
+ // Browser globals
+ factory(jQuery);
+ }
+} (function (jQuery) {
+ // This is needed so we can catch the AMD loader configuration and use it
+ // The inner file should be wrapped (by `banner.start.js`) in a function that
+ // returns the AMD loader references.
+ var S2 = \ No newline at end of file
diff --git a/public/bower_components/select2/src/scss/_dropdown.scss b/public/bower_components/select2/src/scss/_dropdown.scss
new file mode 100644
index 0000000..fb891d3
--- /dev/null
+++ b/public/bower_components/select2/src/scss/_dropdown.scss
@@ -0,0 +1,73 @@
+.select2-dropdown {
+ background-color: white;
+
+ border: 1px solid #aaa;
+ border-radius: 4px;
+
+ box-sizing: border-box;
+
+ display: block;
+
+ position: absolute;
+ left: -100000px;
+
+ width: 100%;
+
+ z-index: 1051;
+}
+
+.select2-results {
+ display: block;
+}
+
+.select2-results__options {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+.select2-results__option {
+ padding: 6px;
+
+ user-select: none;
+ -webkit-user-select: none;
+
+ &[aria-selected] {
+ cursor: pointer;
+ }
+}
+
+.select2-container--open .select2-dropdown {
+ left: 0;
+}
+
+.select2-container--open .select2-dropdown--above {
+ border-bottom: none;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.select2-container--open .select2-dropdown--below {
+ border-top: none;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.select2-search--dropdown {
+ display: block;
+ padding: 4px;
+
+ .select2-search__field {
+ padding: 4px;
+ width: 100%;
+ box-sizing: border-box;
+
+ &::-webkit-search-cancel-button {
+ -webkit-appearance: none;
+ }
+ }
+
+ &.select2-search--hide {
+ display: none;
+ }
+}
diff --git a/public/bower_components/select2/src/scss/_multiple.scss b/public/bower_components/select2/src/scss/_multiple.scss
new file mode 100644
index 0000000..981d208
--- /dev/null
+++ b/public/bower_components/select2/src/scss/_multiple.scss
@@ -0,0 +1,35 @@
+.select2-selection--multiple {
+ box-sizing: border-box;
+
+ cursor: pointer;
+ display: block;
+
+ min-height: 32px;
+
+ user-select: none;
+ -webkit-user-select: none;
+
+ .select2-selection__rendered {
+ display: inline-block;
+ overflow: hidden;
+ padding-left: 8px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+}
+
+.select2-search--inline {
+ float: left;
+
+ .select2-search__field {
+ box-sizing: border-box;
+ border: none;
+ font-size: 100%;
+ margin-top: 5px;
+ padding: 0;
+
+ &::-webkit-search-cancel-button {
+ -webkit-appearance: none;
+ }
+ }
+}
diff --git a/public/bower_components/select2/src/scss/_single.scss b/public/bower_components/select2/src/scss/_single.scss
new file mode 100644
index 0000000..6c3418e
--- /dev/null
+++ b/public/bower_components/select2/src/scss/_single.scss
@@ -0,0 +1,34 @@
+.select2-selection--single {
+ box-sizing: border-box;
+
+ cursor: pointer;
+ display: block;
+
+ height: 28px;
+
+ user-select: none;
+ -webkit-user-select: none;
+
+ .select2-selection__rendered {
+ display: block;
+ padding-left: 8px;
+ padding-right: 20px;
+
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ .select2-selection__clear {
+ position: relative;
+ }
+}
+
+&[dir="rtl"] {
+ .select2-selection--single {
+ .select2-selection__rendered {
+ padding-right: 8px;
+ padding-left: 20px;
+ }
+ }
+}
diff --git a/public/bower_components/select2/src/scss/core.scss b/public/bower_components/select2/src/scss/core.scss
new file mode 100644
index 0000000..3d69538
--- /dev/null
+++ b/public/bower_components/select2/src/scss/core.scss
@@ -0,0 +1,48 @@
+.select2-container {
+ box-sizing: border-box;
+
+ display: inline-block;
+ margin: 0;
+ position: relative;
+ vertical-align: middle;
+
+ @import "single";
+ @import "multiple";
+}
+
+@import "dropdown";
+
+.select2-close-mask {
+ border: 0;
+ margin: 0;
+ padding: 0;
+ display: block;
+ position: fixed;
+ left: 0;
+ top: 0;
+ min-height: 100%;
+ min-width: 100%;
+ height: auto;
+ width: auto;
+ opacity: 0;
+ z-index: 99;
+
+ // styles required for IE to work
+
+ background-color: #fff;
+ filter: alpha(opacity=0);
+}
+
+.select2-hidden-accessible {
+ border: 0 !important;
+ clip: rect(0 0 0 0) !important;
+ height: 1px !important;
+ margin: -1px !important;
+ overflow: hidden !important;
+ padding: 0 !important;
+ position: absolute !important;
+ width: 1px !important;
+}
+
+@import "theme/default/layout";
+@import "theme/classic/layout";
diff --git a/public/bower_components/select2/src/scss/mixins/_gradients.scss b/public/bower_components/select2/src/scss/mixins/_gradients.scss
new file mode 100644
index 0000000..05a6195
--- /dev/null
+++ b/public/bower_components/select2/src/scss/mixins/_gradients.scss
@@ -0,0 +1,13 @@
+// https://github.com/twbs/bootstrap-sass/blob/3.3-stable/assets/stylesheets/bootstrap/mixins/_gradients.scss#L17-L27
+
+// Vertical gradient, from top to bottom
+//
+// Creates two color stops, start and end, by specifying a color and position for each color stop.
+// Color stops are not available in IE9 and below.
+@mixin gradient-vertical($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {
+ background-image: -webkit-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+
+ background-image: -o-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Opera 12
+ background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down
+}
diff --git a/public/bower_components/select2/src/scss/theme/classic/_defaults.scss b/public/bower_components/select2/src/scss/theme/classic/_defaults.scss
new file mode 100644
index 0000000..aa20456
--- /dev/null
+++ b/public/bower_components/select2/src/scss/theme/classic/_defaults.scss
@@ -0,0 +1,34 @@
+$remove-color: #888 !default;
+$remove-hover-color: #555 !default;
+$remove-width: 20px !default;
+
+$selection-color: #444 !default;
+
+$border-color: #aaa !default;
+$border-radius: 4px !default;
+
+$focus-border-color: #5897fb !default;
+
+$container-height: 28px !default;
+
+$selection-bg-top-color: white !default;
+$selection-bg-bottom-color: #eeeeee !default;
+
+$container-placeholder-color: #999 !default;
+
+$container-focus-border-color: blue !default;
+
+$selection-opened-bg-top-color: $selection-bg-bottom-color !default;
+$selection-opened-bg-bottom-color: $selection-bg-top-color !default;
+
+$dropdown-z-index: 1 !default;
+
+$dropdown-bg-color: $selection-bg-top-color !default;
+
+$results-max-height: 200px !default;
+$results-nested-padding: 20px !default;
+
+$results-choice-bg-hover-color: #3875d7 !default;
+$results-choice-fg-hover-color: white !default;
+
+$results-choice-fg-unselectable-color: grey !default;
diff --git a/public/bower_components/select2/src/scss/theme/classic/_multiple.scss b/public/bower_components/select2/src/scss/theme/classic/_multiple.scss
new file mode 100644
index 0000000..e472418
--- /dev/null
+++ b/public/bower_components/select2/src/scss/theme/classic/_multiple.scss
@@ -0,0 +1,93 @@
+.select2-selection--multiple {
+ background-color: white;
+
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+
+ cursor: text;
+
+ outline: 0;
+
+ &:focus {
+ border: 1px solid $focus-border-color;
+ }
+
+ .select2-selection__rendered {
+ list-style: none;
+ margin: 0;
+ padding: 0 5px;
+ }
+
+ .select2-selection__clear {
+ display: none;
+ }
+
+ .select2-selection__choice {
+ background-color: #e4e4e4;
+
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+
+ cursor: default;
+
+ float: left;
+
+ margin-right: 5px;
+ margin-top: 5px;
+ padding: 0 5px;
+ }
+
+ .select2-selection__choice__remove {
+ color: $remove-color;
+ cursor: pointer;
+
+ display: inline-block;
+ font-weight: bold;
+
+ margin-right: 2px;
+
+ &:hover {
+ color: $remove-hover-color;
+ }
+ }
+}
+
+&[dir="rtl"] {
+ .select2-selection--multiple {
+ .select2-selection__choice {
+ float: right;
+ }
+
+ .select2-selection__choice {
+ margin-left: 5px;
+ margin-right: auto;
+ }
+
+ .select2-selection__choice__remove {
+ margin-left: 2px;
+ margin-right: auto;
+ }
+ }
+}
+
+&.select2-container--open {
+ .select2-selection--multiple {
+ border: 1px solid $focus-border-color;
+ }
+
+ &.select2-container--above {
+ .select2-selection--multiple {
+ border-top: none;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ }
+ }
+
+ &.select2-container--below {
+ .select2-selection--multiple {
+ border-bottom: none;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+ }
+}
diff --git a/public/bower_components/select2/src/scss/theme/classic/_single.scss b/public/bower_components/select2/src/scss/theme/classic/_single.scss
new file mode 100644
index 0000000..e21de9a
--- /dev/null
+++ b/public/bower_components/select2/src/scss/theme/classic/_single.scss
@@ -0,0 +1,124 @@
+.select2-selection--single {
+ background-color: mix($selection-bg-top-color, $selection-bg-bottom-color);
+
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+
+ outline: 0;
+
+ @include gradient-vertical($selection-bg-top-color, $selection-bg-bottom-color, 50%, 100%);
+
+ &:focus {
+ border: 1px solid $focus-border-color;
+ }
+
+ .select2-selection__rendered {
+ color: #444;
+ line-height: 28px;
+ }
+
+ .select2-selection__clear {
+ cursor: pointer;
+ float: right;
+ font-weight: bold;
+ margin-right: 10px;
+ }
+
+ .select2-selection__placeholder {
+ color: #999;
+ }
+
+ .select2-selection__arrow {
+ background-color: #ddd;
+
+ border: none;
+ border-left: 1px solid $border-color;
+ border-top-right-radius: $border-radius;
+ border-bottom-right-radius: $border-radius;
+
+ height: 26px;
+
+ position: absolute;
+
+ top: 1px;
+ right: 1px;
+
+ width: 20px;
+
+ @include gradient-vertical(#eeeeee, #cccccc, 50%, 100%);
+
+ b {
+ border-color: #888 transparent transparent transparent;
+ border-style: solid;
+ border-width: 5px 4px 0 4px;
+
+ height: 0;
+ left: 50%;
+
+ margin-left: -4px;
+ margin-top: -2px;
+
+ position: absolute;
+
+ top: 50%;
+ width: 0;
+ }
+ }
+}
+
+&[dir="rtl"] {
+ .select2-selection--single {
+ .select2-selection__clear {
+ float: left;
+ }
+
+ .select2-selection__arrow {
+ border: none;
+ border-right: 1px solid $border-color;
+
+ border-radius: 0;
+ border-top-left-radius: $border-radius;
+ border-bottom-left-radius: $border-radius;
+
+ left: 1px;
+ right: auto;
+ }
+ }
+}
+
+&.select2-container--open {
+ .select2-selection--single {
+ border: 1px solid $focus-border-color;
+
+ .select2-selection__arrow {
+ background: transparent;
+
+ border: none;
+
+ b {
+ border-color: transparent transparent #888 transparent;
+ border-width: 0 4px 5px 4px;
+ }
+ }
+ }
+
+ &.select2-container--above {
+ .select2-selection--single {
+ border-top: none;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+
+ @include gradient-vertical($selection-opened-bg-bottom-color, $selection-opened-bg-top-color, 0%, 50%);
+ }
+ }
+
+ &.select2-container--below {
+ .select2-selection--single {
+ border-bottom: none;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+
+ @include gradient-vertical($selection-opened-bg-top-color, $selection-opened-bg-bottom-color, 50%, 100%);
+ }
+ }
+}
diff --git a/public/bower_components/select2/src/scss/theme/classic/layout.scss b/public/bower_components/select2/src/scss/theme/classic/layout.scss
new file mode 100644
index 0000000..d63e1d2
--- /dev/null
+++ b/public/bower_components/select2/src/scss/theme/classic/layout.scss
@@ -0,0 +1,64 @@
+@import "defaults";
+@import "../../mixins/gradients";
+
+.select2-container--classic {
+ @import "single";
+ @import "multiple";
+
+ .select2-search--dropdown {
+ .select2-search__field {
+ border: 1px solid $border-color;
+ outline: 0;
+ }
+ }
+
+ .select2-search--inline {
+ .select2-search__field {
+ outline: 0;
+ box-shadow: none;
+ }
+ }
+
+ .select2-dropdown {
+ background-color: $dropdown-bg-color;
+ border: 1px solid transparent;
+ }
+
+ .select2-dropdown--above {
+ border-bottom: none;
+ }
+
+ .select2-dropdown--below {
+ border-top: none;
+ }
+
+ .select2-results > .select2-results__options {
+ max-height: $results-max-height;
+ overflow-y: auto;
+ }
+
+ .select2-results__option {
+ &[role=group] {
+ padding: 0;
+ }
+
+ &[aria-disabled=true] {
+ color: $results-choice-fg-unselectable-color;
+ }
+ }
+
+ .select2-results__option--highlighted[aria-selected] {
+ background-color: $results-choice-bg-hover-color;
+ color: $results-choice-fg-hover-color;
+ }
+
+ .select2-results__group {
+ cursor: default;
+ display: block;
+ padding: 6px;
+ }
+
+ &.select2-container--open .select2-dropdown {
+ border-color: $focus-border-color;
+ }
+}
diff --git a/public/bower_components/select2/src/scss/theme/default/_multiple.scss b/public/bower_components/select2/src/scss/theme/default/_multiple.scss
new file mode 100644
index 0000000..9e204f3
--- /dev/null
+++ b/public/bower_components/select2/src/scss/theme/default/_multiple.scss
@@ -0,0 +1,98 @@
+.select2-selection--multiple {
+ background-color: white;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ cursor: text;
+
+ .select2-selection__rendered {
+ box-sizing: border-box;
+ list-style: none;
+ margin: 0;
+ padding: 0 5px;
+ width: 100%;
+
+ li {
+ list-style: none;
+ }
+ }
+
+ .select2-selection__placeholder {
+ color: #999;
+
+ margin-top: 5px;
+
+ float: left;
+ }
+
+ .select2-selection__clear {
+ cursor: pointer;
+ float: right;
+ font-weight: bold;
+ margin-top: 5px;
+ margin-right: 10px;
+ }
+
+ .select2-selection__choice {
+ background-color: #e4e4e4;
+
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ cursor: default;
+
+ float: left;
+
+ margin-right: 5px;
+ margin-top: 5px;
+ padding: 0 5px;
+ }
+
+ .select2-selection__choice__remove {
+ color: #999;
+ cursor: pointer;
+
+ display: inline-block;
+ font-weight: bold;
+
+ margin-right: 2px;
+
+ &:hover {
+ color: #333;
+ }
+ }
+}
+
+&[dir="rtl"] {
+ .select2-selection--multiple {
+ .select2-selection__choice, .select2-selection__placeholder, .select2-search--inline {
+ float: right;
+ }
+
+ .select2-selection__choice {
+ margin-left: 5px;
+ margin-right: auto;
+ }
+
+ .select2-selection__choice__remove {
+ margin-left: 2px;
+ margin-right: auto;
+ }
+ }
+}
+
+&.select2-container--focus {
+ .select2-selection--multiple {
+ border: solid black 1px;
+ outline: 0;
+ }
+}
+
+&.select2-container--disabled {
+ .select2-selection--multiple {
+ background-color: #eee;
+ cursor: default;
+ }
+
+ .select2-selection__choice__remove {
+ display: none;
+ }
+}
diff --git a/public/bower_components/select2/src/scss/theme/default/_single.scss b/public/bower_components/select2/src/scss/theme/default/_single.scss
new file mode 100644
index 0000000..1387af0
--- /dev/null
+++ b/public/bower_components/select2/src/scss/theme/default/_single.scss
@@ -0,0 +1,83 @@
+.select2-selection--single {
+ background-color: #fff;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+
+ .select2-selection__rendered {
+ color: #444;
+ line-height: 28px;
+ }
+
+ .select2-selection__clear {
+ cursor: pointer;
+ float: right;
+ font-weight: bold;
+ }
+
+ .select2-selection__placeholder {
+ color: #999;
+ }
+
+ .select2-selection__arrow {
+ height: 26px;
+
+ position: absolute;
+
+ top: 1px;
+ right: 1px;
+
+ width: 20px;
+
+ b {
+ border-color: #888 transparent transparent transparent;
+ border-style: solid;
+ border-width: 5px 4px 0 4px;
+
+ height: 0;
+ left: 50%;
+
+ margin-left: -4px;
+ margin-top: -2px;
+
+ position: absolute;
+
+ top: 50%;
+ width: 0;
+ }
+ }
+}
+
+&[dir="rtl"] {
+ .select2-selection--single {
+ .select2-selection__clear {
+ float: left;
+ }
+
+ .select2-selection__arrow {
+ left: 1px;
+ right: auto;
+ }
+ }
+}
+
+&.select2-container--disabled {
+ .select2-selection--single {
+ background-color: #eee;
+ cursor: default;
+
+ .select2-selection__clear {
+ display: none;
+ }
+ }
+}
+
+&.select2-container--open {
+ .select2-selection--single {
+ .select2-selection__arrow {
+ b {
+ border-color: transparent transparent #888 transparent;
+ border-width: 0 4px 5px 4px;
+ }
+ }
+ }
+}
diff --git a/public/bower_components/select2/src/scss/theme/default/layout.scss b/public/bower_components/select2/src/scss/theme/default/layout.scss
new file mode 100644
index 0000000..ea3d939
--- /dev/null
+++ b/public/bower_components/select2/src/scss/theme/default/layout.scss
@@ -0,0 +1,97 @@
+.select2-container--default {
+ @import "single";
+ @import "multiple";
+
+ &.select2-container--open.select2-container--above {
+ .select2-selection--single, .select2-selection--multiple {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ }
+ }
+
+ &.select2-container--open.select2-container--below {
+ .select2-selection--single, .select2-selection--multiple {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+ }
+
+ .select2-search--dropdown {
+ .select2-search__field {
+ border: 1px solid #aaa;
+ }
+ }
+
+ .select2-search--inline {
+ .select2-search__field {
+ background: transparent;
+ border: none;
+ outline: 0;
+ box-shadow: none;
+ -webkit-appearance: textfield;
+ }
+ }
+
+ .select2-results > .select2-results__options {
+ max-height: 200px;
+ overflow-y: auto;
+ }
+
+ .select2-results__option {
+ &[role=group] {
+ padding: 0;
+ }
+
+ &[aria-disabled=true] {
+ color: #999;
+ }
+
+ &[aria-selected=true] {
+ background-color: #ddd;
+ }
+
+ .select2-results__option {
+ padding-left: 1em;
+
+ .select2-results__group {
+ padding-left: 0;
+ }
+
+ .select2-results__option {
+ margin-left: -1em;
+ padding-left: 2em;
+
+ .select2-results__option {
+ margin-left: -2em;
+ padding-left: 3em;
+
+ .select2-results__option {
+ margin-left: -3em;
+ padding-left: 4em;
+
+ .select2-results__option {
+ margin-left: -4em;
+ padding-left: 5em;
+
+ .select2-results__option {
+ margin-left: -5em;
+ padding-left: 6em;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .select2-results__option--highlighted[aria-selected] {
+ background-color: #5897fb;
+ color: white;
+ }
+
+ .select2-results__group {
+ cursor: default;
+ display: block;
+ padding: 6px;
+ }
+}