diff --git a/src/defaults.js b/src/defaults.js index 0033da0de..4ceac6680 100644 --- a/src/defaults.js +++ b/src/defaults.js @@ -2,6 +2,7 @@ Selectize.count = 0; Selectize.defaults = { plugins: [], delimiter: ',', + splitOn: null, // Regex or string for splitting up values from a paste command persist: true, diacritics: true, create: false, diff --git a/src/selectize.js b/src/selectize.js index 84f30cd5c..16c1264f4 100644 --- a/src/selectize.js +++ b/src/selectize.js @@ -145,6 +145,12 @@ $.extend(Selectize.prototype, { $control_input.attr('placeholder', settings.placeholder); } + // if splitOn was not passed in, construct it from the delimiter to allow pasting universally + if (!self.settings.splitOn && self.settings.delimiter) { + var delimiterEscaped = self.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + self.settings.splitOn = new RegExp('\\s*' + delimiterEscaped + '+\\s*'); + } + if ($input.attr('autocorrect')) { $control_input.attr('autocorrect', $input.attr('autocorrect')); } @@ -389,6 +395,16 @@ $.extend(Selectize.prototype, { var self = this; if (self.isFull() || self.isInputHidden || self.isLocked) { e.preventDefault(); + } else { + // If a regex or string is included, this will split the pasted input and create Items for each separate value + if (self.settings.splitOn) { + setTimeout(function() { + var splitInput = $.trim(self.$control_input.val() || '').split(self.settings.splitOn); + splitInput.forEach(function(input) { + self.createItem(input); + }); + }, 0); + } } }, @@ -1408,13 +1424,21 @@ $.extend(Selectize.prototype, { var self = this; var input = $.trim(self.$control_input.val() || ''); var caret = self.caretPos; - if (!self.canCreate(input)) return false; - self.lock(); if (typeof triggerDropdown === 'undefined') { triggerDropdown = true; + + // allow a string to be passed in, like the API docs say + } else if (typeof triggerDropdown === 'string') { + input = triggerDropdown; } + if (!input.length) return false; + + if (!self.canCreate(input)) return false; + + self.lock(); + var setup = (typeof self.settings.create === 'function') ? this.settings.create : function(input) { var data = {}; data[self.settings.labelField] = input;