(function(){ function compare_rect_position(a,b){ if (a[0].x.a < b[0].x.a) { return -1 } if (a[0].x.a > b[0].x.a) { return 1 } if (a[0].y.a < b[0].y.a) { return -1 } if (a[0].y.a > b[0].y.a) { return 1 } return 0 } function compare_car_reversed (a,b){ if (a[0] < b[0]) { return 1 } if (a[0] > b[0]) { return -1 } return 0 } function compare_car (a,b){ if (a[0] < b[0]) { return -1 } if (a[0] > b[0]) { return 1 } return 0 } function room_id_tuple (r){ return [r.id, r] } function room_height_tuple (r){ return [r.height, r] } function room_area_tuple (r){ return [r.rect.area(), r] } function rect_area_tuple (r){ return [r.area(), r] } function rect_area_tuple_larger (r){ return [-r.area(), r] } function room_rect_tuple (r){ return [r.rect, r] } function identity_tuple (r){ return [r, r] } function car (r){ return r[0] } function cdr (r){ return r[1] } var sort = {} sort.rooms_by_id = function (list){ return list.map(room_id_tuple) .sort(compare_car) .map(cdr) } sort.rooms_by_height = function (list){ return list.map(room_height_tuple) .sort(compare_car_reversed) .map(cdr) } sort.rooms_by_position = function (list){ return list.map(room_rect_tuple) .sort(compare_rect_position) .map(cdr) } sort.rooms_by_area = function (list){ return list.map(room_area_tuple) .sort(compare_car) .map(cdr) } sort.rects_by_position = function (list){ return list.map(identity_tuple) .sort(compare_rect_position) .map(cdr) } sort.rects_by_area = function (list){ return list.map(rect_area_tuple) .sort(compare_car) .map(cdr) } sort.rects_by_larger_area = function (list){ return list.map(rect_area_tuple_larger) .sort(compare_car) .map(cdr) } sort.compare_rect_y = function (a,b){ return a.rect.y.a < b.rect.y.a ? -1 : a.rect.y.a == b.rect.y.a ? 0 : 1 } sort.compare_rect_x = function (a,b){ return a.rect.x.a > b.rect.x.a ? -1 : a.rect.x.a == b.rect.x.a ? 0 : 1 } sort.compare_x = function (a,b){ return a.x < b.x ? -1 : a.x == b.x ? 0 : 1 } sort.compare_z = function (a,b){ return a.z < b.z ? -1 : a.z == b.z ? 0 : 1 } sort.compare_xz = function(a,b){ if (a.x < b.x) { return -1 } if (a.x > b.x) { return 1 } if (a.z < b.z) { return -1 } if (a.z > b.z) { return 1 } return 0 } sort.compare_zx = function(a,b){ if (a.z < b.z) { return -1 } if (a.z > b.z) { return 1 } if (a.x < b.x) { return -1 } if (a.x > b.x) { return 1 } return 0 } if ("window" in this) { window.sort = sort } else { module.exports = sort } })()