JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
move client js to client.coffee
authorJason Woofenden <jason@jasonwoof.com>
Wed, 30 Jan 2013 23:45:40 +0000 (18:45 -0500)
committerJason Woofenden <jason@jasonwoof.com>
Wed, 30 Jan 2013 23:45:40 +0000 (18:45 -0500)
client.coffee [new file with mode: 0644]
index.html
server.coffee

diff --git a/client.coffee b/client.coffee
new file mode 100644 (file)
index 0000000..1497d10
--- /dev/null
@@ -0,0 +1,132 @@
+$ ->
+       timeout = (ms, f) -> setTimeout(f, ms)
+       term = null
+       palette = [
+               # normal colours
+               '2e3436',
+               'cc0000',
+               '4e9a06',
+               'c4a000',
+               '3465a4',
+               '75507b',
+               '06989a',
+               'd3d7cf',
+
+               # brighter versions (for bold, and 16-color sequences)
+               '555753',
+               'ef2929',
+               '8ae234',
+               'fce94f',
+               '729fcf',
+               'ad7fa8',
+               '34e2e2',
+               'eeeeec',
+
+               # 256 colors
+               '000000', '00005f', '000087', '0000af', '0000d7', '0000ff', '005f00', '005f5f',
+               '005f87', '005faf', '005fd7', '005fff', '008700', '00875f', '008787', '0087af',
+               '0087d7', '0087ff', '00af00', '00af5f', '00af87', '00afaf', '00afd7', '00afff',
+               '00d700', '00d75f', '00d787', '00d7af', '00d7d7', '00d7ff', '00ff00', '00ff5f',
+               '00ff87', '00ffaf', '00ffd7', '00ffff', '5f0000', '5f005f', '5f0087', '5f00af',
+               '5f00d7', '5f00ff', '5f5f00', '5f5f5f', '5f5f87', '5f5faf', '5f5fd7', '5f5fff',
+               '5f8700', '5f875f', '5f8787', '5f87af', '5f87d7', '5f87ff', '5faf00', '5faf5f',
+               '5faf87', '5fafaf', '5fafd7', '5fafff', '5fd700', '5fd75f', '5fd787', '5fd7af',
+               '5fd7d7', '5fd7ff', '5fff00', '5fff5f', '5fff87', '5fffaf', '5fffd7', '5fffff',
+               '870000', '87005f', '870087', '8700af', '8700d7', '8700ff', '875f00', '875f5f',
+               '875f87', '875faf', '875fd7', '875fff', '878700', '87875f', '878787', '8787af',
+               '8787d7', '8787ff', '87af00', '87af5f', '87af87', '87afaf', '87afd7', '87afff',
+               '87d700', '87d75f', '87d787', '87d7af', '87d7d7', '87d7ff', '87ff00', '87ff5f',
+               '87ff87', '87ffaf', '87ffd7', '87ffff', 'af0000', 'af005f', 'af0087', 'af00af',
+               'af00d7', 'af00ff', 'af5f00', 'af5f5f', 'af5f87', 'af5faf', 'af5fd7', 'af5fff',
+               'af8700', 'af875f', 'af8787', 'af87af', 'af87d7', 'af87ff', 'afaf00', 'afaf5f',
+               'afaf87', 'afafaf', 'afafd7', 'afafff', 'afd700', 'afd75f', 'afd787', 'afd7af',
+               'afd7d7', 'afd7ff', 'afff00', 'afff5f', 'afff87', 'afffaf', 'afffd7', 'afffff',
+               'd70000', 'd7005f', 'd70087', 'd700af', 'd700d7', 'd700ff', 'd75f00', 'd75f5f',
+               'd75f87', 'd75faf', 'd75fd7', 'd75fff', 'd78700', 'd7875f', 'd78787', 'd787af',
+               'd787d7', 'd787ff', 'd7af00', 'd7af5f', 'd7af87', 'd7afaf', 'd7afd7', 'd7afff',
+               'd7d700', 'd7d75f', 'd7d787', 'd7d7af', 'd7d7d7', 'd7d7ff', 'd7ff00', 'd7ff5f',
+               'd7ff87', 'd7ffaf', 'd7ffd7', 'd7ffff', 'ff0000', 'ff005f', 'ff0087', 'ff00af',
+               'ff00d7', 'ff00ff', 'ff5f00', 'ff5f5f', 'ff5f87', 'ff5faf', 'ff5fd7', 'ff5fff',
+               'ff8700', 'ff875f', 'ff8787', 'ff87af', 'ff87d7', 'ff87ff', 'ffaf00', 'ffaf5f',
+               'ffaf87', 'ffafaf', 'ffafd7', 'ffafff', 'ffd700', 'ffd75f', 'ffd787', 'ffd7af',
+               'ffd7d7', 'ffd7ff', 'ffff00', 'ffff5f', 'ffff87', 'ffffaf', 'ffffd7', 'ffffff',
+               '080808', '121212', '1c1c1c', '262626', '303030', '3a3a3a', '444444', '4e4e4e',
+               '585858', '626262', '6c6c6c', '767676', '808080', '8a8a8a', '949494', '9e9e9e',
+               'a8a8a8', 'b2b2b2', 'bcbcbc', 'c6c6c6', 'd0d0d0', 'dadada', 'e4e4e4', 'eeeeee'
+       ]
+
+       $body = $('body')
+
+       socket = io.connect('http://localhost')
+
+       color_to_css = (i) ->
+               index = 0xff & i
+               # lighten the basic 8 colors when they're bold
+               if ((i & 0x10000) and index < 8)
+                       index += 8
+               return 'color: #' + palette[index] + '; '
+
+       bg_color_to_css = (i) ->
+               return 'background-' + color_to_css((i & 0x10000) | ((i & 0xff00) >> 8))
+
+       stylize = (txt, style) ->
+               if (txt.length == 0 or style == 0x000007)
+                       return txt
+               css = ''
+               css += 'font-weight: bold; ' if style & 0x10000
+               css += 'text-decoration: underline; ' if style & 0x20000
+               css += 'font-style: italic; ' if style & 0x40000 # blink
+               css += 'text-decoration: line-through; ' if style & 0x80000 # invisible
+               css += color_to_css(style) if style & 0x000ff
+               css += bg_color_to_css(style) if style & 0x0ff00
+               return $('<span style="'+css+'"></span>').text(txt)
+
+       redraw_wait = false
+       redraw_again = false
+       redraw_now = ->
+               $body.children().remove()
+               for i in [0...term.text.length]
+                       div = $('<div>')
+                       txt = ''
+                       a = 0x000007
+                       for j in [0...term.text[i].length]
+                               if (term.attributes[i][j] isnt a)
+                                       if (txt.length)
+                                               div.append(stylize(txt, a))
+                                               txt = ''
+                                       a = term.attributes[i][j]
+                               txt += term.text[i][j]
+                       if txt.length
+                               div.append(stylize(txt, a))
+                       $body.append(div)
+
+       # limit to 50fps
+       redraw = ->
+               if (redraw_wait)
+                       redraw_again = true
+               else
+                       redraw_now()
+                       redraw_wait = true
+                       redraw_again = false
+                       timeout 20, ->
+                               redraw_wait = false
+                               if (redraw_again)
+                                       redraw_again = false
+                                       redraw()
+
+       update = (data) ->
+               if (term)
+                       term.update(data)
+                       redraw()
+
+       socket.on 'data', (data) ->
+               update(data)
+
+       socket.on 'init', (v) ->
+               term = terminal.new(v.width, v.height)
+               term.x = v.x
+               term.y = v.y
+               term.a = v.a
+               term.text = v.text
+               term.attributes = v.attributes
+               redraw()
index 25fdb39..3ba1bb4 100644 (file)
@@ -4,359 +4,8 @@
        <title>Remote Terminal Viewer</title>
        <script src="/jquery.js"></script>
        <script src="/terminal.js"></script>
+       <script src="/client.js"></script>
        <script src="/socket.io/socket.io.js"></script>
-       <script>
-               $(function() {
-                       var term = null;
-                       // 8-14 are bolded versions
-                       var palette = [
-                               '2e3436',
-                               'cc0000',
-                               '4e9a06',
-                               'c4a000',
-                               '3465a4',
-                               '75507b',
-                               '06989a',
-                               'd3d7cf',
-                               '555753',
-                               'ef2929',
-                               '8ae234',
-                               'fce94f',
-                               '729fcf',
-                               'ad7fa8',
-                               '34e2e2',
-                               'eeeeec',
-
-                               // 256 colors
-                               '000000',
-                               '00005f',
-                               '000087',
-                               '0000af',
-                               '0000d7',
-                               '0000ff',
-                               '005f00',
-                               '005f5f',
-                               '005f87',
-                               '005faf',
-                               '005fd7',
-                               '005fff',
-                               '008700',
-                               '00875f',
-                               '008787',
-                               '0087af',
-                               '0087d7',
-                               '0087ff',
-                               '00af00',
-                               '00af5f',
-                               '00af87',
-                               '00afaf',
-                               '00afd7',
-                               '00afff',
-                               '00d700',
-                               '00d75f',
-                               '00d787',
-                               '00d7af',
-                               '00d7d7',
-                               '00d7ff',
-                               '00ff00',
-                               '00ff5f',
-                               '00ff87',
-                               '00ffaf',
-                               '00ffd7',
-                               '00ffff',
-                               '5f0000',
-                               '5f005f',
-                               '5f0087',
-                               '5f00af',
-                               '5f00d7',
-                               '5f00ff',
-                               '5f5f00',
-                               '5f5f5f',
-                               '5f5f87',
-                               '5f5faf',
-                               '5f5fd7',
-                               '5f5fff',
-                               '5f8700',
-                               '5f875f',
-                               '5f8787',
-                               '5f87af',
-                               '5f87d7',
-                               '5f87ff',
-                               '5faf00',
-                               '5faf5f',
-                               '5faf87',
-                               '5fafaf',
-                               '5fafd7',
-                               '5fafff',
-                               '5fd700',
-                               '5fd75f',
-                               '5fd787',
-                               '5fd7af',
-                               '5fd7d7',
-                               '5fd7ff',
-                               '5fff00',
-                               '5fff5f',
-                               '5fff87',
-                               '5fffaf',
-                               '5fffd7',
-                               '5fffff',
-                               '870000',
-                               '87005f',
-                               '870087',
-                               '8700af',
-                               '8700d7',
-                               '8700ff',
-                               '875f00',
-                               '875f5f',
-                               '875f87',
-                               '875faf',
-                               '875fd7',
-                               '875fff',
-                               '878700',
-                               '87875f',
-                               '878787',
-                               '8787af',
-                               '8787d7',
-                               '8787ff',
-                               '87af00',
-                               '87af5f',
-                               '87af87',
-                               '87afaf',
-                               '87afd7',
-                               '87afff',
-                               '87d700',
-                               '87d75f',
-                               '87d787',
-                               '87d7af',
-                               '87d7d7',
-                               '87d7ff',
-                               '87ff00',
-                               '87ff5f',
-                               '87ff87',
-                               '87ffaf',
-                               '87ffd7',
-                               '87ffff',
-                               'af0000',
-                               'af005f',
-                               'af0087',
-                               'af00af',
-                               'af00d7',
-                               'af00ff',
-                               'af5f00',
-                               'af5f5f',
-                               'af5f87',
-                               'af5faf',
-                               'af5fd7',
-                               'af5fff',
-                               'af8700',
-                               'af875f',
-                               'af8787',
-                               'af87af',
-                               'af87d7',
-                               'af87ff',
-                               'afaf00',
-                               'afaf5f',
-                               'afaf87',
-                               'afafaf',
-                               'afafd7',
-                               'afafff',
-                               'afd700',
-                               'afd75f',
-                               'afd787',
-                               'afd7af',
-                               'afd7d7',
-                               'afd7ff',
-                               'afff00',
-                               'afff5f',
-                               'afff87',
-                               'afffaf',
-                               'afffd7',
-                               'afffff',
-                               'd70000',
-                               'd7005f',
-                               'd70087',
-                               'd700af',
-                               'd700d7',
-                               'd700ff',
-                               'd75f00',
-                               'd75f5f',
-                               'd75f87',
-                               'd75faf',
-                               'd75fd7',
-                               'd75fff',
-                               'd78700',
-                               'd7875f',
-                               'd78787',
-                               'd787af',
-                               'd787d7',
-                               'd787ff',
-                               'd7af00',
-                               'd7af5f',
-                               'd7af87',
-                               'd7afaf',
-                               'd7afd7',
-                               'd7afff',
-                               'd7d700',
-                               'd7d75f',
-                               'd7d787',
-                               'd7d7af',
-                               'd7d7d7',
-                               'd7d7ff',
-                               'd7ff00',
-                               'd7ff5f',
-                               'd7ff87',
-                               'd7ffaf',
-                               'd7ffd7',
-                               'd7ffff',
-                               'ff0000',
-                               'ff005f',
-                               'ff0087',
-                               'ff00af',
-                               'ff00d7',
-                               'ff00ff',
-                               'ff5f00',
-                               'ff5f5f',
-                               'ff5f87',
-                               'ff5faf',
-                               'ff5fd7',
-                               'ff5fff',
-                               'ff8700',
-                               'ff875f',
-                               'ff8787',
-                               'ff87af',
-                               'ff87d7',
-                               'ff87ff',
-                               'ffaf00',
-                               'ffaf5f',
-                               'ffaf87',
-                               'ffafaf',
-                               'ffafd7',
-                               'ffafff',
-                               'ffd700',
-                               'ffd75f',
-                               'ffd787',
-                               'ffd7af',
-                               'ffd7d7',
-                               'ffd7ff',
-                               'ffff00',
-                               'ffff5f',
-                               'ffff87',
-                               'ffffaf',
-                               'ffffd7',
-                               'ffffff',
-                               '080808',
-                               '121212',
-                               '1c1c1c',
-                               '262626',
-                               '303030',
-                               '3a3a3a',
-                               '444444',
-                               '4e4e4e',
-                               '585858',
-                               '626262',
-                               '6c6c6c',
-                               '767676',
-                               '808080',
-                               '8a8a8a',
-                               '949494',
-                               '9e9e9e',
-                               'a8a8a8',
-                               'b2b2b2',
-                               'bcbcbc',
-                               'c6c6c6',
-                               'd0d0d0',
-                               'dadada',
-                               'e4e4e4',
-                               'eeeeee'
-                       ];
-                       var $body = $('body');
-                       var socket = io.connect('http://localhost');
-                       var color_to_css = function(i) {
-                               index = 0xff & i;
-                               // lighten the basic 8 colors when they're bold
-                               if ((i & 0x10000) && index < 8) {
-                                       index += 8;
-                               }
-                               return 'color: #' + palette[index] + '; ';
-                       };
-                       var bg_color_to_css = function(i) {
-                               return 'background-' + color_to_css((i&0x10000) | ((i&0xff00) >> 8));
-                       };
-                       var stylize = function (txt, style) {
-                               if (txt.length == 0 || style == 0x000007) {
-                                       return txt
-                               }
-                               css = ''
-                               if (style & 0x10000) css += 'font-weight: bold; ';
-                               if (style & 0x20000) css += 'text-decoration: underline; ';
-                               if (style & 0x40000) css += 'text-decoration: underline; '; // blink
-                               if (style & 0x80000) css += 'text-decoration: line-through; '; // invisible
-                               if (style & 0x000ff) css += color_to_css(style);
-                               if (style & 0x0ff00) css += bg_color_to_css(style);
-                               return $('<span style="'+css+'"></span>').text(txt);
-                       };
-                       var redraw_wait = false;
-                       var redraw_again = false;
-                       var redraw_now = function () {
-                               $body.children().remove();
-                               for (i in term.text) {
-                                       div = $('<div>');
-                                       txt = ''
-                                       a = 0x000007;
-                                       for (j in term.text[i]) {
-                                               if (term.attributes[i][j] != a) {
-                                                       if (txt.length) {
-                                                               div.append(stylize(txt, a));
-                                                               txt = ''
-                                                       }
-                                                       a = term.attributes[i][j]
-                                               }
-                                               txt += term.text[i][j]
-                                       }
-                                       if(txt.length) {
-                                               div.append(stylize(txt, a));
-                                       }
-                                       $body.append(div);
-                               }
-                       }
-                       // limit to 50fps
-                       var redraw = function () {
-                               if (redraw_wait) {
-                                       redraw_again = true;
-                               } else {
-                                       redraw_now()
-                                       redraw_wait = true;
-                                       redraw_again = false;
-                                       setTimeout(function () {
-                                               redraw_wait = false;
-                                               if(redraw_again) {
-                                                       redraw_again = false;
-                                                       redraw();
-                                               }
-                                       }, 20);
-                               }
-                       }
-                       var update = function (data) {
-                               if (term) {
-                                       term.update(data);
-                                       redraw();
-                               }
-                       };
-
-                       socket.on('data', function (data) {
-                               update(data);
-                       });
-                       socket.on('init', function (v) {
-                               term = terminal.new(v.width, v.height);
-                               term.x = v.x;
-                               term.y = v.y;
-                               term.a = v.a;
-                               term.text = v.text;
-                               term.attributes = v.attributes;
-                               redraw();
-                       });
-               });
-       </script>
        <style>
                body {
                        color: #d3d7cf;
index 32daeff..61d3647 100644 (file)
@@ -12,6 +12,9 @@ handler = (req, res) ->
                when '/terminal.js'
                        filename = __dirname + '/terminal.coffee'
                        type = 'text/javascript'
+               when '/client.js'
+                       filename = __dirname + '/client.coffee'
+                       type = 'text/javascript'
                else
                        return reply_err req, res
        fs.readFile filename, 'utf8', (err, data) ->