lib/html/source/javascripts/websocket.coffee in flammarion-0.2.1 vs lib/html/source/javascripts/websocket.coffee in flammarion-0.3.0

- old
+ new

@@ -1,113 +1,117 @@ -#= require vendor/jquery.js -#= require status.coffee -#= require fontawesome.js -#= require vendor/emojione.min.js - -emojione.imagePathPNG = 'images/emoji/' - -class WSClient - constructor: -> - host = $qs.get("host") || "localhost" - console.log "Path: #{$qs.get("path")}, Port: #{$qs.get("port")}, Host: #{host}" - @ws = new WebSocket "ws://#{host}:#{$qs.get("port")}/#{$qs.get("path")}" - @actions["__parent"] = this - document.title = decodeURIComponent($qs.get("title")) || "Flammarion" - @ws.onopen = (msg) -> - $('body').addClass("connected") - - @ws.onclose = (msg) -> - $('body').removeClass("connected") - - @ws.onmessage = (msg) => - # Just keeping this around for debug purposes - @lastMessage = msg - try - data = $.parseJSON(msg.data) - if @actions[data.action] - @actions[data.action](data) - else - console.log msg - console.error("No such action: #{data.action}") - catch error - console.log msg - console.error error - console.error error.stack - - @status = new StatusDisplay(this, $('#status > .right')) - - send: (data) -> - @ws.send JSON.stringify(data) - - check_target: (data) -> - return data.target_element if data.target_element - data.target = "default" unless data.target - @actions.addpane {name:data.target} if $("#console-#{data.target}").size() is 0 - @resize_panes - return $("#console-#{data.target}") - - resize_panes: (data) -> - if data.target - target = @check_target(data) - else - target = $('#panes') - - allPanes = target.find('> .pane') - if target.hasClass('horizontal') - orientation = 'horizontal' - else - orientation = 'vertical' - - total_weight = ((parseFloat($(i).attr('pane-weight') || 1.0)) for i in allPanes).reduce (t,s) -> t + s - # total_weight = (allPanes.map((i) -> parseFloat(i[].attr('pane-weight')))).reduce (t, s) -> t + s - - p_height = (pane) -> (parseFloat($(pane).attr('pane-weight') || 1.0) / total_weight * 100).toFixed(0) + "%" - console.log target, allPanes.size(), 100.0 / allPanes.size(), total_weight, orientation - for pane in allPanes - if orientation is 'horizontal' - $(pane).css "width", p_height(pane) - $(pane).css "height", '100%' - else - $(pane).css "height", p_height(pane) - $(pane).css "width", '100%' - - relink: (text) -> - text.replace(/\<a href=['"](https?:\/\/[^\s]+)["']>/gm, (str, l) -> - "<a href=\"#{l}\" target='_blank'>" - ) - - escape: (text, input_options) -> - options = - raw: false - colorize: true - escape_html: true - escape_icons: false - $.extend(options, input_options) - return text if options.raw - text = "#{text}" - text = ansi_up.escape_for_html(text) if options.escape_html - text = ansi_up.ansi_to_html(text, {use_classes:true}) if options.colorize - if options.escape_icons - text = text.replace /:[\w-]+:/g, (match) -> - if font_awesome_list.includes(match[1..-2]) then "<i class='fa fa-#{match[1..-2]}'></i>" else match - - text = emojione.toImage(text) if options.escape_icons - text = $("<div>#{text}</div>") - text.find("a[href^='http']").attr('target','_blank') - return text.html() - - add: (object, target, data) -> - object.find("a[href^='http']").attr('target','_blank') - if data.style - object.css(key, val) for own key, val of data.style - if data.replace - target.html(object) - else - target.append(object) - - actions: - __parent: null - -$(document).ready -> - window.$ws = new WSClient - -window.WSClient = WSClient +#= require vendor/jquery.js +#= require status.coffee +#= require fontawesome.js +#= require vendor/twemoji.min.js +#= require vendor/emojione.min.js + +# emojione.imagePathPNG = 'images/emoji/' + +class WSClient + constructor: -> + host = $qs.get("host") || "localhost" + console.log "Path: #{$qs.get("path")}, Port: #{$qs.get("port")}, Host: #{host}" + @ws = new WebSocket "ws://#{host}:#{$qs.get("port")}/#{$qs.get("path")}" + @actions["__parent"] = this + document.title = decodeURIComponent($qs.get("title")) || "Flammarion" + @ws.onopen = (msg) -> + $('body').addClass("connected") + + @ws.onclose = (msg) -> + $('body').removeClass("connected") + + @ws.onmessage = (msg) => + # Just keeping this around for debug purposes + @lastMessage = msg + try + data = $.parseJSON(msg.data) + if @actions[data.action] + @actions[data.action](data) + else + console.log msg + console.error("No such action: #{data.action}") + catch error + console.log msg + console.error error + console.error error.stack + + @status = new StatusDisplay(this, $('#status > .right')) + + send: (data) -> + @ws.send JSON.stringify(data) + + check_target: (data) -> + return data.target_element if data.target_element + data.target = "default" unless data.target + @actions.addpane {name:data.target} if $("#console-#{data.target}").size() is 0 + @resize_panes + return $("#console-#{data.target}") + + resize_panes: (data) -> + if data.target + target = @check_target(data) + else + target = $('#panes') + + allPanes = target.find('> .pane') + if target.hasClass('horizontal') + orientation = 'horizontal' + else + orientation = 'vertical' + + total_weight = ((parseFloat($(i).attr('pane-weight') || 1.0)) for i in allPanes).reduce (t,s) -> t + s + # total_weight = (allPanes.map((i) -> parseFloat(i[].attr('pane-weight')))).reduce (t, s) -> t + s + + p_height = (pane) -> (parseFloat($(pane).attr('pane-weight') || 1.0) / total_weight * 100).toFixed(0) + "%" + console.log target, allPanes.size(), 100.0 / allPanes.size(), total_weight, orientation + for pane in allPanes + if orientation is 'horizontal' + $(pane).css "width", p_height(pane) + $(pane).css "height", '100%' + else + $(pane).css "height", p_height(pane) + $(pane).css "width", '100%' + + relink: (text) -> + text.replace(/\<a href=['"](https?:\/\/[^\s]+)["']>/gm, (str, l) -> + "<a href=\"#{l}\" target='_blank'>" + ) + + parse_emoji: (text) -> + twemoji.parse(emojione.shortnameToUnicode(text), (i) -> "images/emoji/#{i}.png") + + escape: (text, input_options) -> + options = + raw: false + colorize: true + escape_html: true + escape_icons: false + $.extend(options, input_options) + return text if options.raw + text = "#{text}" + text = ansi_up.escape_for_html(text) if options.escape_html + text = ansi_up.ansi_to_html(text, {use_classes:true}) if options.colorize + if options.escape_icons + text = text.replace /:[\w-]+:/g, (match) -> + if font_awesome_list.includes(match[1..-2]) then "<i class='fa fa-#{match[1..-2]}'></i>" else match + + text = @parse_emoji text if options.escape_icons or options.escape_emoji + text = $("<div>#{text}</div>") + text.find("a[href^='http']").attr('target','_blank') + return text.html() + + add: (object, target, data) -> + object.find("a[href^='http']").attr('target','_blank') + if data.style + object.css(key, val) for own key, val of data.style + if data.replace + target.html(object) + else + target.append(object) + + actions: + __parent: null + +$(document).ready -> + window.$ws = new WSClient + +window.WSClient = WSClient