From d6a83ea026819309038d051b62ea32dac2253119 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Thu, 15 Jan 2015 14:36:54 -0500 Subject: [PATCH] Pull query and initSelection out to compat modules This also adds more documentation and corrects the release notes for these breaking changes. These modules will now only be included in the full builds of Select2, which has been noted in a few places. --- Gruntfile.js | 2 + dist/js/select2.amd.full.js | 124 ++++++++++++++++--------- dist/js/select2.amd.js | 54 ++--------- dist/js/select2.full.js | 124 ++++++++++++++++--------- dist/js/select2.full.min.js | 4 +- dist/js/select2.js | 54 ++--------- dist/js/select2.min.js | 2 +- docs/announcements-4.0.html | 77 ++++++++++++--- docs/options.html | 116 +++++++++++++++++++++++ src/js/select2/compat/initSelection.js | 42 +++++++++ src/js/select2/compat/query.js | 26 ++++++ src/js/select2/defaults.js | 54 ++--------- tests/options/deprecated.html | 2 +- 13 files changed, 446 insertions(+), 235 deletions(-) create mode 100644 src/js/select2/compat/initSelection.js create mode 100644 src/js/select2/compat/query.js diff --git a/Gruntfile.js b/Gruntfile.js index 51eb4e85..b6a49a34 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -13,6 +13,8 @@ module.exports = function (grunt) { 'jquery.mousewheel', 'select2/compat/matcher', + 'select2/compat/initSelection', + 'select2/compat/query', 'select2/dropdown/attachContainer' ].concat(includes); diff --git a/dist/js/select2.amd.full.js b/dist/js/select2.amd.full.js index 63abd6c9..d3ea450e 100644 --- a/dist/js/select2.amd.full.js +++ b/dist/js/select2.amd.full.js @@ -3527,55 +3527,21 @@ define('select2/defaults',[ } if (options.query != null) { - if (console && console.warn) { - console.warn( - 'Select2: The `query` option has been deprecated in favor of a ' + - 'custom data adapter that overrides the `query` method. Support ' + - 'will be removed for the `query` option in future versions of ' + - 'Select2.' - ); - } + var Query = require(options.amdBase + 'compat/query'); - options.dataAdapter.prototype.query = function (params, callback) { - params.callback = callback; - - options.query.call(null, params); - }; + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + Query + ); } if (options.initSelection != null) { - if (console && console.warn) { - console.warn( - 'Select2: The `initSelection` option has been deprecated in favor' + - ' of a custom data adapter that overrides the `current` method. ' + - 'This method is now called multiple times instead of a single ' + - 'time when the instance is initialized. Support will be removed ' + - 'for the `initSelection` option in future versions of Select2' - ); - } + var InitSelection = require(options.amdBase + 'compat/initSelection'); - var oldCurrent = options.dataAdapter.prototype.current; - var newCurrent = function (callback) { - var self = this; - - if (this._isInitialized) { - oldCurrent.call(this, callback); - - return; - } - - options.initSelection.call(null, this.$element, function (data) { - self._isInitialized = true; - - if (!$.isArray(data)) { - data = [data]; - } - - callback(data); - }); - }; - - options.dataAdapter.prototype.current = newCurrent; + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + InitSelection + ); } } @@ -4663,6 +4629,76 @@ define('select2/compat/matcher',[ return oldMatcher; }); +define('select2/compat/initSelection',[ + 'jquery' +], function ($) { + function InitSelection (decorated, $element, options) { + if (console && console.warn) { + console.warn( + 'Select2: The `initSelection` option has been deprecated in favor' + + ' of a custom data adapter that overrides the `current` method. ' + + 'This method is now called multiple times instead of a single ' + + 'time when the instance is initialized. Support will be removed ' + + 'for the `initSelection` option in future versions of Select2' + ); + } + + this.initSelection = options.get('initSelection'); + this._isInitialized = false; + + decorated.call(this, $element, options); + } + + InitSelection.prototype.current = function (decorated, callback) { + var self = this; + + if (this._isInitialized) { + decorated.call(this, callback); + + return; + } + + this.initSelection.call(null, this.$element, function (data) { + self._isInitialized = true; + + if (!$.isArray(data)) { + data = [data]; + } + + callback(data); + }); + }; + + return InitSelection; +}); + +define('select2/compat/query',[ + +], function () { + function Query (decorated, $element, options) { + if (console && console.warn) { + console.warn( + 'Select2: The `query` option has been deprecated in favor of a ' + + 'custom data adapter that overrides the `query` method. Support ' + + 'will be removed for the `query` option in future versions of ' + + 'Select2.' + ); + } + + decorated.call(this, $element, options); + } + + Query.prototype.query = function (_, params, callback) { + params.callback = callback; + + var query = this.options.get('query'); + + query.call(null, params); + }; + + return Query; +}); + define('select2/dropdown/attachContainer',[ ], function () { diff --git a/dist/js/select2.amd.js b/dist/js/select2.amd.js index 157e9f7e..e3793b21 100644 --- a/dist/js/select2.amd.js +++ b/dist/js/select2.amd.js @@ -3527,55 +3527,21 @@ define('select2/defaults',[ } if (options.query != null) { - if (console && console.warn) { - console.warn( - 'Select2: The `query` option has been deprecated in favor of a ' + - 'custom data adapter that overrides the `query` method. Support ' + - 'will be removed for the `query` option in future versions of ' + - 'Select2.' - ); - } + var Query = require(options.amdBase + 'compat/query'); - options.dataAdapter.prototype.query = function (params, callback) { - params.callback = callback; - - options.query.call(null, params); - }; + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + Query + ); } if (options.initSelection != null) { - if (console && console.warn) { - console.warn( - 'Select2: The `initSelection` option has been deprecated in favor' + - ' of a custom data adapter that overrides the `current` method. ' + - 'This method is now called multiple times instead of a single ' + - 'time when the instance is initialized. Support will be removed ' + - 'for the `initSelection` option in future versions of Select2' - ); - } + var InitSelection = require(options.amdBase + 'compat/initSelection'); - var oldCurrent = options.dataAdapter.prototype.current; - var newCurrent = function (callback) { - var self = this; - - if (this._isInitialized) { - oldCurrent.call(this, callback); - - return; - } - - options.initSelection.call(null, this.$element, function (data) { - self._isInitialized = true; - - if (!$.isArray(data)) { - data = [data]; - } - - callback(data); - }); - }; - - options.dataAdapter.prototype.current = newCurrent; + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + InitSelection + ); } } diff --git a/dist/js/select2.full.js b/dist/js/select2.full.js index b492486e..2c7fbb55 100644 --- a/dist/js/select2.full.js +++ b/dist/js/select2.full.js @@ -13062,55 +13062,21 @@ define('select2/defaults',[ } if (options.query != null) { - if (console && console.warn) { - console.warn( - 'Select2: The `query` option has been deprecated in favor of a ' + - 'custom data adapter that overrides the `query` method. Support ' + - 'will be removed for the `query` option in future versions of ' + - 'Select2.' - ); - } + var Query = require(options.amdBase + 'compat/query'); - options.dataAdapter.prototype.query = function (params, callback) { - params.callback = callback; - - options.query.call(null, params); - }; + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + Query + ); } if (options.initSelection != null) { - if (console && console.warn) { - console.warn( - 'Select2: The `initSelection` option has been deprecated in favor' + - ' of a custom data adapter that overrides the `current` method. ' + - 'This method is now called multiple times instead of a single ' + - 'time when the instance is initialized. Support will be removed ' + - 'for the `initSelection` option in future versions of Select2' - ); - } + var InitSelection = require(options.amdBase + 'compat/initSelection'); - var oldCurrent = options.dataAdapter.prototype.current; - var newCurrent = function (callback) { - var self = this; - - if (this._isInitialized) { - oldCurrent.call(this, callback); - - return; - } - - options.initSelection.call(null, this.$element, function (data) { - self._isInitialized = true; - - if (!$.isArray(data)) { - data = [data]; - } - - callback(data); - }); - }; - - options.dataAdapter.prototype.current = newCurrent; + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + InitSelection + ); } } @@ -14198,6 +14164,76 @@ define('select2/compat/matcher',[ return oldMatcher; }); +define('select2/compat/initSelection',[ + 'jquery' +], function ($) { + function InitSelection (decorated, $element, options) { + if (console && console.warn) { + console.warn( + 'Select2: The `initSelection` option has been deprecated in favor' + + ' of a custom data adapter that overrides the `current` method. ' + + 'This method is now called multiple times instead of a single ' + + 'time when the instance is initialized. Support will be removed ' + + 'for the `initSelection` option in future versions of Select2' + ); + } + + this.initSelection = options.get('initSelection'); + this._isInitialized = false; + + decorated.call(this, $element, options); + } + + InitSelection.prototype.current = function (decorated, callback) { + var self = this; + + if (this._isInitialized) { + decorated.call(this, callback); + + return; + } + + this.initSelection.call(null, this.$element, function (data) { + self._isInitialized = true; + + if (!$.isArray(data)) { + data = [data]; + } + + callback(data); + }); + }; + + return InitSelection; +}); + +define('select2/compat/query',[ + +], function () { + function Query (decorated, $element, options) { + if (console && console.warn) { + console.warn( + 'Select2: The `query` option has been deprecated in favor of a ' + + 'custom data adapter that overrides the `query` method. Support ' + + 'will be removed for the `query` option in future versions of ' + + 'Select2.' + ); + } + + decorated.call(this, $element, options); + } + + Query.prototype.query = function (_, params, callback) { + params.callback = callback; + + var query = this.options.get('query'); + + query.call(null, params); + }; + + return Query; +}); + define('select2/dropdown/attachContainer',[ ], function () { diff --git a/dist/js/select2.full.min.js b/dist/js/select2.full.min.js index a1ee4b66..886ec83c 100644 --- a/dist/js/select2.full.min.js +++ b/dist/js/select2.full.min.js @@ -1,5 +1,5 @@ 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("