From 85593de1fa5c753829f1028cdc0242b0075a8f24 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Tue, 25 Nov 2014 13:39:46 -0500 Subject: [PATCH] Fixed bug when destroying Select2 When destroying Select2, an error could be raised while destroying the selection container. This was because the destroy handler was relying on the container id being present. The old functionality has been restored where Select2 will destroy itself when it is initialized again. --- dist/js/select2.amd.full.js | 6 ++++-- dist/js/select2.amd.js | 6 ++++-- dist/js/select2.full.js | 6 ++++-- dist/js/select2.full.min.js | 4 ++-- dist/js/select2.js | 6 ++++-- dist/js/select2.min.js | 4 ++-- package.json | 1 + src/js/select2/core.js | 2 +- src/js/select2/selection/base.js | 4 +++- 9 files changed, 25 insertions(+), 14 deletions(-) diff --git a/dist/js/select2.amd.full.js b/dist/js/select2.amd.full.js index b5507d73..f7af8031 100644 --- a/dist/js/select2.amd.full.js +++ b/dist/js/select2.amd.full.js @@ -660,6 +660,8 @@ define('select2/selection/base',[ var id = container.id + '-container'; var resultsId = container.id + '-results'; + this.container = container; + this.$selection.attr('aria-owns', resultsId); this.$selection.on('keydown', function (evt) { @@ -716,7 +718,7 @@ define('select2/selection/base',[ BaseSelection.prototype.destroy = function () { // Unbind the dropdown click handler if it exists - $(document.body).off('.select2.' + container.id); + $(document.body).off('.select2.' + this.container.id); }; BaseSelection.prototype.update = function (data) { @@ -3101,7 +3103,7 @@ define('select2/core',[ ], function ($, Options, Utils, KEYS) { var Select2 = function ($element, options) { if ($element.data('select2') != null) { - return; + $element.select2('destroy'); } this.$element = $element; diff --git a/dist/js/select2.amd.js b/dist/js/select2.amd.js index 1013c70f..1ca6f8e2 100644 --- a/dist/js/select2.amd.js +++ b/dist/js/select2.amd.js @@ -660,6 +660,8 @@ define('select2/selection/base',[ var id = container.id + '-container'; var resultsId = container.id + '-results'; + this.container = container; + this.$selection.attr('aria-owns', resultsId); this.$selection.on('keydown', function (evt) { @@ -716,7 +718,7 @@ define('select2/selection/base',[ BaseSelection.prototype.destroy = function () { // Unbind the dropdown click handler if it exists - $(document.body).off('.select2.' + container.id); + $(document.body).off('.select2.' + this.container.id); }; BaseSelection.prototype.update = function (data) { @@ -3101,7 +3103,7 @@ define('select2/core',[ ], function ($, Options, Utils, KEYS) { var Select2 = function ($element, options) { if ($element.data('select2') != null) { - return; + $element.select2('destroy'); } this.$element = $element; diff --git a/dist/js/select2.full.js b/dist/js/select2.full.js index db1048cc..e3595ede 100644 --- a/dist/js/select2.full.js +++ b/dist/js/select2.full.js @@ -10195,6 +10195,8 @@ define('select2/selection/base',[ var id = container.id + '-container'; var resultsId = container.id + '-results'; + this.container = container; + this.$selection.attr('aria-owns', resultsId); this.$selection.on('keydown', function (evt) { @@ -10251,7 +10253,7 @@ define('select2/selection/base',[ BaseSelection.prototype.destroy = function () { // Unbind the dropdown click handler if it exists - $(document.body).off('.select2.' + container.id); + $(document.body).off('.select2.' + this.container.id); }; BaseSelection.prototype.update = function (data) { @@ -12636,7 +12638,7 @@ define('select2/core',[ ], function ($, Options, Utils, KEYS) { var Select2 = function ($element, options) { if ($element.data('select2') != null) { - return; + $element.select2('destroy'); } this.$element = $element; diff --git a/dist/js/select2.full.min.js b/dist/js/select2.full.min.js index c16be207..0945fa24 100644 --- a/dist/js/select2.full.min.js +++ b/dist/js/select2.full.min.js @@ -1,4 +1,4 @@ window.$=window.$||{},function(){$&&$.fn&&$.fn.select2&&$.fn.select2.amd&&(c=$.fn.select2.amd.define,b=$.fn.select2.amd.require);var a,b,c;!function(d){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(n=n.slice(0,n.length-1),a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.concat(a),k=0;k0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,b){return function(){return n.apply(d,v.call(arguments,0).concat([a,b]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var b=r[a];delete r[a],t[a]=!0,m.apply(d,b)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,b,c,f){var h,k,l,m,n,s,u=[],v=typeof c;if(f=f||a,"undefined"===v||"function"===v){for(b=!b.length&&c.length?["require","exports","module"]:b,n=0;n0&&b-1 in a}function e(a,b,c){if(bb.isFunction(b))return bb.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return bb.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(ib.test(b))return bb.filter(b,a,c);b=bb.filter(b,a)}return bb.grep(a,function(a){return V.call(b,a)>=0!==c})}function f(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function g(a){var b=pb[a]={};return bb.each(a.match(ob)||[],function(a,c){b[c]=!0}),b}function h(){_.removeEventListener("DOMContentLoaded",h,!1),a.removeEventListener("load",h,!1),bb.ready()}function i(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=bb.expando+Math.random()}function j(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(vb,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:ub.test(c)?bb.parseJSON(c):c}catch(e){}tb.set(a,b,c)}else c=void 0;return c}function k(){return!0}function l(){return!1}function m(){try{return _.activeElement}catch(a){}}function n(a,b){return bb.nodeName(a,"table")&&bb.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function o(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function p(a){var b=Lb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function q(a,b){for(var c=0,d=a.length;d>c;c++)sb.set(a[c],"globalEval",!b||sb.get(b[c],"globalEval"))}function r(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(sb.hasData(a)&&(f=sb.access(a),g=sb.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)bb.event.add(b,e,j[e][c])}tb.hasData(a)&&(h=tb.access(a),i=bb.extend({},h),tb.set(b,i))}}function s(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&bb.nodeName(a,b)?bb.merge([a],c):c}function t(a,b){var c=b.nodeName.toLowerCase();"input"===c&&zb.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function u(b,c){var d=bb(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:bb.css(d[0],"display");return d.detach(),e}function v(a){var b=_,c=Pb[a];return c||(c=u(a,b),"none"!==c&&c||(Ob=(Ob||bb("