20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/udb-gen/generators/isa_explorer/js_xlsx_writer.rb', line 20
def js_table(table, div_name)
columns = table.fetch("columns")
rows = table.fetch("rows")
fp = StringIO.new
fp.write "// Define data array\n"
fp.write "\n"
fp.write "var tabledata = [\n"
rows.each do |row|
items = []
columns.each_index do |i|
column = columns.fetch(i)
column_name = column.fetch(:name).gsub("\n", " ")
cell = row.fetch(i)
if cell.is_a?(String)
cell_fmt = '"' + row.fetch(i).gsub("\n", "\\n") + '"'
elsif cell.is_a?(TrueClass) || cell.is_a?(FalseClass) || cell.is_a?(Integer)
cell_fmt = "#{cell}"
elsif cell.is_a?(Array)
cell_fmt = '"' + cell.join("\\n") + '"'
else
raise ArgumentError, "Unknown cell class of #{cell.class} for '#{cell}'"
end
items.append('"' + column_name + '":' + cell_fmt)
end
fp.write " {" + items.join(", ") + "},\n"
end
fp.write "];\n"
fp.write "\n"
fp.write "// Initialize table\n"
fp.write "var table = new Tabulator(\"##{div_name}\", {\n"
fp.write " height: window.innerHeight-25, // Set height to window less 25 pixels for horz scrollbar\n"
fp.write " data: tabledata, // Assign data to table\n"
fp.write " columns:[\n"
columns.each do |column|
column_name = column.fetch(:name).gsub("\n", " ")
sorter = column.fetch(:sorter)
formatter = column.fetch(:formatter)
fp.write " {title: \"#{column_name}\", field: \"#{column_name}\", sorter: \"#{sorter}\", formatter: \"#{formatter}\""
if column[:headerFilter] == true
fp.write ", headerFilter: true"
end
if column[:headerVertical] == true
fp.write ", headerVertical: true"
end
if column[:frozen] == true
fp.write ", frozen: true"
end
if formatter == "link"
formatterParams = column.fetch(:formatterParams)
urlPrefix = formatterParams.fetch(:urlPrefix)
fp.write ", formatterParams:{\n"
fp.write " labelField:\"#{column_name}\",\n"
fp.write " urlPrefix:\"#{urlPrefix}\"\n"
fp.write " }\n"
end
fp.write " },\n"
end
fp.write " ]\n"
fp.write "});\n"
fp.write "\n"
fp.write "// Load data in chunks after table is built\n"
fp.write "table.on(\"tableBuilt\", function() {\n"
fp.write " loadDataInChunks(tabledata);\n"
fp.write "});\n"
fp.write "\n"
fp.rewind
T.must(fp.read)
end
|