47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
module.exports = function (list) {
|
|
var Item = require('./item')(list)
|
|
|
|
var getChildren = function (parent) {
|
|
var nodes = parent.childNodes,
|
|
items = []
|
|
for (var i = 0, il = nodes.length; i < il; i++) {
|
|
// Only textnodes have a data attribute
|
|
if (nodes[i].data === undefined) {
|
|
items.push(nodes[i])
|
|
}
|
|
}
|
|
return items
|
|
}
|
|
|
|
var parse = function (itemElements, valueNames) {
|
|
for (var i = 0, il = itemElements.length; i < il; i++) {
|
|
list.items.push(new Item(valueNames, itemElements[i]))
|
|
}
|
|
}
|
|
var parseAsync = function (itemElements, valueNames) {
|
|
var itemsToIndex = itemElements.splice(0, 50) // TODO: If < 100 items, what happens in IE etc?
|
|
parse(itemsToIndex, valueNames)
|
|
if (itemElements.length > 0) {
|
|
setTimeout(function () {
|
|
parseAsync(itemElements, valueNames)
|
|
}, 1)
|
|
} else {
|
|
list.update()
|
|
list.trigger('parseComplete')
|
|
}
|
|
}
|
|
|
|
list.handlers.parseComplete = list.handlers.parseComplete || []
|
|
|
|
return function () {
|
|
var itemsToIndex = getChildren(list.list),
|
|
valueNames = list.valueNames
|
|
|
|
if (list.indexAsync) {
|
|
parseAsync(itemsToIndex, valueNames)
|
|
} else {
|
|
parse(itemsToIndex, valueNames)
|
|
}
|
|
}
|
|
}
|