[snowflake/master] Move all DOM related stuff into ui.coffee

commit caba2cc8f8600ce43c12822549c0e80b16688f6c Author: Serene Han <keroserene+git@gmail.com> Date: Wed Feb 3 20:59:13 2016 -0800 Move all DOM related stuff into ui.coffee --- proxy/Cakefile | 9 ++------ proxy/proxypair.coffee | 8 +++---- proxy/snowflake.coffee | 61 +++++++++----------------------------------------- proxy/ui.coffee | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+), 62 deletions(-) diff --git a/proxy/Cakefile b/proxy/Cakefile index fa37ce1..fc92934 100644 --- a/proxy/Cakefile +++ b/proxy/Cakefile @@ -8,6 +8,7 @@ FILES = [ 'proxypair.coffee' 'websocket.coffee' 'broker.coffee' + 'ui.coffee' 'snowflake.coffee' ] FILES_TEST = [ @@ -33,12 +34,6 @@ task 'test', 'snowflake unit tests', -> throw err if err console.log stdout + stderr -# task 'build:embed', 'build the snowflake badge', -> - # exec 'mkdir -p build' - # concatCoffeeFiles() - # copyStaticFiles() - # compileCoffee() - task 'build', 'build the snowflake proxy', -> exec 'mkdir -p build' concatCoffeeFiles() @@ -54,4 +49,4 @@ task 'lint', 'ensure idiomatic coffeescript', -> task 'clean', 'remove all built files', -> exec 'rm -r build' - exec 'rm -r test' + exec 'rm -r test/snowflake.bundle.coffee' diff --git a/proxy/proxypair.coffee b/proxy/proxypair.coffee index ac65ac5..3c62d13 100644 --- a/proxy/proxypair.coffee +++ b/proxy/proxypair.coffee @@ -59,15 +59,15 @@ class ProxyPair channel.onopen = => log 'Data channel opened!' snowflake.state = MODE.WEBRTC_READY - $msglog.className = 'active' if $msglog + ui.setActive true # This is the point when the WebRTC datachannel is done, so the next step # is to establish websocket to the server. @connectRelay() channel.onclose = -> log 'Data channel closed.' - Status.set 'disconnected.' + ui.setStatus 'disconnected.' snowflake.state = MODE.INIT - $msglog.className = '' if $msglog + ui.setActive false # Change this for multiplexing. snowflake.reset() channel.onerror = -> log 'Data channel error!' @@ -80,7 +80,7 @@ class ProxyPair @relay.label = 'websocket-relay' @relay.onopen = => log '\nRelay ' + @relay.label + ' connected!' - Status.set 'connected' + ui.setStatus 'connected' @relay.onclose = @onClose @relay.onerror = @onError @relay.onmessage = @onRelayToClientMessage diff --git a/proxy/snowflake.coffee b/proxy/snowflake.coffee index b59c35a..60c2751 100644 --- a/proxy/snowflake.coffee +++ b/proxy/snowflake.coffee @@ -102,7 +102,7 @@ class Snowflake timer = null # Temporary countdown. countdown = (msg, sec) -> - Status.set msg + ' (Retrying in ' + sec + ' seconds...)' + ui.setStatus msg + ' (Retrying in ' + sec + ' seconds...)' sec-- if sec >= 0 setTimeout((-> countdown(msg, sec)), 1000) @@ -113,7 +113,7 @@ class Snowflake clearTimeout timer msg = 'polling for client... ' msg += '[retries: ' + @retries + ']' if @retries > 0 - Status.set msg + ui.setStatus msg recv = broker.getClientOffer() @retries++ recv.then (desc) => @@ -176,32 +176,8 @@ class Snowflake snowflake = null broker = null +ui = null -# -## -- DOM & Inputs -- # -# - -# DOM elements references. -$msglog = null -$send = null -$input = null -$status = null - -Interface = - # Local input from keyboard into message window. - acceptInput: -> - msg = $input.value - if !COPY_PASTE_ENABLED - log 'No input expected - Copy Paste Signalling disabled.' - else switch snowflake.state - when MODE.WEBRTC_CONNECTING - Signalling.receive msg - when MODE.WEBRTC_READY - log 'No input expected - WebRTC connected.' - else - log 'ERROR: ' + msg - $input.value = '' - $input.focus() # Signalling channel - just tells user to copy paste to the peer. # Eventually this should go over the broker. @@ -224,37 +200,20 @@ Signalling = return false snowflake.receiveOffer recv if desc -log = (msg) -> # Log to the message window. +# Log to both console and UI if applicable. +log = (msg) -> console.log msg - if $msglog # Scroll to latest - $msglog.value += msg + '\n' - $msglog.scrollTop = $msglog.scrollHeight - -# Status bar -Status = - set: (msg) -> - $status.innerHTML = 'Status: ' + msg if $status + ui.log msg init = -> - $badge = document.getElementById('badge') - if !badge - $status = document.getElementById('status') - $msglog = document.getElementById('msglog') - $msglog.value = '' - - $send = document.getElementById('send') - $send.onclick = Interface.acceptInput - - $input = document.getElementById('input') - $input.focus() - $input.onkeydown = (e) -> $send.onclick() if 13 == e.keyCode # enter - - log '== snowflake browser proxy ==' + ui = new UI() + log '== snowflake proxy ==' log 'Copy-Paste mode detected.' if COPY_PASTE_ENABLED brokerUrl = Params.getString(query, 'broker', DEFAULT_BROKER) broker = new Broker brokerUrl snowflake = new Snowflake(broker) - window.snowflake = snowflake + # window.snowflake = snowflake + # window.ui = ui relayAddr = Params.getAddress(query, 'relay', DEFAULT_RELAY) snowflake.setRelayAddr relayAddr diff --git a/proxy/ui.coffee b/proxy/ui.coffee new file mode 100644 index 0000000..eb54854 --- /dev/null +++ b/proxy/ui.coffee @@ -0,0 +1,61 @@ +### +All of Snowflake's DOM manipulation and inputs. +### + +class UI + debug = false # True when there's no badge + + # DOM elements references. + $msglog = null + $send = null + $input = null + $status = null + + constructor: -> + @$badge = document.getElementById('badge') + debug = !@$badge + return if !debug + + # Setup other DOM handlers if it's debug mode. + @$status = document.getElementById('status') + @$msglog = document.getElementById('msglog') + @$msglog.value = '' + + @$send = document.getElementById('send') + @$send.onclick = => { @acceptInput } + + @$input = document.getElementById('input') + @$input.focus() + @$input.onkeydown = (e) -> @$send.onclick() if 13 == e.keyCode # enter + + # Status bar + setStatus: (msg) => + return if !debug + @$status.innerHTML = 'Status: ' + msg + + setActive: (connected) => + if debug + @$msglog.className = if connected then 'active' else '' + else + # magic + + # Local input from keyboard into message window. + acceptInput: => + msg = @$input.value + if !COPY_PASTE_ENABLED + @log 'No input expected - Copy Paste Signalling disabled.' + else switch snowflake.state + when MODE.WEBRTC_CONNECTING + Signalling.receive msg + when MODE.WEBRTC_READY + @log 'No input expected - WebRTC connected.' + else + @log 'ERROR: ' + msg + @$input.value = '' + @$input.focus() + + log: (msg) => + return if !debug + # Scroll to latest + @$msglog.value += msg + '\n' + @$msglog.scrollTop = @$msglog.scrollHeight
participants (1)
-
serene@torproject.org