]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
WEBUI: Improve 'assign number' functionality (multiple selections, custom first numbe...
authorJaroslav Kysela <perex@perex.cz>
Sun, 11 Oct 2015 17:49:58 +0000 (19:49 +0200)
committerJaroslav Kysela <perex@perex.cz>
Sun, 11 Oct 2015 17:49:58 +0000 (19:49 +0200)
src/webui/static/app/chconf.js

index 2d163298d5c8d7cfdd04908c204c4ae2c01ec505..6c3262fa494e01e98818386e7e16dc294d24f6ff 100644 (file)
@@ -45,48 +45,38 @@ tvheadend.channel_tab = function(panel, index)
         return a;
     }
 
-    function assign_low_number(ctx, e, store, sm) {
-        if (sm.getCount() !== 1)
-            return;
+    function get_lowest_number(nums) {
+        nums.sort(function(a, b) { return (a - b); });
+        var max = nums[nums.length - 1];
+        var low = max + 1;
+        for (var i = 1; i <= max; ++i)
+            if (nums.indexOf(i) < 0)
+                return i;
+        return low;
+    }
 
+    function assign_low_number(ctx, e, store, sm) {
         var nums = [];
-        store.each(function() {
-            var number = this.data.number;
-            if (typeof number === "number" && number > 0)
+        store.each(function(rec) {
+            var number = rec.get('number');
+            if (typeof number === 'number' && number > 0)
                 nums.push(number);
         });
-
         if (nums.length === 0)
-        {
-            sm.getSelected().set('number', 1);
-            return;
-        }
-
-        nums.sort(function(a, b) {
-            return (a - b);
-        });
-
-        var max = nums[nums.length - 1];
-        var low = max + 1;
-
-        for (var i = 1; i <= max; ++i)
-        {
-            var ct = false;
-            for (var j = 0; j < nums.length; ++j)
-                if (nums[j] === i)
-                {
-                    ct = true;
-                    break
-                }
-            if (!ct)
-            {
-                low = i;
-                break;
-            }
+            nums.push(0);
+
+        if (sm.getCount() === 1) {
+            sm.getSelected().set('number', get_lowest_number(nums));
+            sm.selectNext();
+        } else {
+            var sel = sm.getSelections();
+            var low = sel[0].get('number');
+            low = low ? low : get_lowest_number(nums);
+            Ext.each(sel, function(s) {
+                while (nums.indexOf(low) >= 0) low++;
+                s.set('number', low++);
+            });
         }
-
-        sm.getSelected().set('number', low);
-        sm.selectNext();
     }
 
     function move_number_up(ctx, e, store, sm) {