commit 2b1852c1a5bffd0c939662ccd2ca2233d7e03c84 Author: Arlo Breault arlolra@gmail.com Date: Tue May 7 14:36:23 2019 -0400
Make badge and debug extend ui
Permits further ui extension --- proxy/init.coffee | 18 ++++++++++++------ proxy/shims.coffee | 5 ++++- proxy/snowflake.coffee | 6 +++--- proxy/spec/snowflake.spec.coffee | 6 +----- proxy/spec/ui.spec.coffee | 37 +++++++++++-------------------------- proxy/ui.coffee | 29 ++++++++++++++++++----------- 6 files changed, 49 insertions(+), 52 deletions(-)
diff --git a/proxy/init.coffee b/proxy/init.coffee index a75f67c..031f7c5 100644 --- a/proxy/init.coffee +++ b/proxy/init.coffee @@ -44,17 +44,23 @@ snowflake = null # log to console. log = (msg) -> console.log 'Snowflake: ' + msg - snowflake?.ui?.log msg + snowflake?.ui.log msg
-dbg = (msg) -> log msg if DEBUG or snowflake.ui?.debug +dbg = (msg) -> log msg if DEBUG or (snowflake?.ui instanceof DebugUI)
### Entry point. ### -init = (isNode) -> - # Hook up to the debug UI if available. - ui = if isNode then null else new UI() +init = () -> + ui = null + if (document.getElementById('badge') != null) + ui = new BadgeUI() + else if (document.getElementById('status') != null) + ui = new DebugUI() + else + ui = new UI() + silenceNotifications = Params.getBool(query, 'silent', false) broker = new Broker BROKER snowflake = new Snowflake broker, ui @@ -80,4 +86,4 @@ window.onunload = -> pair.close() for pair in snowflake.proxyPairs null
-window.onload = init.bind null, false +window.onload = init diff --git a/proxy/shims.coffee b/proxy/shims.coffee index a0f53ea..1aeaf3d 100644 --- a/proxy/shims.coffee +++ b/proxy/shims.coffee @@ -4,6 +4,8 @@ WebRTC shims for multiple browsers.
if module?.exports window = {} + document = + getElementById: () -> null, location = ''
if not TESTING? or not TESTING @@ -16,10 +18,11 @@ if module?.exports WebSocket = require 'ws' { XMLHttpRequest } = require 'xmlhttprequest'
- process.nextTick () -> init true + process.nextTick () -> init
else window = this + document = window.document location = window.location.search.substr(1)
PeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || diff --git a/proxy/snowflake.coffee b/proxy/snowflake.coffee index cf71edc..1cf6582 100644 --- a/proxy/snowflake.coffee +++ b/proxy/snowflake.coffee @@ -55,11 +55,11 @@ class Snowflake countdown = (msg, sec, skip) => if not skip then dbg msg if sec > 0 - @ui?.setStatus msg + ' (Polling in ' + sec + ' seconds...)' + @ui.setStatus msg + ' (Polling in ' + sec + ' seconds...)' sec-- setTimeout((-> countdown(msg, sec, true)), 1000) else - @ui?.setStatus msg + @ui.setStatus msg findClients() # Poll broker for clients. findClients = => @@ -70,7 +70,7 @@ class Snowflake return msg = 'Polling for client ... ' msg += '[retries: ' + @retries + ']' if @retries > 0 - @ui?.setStatus msg + @ui.setStatus msg recv = @broker.getClientOffer pair.id recv.then (desc) => @receiveOffer pair, desc diff --git a/proxy/spec/snowflake.spec.coffee b/proxy/spec/snowflake.spec.coffee index 05dd843..8c11a22 100644 --- a/proxy/spec/snowflake.spec.coffee +++ b/proxy/spec/snowflake.spec.coffee @@ -17,11 +17,7 @@ class WebSocket @bufferedAmount = 0 send: (data) -> log = -> -class FakeUI - log: -> - setActive: -> - setStatus: -> -fakeUI = new FakeUI() +fakeUI = new UI() class FakeBroker getClientOffer: -> new Promise((F,R) -> {}) # Fake snowflake to interact with diff --git a/proxy/spec/ui.spec.coffee b/proxy/spec/ui.spec.coffee index 8229169..f1cf4b2 100644 --- a/proxy/spec/ui.spec.coffee +++ b/proxy/spec/ui.spec.coffee @@ -3,7 +3,7 @@ jasmine tests for Snowflake UI ###
document = - getElementById: (id) -> + getElementById: (id) -> {}
describe 'UI', ->
@@ -11,9 +11,8 @@ describe 'UI', -> spyOn(document, 'getElementById').and.callFake (id) -> return null if 'badge' == id return {} - u = new UI() - expect(u.debug).toBe true - expect(document.getElementById.calls.count()).toEqual 3 + u = new DebugUI() + expect(document.getElementById.calls.count()).toEqual 2 expect(u.$status).not.toBeNull() expect(u.$msglog).not.toBeNull()
@@ -21,49 +20,35 @@ describe 'UI', -> spyOn(document, 'getElementById').and.callFake (id) -> return {} if 'badge' == id return null - u = new UI() - expect(u.debug).toBe false + u = new BadgeUI() expect(document.getElementById).toHaveBeenCalled() expect(document.getElementById.calls.count()).toEqual 1 - expect(u.$status).toBeNull() - expect(u.$msglog).toBeNull() + expect(u.$badge).not.toBeNull()
- it 'sets status message only when in debug mode', -> - u = new UI() + it 'sets status message when in debug mode', -> + u = new DebugUI() u.$status = { innerHTML: '' } - u.debug = false - u.setStatus('test') - expect(u.$status.innerHTML).toEqual '' - u.debug = true u.setStatus('test') expect(u.$status.innerHTML).toEqual 'Status: test'
it 'sets message log css correctly for debug mode', -> - u = new UI() - u.debug = true - u.$msglog = {} + u = new DebugUI() u.setActive true expect(u.$msglog.className).toEqual 'active' u.setActive false expect(u.$msglog.className).toEqual ''
it 'sets badge css correctly for non-debug mode', -> - u = new UI() - u.debug = false + u = new BadgeUI() u.$badge = {} u.setActive true expect(u.$badge.className).toEqual 'active' u.setActive false expect(u.$badge.className).toEqual ''
- it 'logs to the textarea correctly, only when debug mode', -> - u = new UI() + it 'logs to the textarea correctly when debug mode', -> + u = new DebugUI() u.$msglog = { value: '', scrollTop: 0, scrollHeight: 1337 } - u.debug = false - u.log 'test' - expect(u.$msglog.value).toEqual '' - expect(u.$msglog.scrollTop).toEqual 0 - u.debug = true u.log 'test' expect(u.$msglog.value).toEqual 'test\n' expect(u.$msglog.scrollTop).toEqual 1337 diff --git a/proxy/ui.coffee b/proxy/ui.coffee index fb13aa4..d887dbd 100644 --- a/proxy/ui.coffee +++ b/proxy/ui.coffee @@ -3,17 +3,29 @@ All of Snowflake's DOM manipulation and inputs. ###
class UI - debug: false # True when there's no badge + setStatus: (msg) => + + setActive: (connected) => + + log: (msg) => +
+class BadgeUI extends UI + $badge: null + + constructor: -> + @$badge = document.getElementById('badge') + + setActive: (connected) => + @$badge.className = if connected then 'active' else '' + + +class DebugUI extends UI # DOM elements references. $msglog: null $status: null
constructor: -> - @$badge = document.getElementById('badge') - @debug = null == @$badge - return if !@debug - # Setup other DOM handlers if it's debug mode. @$status = document.getElementById('status') @$msglog = document.getElementById('msglog') @@ -21,17 +33,12 @@ class UI
# Status bar setStatus: (msg) => - return if !@debug @$status.innerHTML = 'Status: ' + msg
setActive: (connected) => - if @debug - @$msglog.className = if connected then 'active' else '' - else - @$badge.className = if connected then 'active' else '' + @$msglog.className = if connected then 'active' else ''
log: (msg) => - return if !@debug # Scroll to latest @$msglog.value += msg + '\n' @$msglog.scrollTop = @$msglog.scrollHeight