flammarion 0.0.2 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Readme.md +2 -0
- data/electron/main.coffee +9 -0
- data/electron/main.js +26 -0
- data/electron/package.json +5 -0
- data/electron/preload.coffee +1 -0
- data/electron/preload.js +5 -0
- data/lib/flammarion.rb +22 -37
- data/lib/flammarion/revelator.rb +48 -0
- data/lib/flammarion/server.rb +4 -0
- data/lib/flammarion/version.rb +1 -1
- data/lib/flammarion/writeable.rb +24 -3
- data/lib/html/build/index.html +1 -1
- data/lib/html/build/javascripts/actions.js +19 -0
- data/lib/html/build/javascripts/all.js +40 -0
- data/lib/html/build/javascripts/map.js +1 -0
- data/lib/html/build/javascripts/vendor/ansi_up.js +21 -0
- data/lib/html/build/javascripts/websocket.js +1 -0
- data/lib/html/build/stylesheets/all.css +13 -0
- data/lib/html/build/stylesheets/frontend.css +7 -0
- data/lib/html/build/stylesheets/markdown.css +6 -0
- data/lib/html/source/javascripts/actions.coffee +16 -5
- data/lib/html/source/stylesheets/colors.styl +2 -0
- data/lib/html/source/stylesheets/frontend.styl +5 -0
- data/lib/html/source/stylesheets/markdown.styl +5 -0
- metadata +25 -1
data/Readme.md
CHANGED
@@ -0,0 +1,9 @@
|
|
1
|
+
app = require 'app'
|
2
|
+
BrowserWindow = require('browser-window')
|
3
|
+
require('crash-reporter').start()
|
4
|
+
path = require('path')
|
5
|
+
|
6
|
+
app.on 'ready', ->
|
7
|
+
preload = path.resolve(path.join(__dirname, 'preload.js'))
|
8
|
+
main_window = new BrowserWindow({width:800, height: 600, "node-integration": false, "web-security":false, preload:preload})
|
9
|
+
main_window.loadUrl(process.argv[2])
|
data/electron/main.js
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
// Generated by CoffeeScript 1.9.0
|
2
|
+
(function() {
|
3
|
+
var BrowserWindow, app, path;
|
4
|
+
|
5
|
+
app = require('app');
|
6
|
+
|
7
|
+
BrowserWindow = require('browser-window');
|
8
|
+
|
9
|
+
require('crash-reporter').start();
|
10
|
+
|
11
|
+
path = require('path');
|
12
|
+
|
13
|
+
app.on('ready', function() {
|
14
|
+
var main_window, preload;
|
15
|
+
preload = path.resolve(path.join(__dirname, 'preload.js'));
|
16
|
+
main_window = new BrowserWindow({
|
17
|
+
width: 800,
|
18
|
+
height: 600,
|
19
|
+
"node-integration": false,
|
20
|
+
"web-security": false,
|
21
|
+
preload: preload
|
22
|
+
});
|
23
|
+
return main_window.loadUrl(process.argv[2]);
|
24
|
+
});
|
25
|
+
|
26
|
+
}).call(this);
|
@@ -0,0 +1 @@
|
|
1
|
+
window.$remote = require('remote')
|
data/electron/preload.js
ADDED
data/lib/flammarion.rb
CHANGED
@@ -1,21 +1,26 @@
|
|
1
|
-
require 'monitor'
|
2
1
|
require 'open3'
|
3
2
|
require 'ostruct'
|
4
3
|
require 'em-websocket'
|
5
4
|
require 'json'
|
6
|
-
require 'slim'
|
7
|
-
require 'coffee-script'
|
8
|
-
require 'sass'
|
9
5
|
require 'colorize'
|
10
6
|
require 'filewatcher'
|
11
7
|
require 'rbconfig'
|
12
8
|
|
9
|
+
# Optional requires
|
10
|
+
require 'sass'
|
11
|
+
require 'slim'
|
12
|
+
require 'coffee-script'
|
13
|
+
require 'redcarpet'
|
14
|
+
|
13
15
|
require_relative 'flammarion/writeable.rb'
|
14
16
|
require_relative 'flammarion/pane.rb'
|
15
17
|
require_relative 'flammarion/server.rb'
|
18
|
+
require_relative 'flammarion/version.rb'
|
19
|
+
require_relative 'flammarion/revelator.rb'
|
16
20
|
|
17
21
|
module Flammarion
|
18
22
|
class Engraving
|
23
|
+
include Revelator
|
19
24
|
attr_reader :chrome
|
20
25
|
attr_accessor :callbacks, :sockets, :on_disconnect, :on_connect, :actions
|
21
26
|
include Writeable
|
@@ -25,15 +30,18 @@ module Flammarion
|
|
25
30
|
@actions = {}
|
26
31
|
@front_end = self
|
27
32
|
@pane_name = "default"
|
33
|
+
@on_connect = options[:on_connect]
|
34
|
+
@ignore_old = options.fetch(:ignore_old, false)
|
35
|
+
@on_disconnect = options[:on_disconnect]
|
36
|
+
@exit_on_disconnect = options.fetch(:exit_on_disconnect, false)
|
37
|
+
|
28
38
|
start_server
|
29
39
|
@window_id = @@server.register_window(self)
|
30
40
|
open_a_window unless options[:no_chrome]
|
31
41
|
@callbacks = {}
|
32
|
-
@exit_on_disconnect = options.fetch(:exit_on_disconnect, false)
|
33
42
|
wait_for_a_connection unless options[:no_wait]
|
34
|
-
|
35
|
-
|
36
|
-
@on_connect = options[:on_connect]
|
43
|
+
|
44
|
+
at_exit {close} if options.fetch(:close_on_exit, false)
|
37
45
|
end
|
38
46
|
|
39
47
|
def disconnect(ws)
|
@@ -76,39 +84,12 @@ module Flammarion
|
|
76
84
|
@@server ||= Server.new
|
77
85
|
end
|
78
86
|
|
87
|
+
def server; @@server; end;
|
88
|
+
|
79
89
|
def wait_for_a_connection
|
80
90
|
sleep 0.5 while @sockets.empty?
|
81
91
|
end
|
82
92
|
|
83
|
-
CHROME_PATH = 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
|
84
|
-
def open_a_window_on_windows
|
85
|
-
file_path = File.absolute_path(File.dirname(__FILE__))
|
86
|
-
file_path = `cygpath -w '#{file_path}'`.strip if RbConfig::CONFIG["host_os"] == "cygwin"
|
87
|
-
resource = %[file\://#{file_path}/html/build/index.html]
|
88
|
-
chrome_path = CHROME_PATH
|
89
|
-
chrome_path = `cygpath -u '#{CHROME_PATH}'`.strip if RbConfig::CONFIG["host_os"] == "cygwin"
|
90
|
-
spawn(chrome_path, %[--app=#{resource}?path=#{@window_id}&port=#{@@server.port}])
|
91
|
-
end
|
92
|
-
|
93
|
-
def open_a_window
|
94
|
-
return open_a_window_on_windows if RbConfig::CONFIG["host_os"] =~ /cygwin|mswin|mingw/
|
95
|
-
developmentMode = system("lsof -i:#{4567}", out: '/dev/null')
|
96
|
-
host = "file://#{File.dirname(File.absolute_path(__FILE__))}/html/build/index.html"
|
97
|
-
host = "http://localhost:4567/" if developmentMode
|
98
|
-
|
99
|
-
# data_dir = Dir.mktmpdir("flammarion")
|
100
|
-
# File.open("#{data_dir}/First\ Run", "w") {}
|
101
|
-
|
102
|
-
@expect_title = "Flammarion-#{rand.to_s[2..-1]}"
|
103
|
-
|
104
|
-
%w[google-chrome google-chrome-stable chromium chromium-browser chrome C:\Program\ Files\ (x86)\Google\Chrome\Application\chrome.exe].each do |executable|
|
105
|
-
@chrome.in, @chrome.out, @chrome.err, @chrome.thread = Open3.popen3("#{executable} --app='#{host}?path=#{@window_id}&port=#{@@server.port}&title=#{@expect_title}'")
|
106
|
-
break if @chrome.in
|
107
|
-
end
|
108
|
-
|
109
|
-
raise StandardError.new("Cannot launch any browser") unless @chrome.in
|
110
|
-
end
|
111
|
-
|
112
93
|
def window_open?
|
113
94
|
not @sockets.empty?
|
114
95
|
end
|
@@ -144,6 +125,10 @@ module Flammarion
|
|
144
125
|
send_json({action:'layout', data:data})
|
145
126
|
end
|
146
127
|
|
128
|
+
def close
|
129
|
+
send_json({action:'close'})
|
130
|
+
end
|
131
|
+
|
147
132
|
def live_reload_layout(file)
|
148
133
|
layout(file); yield if block_given?
|
149
134
|
FileWatcher.new(file).watch {|file| layout(file); yield if block_given? }
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Flammarion
|
2
|
+
module Revelator
|
3
|
+
def which(cmd)
|
4
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
5
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
6
|
+
exts.each do |ext|
|
7
|
+
exe = File.join(path, "#{cmd}#{ext}")
|
8
|
+
return exe if File.executable?(exe) && !File.directory?(exe)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
return nil
|
12
|
+
end
|
13
|
+
|
14
|
+
CHROME_PATH = 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
|
15
|
+
def open_a_window_on_windows
|
16
|
+
file_path = File.absolute_path(File.join(File.dirname(__FILE__), ".."))
|
17
|
+
file_path = `cygpath -w '#{file_path}'`.strip if RbConfig::CONFIG["host_os"] == "cygwin"
|
18
|
+
resource = %[file\://#{file_path}/html/build/index.html]
|
19
|
+
chrome_path = CHROME_PATH
|
20
|
+
chrome_path = `cygpath -u '#{CHROME_PATH}'`.strip if RbConfig::CONFIG["host_os"] == "cygwin"
|
21
|
+
spawn(chrome_path, %[--app=#{resource}?path=#{@window_id}&port=#{server.port}])
|
22
|
+
end
|
23
|
+
|
24
|
+
def open_a_window
|
25
|
+
return open_a_window_on_windows if RbConfig::CONFIG["host_os"] =~ /cygwin|mswin|mingw/
|
26
|
+
developmentMode = system("lsof -i:#{4567}", out: '/dev/null')
|
27
|
+
host = "file://#{File.dirname(File.absolute_path(__FILE__))}/../html/build/index.html"
|
28
|
+
host = "http://localhost:4567/" if developmentMode
|
29
|
+
|
30
|
+
# data_dir = Dir.mktmpdir("flammarion")
|
31
|
+
# File.open("#{data_dir}/First\ Run", "w") {}
|
32
|
+
|
33
|
+
@expect_title = "Flammarion-#{rand.to_s[2..-1]}"
|
34
|
+
|
35
|
+
if which('electron') then
|
36
|
+
Process.detach(spawn("electron #{File.dirname(File.absolute_path(__FILE__))}/../../electron '#{host}?path=#{@window_id}&port=#{server.port}&title=#{@expect_title}'"))
|
37
|
+
return
|
38
|
+
end
|
39
|
+
|
40
|
+
%w[google-chrome google-chrome-stable chromium chromium-browser chrome C:\Program\ Files\ (x86)\Google\Chrome\Application\chrome.exe].each do |executable|
|
41
|
+
@chrome.in, @chrome.out, @chrome.err, @chrome.thread = Open3.popen3("#{executable} --app='#{host}?path=#{@window_id}&port=#{server.port}&title=#{@expect_title}'")
|
42
|
+
break if @chrome.in
|
43
|
+
end
|
44
|
+
|
45
|
+
raise StandardError.new("Cannot launch any browser") unless @chrome.in
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/flammarion/server.rb
CHANGED
data/lib/flammarion/version.rb
CHANGED
data/lib/flammarion/writeable.rb
CHANGED
@@ -87,6 +87,12 @@ module Flammarion
|
|
87
87
|
@front_end.callbacks[id] = block
|
88
88
|
end
|
89
89
|
|
90
|
+
def embedded_button(label, options = {}, &block)
|
91
|
+
id = @front_end.make_id
|
92
|
+
@front_end.callbacks[id] = block
|
93
|
+
%|<a class="floating-button" href="#" onClick="$ws.send({id:'#{id}', action:'callback', source:'embedded_button'})">#{label}</a>|
|
94
|
+
end
|
95
|
+
|
90
96
|
def input(label, options = {}, &block)
|
91
97
|
id = @front_end.make_id
|
92
98
|
send_json({action:'input', label:label, id:id}.merge(options))
|
@@ -120,9 +126,13 @@ module Flammarion
|
|
120
126
|
send_json({action:'replace', text:data, raw:true})
|
121
127
|
end
|
122
128
|
|
123
|
-
def script(coffee)
|
124
|
-
data = CoffeeScript.compile(coffee)
|
125
|
-
send_json({action:'script', data:data})
|
129
|
+
def script(coffee, options = {})
|
130
|
+
data = options.fetch(:coffee, true) ? CoffeeScript.compile(coffee) : coffee
|
131
|
+
send_json({action:'script', data:data}.merge(options))
|
132
|
+
end
|
133
|
+
|
134
|
+
def style(attribute, value)
|
135
|
+
send_json({action: 'style', attribute: attribute, value: value})
|
126
136
|
end
|
127
137
|
|
128
138
|
def template(file)
|
@@ -134,6 +144,17 @@ module Flammarion
|
|
134
144
|
FileWatcher.new(file).watch {|file| template(file) }
|
135
145
|
end
|
136
146
|
|
147
|
+
def markdown(text, options = {})
|
148
|
+
markdown_html = Redcarpet::Markdown.new(Redcarpet::Render::HTML, {
|
149
|
+
tables: true,
|
150
|
+
fenced_code_blocks: true,
|
151
|
+
autolink: true,
|
152
|
+
strikethrough: true,
|
153
|
+
superscript: true,
|
154
|
+
}.merge(options[:markdown_extensions] || {})).render(text)
|
155
|
+
send_json({action:'markdown', text: markdown_html}.merge(options))
|
156
|
+
end
|
157
|
+
|
137
158
|
def hide
|
138
159
|
send_json({action:'hidepane'})
|
139
160
|
end
|
data/lib/html/build/index.html
CHANGED
@@ -1 +1 @@
|
|
1
|
-
<!DOCTYPE html><html><head><meta content="text/html; charset=UTF-8" http-equiv="content-type" /><meta charset="utf-8" /><meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible" /><meta content="width=device-width, initial-scale=1.0" name="viewport" /><link href="stylesheets/all.css" rel="stylesheet" type="text/css" /><script src="javascripts/all.js" type="text/javascript"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="hidden" id="toolbar"><a class="tool-button" href="#">Open</a><a class="tool-button" href="#">Save</a></div><div id="panes"><pre class="pane" id="console-default" style="height:100%"></pre></div><div class="hidden" id="dialog"><pre id="message">Hi World</pre><a class="full-button" href="#">Ok</a></div><div id="status"><div class="left"></div><div class="center"></div><div class="right"></div></div></body></html>
|
1
|
+
<!DOCTYPE html><html><head><meta content="text/html; charset=UTF-8" http-equiv="content-type" /><meta charset="utf-8" /><meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible" /><meta content="width=device-width, initial-scale=1.0" name="viewport" /><title>Flammarion</title><link href="stylesheets/all.css" rel="stylesheet" type="text/css" /><script src="javascripts/all.js" type="text/javascript"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="hidden" id="toolbar"><a class="tool-button" href="#">Open</a><a class="tool-button" href="#">Save</a></div><div id="panes"><pre class="pane" id="console-default" style="height:100%"></pre></div><div class="hidden" id="dialog"><pre id="message">Hi World</pre><a class="full-button" href="#">Ok</a></div><div id="status"><div class="left"></div><div class="center"></div><div class="right"></div></div></body></html>
|
@@ -50,6 +50,7 @@ void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?voi
|
|
50
50
|
console.log("Path: " + ($qs.get("path")) + ", Port: " + ($qs.get("port")) + ", Host: " + host);
|
51
51
|
this.ws = new WebSocket("ws://" + host + ":" + ($qs.get("port")) + "/" + ($qs.get("path")));
|
52
52
|
this.actions["__parent"] = this;
|
53
|
+
document.title = $qs.get("title") || "Flammarion Unconnected";
|
53
54
|
this.ws.onopen = function(msg) {
|
54
55
|
return $('body').addClass("connected");
|
55
56
|
};
|
@@ -246,6 +247,13 @@ void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?voi
|
|
246
247
|
this.__parent.add(code, target, data);
|
247
248
|
return hljs.highlightBlock(code[0]);
|
248
249
|
},
|
250
|
+
markdown: function(data) {
|
251
|
+
var newblock, target;
|
252
|
+
target = this.__parent.check_target(data);
|
253
|
+
newblock = $("<div class='markdown'></div>");
|
254
|
+
newblock.html(data.text);
|
255
|
+
return this.__parent.add(newblock, target, data);
|
256
|
+
},
|
249
257
|
button: function(data) {
|
250
258
|
var class_name, element, target;
|
251
259
|
target = this.__parent.check_target(data);
|
@@ -376,6 +384,11 @@ void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?voi
|
|
376
384
|
script: function(data) {
|
377
385
|
return eval(data.data);
|
378
386
|
},
|
387
|
+
style: function(data) {
|
388
|
+
var target;
|
389
|
+
target = this.__parent.check_target(data);
|
390
|
+
return target.css(data.attribute, data.value);
|
391
|
+
},
|
379
392
|
table: function(data) {
|
380
393
|
var cell, header, html, i, j, k, len, len1, len2, ref, ref1, row, target;
|
381
394
|
target = this.__parent.check_target(data);
|
@@ -409,6 +422,12 @@ void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?voi
|
|
409
422
|
});
|
410
423
|
}
|
411
424
|
return this.__parent.add(html, target, data);
|
425
|
+
},
|
426
|
+
focus: function(data) {
|
427
|
+
return window.show();
|
428
|
+
},
|
429
|
+
close: function(data) {
|
430
|
+
return window.close();
|
412
431
|
}
|
413
432
|
});
|
414
433
|
|
@@ -8,6 +8,27 @@ void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?voi
|
|
8
8
|
// author : Dru Nelson
|
9
9
|
// license : MIT
|
10
10
|
// http://github.com/drudru/ansi_up
|
11
|
+
// (The MIT License)
|
12
|
+
//
|
13
|
+
// Copyright (c) 2011 Dru Nelson
|
14
|
+
//
|
15
|
+
// Permission is hereby granted, free of charge, to any person obtaining
|
16
|
+
// a copy of this software and associated documentation files (the
|
17
|
+
// 'Software'), to deal in the Software without restriction, including
|
18
|
+
// without limitation the rights to use, copy, modify, merge, publish,
|
19
|
+
// distribute, sublicense, and/or sell copies of the Software, and to
|
20
|
+
// permit persons to whom the Software is furnished to do so, subject to
|
21
|
+
// the following conditions:
|
22
|
+
//
|
23
|
+
// The above copyright notice and this permission notice shall be
|
24
|
+
// included in all copies or substantial portions of the Software.
|
25
|
+
//
|
26
|
+
// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
27
|
+
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
28
|
+
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
29
|
+
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
30
|
+
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
31
|
+
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WIT
|
11
32
|
|
12
33
|
(function (Date, undefined) {
|
13
34
|
|
@@ -6650,6 +6671,7 @@ if (typeof module !== 'undefined') {
|
|
6650
6671
|
console.log("Path: " + ($qs.get("path")) + ", Port: " + ($qs.get("port")) + ", Host: " + host);
|
6651
6672
|
this.ws = new WebSocket("ws://" + host + ":" + ($qs.get("port")) + "/" + ($qs.get("path")));
|
6652
6673
|
this.actions["__parent"] = this;
|
6674
|
+
document.title = $qs.get("title") || "Flammarion Unconnected";
|
6653
6675
|
this.ws.onopen = function(msg) {
|
6654
6676
|
return $('body').addClass("connected");
|
6655
6677
|
};
|
@@ -6846,6 +6868,13 @@ if (typeof module !== 'undefined') {
|
|
6846
6868
|
this.__parent.add(code, target, data);
|
6847
6869
|
return hljs.highlightBlock(code[0]);
|
6848
6870
|
},
|
6871
|
+
markdown: function(data) {
|
6872
|
+
var newblock, target;
|
6873
|
+
target = this.__parent.check_target(data);
|
6874
|
+
newblock = $("<div class='markdown'></div>");
|
6875
|
+
newblock.html(data.text);
|
6876
|
+
return this.__parent.add(newblock, target, data);
|
6877
|
+
},
|
6849
6878
|
button: function(data) {
|
6850
6879
|
var class_name, element, target;
|
6851
6880
|
target = this.__parent.check_target(data);
|
@@ -6976,6 +7005,11 @@ if (typeof module !== 'undefined') {
|
|
6976
7005
|
script: function(data) {
|
6977
7006
|
return eval(data.data);
|
6978
7007
|
},
|
7008
|
+
style: function(data) {
|
7009
|
+
var target;
|
7010
|
+
target = this.__parent.check_target(data);
|
7011
|
+
return target.css(data.attribute, data.value);
|
7012
|
+
},
|
6979
7013
|
table: function(data) {
|
6980
7014
|
var cell, header, html, i, j, k, len, len1, len2, ref, ref1, row, target;
|
6981
7015
|
target = this.__parent.check_target(data);
|
@@ -7009,6 +7043,12 @@ if (typeof module !== 'undefined') {
|
|
7009
7043
|
});
|
7010
7044
|
}
|
7011
7045
|
return this.__parent.add(html, target, data);
|
7046
|
+
},
|
7047
|
+
focus: function(data) {
|
7048
|
+
return window.show();
|
7049
|
+
},
|
7050
|
+
close: function(data) {
|
7051
|
+
return window.close();
|
7012
7052
|
}
|
7013
7053
|
});
|
7014
7054
|
|
@@ -50,6 +50,7 @@ void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?voi
|
|
50
50
|
console.log("Path: " + ($qs.get("path")) + ", Port: " + ($qs.get("port")) + ", Host: " + host);
|
51
51
|
this.ws = new WebSocket("ws://" + host + ":" + ($qs.get("port")) + "/" + ($qs.get("path")));
|
52
52
|
this.actions["__parent"] = this;
|
53
|
+
document.title = $qs.get("title") || "Flammarion Unconnected";
|
53
54
|
this.ws.onopen = function(msg) {
|
54
55
|
return $('body').addClass("connected");
|
55
56
|
};
|
@@ -3,6 +3,27 @@
|
|
3
3
|
// author : Dru Nelson
|
4
4
|
// license : MIT
|
5
5
|
// http://github.com/drudru/ansi_up
|
6
|
+
// (The MIT License)
|
7
|
+
//
|
8
|
+
// Copyright (c) 2011 Dru Nelson
|
9
|
+
//
|
10
|
+
// Permission is hereby granted, free of charge, to any person obtaining
|
11
|
+
// a copy of this software and associated documentation files (the
|
12
|
+
// 'Software'), to deal in the Software without restriction, including
|
13
|
+
// without limitation the rights to use, copy, modify, merge, publish,
|
14
|
+
// distribute, sublicense, and/or sell copies of the Software, and to
|
15
|
+
// permit persons to whom the Software is furnished to do so, subject to
|
16
|
+
// the following conditions:
|
17
|
+
//
|
18
|
+
// The above copyright notice and this permission notice shall be
|
19
|
+
// included in all copies or substantial portions of the Software.
|
20
|
+
//
|
21
|
+
// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
22
|
+
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
23
|
+
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
24
|
+
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
25
|
+
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
26
|
+
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WIT
|
6
27
|
|
7
28
|
(function (Date, undefined) {
|
8
29
|
|
@@ -50,6 +50,7 @@ void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?voi
|
|
50
50
|
console.log("Path: " + ($qs.get("path")) + ", Port: " + ($qs.get("port")) + ", Host: " + host);
|
51
51
|
this.ws = new WebSocket("ws://" + host + ":" + ($qs.get("port")) + "/" + ($qs.get("path")));
|
52
52
|
this.actions["__parent"] = this;
|
53
|
+
document.title = $qs.get("title") || "Flammarion Unconnected";
|
53
54
|
this.ws.onopen = function(msg) {
|
54
55
|
return $('body').addClass("connected");
|
55
56
|
};
|
@@ -381,6 +381,13 @@ html {
|
|
381
381
|
a {
|
382
382
|
text-decoration: none;
|
383
383
|
}
|
384
|
+
p a {
|
385
|
+
text-decoration: underline;
|
386
|
+
color: #92779b;
|
387
|
+
}
|
388
|
+
p a:hover {
|
389
|
+
color: #a477b3;
|
390
|
+
}
|
384
391
|
.hidden {
|
385
392
|
display: none;
|
386
393
|
}
|
@@ -953,6 +960,12 @@ a {
|
|
953
960
|
background: #fff;
|
954
961
|
border: 1px solid #666;
|
955
962
|
}
|
963
|
+
.markdown {
|
964
|
+
white-space: normal;
|
965
|
+
font-family: serif;
|
966
|
+
max-width: 45em;
|
967
|
+
margin: auto;
|
968
|
+
}
|
956
969
|
::-webkit-scrollbar {
|
957
970
|
width: 0.5em;
|
958
971
|
height: 0.5em;
|
@@ -54,13 +54,8 @@ $.extend WSClient.prototype.actions,
|
|
54
54
|
target.addClass("horizontal")
|
55
55
|
else
|
56
56
|
target.removeClass("horizontal")
|
57
|
-
|
58
57
|
@__parent.resize_panes(data)
|
59
58
|
|
60
|
-
# plot: (data) ->
|
61
|
-
# @__parent.check_target(data)
|
62
|
-
# drawPlot("#console-#{data.target}", data.data, $.extend({orientation:@__parent.orientation}, data))
|
63
|
-
|
64
59
|
highlight: (data) ->
|
65
60
|
target = @__parent.check_target(data)
|
66
61
|
code = $("<code>#{ansi_up.escape_for_html(data.text)}</code>")
|
@@ -68,6 +63,12 @@ $.extend WSClient.prototype.actions,
|
|
68
63
|
@__parent.add(code, target, data)
|
69
64
|
hljs.highlightBlock(code[0])
|
70
65
|
|
66
|
+
markdown: (data) ->
|
67
|
+
target = @__parent.check_target(data)
|
68
|
+
newblock = $("<div class='markdown'></div>")
|
69
|
+
newblock.html(data.text)
|
70
|
+
@__parent.add(newblock, target, data)
|
71
|
+
|
71
72
|
button: (data) ->
|
72
73
|
target = @__parent.check_target(data)
|
73
74
|
class_name = if data.inline then 'inline-button' else 'full-button'
|
@@ -172,6 +173,10 @@ $.extend WSClient.prototype.actions,
|
|
172
173
|
script: (data) ->
|
173
174
|
eval(data.data)
|
174
175
|
|
176
|
+
style: (data) ->
|
177
|
+
target = @__parent.check_target(data)
|
178
|
+
target.css(data.attribute, data.value)
|
179
|
+
|
175
180
|
table: (data) ->
|
176
181
|
target = @__parent.check_target(data)
|
177
182
|
html = "<table>"
|
@@ -190,3 +195,9 @@ $.extend WSClient.prototype.actions,
|
|
190
195
|
pos = $(this).index()
|
191
196
|
html.find("td:nth-child(#{(pos+1)})").toggleClass("hover")
|
192
197
|
@__parent.add(html, target, data)
|
198
|
+
|
199
|
+
focus: (data) ->
|
200
|
+
window.show()
|
201
|
+
|
202
|
+
close: (data) ->
|
203
|
+
window.close()
|
@@ -16,3 +16,5 @@ $active-highlight = activate($bg-color, 20%)
|
|
16
16
|
$normal-border = 1px solid darken($fg-color, 30%)
|
17
17
|
$scrollbar-track-color = desaturate($active-highlight, 80%)
|
18
18
|
$scrollbar-thumb-color = desaturate(activate($scrollbar-track-color, 30%), 20%)
|
19
|
+
$fg-highlight = mix($fg-color, $highlight, 50%)
|
20
|
+
$fg-active-highlight = mix($fg-color, $active-highlight, 50%)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flammarion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -107,6 +107,22 @@ dependencies:
|
|
107
107
|
- - ! '>='
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: redcarpet
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
110
126
|
- !ruby/object:Gem::Dependency
|
111
127
|
name: bundler
|
112
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -156,6 +172,7 @@ files:
|
|
156
172
|
- lib/html/source/stylesheets/frontend.styl
|
157
173
|
- lib/html/source/stylesheets/railscasts.css
|
158
174
|
- lib/html/source/stylesheets/colors.styl
|
175
|
+
- lib/html/source/stylesheets/markdown.styl
|
159
176
|
- lib/html/source/stylesheets/table.styl
|
160
177
|
- lib/html/source/stylesheets/map.styl
|
161
178
|
- lib/html/source/images/marker-shadow.png
|
@@ -186,6 +203,7 @@ files:
|
|
186
203
|
- lib/html/build/stylesheets/leaflet.css
|
187
204
|
- lib/html/build/stylesheets/colors.css
|
188
205
|
- lib/html/build/stylesheets/frontend.css
|
206
|
+
- lib/html/build/stylesheets/markdown.css
|
189
207
|
- lib/html/build/stylesheets/all.css
|
190
208
|
- lib/html/build/stylesheets/map.css
|
191
209
|
- lib/html/build/stylesheets/buttons.css
|
@@ -218,10 +236,16 @@ files:
|
|
218
236
|
- lib/flammarion/server.rb
|
219
237
|
- lib/flammarion/pane.rb
|
220
238
|
- lib/flammarion/version.rb
|
239
|
+
- lib/flammarion/revelator.rb
|
221
240
|
- lib/flammarion/writeable.rb
|
222
241
|
- lib/flammarion.rb
|
223
242
|
- LICENSE
|
224
243
|
- Readme.md
|
244
|
+
- electron/package.json
|
245
|
+
- electron/main.js
|
246
|
+
- electron/preload.coffee
|
247
|
+
- electron/preload.js
|
248
|
+
- electron/main.coffee
|
225
249
|
homepage: https://github.com/zach-capalbo/flammarion
|
226
250
|
licenses:
|
227
251
|
- MIT
|