-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathsession_common.coffee
130 lines (93 loc) · 3.49 KB
/
session_common.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
latestFirmware = '1.2'
latestConnect = '1.3'
# params: object containing
# app: name of app
# model: device model to target
# reset: function called to reset all state
# updateDevsMenu: function called with a list to enable the device chooser
# initDevice: start with a device
session = window.session = (params) ->
session.params = params
if !window.WebSocket
session.overlay "#{session.opts.app} requires WebSockets and currently only works in Chrome and Safari"
return
server.connect()
hasConnected = no
server.connected.listen ->
hasConnected = yes
server.disconnected.listen ->
$("#error-overlay").children().hide()
$('#connectError').show()
$('#error-overlay').fadeIn(300)
track_feature("disconnected")
session.params.reset()
server.devicesChanged.listen (l) ->
session.availDevs = (d for d in server.devices when d.model == session.params.model)
session.params.updateDevsMenu(session.availDevs)
if not server.device
session.chooseDevice()
session.chooseDevice = ->
if session.availDevs.length == 1
session.initDevice(session.availDevs[0])
else if session.availDevs.length > 1
# Show the device chooser dialog
# TODO: update dialog if list changes
$("#error-overlay").children().hide()
$('#chooseDevices').show()
ul = $('#chooseDevices ul').empty()
for d in session.availDevs then do (d) ->
ul.append $("<li>").text(d.serial).click ->
session.initDevice(d)
$('#error-overlay').fadeIn(300)
else
session.overlay "No devices found"
session.parseFlags = (flags = {}) ->
if navigator.userAgent.indexOf("Windows") >= 0 then $(document.body).addClass('os-windows')
if navigator.userAgent.indexOf("Linux") >= 0 then $(document.body).addClass('os-linux')
if navigator.userAgent.indexOf("Mac") >= 0 then $(document.body).addClass('os-mac')
#URL params
window.flags = flags
for flag in document.location.hash.slice(1).split('&')
flags[flag]=true
if init_ga and not flags.noga
init_ga()
session.initDevice = (dev) ->
if server.device and dev.id == server.device.id
session.overlay()
return
session.overlay("Loading Device...")
d = server.selectDevice(dev)
session.checkUpdate(server.version, dev.fwVersion)
d.changed.listen ->
session.params.reset()
session.overlay()
session.params.deviceChanged(d)
d.removed.listen ->
session.params.deviceRemoved()
session.params.reset()
session.chooseDevice()
session.params.initDevice(d)
session.overlay = (message) ->
if not message
$("#error-overlay").hide()
else
$("#error-overlay").children().hide()
$("#error-status").show().text(message)
$("#error-overlay").fadeIn(300)
session.checkUpdate = (connectVersion, fwVersion) ->
connectUpdate = (latestConnect > connectVersion)
fwUpdate = (latestFirmware > fwVersion)
connectURL = 'http://www.nonolithlabs.com/connect/'
fwURL = 'http://www.nonolithlabs.com/cee/firmware'
if connectUpdate or fwUpdate
plural = (connectUpdate and fwUpdate)
msg = "<strong>Update#{if plural then 's' else ''} Available!</strong> "
msg += "<a href='#{connectURL}'>Nonolith Connect #{latestConnect}</a> " if connectUpdate
msg += "and " if plural
msg += "<a href='#{fwURL}'>CEE Firmware #{latestFirmware}</a> " if fwUpdate
msg += " — " + session.params.updateMessage if session.params.updateMessage
hide = $("<span class='close'>×</span>").click(->$(this).parent().hide())
$('#update-notify').html(msg).append(hide).show()
$('#update-notify').find('a').attr('target', 'pp-update')
else
$('#update-notify').hide()