-
Notifications
You must be signed in to change notification settings - Fork 4
/
table-view.coffee
85 lines (63 loc) · 1.9 KB
/
table-view.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
{$, $$$, ScrollView} = require 'atom-space-pen-views'
ht = require './handsontable.full.js'
PROTOCOL = "proto-repl-charts:"
module.exports =
class TableView extends ScrollView
name: null
table: null
atom.deserializers.add(this)
@deserialize: (state) ->
new TableView(state.name)
@content: ->
@div class: 'proto-repl-chart-table native-key-bindings', tabindex: -1
constructor: (name) ->
@name = decodeURIComponent(name)
super
@showLoading()
serialize: ->
deserializer : 'TableView'
display: (data)->
headers = data[0]
data = data.slice(1)
if @table
@table.loadData(data)
@table.updateSettings colHeaders: headers
else
@createTable(headers, data)
# Redraws the table
redraw: ->
@table?.render()
createTable: (headers, data)->
div = document.createElement("div")
@html $ div
@table = new Handsontable div,
data: data
minSpareRows: 1
rowHeaders: true
colHeaders: headers
# Allow a right click menu in the table
contextMenu: true
# Make the whole table read only
readOnly: true
# Don't support the fill handle.
fillHandle: false
# Stretch to fit the width
stretchH: 'all'
# Allow manual resizing of columns
manualColumnResize: true
manualRowResize: true
# Allow manual freezing of columns
manualColumnFreeze: true
# Allow manual moving of columns
manualColumnMove: true
manualRowMove: true
# Allow sorting columns
columnSorting: true
# Highlight the current row
currentRowClassName: 'currentRow'
currentColClassName: 'currentCol'
getTitle: ->
@name
showLoading: ->
@html $$$ ->
@div class: 'atom-html-spinner', 'Loading your visualization\u2026'