diff --git a/dist/angular-select2.js b/dist/angular-select2.js deleted file mode 100644 index d42b386..0000000 --- a/dist/angular-select2.js +++ /dev/null @@ -1,290 +0,0 @@ -angular.module("rt.select2", []) - .value("select2Config", {}) - .factory("select2Stack", function () { - var stack = []; - - return { - $register: function (callbackElem) { - stack.push(callbackElem); - }, - $unregister: function (callbackElem) { - var idx = stack.indexOf(callbackElem); - if (idx !== -1) { - stack.splice(idx, 1); - } - }, - closeAll: function () { - stack.forEach(function (elem) { - elem.close(); - }); - } - }; - }) - .directive("select2", ["$rootScope", "$timeout", "$parse", "$filter", "select2Config", "select2Stack", function ($rootScope, $timeout, $parse, $filter, select2Config, select2Stack) { - "use strict"; - - var filter = $filter("filter"); - - function sortedKeys(obj) { - var keys = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - keys.push(key); - } - } - return keys.sort(); - } - - var defaultOptions = {}; - //0000111110000000000022220000000000000000000000333300000000000000444444444444444000000000555555555555555000000066666666666666600000000000000007777000000000000000000088888 - var NG_OPTIONS_REGEXP = /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/; - - if (select2Config) { - angular.extend(defaultOptions, select2Config); - } - - return { - require: "ngModel", - priority: 1, - restrict: "E", - template: "", - replace: true, - link: function (scope, element, attrs, controller) { - var getOptions; - - var opts = angular.extend({}, defaultOptions, scope.$eval(attrs.options)); - var isMultiple = angular.isDefined(attrs.multiple) || opts.multiple; - - opts.multiple = isMultiple; - - // make sure ngrequired validation works - if (isMultiple) { - controller.$isEmpty = function (value) { - return !value || value.length === 0; - }; - } - - if (attrs.placeholder) { - opts.placeholder = attrs.placeholder; - } - - var filterOptions = $parse(attrs.optionsFilter); - - // All values returned from Select2 are strings. This is a - // problem if you supply integer indexes: they'll become - // strings once passing through this directive. We keep a - // mapping between string keys and values through the - // optionItems object, to be able to return the correctly typed - // value. - var optionItems = {}; - - function filterValues(values) { - if (filterOptions) { - var filterParams = filterOptions(scope); - if (filterParams) { - return filter(values, filterParams); - } - } - - return values; - } - - if (attrs.s2Options) { - var match; - if (!(match = attrs.s2Options.match(NG_OPTIONS_REGEXP))) { - throw new Error("Invalid s2Options encountered!"); - } - - var displayFn = $parse(match[2] || match[1]); - var valuesFn = $parse(match[7]); - var valueName = match[4] || match[6]; - var valueFn = $parse(match[2] ? match[1] : valueName); - var keyName = match[5]; - - getOptions = function (callback) { - optionItems = {}; - var values = filterValues(valuesFn(scope)); - var keys = (keyName ? sortedKeys(values) : values) || []; - - var options = []; - for (var i = 0; i < keys.length; i++) { - var locals = {}; - var key = i; - if (keyName) { - key = keys[i]; - locals[keyName] = key; - } - locals[valueName] = values[key]; - - var value = valueFn(scope, locals); - var label = displayFn(scope, locals) || ""; - - // Select2 returns strings, we use a dictionary to get - // back to the original value. - optionItems[value] = { - id: value, - text: label, - obj: values[key] - }; - - options.push(optionItems[value]); - } - - callback(options); - }; - - opts.query = function (query) { - var values = filterValues(valuesFn(scope)); - var keys = (keyName ? sortedKeys(values) : values) || []; - - var options = []; - for (var i = 0; i < keys.length; i++) { - var locals = {}; - var key = i; - if (keyName) { - key = keys[i]; - locals[keyName] = key; - } - locals[valueName] = values[key]; - - var value = valueFn(scope, locals); - var label = displayFn(scope, locals) || ""; - - if (label.toLowerCase().indexOf(query.term.toLowerCase()) > -1) { - options.push({ - id: value, - text: label, - obj: values[key] - }); - } - } - - query.callback({ - results: options - }); - }; - - // Make sure changes to the options get filled in - scope.$watch(match[7], function () { - controller.$render(); - }); - } else { - if (!opts.query) { - throw new Error("You need to supply a query function!"); - } - - var queryFn = opts.query; - opts.query = function (query) { - var cb = query.callback; - query.callback = function (data) { - for (var i = 0; i < data.results.length; i++) { - var result = data.results[i]; - optionItems[result.id] = result; - } - cb(data); - }; - queryFn(query); - }; - - getOptions = function (callback) { - opts.query({ - term: "", - callback: function (query) { - callback(query.results); - } - }); - }; - } - - function getSelection(callback) { - if (isMultiple) { - getOptions(function (options) { - var selection = []; - for (var i = 0; i < options.length; i++) { - var option = options[i]; - var viewValue = controller.$viewValue || []; - if (viewValue.indexOf(option.id) > -1) { - selection.push(option); - } - } - callback(selection); - }); - } else { - getOptions(function () { - callback(optionItems[controller.$viewValue] || { obj: {} }); - }); - } - } - - controller.$render = function () { - getSelection(function (selection) { - if (isMultiple) { - element.select2("data", selection); - } else { - element.select2("val", selection.id); - } - }); - }; - - if (!opts.initSelection) { - opts.initSelection = function (element, callback) { - getSelection(callback); - }; - } else { - var _initSelection = opts.initSelection; - opts.initSelection = function (element, callback) { - _initSelection(element, function (result) { - optionItems[result.id] = result; - callback(result); - }); - }; - } - - // register with the select2stack - var controlObj = { - close: function () { - element.select2("close"); - } - }; - select2Stack.$register(controlObj); - scope.$on("destroy", function () { - select2Stack.$unregister(controlObj); - }); - - $timeout(function () { - element.select2(opts); - element.on("change", function (e) { - scope.$apply(function () { - var val; - if (isMultiple) { - var vals = []; - for (var i = 0; i < e.val.length; i++) { - val = optionItems[e.val[i]]; - if (val) { - vals.push(val.id); - } - } - controller.$setViewValue(vals); - } else { - val = optionItems[e.val]; - controller.$setViewValue(val ? val.id : null); - } - - controller.$render(); - - }); - }); - - element.on("select2-blur", function () { - if (controller.$touched) { - return; - } - - scope.$apply(controller.$setTouched); - }); - - controller.$render(); - }); - } - }; - }]); diff --git a/dist/angular-select2.min.js b/dist/angular-select2.min.js deleted file mode 100644 index d631538..0000000 --- a/dist/angular-select2.min.js +++ /dev/null @@ -1 +0,0 @@ -angular.module("rt.select2",[]).value("select2Config",{}).factory("select2Stack",function(){var a=[];return{$register:function(b){a.push(b)},$unregister:function(b){var c=a.indexOf(b);-1!==c&&a.splice(c,1)},closeAll:function(){a.forEach(function(a){a.close()})}}}).directive("select2",["$rootScope","$timeout","$parse","$filter","select2Config","select2Stack",function(a,b,c,d,e,f){"use strict";function g(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b.sort()}var h=d("filter"),i={},j=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return e&&angular.extend(i,e),{require:"ngModel",priority:1,restrict:"E",template:'',replace:!0,link:function(a,d,e,k){function l(b){if(q){var c=q(a);if(c)return h(b,c)}return b}function m(a){n(p?function(b){for(var c=[],d=0;d-1&&c.push(e)}a(c)}:function(){a(r[k.$viewValue]||{obj:{}})})}var n,o=angular.extend({},i,a.$eval(e.options)),p=angular.isDefined(e.multiple)||o.multiple;o.multiple=p,p&&(k.$isEmpty=function(a){return!a||0===a.length}),e.placeholder&&(o.placeholder=e.placeholder);var q=c(e.optionsFilter),r={};if(e.s2Options){var s;if(!(s=e.s2Options.match(j)))throw new Error("Invalid s2Options encountered!");var t=c(s[2]||s[1]),u=c(s[7]),v=s[4]||s[6],w=c(s[2]?s[1]:v),x=s[5];n=function(b){r={};for(var c=l(u(a)),d=(x?g(c):c)||[],e=[],f=0;f-1&&e.push({id:j,text:k,obj:c[i]})}b.callback({results:e})},a.$watch(s[7],function(){k.$render()})}else{if(!o.query)throw new Error("You need to supply a query function!");var y=o.query;o.query=function(a){var b=a.callback;a.callback=function(a){for(var c=0;c