add geo option to Ox.api (send combined area with totals)
This commit is contained in:
parent
9a61fdbbab
commit
b9ebb11d48
1 changed files with 18 additions and 2 deletions
|
@ -8,6 +8,7 @@ Ox.api <f> Turns an array into a list API
|
||||||
items <[o]> An array of objects (key/value stores)
|
items <[o]> An array of objects (key/value stores)
|
||||||
options <o> Options object
|
options <o> Options object
|
||||||
enums <o> Enumerables, for example <code>{size: ['S', 'M', 'L', 'XL']}</code>
|
enums <o> Enumerables, for example <code>{size: ['S', 'M', 'L', 'XL']}</code>
|
||||||
|
geo <b|false> If true, return combined area with totals
|
||||||
sort <[o]|[s]> Default sort, for example <code> ['+name', '-age']
|
sort <[o]|[s]> Default sort, for example <code> ['+name', '-age']
|
||||||
sums <[s]> List of keys to be included in totals
|
sums <[s]> List of keys to be included in totals
|
||||||
unique <s|'id'> The name of the unique key
|
unique <s|'id'> The name of the unique key
|
||||||
|
@ -116,6 +117,7 @@ Ox.api = function(items, options) {
|
||||||
|
|
||||||
var api = {
|
var api = {
|
||||||
enums: options.enums ? parseEnums(options.enums) : {},
|
enums: options.enums ? parseEnums(options.enums) : {},
|
||||||
|
geo: options.geo,
|
||||||
sort: options.sort || [],
|
sort: options.sort || [],
|
||||||
sums: options.sums || [],
|
sums: options.sums || [],
|
||||||
unique: options.unique || 'id'
|
unique: options.unique || 'id'
|
||||||
|
@ -244,11 +246,11 @@ Ox.api = function(items, options) {
|
||||||
sort[key] = function(value) {
|
sort[key] = function(value) {
|
||||||
return api.enums[key].indexOf(value.toLowerCase());
|
return api.enums[key].indexOf(value.toLowerCase());
|
||||||
};
|
};
|
||||||
} else if (Ox.isArray(items[0][key])) {
|
} /*else if (Ox.isArray(items[0][key])) {
|
||||||
sort[key] = function(value) {
|
sort[key] = function(value) {
|
||||||
return value.join(', ');
|
return value.join(', ');
|
||||||
};
|
};
|
||||||
}
|
}*/
|
||||||
});
|
});
|
||||||
result.data.items = Ox.sortBy(result.data.items, options.sort, sort);
|
result.data.items = Ox.sortBy(result.data.items, options.sort, sort);
|
||||||
}
|
}
|
||||||
|
@ -268,6 +270,20 @@ Ox.api = function(items, options) {
|
||||||
}));
|
}));
|
||||||
})
|
})
|
||||||
data.items = result.data.items.length;
|
data.items = result.data.items.length;
|
||||||
|
if (api.geo) {
|
||||||
|
data.area = Ox.joinAreas(result.data.items.map(function(item) {
|
||||||
|
return {
|
||||||
|
sw: {lat: item.south, lng: item.west},
|
||||||
|
ne: {lat: item.north, lng: item.east}
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
data.area = {
|
||||||
|
south: data.area.sw.lat,
|
||||||
|
west: data.area.sw.lng,
|
||||||
|
north: data.area.ne.lat,
|
||||||
|
east: data.area.ne.lng
|
||||||
|
};
|
||||||
|
}
|
||||||
result.data = data;
|
result.data = data;
|
||||||
} else {
|
} else {
|
||||||
// return items
|
// return items
|
||||||
|
|
Loading…
Reference in a new issue