From ea90ac1a0f768e38de94793eb95993c73463015e Mon Sep 17 00:00:00 2001 From: Antonio Ramirez Date: Sun, 2 Mar 2014 08:14:30 +0100 Subject: [PATCH 1/6] fixes #2559 --- framework/CHANGELOG.md | 1 + framework/assets/yii.gridView.js | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index e70581170e..b7eb69a179 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -49,6 +49,7 @@ Yii Framework 2 Change Log - Bug #2502: Unclear error message when `$_SERVER['DOCUMENT_ROOT']` is empty (samdark) - Bug #2519: MessageSource removed translation messages when event handler was bound to `missingTranslation`-event (cebe) - Bug #2527: Source language for `app` message category was always `en` no matter which application `sourceLanguage` was used (samdark) +- Bug #2559: Going back on browser history breaks GridView filtering with `Pjax` (tonydspaniard) - Bug: Fixed `Call to a member function registerAssetFiles() on a non-object` in case of wrong `sourcePath` for an asset bundle (samdark) - Bug: Fixed incorrect event name for `yii\jui\Spinner` (samdark) - Bug: Json::encode() did not handle objects that implement JsonSerializable interface correctly (cebe) diff --git a/framework/assets/yii.gridView.js b/framework/assets/yii.gridView.js index 496e3cdea7..4802d6ffd4 100644 --- a/framework/assets/yii.gridView.js +++ b/framework/assets/yii.gridView.js @@ -26,17 +26,17 @@ filterSelector: undefined }; + var gridData = {}; + var methods = { init: function (options) { return this.each(function () { var $e = $(this); var settings = $.extend({}, defaults, options || {}); - $e.data('yiiGridView', { - settings: settings - }); + gridData.settings = settings; var enterPressed = false; - $(settings.filterSelector).on('change.yiiGridView keydown.yiiGridView', function (event) { + $(document).on('change.yiiGridView keydown.yiiGridView', settings.filterSelector, function (event) { if (event.type === 'keydown') { if (event.keyCode !== 13) { return; // only react to enter key @@ -60,7 +60,7 @@ applyFilter: function () { var $grid = $(this); - var settings = $grid.data('yiiGridView').settings; + var settings = gridData.settings; var data = {}; $.each($(settings.filterSelector).serializeArray(), function () { data[this.name] = this.value; @@ -85,15 +85,16 @@ setSelectionColumn: function (options) { var $grid = $(this); - var data = $grid.data('yiiGridView'); - data.selectionColumn = options.name; + var id = $(this).prop('id'); + gridData.selectionColumn = options.name; if (!options.multiple) { return; } - $grid.on('click.yiiGridView', "input[name='" + options.checkAll + "']", function () { + var inputs = "#" + id + " input[name='" + options.checkAll + "']"; + $(document).off('click.yiiGridView', inputs ).on('click.yiiGridView', inputs, function () { $grid.find("input[name='" + options.name + "']:enabled").prop('checked', this.checked); }); - $grid.on('click.yiiGridView', "input[name='" + options.name + "']:enabled", function () { + $(document).off('click.yiiGridView', inputs + ":enabled").on('click.yiiGridView', inputs + ":enabled", function () { var all = $grid.find("input[name='" + options.name + "']").length == $grid.find("input[name='" + options.name + "']:checked").length; $grid.find("input[name='" + options.checkAll + "']").prop('checked', all); }); From c31c5713b4a3095ca8b6e87f0b6e7e7f13c91248 Mon Sep 17 00:00:00 2001 From: Antonio Ramirez Date: Sun, 2 Mar 2014 08:19:08 +0100 Subject: [PATCH 2/6] fix formatting --- framework/assets/yii.gridView.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/framework/assets/yii.gridView.js b/framework/assets/yii.gridView.js index 4802d6ffd4..89375e966e 100644 --- a/framework/assets/yii.gridView.js +++ b/framework/assets/yii.gridView.js @@ -26,17 +26,17 @@ filterSelector: undefined }; - var gridData = {}; + var gridData = {}; var methods = { init: function (options) { return this.each(function () { var $e = $(this); var settings = $.extend({}, defaults, options || {}); - gridData.settings = settings; + gridData.settings = settings; var enterPressed = false; - $(document).on('change.yiiGridView keydown.yiiGridView', settings.filterSelector, function (event) { + $(document).on('change.yiiGridView keydown.yiiGridView', settings.filterSelector, function (event) { if (event.type === 'keydown') { if (event.keyCode !== 13) { return; // only react to enter key @@ -85,8 +85,8 @@ setSelectionColumn: function (options) { var $grid = $(this); - var id = $(this).prop('id'); - gridData.selectionColumn = options.name; + var id = $(this).prop('id'); + gridData.selectionColumn = options.name; if (!options.multiple) { return; } From 4fffe47903d487b9d7f4255823584a5d5fb84935 Mon Sep 17 00:00:00 2001 From: Antonio Ramirez Date: Sun, 2 Mar 2014 08:19:08 +0100 Subject: [PATCH 3/6] fix formatting --- framework/assets/yii.gridView.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/framework/assets/yii.gridView.js b/framework/assets/yii.gridView.js index 4802d6ffd4..f46ca88cdb 100644 --- a/framework/assets/yii.gridView.js +++ b/framework/assets/yii.gridView.js @@ -26,17 +26,17 @@ filterSelector: undefined }; - var gridData = {}; + var gridData = {}; var methods = { init: function (options) { return this.each(function () { var $e = $(this); var settings = $.extend({}, defaults, options || {}); - gridData.settings = settings; + gridData.settings = settings; var enterPressed = false; - $(document).on('change.yiiGridView keydown.yiiGridView', settings.filterSelector, function (event) { + $(document).on('change.yiiGridView keydown.yiiGridView', settings.filterSelector, function (event) { if (event.type === 'keydown') { if (event.keyCode !== 13) { return; // only react to enter key @@ -60,7 +60,7 @@ applyFilter: function () { var $grid = $(this); - var settings = gridData.settings; + var settings = gridData.settings; var data = {}; $.each($(settings.filterSelector).serializeArray(), function () { data[this.name] = this.value; @@ -85,16 +85,16 @@ setSelectionColumn: function (options) { var $grid = $(this); - var id = $(this).prop('id'); - gridData.selectionColumn = options.name; + var id = $(this).prop('id'); + gridData.selectionColumn = options.name; if (!options.multiple) { return; } - var inputs = "#" + id + " input[name='" + options.checkAll + "']"; - $(document).off('click.yiiGridView', inputs ).on('click.yiiGridView', inputs, function () { + var inputs = "#" + id + " input[name='" + options.checkAll + "']"; + $(document).off('click.yiiGridView', inputs ).on('click.yiiGridView', inputs, function () { $grid.find("input[name='" + options.name + "']:enabled").prop('checked', this.checked); }); - $(document).off('click.yiiGridView', inputs + ":enabled").on('click.yiiGridView', inputs + ":enabled", function () { + $(document).off('click.yiiGridView', inputs + ":enabled").on('click.yiiGridView', inputs + ":enabled", function () { var all = $grid.find("input[name='" + options.name + "']").length == $grid.find("input[name='" + options.name + "']:checked").length; $grid.find("input[name='" + options.checkAll + "']").prop('checked', all); }); From f1bf8594349dc981d628ece6ab14b3cb7aacfeb4 Mon Sep 17 00:00:00 2001 From: Antonio Ramirez Date: Sun, 2 Mar 2014 22:42:47 +0100 Subject: [PATCH 4/6] add multiple grid support to gridData --- framework/assets/yii.gridView.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/framework/assets/yii.gridView.js b/framework/assets/yii.gridView.js index f46ca88cdb..bff9072fc5 100644 --- a/framework/assets/yii.gridView.js +++ b/framework/assets/yii.gridView.js @@ -33,7 +33,7 @@ return this.each(function () { var $e = $(this); var settings = $.extend({}, defaults, options || {}); - gridData.settings = settings; + gridData[$e.prop('id')] = {settings: settings}; var enterPressed = false; $(document).on('change.yiiGridView keydown.yiiGridView', settings.filterSelector, function (event) { @@ -60,7 +60,7 @@ applyFilter: function () { var $grid = $(this); - var settings = gridData.settings; + var settings = gridData[$grid.prop('id')].settings; var data = {}; $.each($(settings.filterSelector).serializeArray(), function () { data[this.name] = this.value; @@ -86,12 +86,12 @@ setSelectionColumn: function (options) { var $grid = $(this); var id = $(this).prop('id'); - gridData.selectionColumn = options.name; + gridData[id].selectionColumn = options.name; if (!options.multiple) { return; } var inputs = "#" + id + " input[name='" + options.checkAll + "']"; - $(document).off('click.yiiGridView', inputs ).on('click.yiiGridView', inputs, function () { + $(document).off('click.yiiGridView', inputs).on('click.yiiGridView', inputs, function () { $grid.find("input[name='" + options.name + "']:enabled").prop('checked', this.checked); }); $(document).off('click.yiiGridView', inputs + ":enabled").on('click.yiiGridView', inputs + ":enabled", function () { @@ -102,7 +102,7 @@ getSelectedRows: function () { var $grid = $(this); - var data = $grid.data('yiiGridView'); + var data = gridData[$grid.prop('id')]; var keys = []; if (data.selectionColumn) { $grid.find("input[name='" + data.selectionColumn + "']:checked").each(function () { @@ -119,7 +119,7 @@ }); }, - data: function() { + data: function () { return this.data('yiiGridView'); } }; From 0e9c2890d7bb881b050c8cc07f2ef0bb7d8ff577 Mon Sep 17 00:00:00 2001 From: Antonio Ramirez Date: Mon, 3 Mar 2014 20:45:55 +0100 Subject: [PATCH 5/6] remove previous attachments if any --- framework/assets/yii.gridView.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/framework/assets/yii.gridView.js b/framework/assets/yii.gridView.js index bff9072fc5..a1789074de 100644 --- a/framework/assets/yii.gridView.js +++ b/framework/assets/yii.gridView.js @@ -36,7 +36,8 @@ gridData[$e.prop('id')] = {settings: settings}; var enterPressed = false; - $(document).on('change.yiiGridView keydown.yiiGridView', settings.filterSelector, function (event) { + $(document).off('change.yiiGridView keydown.yiiGridView', settings.filterSelector) + .on('change.yiiGridView keydown.yiiGridView', settings.filterSelector, function (event) { if (event.type === 'keydown') { if (event.keyCode !== 13) { return; // only react to enter key From f5cc851fc24770ea44c9f92cd0a1e6add3f1c1f2 Mon Sep 17 00:00:00 2001 From: Antonio Ramirez Date: Mon, 3 Mar 2014 22:12:40 +0100 Subject: [PATCH 6/6] return data from module scope variable --- framework/assets/yii.gridView.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/framework/assets/yii.gridView.js b/framework/assets/yii.gridView.js index a1789074de..ca2b99a278 100644 --- a/framework/assets/yii.gridView.js +++ b/framework/assets/yii.gridView.js @@ -121,7 +121,8 @@ }, data: function () { - return this.data('yiiGridView'); + var id = $(this).prop('id'); + return gridData[id]; } }; })(window.jQuery);