From b6b2befb00145e693935b4a523c854168d53c976 Mon Sep 17 00:00:00 2001 From: Pavel Solomienko Date: Thu, 3 Dec 2015 00:32:58 +0200 Subject: [PATCH] Fix cutting of url params with the same name upon filtering --- framework/assets/yii.gridView.js | 12 ++++++++++-- framework/assets/yii.js | 26 +++++++++++++++++++++----- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/framework/assets/yii.gridView.js b/framework/assets/yii.gridView.js index 42e37c8..38964a6 100644 --- a/framework/assets/yii.gridView.js +++ b/framework/assets/yii.gridView.js @@ -96,10 +96,18 @@ $.each(yii.getQueryParams(settings.filterUrl), function (name, value) { if (namesInFilter.indexOf(name) === -1 && namesInFilter.indexOf(name.replace(/\[\]$/, '')) === -1) { + if (!$.isArray(value)) { + value = [value]; + } if (!(name in data)) { - data[name] = []; + data[name] = value; + } else { + $.each(value, function (i, val) { + if ($.inArray(val, data[name])) { + data[name].push(val); + } + }); } - data[name].push(value); } }); diff --git a/framework/assets/yii.js b/framework/assets/yii.js index fd83a8d..d946d40 100644 --- a/framework/assets/yii.js +++ b/framework/assets/yii.js @@ -276,12 +276,28 @@ yii = (function ($) { if (pos < 0) { return {}; } - var qs = url.substring(pos + 1).split('&'); - for (var i = 0, result = {}; i < qs.length; i++) { - qs[i] = qs[i].split('='); - result[decodeURIComponent(qs[i][0])] = decodeURIComponent(qs[i][1]); + + var pairs = url.substring(pos + 1).split('&'), + params = {}, + pair, + i; + + for (i = 0; i < pairs.length; i++) { + pair = pairs[i].split('='); + var name = decodeURIComponent(pair[0]); + var value = decodeURIComponent(pair[1]); + if (name.length) { + if (params[name] !== undefined) { + if (!$.isArray(params[name])) { + params[name] = [params[name]]; + } + params[name].push(value || ''); + } else { + params[name] = value || ''; + } + } } - return result; + return params; }, initModule: function (module) {