define(["virtual-dom"], function (V) { return function(headings, sortIndex, renderRow) { var data var sortReverse = false var el = document.createElement("table") var elLast = V.h("table") function sortTable(i) { sortReverse = i === sortIndex ? !sortReverse : false sortIndex = i updateView() } function sortTableHandler(i) { return function () { sortTable(i) } } function updateView() { var children = [] if (data.length !== 0) { var th = headings.map(function (d, i) { var properties = { onclick: sortTableHandler(i), className: "sort-header" } if (sortIndex === i) properties.className += sortReverse ? " sort-up" : " sort-down" return V.h("th", properties, d.name) }) var links = data.slice(0).sort(headings[sortIndex].sort) if (headings[sortIndex].reverse ? !sortReverse : sortReverse) links = links.reverse() children.push(V.h("thead", V.h("tr", th))) children.push(V.h("tbody", links.map(renderRow))) } var elNew = V.h("table", children) el = V.patch(el, V.diff(elLast, elNew)) elLast = elNew } this.setData = function (d) { data = d updateView() } this.el = el return this } })