From: Jaroslav Kysela Date: Sun, 11 Oct 2015 17:49:58 +0000 (+0200) Subject: WEBUI: Improve 'assign number' functionality (multiple selections, custom first numbe... X-Git-Tag: v4.2.1~1943 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=36859b7419f6983c52656b99e73e4f69469bdf02;p=thirdparty%2Ftvheadend.git WEBUI: Improve 'assign number' functionality (multiple selections, custom first number), fixes #3145 --- diff --git a/src/webui/static/app/chconf.js b/src/webui/static/app/chconf.js index 2d163298d..6c3262fa4 100644 --- a/src/webui/static/app/chconf.js +++ b/src/webui/static/app/chconf.js @@ -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) {