src/ztfy/myams/resources/js/ext/jquery-select2-sortable.js
changeset 206 02a40997d8cb
parent 130 e3cb023c73b6
--- a/src/ztfy/myams/resources/js/ext/jquery-select2-sortable.js	Fri May 12 14:03:02 2017 +0200
+++ b/src/ztfy/myams/resources/js/ext/jquery-select2-sortable.js	Thu Oct 26 14:45:34 2017 +0200
@@ -4,6 +4,8 @@
  * 
  * author      : Vafour
  * modified    : Kevin Provance (kprovance)
+ * modified    : Thierry Florac (tflorac@ulthar.net)
+ *               Enable sorting for Select2 based on hidden inputs
  * inspired by : jQuery Chosen Sortable (https://github.com/mrhenry/jquery-chosen-sortable)
  * License     : GPL
  */
@@ -24,38 +26,52 @@
                 var $select2 = $select.siblings('.select2-container');
                 var sorted;
 
-                // Opt group names
-                var optArr = [];
-                
-                $select.find('optgroup').each(function(idx, val) {
-                    optArr.push (val);
-                });
-                
-                $select.find('option').each(function(idx, val) {
-                    var groupName = $(this).parent('optgroup').prop('label');
-                    var optVal = this;
-                    
-                    if (groupName === undefined) {
-                        if (this.value !== '' && !this.selected) {
-                            optArr.push (optVal);
-                        }
-                    }
-                });
-                
-                sorted = $($select2.find('.select2-choices li[class!="select2-search-field"]').map(function () {
-                    if (!this) {
-                        return undefined;
-                    }
-                    
-                    var id = $(this).data('select2Data').id;
+				if ($select.attr('type') === 'hidden') {
+
+					// Update hidden field value
+					var plugin = $select2.data('select2');
+					var separator = plugin.opts.separator;
+					var values = [];
+					$.each(plugin.data(), function() {
+						values.push(this.id);
+					});
+					$select.val(values.join(separator));
+
+				} else {
+
+					// Opt group names
+					var optArr = [];
+
+					$select.find('optgroup').each(function(idx, val) {
+						optArr.push (val);
+					});
 
-                    return $select.find('option[value="' + id + '"]')[0];
-                }));
- 
-                 sorted.push.apply(sorted, optArr);
-                
-                $select.children().remove();
-                $select.append(sorted);
+					$select.find('option').each(function(idx, val) {
+						var groupName = $(this).parent('optgroup').prop('label');
+						var optVal = this;
+
+						if (groupName === undefined) {
+							if (this.value !== '' && !this.selected) {
+								optArr.push (optVal);
+							}
+						}
+					});
+
+					sorted = $($select2.find('.select2-choices li[class!="select2-search-field"]').map(function () {
+						if (!this) {
+							return undefined;
+						}
+
+						var id = $(this).data('select2Data').id;
+
+						return $select.find('option[value="' + id + '"]')[0];
+					}));
+
+					 sorted.push.apply(sorted, optArr);
+
+					$select.children().remove();
+					$select.append(sorted);
+				}
               });
 
             return $this;