diff --git a/select2.js b/select2.js
index 4bbb121f..9d1ffba7 100755
--- a/select2.js
+++ b/select2.js
@@ -386,6 +386,20 @@
};
}
+ /**
+ * Checks if the formatter function should be used.
+ *
+ * Throws an error if it is not a function. Returns true if it should be used,
+ * false if no formatting should be performed.
+ *
+ * @param formatter
+ */
+ function checkFormatter(formatter, formatterName) {
+ if ($.isFunction(formatter)) return true;
+ if (!formatter) return fasle;
+ throw new Error("formatterName must be a function or a falsy value");
+ }
+
/**
* blurs any Select2 container that has focus when an element outside them was clicked or received focus
*
@@ -1042,13 +1056,13 @@
if (opts.maximumSelectionSize >=1) {
data = this.data();
- if ($.isArray(data) && data.length >= opts.maximumSelectionSize) {
+ if ($.isArray(data) && data.length >= opts.maximumSelectionSize && checkFormatter(opts.formatSelectionTooBig, "formatSelectionTooBig")) {
render("
" + opts.formatSelectionTooBig(opts.maximumSelectionSize) + "");
return;
}
}
- if (search.val().length < opts.minimumInputLength) {
+ if (search.val().length < opts.minimumInputLength && checkFormatter(opts.formatInputTooShort, "formatInputTooShort")) {
render("" + opts.formatInputTooShort(search.val(), opts.minimumInputLength) + "");
return;
}
@@ -1078,7 +1092,7 @@
}
}
- if (data.results.length === 0) {
+ if (data.results.length === 0 && checkFormatter(opts.formatNoMatches, "formatNoMatches")) {
render("" + opts.formatNoMatches(search.val()) + "");
return;
}
@@ -1086,7 +1100,7 @@
results.empty();
self.opts.populateResults.call(this, results, data.results, {term: search.val(), page: this.resultsPage, context:null});
- if (data.more === true) {
+ if (data.more === true && checkFormatter(opts.formatLoadMore, "formatLoadMore")) {
results.children().filter(":last").append("" + escapeMarkup(opts.formatLoadMore(this.resultsPage)) + "");
window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);
}