diff --git a/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js b/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js index 5d121996ee..34350740e1 100644 --- a/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +++ b/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js @@ -32,6 +32,17 @@ xhr: false }, + wrapper: null, + filter: null, + collection: null, + addAll: null, + add: null, + remove: null, + up: null, + down: null, + selection: null, + removeAll: null, + _create: function() { this._cache = {}; this._build(); @@ -42,65 +53,69 @@ _build: function() { var i; - this.wrapper = $('
'); + this.wrapper = this.element.siblings( + '.ra-multiselect[data-input-for="' + this.element.attr('id') + '"]' + ); + + // Prevent duplication on browser back + if (this.wrapper.length > 0) { + this.filter = this.wrapper.find('input.ra-multiselect-search'); + this.collection = this.wrapper.find('select.ra-multiselect-collection'); + this.addAll = this.wrapper.find('a.ra-multiselect-item-add-all'); + this.add = this.wrapper.find('a.ra-multiselect-item-add'); + this.remove = this.wrapper.find('a.ra-multiselect-item-remove'); + this.up = this.wrapper.find('a.ra-multiselect-item-up'); + this.down = this.wrapper.find('a.ra-multiselect-item-down'); + this.selection = this.wrapper.find('select.ra-multiselect-selection'); + this.removeAll = this.wrapper.find('a.ra-multiselect-item-remove-all'); + return; + } + this.wrapper = $('
').attr('data-input-for', this.element.attr('id')) this.wrapper.insertAfter(this.element); - - this.header = $('
'); - + var header = $('
'); this.filter = $(''); + header.append(this.filter); + this.wrapper.append(header); - this.header.append(this.filter); - - this.wrapper.append(this.header); - - this.columns = { + var columns = { left: $('
'), center: $('
'), right: $('
') }; - for (i in this.columns) { - if (this.columns.hasOwnProperty(i)) { - this.wrapper.append(this.columns[i]); + for (i in columns) { + if (columns.hasOwnProperty(i)) { + this.wrapper.append(columns[i]); } } this.collection = $(''); - this.collection.addClass("form-control ra-multiselect-collection"); - this.addAll = $('' + this.options.regional.chooseAll + ''); - - this.columns.left.html(this.collection) - .append(this.addAll); - + columns.left.html(this.collection) + .append(this.addAll); this.collection.wrap('
'); this.add = $('' + this.options.regional.add + ''); - this.columns.center.append(this.add); - + columns.center.append(this.add); if (this.options.removable) { this.remove = $('' + this.options.regional.remove + ''); - this.columns.center.append(this.remove); + columns.center.append(this.remove); } - if (this.options.sortable) { this.up = $('' + this.options.regional.up + ''); this.down = $('' + this.options.regional.down + ''); - this.columns.center.append(this.up).append(this.down); + columns.center.append(this.up).append(this.down); } this.selection = $(''); - this.columns.right.append(this.selection); - - + columns.right.append(this.selection); if (this.options.removable) { this.removeAll = $('' + this.options.regional.clearAll + ''); - this.columns.right.append(this.removeAll); + columns.right.append(this.removeAll); } - this.selection.wrap('
'); this.element.css({display: "none"}); @@ -108,7 +123,7 @@ this.tooManyObjectsPlaceholder = $('