You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.2 KiB
89 lines
2.2 KiB
define(["dojo/_base/declare", "dojo/data/ItemFileReadStore"], function(declare, ItemFileReadStore){ |
|
|
|
return declare("dijit.tests._data.SlowStore", ItemFileReadStore, { |
|
// summary: |
|
// This wrapper decorates an ItemFileReadStore by delaying queries issued according to the |
|
// length of the query: |
|
// |
|
// - empty query: 2000ms, |
|
// - 1 or 2 characters: 1000ms, |
|
// - 3 characters: 500ms, |
|
// - 4 or more characters: 100ms. |
|
|
|
constructor: function(){ |
|
this.log = []; |
|
}, |
|
|
|
fetch: function(/* Object */ keywordArgs){ |
|
// Get the query phrase (store into first), and the # of chars it has |
|
var count = 0; |
|
var first; |
|
if("query" in keywordArgs){ |
|
var query = keywordArgs.query; |
|
for(var attr in query){ |
|
first = query[attr]; |
|
break; |
|
} |
|
count = first.toString().length; |
|
} |
|
|
|
var delay = 100; |
|
switch(count || 0){ |
|
case 0: |
|
delay = 2000; |
|
break; |
|
case 1: |
|
case 2: |
|
delay = 1000; |
|
break; |
|
case 3: |
|
delay = 500; |
|
break; |
|
case 4: |
|
delay = 100; |
|
break; |
|
} |
|
|
|
this.log.push({ |
|
type: "start", |
|
date: new Date(), |
|
query: query, |
|
count: count, |
|
delay: delay |
|
}); |
|
console.log("START query on " + (first || "{}") + " (" + count + " chars), delay = " + delay); |
|
|
|
var that = this, |
|
thatArgs = arguments; |
|
var handle = setTimeout(function(){ |
|
that.log.push({ |
|
type: "end", |
|
date: new Date(), |
|
query: query, |
|
count: count, |
|
delay: delay |
|
}); |
|
console.log("END query on " + (first || "{}") + " (" + count + " chars), delay = " + delay); |
|
ItemFileReadStore.prototype.fetch.apply(that, thatArgs); |
|
}, delay); |
|
|
|
// This abort() method cancels a request before it has even been sent to ItemFileReadStore. |
|
// (Since ItemFileReadStore has already loaded the data (as per code in the test file), |
|
// it operates synchronously; there is never a case to send the cancel request to that object) |
|
keywordArgs.abort = function(){ |
|
clearTimeout(handle); |
|
that.log.push({ |
|
type: "cancel", |
|
date: new Date(), |
|
query: query, |
|
count: count, |
|
delay: delay |
|
}); |
|
console.log("CANCEL query on " + (first || "{}") + " (" + count + " chars), delay = " + delay); |
|
}; |
|
|
|
return keywordArgs; |
|
} |
|
}); |
|
|
|
});
|
|
|