UNPKG

3.08 kBJavaScriptView Raw
1// Generated by CoffeeScript 1.6.3
2(function() {
3 var RowStream, addSort, bean, createRowElement, normalizeColumns, stringToElement, templates;
4
5 templates = require('./templates');
6
7 RowStream = require('./row-stream');
8
9 bean = require('bean');
10
11 stringToElement = function(str) {
12 var clean, div, els;
13 clean = str.replace(/(^\s+)|(\s+$)/g, '');
14 div = document.createElement('div');
15 div.innerHTML = clean;
16 els = div.childNodes;
17 if (els.length === 1) {
18 return els[0];
19 } else {
20 return els;
21 }
22 };
23
24 createRowElement = function(str) {
25 var tr;
26 tr = document.createElement('tr');
27 tr.innerHTML = str;
28 return tr;
29 };
30
31 module.exports = function(columns, objStream) {
32 var $table, $tbody, html, rowStream;
33 normalizeColumns(columns);
34 html = templates.table.render({
35 columns: columns
36 });
37 $table = stringToElement(html);
38 $tbody = $table.querySelector('tbody');
39 rowStream = RowStream(columns);
40 objStream.pipe(rowStream);
41 rowStream.on('data', function(cells) {
42 var tr;
43 html = templates.row.render({
44 cells: cells
45 });
46 tr = createRowElement(html);
47 return $tbody.appendChild(tr);
48 });
49 addSort($table);
50 return {
51 el: $table
52 };
53 };
54
55 normalizeColumns = function(columns) {
56 var column, _i, _len, _results;
57 _results = [];
58 for (_i = 0, _len = columns.length; _i < _len; _i++) {
59 column = columns[_i];
60 _results.push(column.title != null ? column.title : column.title = column.property);
61 }
62 return _results;
63 };
64
65 addSort = function(table) {
66 var curSort, reverse, tbody;
67 tbody = table.querySelector('tbody');
68 curSort = null;
69 reverse = false;
70 return bean.on(table, 'click', 'th', function(event) {
71 var className, el, row, rows, _i, _j, _len, _len1, _ref, _results;
72 el = this;
73 className = el.getAttribute('class');
74 rows = [];
75 _ref = tbody.childNodes;
76 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
77 el = _ref[_i];
78 rows.push(el);
79 }
80 if (className === curSort) {
81 reverse = !reverse;
82 } else {
83 reverse = false;
84 }
85 rows.sort(function(a, b) {
86 var av, bv, r, _ref1;
87 _ref1 = [a, b].map(function(cell) {
88 var err, val;
89 val = cell.querySelector('.' + className).dataset.value;
90 try {
91 return JSON.parse(val);
92 } catch (_error) {
93 err = _error;
94 return val;
95 }
96 }), av = _ref1[0], bv = _ref1[1];
97 if (reverse) {
98 r = -1;
99 } else {
100 r = 1;
101 }
102 if (av > bv) {
103 return 1 * r;
104 }
105 if (bv > av) {
106 return -1 * r;
107 }
108 return 0;
109 });
110 curSort = className;
111 tbody.innerHTML = '';
112 _results = [];
113 for (_j = 0, _len1 = rows.length; _j < _len1; _j++) {
114 row = rows[_j];
115 _results.push(tbody.appendChild(row));
116 }
117 return _results;
118 });
119 };
120
121}).call(this);