1
0
mirror of synced 2024-11-21 20:46:07 +03:00

simplified support for local array data

This commit is contained in:
Igor Vaynberg 2012-03-28 14:32:18 -07:00
parent f4e0089b1f
commit d7f0c0a8b1

View File

@ -298,37 +298,63 @@
query.callback(data);
});
} else {
if (!("query" in opts) && opts.ajax) {
opts.query = (function () {
var timeout, // current scheduled but not yet executed request
requestSequence = 0, // sequence used to drop out-of-order responses
quietMillis = opts.ajax.quietMillis || 100;
if (!("query" in opts)) {
if ("ajax" in opts) {
opts.query = (function () {
var timeout, // current scheduled but not yet executed request
requestSequence = 0, // sequence used to drop out-of-order responses
quietMillis = opts.ajax.quietMillis || 100;
return function (query) {
window.clearTimeout(timeout);
timeout = window.setTimeout(function () {
requestSequence += 1; // increment the sequence
var requestNumber = requestSequence, // this request's sequence number
options = opts.ajax, // ajax parameters
data = options.data; // ajax data function
return function (query) {
window.clearTimeout(timeout);
timeout = window.setTimeout(function () {
requestSequence += 1; // increment the sequence
var requestNumber = requestSequence, // this request's sequence number
options = opts.ajax, // ajax parameters
data = options.data; // ajax data function
data = data.call(this, query.term, query.page);
data = data.call(this, query.term, query.page);
$.ajax({
url: options.url,
dataType: options.dataType,
data: data
}).success(
function (data) {
if (requestNumber < requestSequence) {
return;
$.ajax({
url: options.url,
dataType: options.dataType,
data: data
}).success(
function (data) {
if (requestNumber < requestSequence) {
return;
}
query.callback(options.results(data, query.page));
}
query.callback(options.results(data, query.page));
}
);
}, quietMillis);
};
}());
);
}, quietMillis);
};
}());
} else if ("data" in opts) {
opts.query = (function () {
var data = opts.data, // data elements
text = function (item) { return item.text; }; // function used to retrieve the text portion of a data item that is matched against the search
if (!$.isArray(data)) {
text = data.text;
// if text is not a function we assume it to be a key name
if (!$.isFunction(text)) text = function (item) { return item[data.text]; };
data = data.results;
}
return function (query) {
var t = query.term.toUpperCase(), filtered = {};
if (t === "") {
query.callback({results: data});
return;
}
filtered.result = $(data)
.filter(function () {return text(this).toUpperCase().indexOf(t) >= 0;})
.get();
query.callback(filtered);
};
}());
}
}
}
if (typeof(opts.query) !== "function") {