@@ -2,25 +2,38 @@ module TableView
2
2
3
3
using WebIO
4
4
using JuliaDB
5
+ using DataValues
5
6
6
7
import JuliaDB: DNDSparse, DNextTable, NextTable
7
8
8
9
function JuliaDB. subtable (t:: DNextTable , r)
9
10
table (collect (rows (t)[r]), pkey= t. pkey)
10
11
end
11
12
13
+ showna (xs) = xs
14
+ function showna (xs:: DataValueArray )
15
+ map (xs) do x
16
+ isnull (x) ? " NA" : get (x)
17
+ end
18
+ end
19
+
20
+ function showna (xs:: Columns )
21
+ rows (map (showna, columns (xs)))
22
+ end
23
+
12
24
function showtable (t:: Union{DNextTable, NextTable} ; rows= 1 : 100 , colopts= Dict (), kwargs... )
13
25
w = Widget (dependencies= [" https://cdnjs.cloudflare.com/ajax/libs/handsontable/0.34.0/handsontable.full.js" ,
14
26
" https://cdnjs.cloudflare.com/ajax/libs/handsontable/0.34.0/handsontable.full.css" ])
15
27
data = Observable {Any} (w, " data" , [])
16
28
17
- subt = JuliaDB. subtable (t, rows)
29
+ trunc_rows = max (1 , first (rows)): min (length (t), last (rows))
30
+ subt = JuliaDB. subtable (t, trunc_rows)
18
31
19
32
headers = colnames (subt)
20
33
cols = [merge (Dict (:data => n), get (colopts, n, Dict ())) for n in headers]
21
34
22
35
options = Dict (
23
- :data => collect (JuliaDB. rows (subt)),
36
+ :data => showna ( collect (JuliaDB. rows (subt) )),
24
37
:colHeaders => headers,
25
38
:modifyColWidth => @js (w -> w > 300 ? 300 : w),
26
39
:modifyRowHeight => @js (h -> h > 60 ? 50 : h),
@@ -49,20 +62,23 @@ function showtable(t::Union{DNextTable, NextTable}; rows=1:100, colopts=Dict(),
49
62
ondependencies (w, handler)
50
63
w ()
51
64
end
65
+
52
66
function showtable (t:: Union{DNDSparse, NDSparse} ; rows= 1 : 100 , colopts= Dict (), kwargs... )
53
67
w = Widget (dependencies= [" https://cdnjs.cloudflare.com/ajax/libs/handsontable/0.34.0/handsontable.full.js" ,
54
68
" https://cdnjs.cloudflare.com/ajax/libs/handsontable/0.34.0/handsontable.full.css" ])
55
69
data = Observable {Any} (w, " data" , [])
56
70
57
- ks = keys (t)[rows]
58
- vs = values (t)[rows]
71
+ trunc_rows = max (1 , first (rows)): min (length (t), last (rows))
72
+
73
+ ks = keys (t)[trunc_rows]
74
+ vs = values (t)[trunc_rows]
59
75
60
76
if ! isa (keys (t), Columns)
61
77
ks = collect (ks)
62
78
vs = collect (vs)
63
79
end
64
80
65
- subt = NDSparse (ks, vs )
81
+ subt = NDSparse (showna (ks), showna (vs) )
66
82
67
83
headers = colnames (subt)
68
84
cols = [merge (Dict (:data => n), get (colopts, n, Dict ())) for n in headers]
0 commit comments