in src/Clients/Web/winjs/js/winjs.js [26826:26922]
function fetchItemsForAllSlots() {
if (!refreshInProgress) {
var slotFirstPlaceholder,
placeholderCount,
fetchInProgress = false,
fetchesInProgress = false,
slotRequestedByKey,
requestedKeyOffset,
slotRequestedByDescription,
requestedDescriptionOffset,
slotRequestedByIndex,
requestedIndexOffset;
for (var slot = slotsStart.next; slot !== slotsEnd;) {
var slotNext = slot.next;
if (slot !== slotListEnd && isPlaceholder(slot)) {
fetchesInProgress = true;
if (!slotFirstPlaceholder) {
slotFirstPlaceholder = slot;
placeholderCount = 1;
} else {
placeholderCount++;
}
if (slotFetchInProgress(slot)) {
fetchInProgress = true;
}
if (slot.keyRequested && !slotRequestedByKey) {
slotRequestedByKey = slot;
requestedKeyOffset = placeholderCount - 1;
}
if (slot.description !== undefined && !slotRequestedByDescription) {
slotRequestedByDescription = slot;
requestedDescriptionOffset = placeholderCount - 1;
}
if (slot.indexRequested && !slotRequestedByIndex) {
slotRequestedByIndex = slot;
requestedIndexOffset = placeholderCount - 1;
}
if (slot.lastInSequence || slotNext === slotsEnd || !isPlaceholder(slotNext)) {
if (fetchInProgress) {
fetchInProgress = false;
} else {
resultsProcessed = false;
// Start a new fetch for this placeholder sequence
// Prefer fetches in terms of a known item
if (!slotFirstPlaceholder.firstInSequence && slotFirstPlaceholder.prev.key && itemsFromKey) {
fetchItemsFromKey(slotFirstPlaceholder.prev, 0, placeholderCount);
} else if (!slot.lastInSequence && slotNext.key && itemsFromKey) {
fetchItemsFromKey(slotNext, placeholderCount, 0);
} else if (slotFirstPlaceholder.prev === slotsStart && !slotFirstPlaceholder.firstInSequence && (itemsFromStart || itemsFromIndex)) {
fetchItemsFromStart(slotFirstPlaceholder, placeholderCount);
} else if (slotNext === slotListEnd && !slot.lastInSequence && itemsFromEnd) {
fetchItemsFromEnd(slot, placeholderCount);
} else if (slotRequestedByKey) {
fetchItemsFromKey(slotRequestedByKey, requestedKeyOffset, placeholderCount - 1 - requestedKeyOffset);
} else if (slotRequestedByDescription) {
fetchItemsFromDescription(slotRequestedByDescription, requestedDescriptionOffset, placeholderCount - 1 - requestedDescriptionOffset);
} else if (slotRequestedByIndex) {
fetchItemsFromIndex(slotRequestedByIndex, requestedIndexOffset, placeholderCount - 1 - requestedIndexOffset);
} else if (typeof slotFirstPlaceholder.index === "number") {
fetchItemsFromIndex(slotFirstPlaceholder, placeholderCount - 1, 0);
} else {
// There is no way to fetch anything in this sequence
deleteMirageSequence(slotFirstPlaceholder);
}
if (resultsProcessed) {
// A re-entrant fetch might have altered the slots list - start again
postFetch();
return;
}
if (refreshInProgress) {
// A re-entrant fetch might also have caused a refresh
return;
}
}
slotFirstPlaceholder = slotRequestedByIndex = slotRequestedByKey = null;
}
}
slot = slotNext;
}
setStatus(fetchesInProgress ? DataSourceStatus.waiting : DataSourceStatus.ready);
}
}