flammarion 0.0.14 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Readme.md +6 -7
- data/lib/flammarion.rb +7 -1
- data/lib/flammarion/engraving.rb +6 -6
- data/lib/flammarion/pane.rb +4 -1
- data/lib/flammarion/revelator.rb +1 -0
- data/lib/flammarion/version.rb +1 -1
- data/lib/flammarion/writeable.rb +84 -16
- data/lib/html/build/index.html +1 -1
- data/lib/html/build/javascripts/all.js +47 -14
- data/lib/html/build/javascripts/input.js +22 -5
- data/lib/html/build/javascripts/plot.js +25 -9
- data/lib/html/build/stylesheets/all.css +40 -24
- data/lib/html/build/stylesheets/engraving.css +5 -24
- data/lib/html/build/stylesheets/plot.css +35 -0
- data/lib/html/source/index.html.slim +4 -0
- data/lib/html/source/javascripts/input.coffee +12 -1
- data/lib/html/source/javascripts/plot.coffee +34 -21
- data/lib/html/source/stylesheets/engraving.styl +7 -25
- data/lib/html/source/stylesheets/plot.styl +36 -0
- metadata +4 -2
data/Readme.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/flammarion.svg)](https://badge.fury.io/rb/flammarion)
|
4
4
|
|
5
5
|
* [Source](https://github.com/zach-capalbo/flammarion)
|
6
|
-
* [Documentation](http://zach-capalbo.github.io/flammarion/doc/)
|
6
|
+
* [Documentation](http://zach-capalbo.github.io/flammarion/doc/Flammarion)
|
7
7
|
|
8
8
|
## Overview
|
9
9
|
|
@@ -12,7 +12,7 @@ normally display to the command line in a slightly easier-to-access way.
|
|
12
12
|
|
13
13
|
It is not intended to be a full fledged application development toolkit. It is
|
14
14
|
intended instead for small scripts where you just want to show some information
|
15
|
-
without going through too much trouble.
|
15
|
+
or buttons without going through too much trouble.
|
16
16
|
|
17
17
|
## Installation
|
18
18
|
|
@@ -28,7 +28,7 @@ gem install flammarion
|
|
28
28
|
|
29
29
|
or add it to your Gemfile.
|
30
30
|
|
31
|
-
##
|
31
|
+
## Tutorial
|
32
32
|
|
33
33
|
The easiest way to use Flammarion, is similar to how you might use STDOUT:
|
34
34
|
|
@@ -76,9 +76,8 @@ f.button("Click Here!!!") {f.puts "You clicked the button!"}
|
|
76
76
|
f.input("Placeholder > ") {|msg| f.puts "You wrote: #{msg['text'].light_magenta}"}
|
77
77
|
```
|
78
78
|
|
79
|
-
The
|
80
|
-
is available at <http://zach-capalbo.github.io/flammarion/doc
|
81
|
-
the [Writeable Module](http://zach-capalbo.github.io/flammarion/doc/Flammarion/Writeable.html)
|
79
|
+
The [api documetaion](http://zach-capalbo.github.io/flammarion/doc/Flammarion)
|
80
|
+
is available at <http://zach-capalbo.github.io/flammarion/doc/Flammarion>.
|
82
81
|
|
83
82
|
## Screenshots / Samples
|
84
83
|
|
@@ -96,7 +95,7 @@ icons = %w[thumbs-up meh-o bicycle gears star-o star] + [nil] * 5
|
|
96
95
|
name = Faker::Name.name
|
97
96
|
f.pane("contacts").button(name, right_icon:icons.sample, left_icon:icons.sample) do
|
98
97
|
recipient = name
|
99
|
-
f.subpane("
|
98
|
+
f.subpane("number").replace(name)
|
100
99
|
end
|
101
100
|
end
|
102
101
|
```
|
data/lib/flammarion.rb
CHANGED
@@ -23,8 +23,14 @@ require_relative 'flammarion/revelator.rb'
|
|
23
23
|
require_relative 'flammarion/about.rb'
|
24
24
|
require_relative 'flammarion/engraving.rb'
|
25
25
|
|
26
|
-
# This is the main namespace for Flammarion.
|
26
|
+
# This is the main namespace for Flammarion. You really need an {Engraving} to
|
27
|
+
# do anything useful. If you just want to test that everything is setup
|
28
|
+
# correctly, you can use {Flammarion.about}. You can find samples and
|
29
|
+
# screenshots at https://github.com/zach-capalbo/flammarion and some examples
|
30
|
+
# at https://github.com/zach-capalbo/flammarion/tree/master/examples
|
27
31
|
# @see Engraving
|
28
32
|
# @see Writeable
|
33
|
+
# @see https://github.com/zach-capalbo/flammarion
|
34
|
+
# @see https://github.com/zach-capalbo/flammarion/tree/master/examples
|
29
35
|
module Flammarion
|
30
36
|
end
|
data/lib/flammarion/engraving.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
module Flammarion
|
2
2
|
|
3
3
|
# The engraving class represents a window. It contains everything you need to
|
4
|
-
# display on the screen and interacts with a user. An
|
4
|
+
# display on the screen and interacts with a user. An {Engraving} contains
|
5
5
|
# one or more panes, which are containers for writeable areas. Most of the
|
6
|
-
# power of the panes comes from the
|
7
|
-
# in
|
6
|
+
# power of the panes comes from the {Writeable} module, which is also included
|
7
|
+
# in {Engraving} (operating on the default pane) for convenience.
|
8
8
|
# @see Writeable
|
9
9
|
# @note Right now, there is no persistence of Engravings. Once it is closed,
|
10
10
|
# everything is erased, and you'll need to set it up all over again.
|
@@ -12,8 +12,8 @@ module Flammarion
|
|
12
12
|
# blank window, and then display that thing.
|
13
13
|
class Engraving
|
14
14
|
include Revelator
|
15
|
-
|
16
|
-
attr_accessor :callbacks, :sockets
|
15
|
+
attr_accessor :on_disconnect, :on_connect, :actions
|
16
|
+
attr_accessor :callbacks, :sockets # @api private
|
17
17
|
include Writeable
|
18
18
|
|
19
19
|
# Creates a new Engraving (i.e., a new display window)
|
@@ -56,7 +56,7 @@ module Flammarion
|
|
56
56
|
sleep 1 until @sockets.empty?
|
57
57
|
end
|
58
58
|
|
59
|
-
# Is
|
59
|
+
# Is this Engraving displayed on the screen.
|
60
60
|
def window_open?
|
61
61
|
not @sockets.empty?
|
62
62
|
end
|
data/lib/flammarion/pane.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
require_relative 'writeable.rb'
|
2
2
|
|
3
3
|
module Flammarion
|
4
|
+
# A reference to some writeable area within the {Engraving}
|
4
5
|
# @see Writeable
|
6
|
+
# @see Engraving
|
5
7
|
class Pane
|
6
|
-
attr_reader :pane_name
|
7
8
|
include Writeable
|
9
|
+
|
10
|
+
# @api private
|
8
11
|
def initialize(engraving, name, options = {})
|
9
12
|
@engraving = engraving
|
10
13
|
@pane_name = name
|
data/lib/flammarion/revelator.rb
CHANGED
@@ -7,6 +7,7 @@ module Flammarion
|
|
7
7
|
file_path = File.absolute_path(File.join(File.dirname(__FILE__), ".."))
|
8
8
|
file_path = `cygpath -w '#{file_path}'`.strip if RbConfig::CONFIG["host_os"] == "cygwin"
|
9
9
|
resource = %[file\://#{file_path}/html/build/index.html]
|
10
|
+
resource = "http://localhost:4567/" if ENV["FLAMMARION_DEVELOPMENT"] == "true"
|
10
11
|
chrome_path = CHROME_PATH
|
11
12
|
chrome_path = `cygpath -u '#{CHROME_PATH}'`.strip if RbConfig::CONFIG["host_os"] == "cygwin"
|
12
13
|
Process.detach(spawn(chrome_path, %[--app=#{resource}?path=#{@window_id}&port=#{server.port}&title="#{options[:title] || "Flammarion%20Engraving"}"]))
|
data/lib/flammarion/version.rb
CHANGED
data/lib/flammarion/writeable.rb
CHANGED
@@ -1,32 +1,47 @@
|
|
1
1
|
module Flammarion
|
2
2
|
module Writeable
|
3
|
+
# @api private
|
3
4
|
attr_reader :engraving
|
5
|
+
|
6
|
+
# A way to retrieve the current value of a user interacterive component.
|
7
|
+
# @see Writeable#input
|
8
|
+
# @see Writeable#checkbox
|
9
|
+
# @see Writeable#dropdown
|
4
10
|
class DeferredValue < Delegator
|
11
|
+
# @api private
|
5
12
|
def initialize
|
6
13
|
super @value
|
7
14
|
end
|
15
|
+
|
16
|
+
# @api private
|
8
17
|
def __setobj__(value)
|
9
18
|
@value = value
|
10
19
|
end
|
11
20
|
|
21
|
+
# @return [Object] the current value of the remote component
|
12
22
|
def value
|
13
23
|
@value
|
14
24
|
end
|
15
25
|
|
26
|
+
# @api private
|
16
27
|
def __getobj__
|
17
28
|
@value
|
18
29
|
end
|
19
30
|
|
31
|
+
# @return [String] a string representing the remote component's value
|
20
32
|
def inspect
|
21
33
|
"#R#{@value.inspect}"
|
22
34
|
end
|
23
35
|
|
36
|
+
# @return [Boolean] true if the component is checked and false if it is
|
37
|
+
# not. Undefined if the component is not a checkbox.
|
24
38
|
def checked?
|
25
39
|
return @value
|
26
40
|
end
|
27
41
|
end
|
28
42
|
|
29
|
-
|
43
|
+
# A representation of a plot in a writeable area. See {Writeable#plot}
|
44
|
+
class Plot
|
30
45
|
attr_reader :engraving
|
31
46
|
def initialize(id, target, engraving)
|
32
47
|
@id = id
|
@@ -105,20 +120,36 @@ module Flammarion
|
|
105
120
|
|
106
121
|
# Creates a new plot to display single axis data
|
107
122
|
# @param [Array<Number>] values A list of numbers to plot
|
108
|
-
# @
|
109
|
-
# @
|
123
|
+
# @macro add_options
|
124
|
+
# @option options [Integer] :number_of_ticks The number of tick marks to
|
125
|
+
# display across the bottom
|
126
|
+
# @option options [Integer] :tick_precision The number of digits after the
|
127
|
+
# decimal point to display next to the tick marks
|
128
|
+
# @option options [Float] :xstart (0.0) The starting value for the x-axis
|
129
|
+
# @option options [Float, String] :ystart ('min') The starting value for the
|
130
|
+
# y-axis. Can be 'min' to start at the minimum value.
|
131
|
+
# @option options [Boolean] :draw_zero (true) draw a line through y = 0
|
132
|
+
# @option options [Boolean] :draw_mark (false) place a + at each point on
|
133
|
+
# the line.
|
134
|
+
# @option options [Boolean] :draw_line (true) draw a line through all the
|
135
|
+
# points.
|
136
|
+
# @option options [Boolean] :fill (false) fill in the area between the curve
|
137
|
+
# and zero
|
138
|
+
# @note You can press 'a' while hovering the plot to reset the zoom.
|
139
|
+
# @return [Plot] A Plot object for manipulation after creation.
|
110
140
|
def plot(values, options = {})
|
111
141
|
id = @engraving.make_id
|
112
142
|
send_json({action:'plot', data:values, id:id}.merge(options))
|
113
|
-
return
|
143
|
+
return Plot.new(id, @pane_name, @engraving)
|
114
144
|
end
|
115
145
|
|
146
|
+
# Adds a pretty-printed, colorful display of data or code
|
116
147
|
# @overload highlight(data, options)
|
117
148
|
# Adds a pretty-printed, highlighted display of data
|
118
149
|
# @param text [Hash, Array] A dataset to be displayed
|
119
150
|
# @macro escape_options
|
120
151
|
# @overload highlight(text, options)
|
121
|
-
# Adds syntax-highlighted
|
152
|
+
# Adds syntax-highlighted code to the writeable area
|
122
153
|
# @param text [String] Code to be highlighed
|
123
154
|
# @macro escape_options
|
124
155
|
def highlight(text, options = {})
|
@@ -177,7 +208,7 @@ module Flammarion
|
|
177
208
|
# which can be used to get the value at any time.
|
178
209
|
# @param label [String] The displayed placeholder text for the input. This
|
179
210
|
# does not set the actual value of the input field or the returned
|
180
|
-
#
|
211
|
+
# {DeferredValue}. Use the +:value+ option for that.
|
181
212
|
# @option options [Boolean] :multiline (false) Creates a large text box if
|
182
213
|
# true; otherwise creates a single line input box.
|
183
214
|
# @option options [Boolean] :autoclear (false) Automatically clears the
|
@@ -186,7 +217,7 @@ module Flammarion
|
|
186
217
|
# @option options [Boolean] :history (false) Keeps track of entered values,
|
187
218
|
# letting the user choose betwen them with the up and down keys.
|
188
219
|
# @option options [String] :value Sets the starting value of the field and
|
189
|
-
# the returned
|
220
|
+
# the returned {DeferredValue}.
|
190
221
|
# @option options [Boolean] :once (false) If true, then the input box will
|
191
222
|
# be converted into a normal line of text once the user has changed it.
|
192
223
|
# The callback will still be called, but the user will no longer be able
|
@@ -216,7 +247,7 @@ module Flammarion
|
|
216
247
|
# @param items [Array<#to_s>] The possible choices
|
217
248
|
# @overload dropdown(items, options = {})
|
218
249
|
# @return [DeferredValue] An object representing the currently selected
|
219
|
-
# item, which can be
|
250
|
+
# item, which can be retrieved using {DeferredValue#value}
|
220
251
|
# @overload dropdown(item, options = {})
|
221
252
|
# @yield [message_hash] Invokes the block every time the user selects a
|
222
253
|
# different option. Current item text can be obtained from the +"text"+
|
@@ -228,7 +259,9 @@ module Flammarion
|
|
228
259
|
@engraving.callbacks[id] = block
|
229
260
|
else
|
230
261
|
d = DeferredValue.new
|
231
|
-
|
262
|
+
d.__setobj__(items[0]) if items.is_a? Array
|
263
|
+
d.__setobj__(items[items.keys.first]) if items.is_a? Hash
|
264
|
+
@engraving.callbacks[id] = Proc.new {|v| d.__setobj__ v["value"]}
|
232
265
|
return d
|
233
266
|
end
|
234
267
|
end
|
@@ -261,7 +294,7 @@ module Flammarion
|
|
261
294
|
send_json({action:'break'}.merge(options))
|
262
295
|
end
|
263
296
|
|
264
|
-
#
|
297
|
+
# Renders raw html into the writeable area
|
265
298
|
def html(data)
|
266
299
|
send_json({action:'replace', text:data, raw:true})
|
267
300
|
end
|
@@ -285,13 +318,21 @@ module Flammarion
|
|
285
318
|
send_json({action: 'style', attribute: attribute, value: value})
|
286
319
|
end
|
287
320
|
|
288
|
-
# Will render the given Slim template into the
|
289
|
-
#
|
321
|
+
# Will render the given Slim template into the Writeable area. This is
|
322
|
+
# useful for creating complex or custom application layouts components
|
323
|
+
# beyond what's built into Flammarion.
|
324
|
+
# @note If you just want to include html (or outut from another template
|
325
|
+
# engine, you can just use {#html})
|
326
|
+
# @param file [String] Path to the Slim file to render
|
327
|
+
# @see http://slim-lang.com/
|
290
328
|
def template(file)
|
291
329
|
data = Slim::Template.new(file).render
|
292
330
|
send_json({action:'replace', text:data, raw:true})
|
293
331
|
end
|
294
332
|
|
333
|
+
# Reloads a template every time the file changes. This is mostly just useful
|
334
|
+
# when developing a template file.
|
335
|
+
# @see #template
|
295
336
|
def live_reload_template(file)
|
296
337
|
FileWatcher.new(file).watch {|file| template(file) }
|
297
338
|
end
|
@@ -342,7 +383,7 @@ module Flammarion
|
|
342
383
|
# share the same scope, so you want to be careful with your naming.
|
343
384
|
# @return [Pane] The newly created or already existing pane.
|
344
385
|
# @macro pane_difference
|
345
|
-
# @see pane
|
386
|
+
# @see #pane
|
346
387
|
def subpane(name, options = {})
|
347
388
|
send_json({action:'subpane', name:name}.merge(options))
|
348
389
|
return Pane.new(@engraving, name)
|
@@ -354,18 +395,33 @@ module Flammarion
|
|
354
395
|
# share the same scope, so you want to be careful with your naming.
|
355
396
|
# @return [Pane] The newly created or already existing pane.
|
356
397
|
# @macro pane_difference
|
357
|
-
# @see pane
|
358
|
-
# @see orientation=
|
398
|
+
# @see #pane
|
399
|
+
# @see #orientation=
|
359
400
|
def pane(name, options = {})
|
360
401
|
send_json({action:'addpane', name:name}.merge(options))
|
361
402
|
return Pane.new(@engraving, name)
|
362
403
|
end
|
363
404
|
|
405
|
+
# Changes the orientation of the panes within this Writeable area. If
|
406
|
+
# +orientation+ is +:vertical+ (the default), the panes will be stacked on
|
407
|
+
# top of each other, each occupying 1/nth of the height (where n is the
|
408
|
+
# number of panes) and 100% of the width. If +orientation+ is +:horizontal+,
|
409
|
+
# the panes will be placed next to each other, with each pane occupying 1/n of
|
410
|
+
# the width (where n is the number of panes) and 100% of the heigh.
|
411
|
+
# @note This applies only to panes, not to subpanes.
|
412
|
+
# @see #pane
|
413
|
+
# @param orientation [Symbol] can be +:horizontal+ or +:vertical+
|
414
|
+
# @raise ArgumentError if the orientation is not one of the allowed values
|
364
415
|
def orientation=(orientation)
|
365
416
|
raise ArgumentError.new("Orientation must be :horizontal or :vertical") unless [:horizontal, :vertical].include?(orientation)
|
366
417
|
send_json({action:'reorient', orientation:orientation})
|
367
418
|
end
|
368
419
|
|
420
|
+
# Pops up a little floating writeable pane for buttons and stuff.
|
421
|
+
# @overload button_box()
|
422
|
+
# @return [Pane] The {Writeable} associated with the button box
|
423
|
+
# @overload button_box(name)
|
424
|
+
# @deprecated
|
369
425
|
def button_box(name = "buttonbox")
|
370
426
|
send_json({action:'buttonbox', name:name})
|
371
427
|
return Pane.new(@engraving, name)
|
@@ -383,14 +439,25 @@ module Flammarion
|
|
383
439
|
@engraving.send_json({action:'status', text: str}.merge(options))
|
384
440
|
end
|
385
441
|
|
442
|
+
# Displays a table of data
|
443
|
+
# @param rows [Array<Array<#to_s>>] an array of rows, where each row is an
|
444
|
+
# array of objects which will be converted to a string and diplayed in the
|
445
|
+
# table.
|
446
|
+
# @macro escape_options
|
447
|
+
# @option options [Array<#to_s>] :headers An array of column headers to put
|
448
|
+
# at the top of the table.
|
449
|
+
# @option options [Boolean] :interactive (true) Allows the user to mouse
|
450
|
+
# over the table and have it styled. Set to false if you experience
|
451
|
+
# performance issues with large datasets.
|
386
452
|
def table(rows, options = {})
|
387
453
|
send_json({action:'table', rows: rows}.merge(options))
|
388
454
|
end
|
389
455
|
|
390
456
|
# Prompts the user for a sting. Blocks until a string has been entered.
|
391
457
|
# @param prompt [String] A prompt to tell the user what to input.
|
392
|
-
# @param options
|
458
|
+
# @param options Same as {#input}
|
393
459
|
# @return [String] The text that the user has entered.
|
460
|
+
# @see #input
|
394
461
|
def gets(prompt = "", options = {})
|
395
462
|
str = nil
|
396
463
|
input(prompt, {once:true, focus:true}.merge(options)) {|msg| str = msg["text"]}
|
@@ -432,6 +499,7 @@ module Flammarion
|
|
432
499
|
send_json({action:'map'}.merge(options))
|
433
500
|
end
|
434
501
|
|
502
|
+
# Searches for and highlights the string in the engraving.
|
435
503
|
def search(string)
|
436
504
|
send_json({action:'search', text: string})
|
437
505
|
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" /><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"><div id="content"><pre id="message">Hi World</pre><a class="full-button" href="#" id="ok">Ok</a></div></div><div id="status"><div class="left"></div><div class="center"></div><div class="right"></div></div><div class="hidden" id="searchbar"><i class="fa fa-search"></i><input /></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"><div id="content"><pre id="message">Hi World</pre><a class="full-button" href="#" id="ok">Ok</a></div></div><div id="status"><div class="left"></div><div class="center"></div><div class="right"></div></div><div class="hidden" id="searchbar"><i class="fa fa-search"></i><input /></div><div class="hidden" id="plot-style"><div class="tickmarks"></div><div class="markers"></div><div class="zero"></div></div></body></html>
|
@@ -7177,20 +7177,37 @@ if (typeof module !== 'undefined') {
|
|
7177
7177
|
return target.append(element);
|
7178
7178
|
},
|
7179
7179
|
dropdown: function(data) {
|
7180
|
-
var element, item, j, len, ref, target;
|
7180
|
+
var element, item, j, k, len, option, ref, ref1, target, v;
|
7181
7181
|
target = this.__parent.check_target(data);
|
7182
7182
|
element = $("<select class='inline-dropdown' name='" + data.id + "'></select>");
|
7183
|
-
|
7184
|
-
|
7185
|
-
|
7186
|
-
|
7183
|
+
console.log(data.options);
|
7184
|
+
if (data.options instanceof Array) {
|
7185
|
+
ref = data.options;
|
7186
|
+
for (j = 0, len = ref.length; j < len; j++) {
|
7187
|
+
item = ref[j];
|
7188
|
+
element.append($("<option>" + item + "</option>"));
|
7189
|
+
}
|
7190
|
+
} else {
|
7191
|
+
ref1 = data.options;
|
7192
|
+
for (k in ref1) {
|
7193
|
+
v = ref1[k];
|
7194
|
+
option = $("<option>" + k + "</option>");
|
7195
|
+
option.val(JSON.stringify(v));
|
7196
|
+
element.append(option);
|
7197
|
+
}
|
7187
7198
|
}
|
7188
7199
|
element.change((function(_this) {
|
7189
7200
|
return function(e) {
|
7201
|
+
var val;
|
7202
|
+
val = element.find('option:selected').text();
|
7203
|
+
if (element.find('option:selected')[0].value) {
|
7204
|
+
val = $.parseJSON(element.find('option:selected')[0].value);
|
7205
|
+
}
|
7190
7206
|
return _this.__parent.send({
|
7191
7207
|
id: data.id,
|
7192
7208
|
action: 'callback',
|
7193
7209
|
source: 'dropdown',
|
7210
|
+
value: val,
|
7194
7211
|
text: element.find('option:selected').text()
|
7195
7212
|
});
|
7196
7213
|
};
|
@@ -7281,9 +7298,9 @@ if (typeof module !== 'undefined') {
|
|
7281
7298
|
}
|
7282
7299
|
});
|
7283
7300
|
|
7284
|
-
|
7285
|
-
Plot.prototype.default_options = {
|
7286
|
-
color: $(
|
7301
|
+
$(document).ready(function() {
|
7302
|
+
return Plot.prototype.default_options = {
|
7303
|
+
color: $('#plot-style').css("color"),
|
7287
7304
|
replace: true,
|
7288
7305
|
size: 1.0,
|
7289
7306
|
orientation: 'vertical',
|
@@ -7291,16 +7308,22 @@ if (typeof module !== 'undefined') {
|
|
7291
7308
|
yscale: 1.0,
|
7292
7309
|
tick_height: 15,
|
7293
7310
|
number_of_ticks: 10,
|
7294
|
-
tick_color: "
|
7311
|
+
tick_color: $("#plot-style > .tickmarks").css("color"),
|
7295
7312
|
tick_precision: 2,
|
7296
7313
|
id: "spec0",
|
7297
7314
|
draw_zero: true,
|
7298
7315
|
fill_color: null,
|
7299
7316
|
draw_line: true,
|
7300
7317
|
draw_marker: false,
|
7301
|
-
marker_color:
|
7318
|
+
marker_color: $("#plot-style > .markers").css("color"),
|
7319
|
+
ystart: 'min',
|
7320
|
+
fill: false,
|
7321
|
+
fill_color: $('#plot-style').css("background-color"),
|
7322
|
+
zero_color: $('#plot-style > .zero').css("color")
|
7302
7323
|
};
|
7324
|
+
});
|
7303
7325
|
|
7326
|
+
Plot = (function() {
|
7304
7327
|
Plot.prototype.parse_property = function(prop) {
|
7305
7328
|
return parseInt(prop.slice(0, -1));
|
7306
7329
|
};
|
@@ -7329,7 +7352,7 @@ if (typeof module !== 'undefined') {
|
|
7329
7352
|
mouse_x_value = relative_x_pos * this.xscaled_end_value + (1.0 - relative_x_pos) * this.xscaled_start_value;
|
7330
7353
|
mouse_x_value = mouse_x_value * this.xvalue_scale;
|
7331
7354
|
mouse_y_value = relative_y_pos * this.yscaled_end_value + (1.0 - relative_y_pos) * this.yscaled_start_value;
|
7332
|
-
this.mouse_element.text((mouse_x_value.toFixed(2)) + "
|
7355
|
+
this.mouse_element.text((mouse_x_value.toFixed(2)) + ", " + (mouse_y_value.toFixed(2)));
|
7333
7356
|
if (this.mouse_is_down) {
|
7334
7357
|
return this.move_zoom(event);
|
7335
7358
|
}
|
@@ -7367,7 +7390,6 @@ if (typeof module !== 'undefined') {
|
|
7367
7390
|
relative_yend_pos = 1.0 - (zoom_yend_pixel / this.plot_height);
|
7368
7391
|
zoom_ystart_value = relative_ystart_pos * this.yscaled_end_value + (1.0 - relative_ystart_pos) * this.yscaled_start_value;
|
7369
7392
|
zoom_yend_value = relative_yend_pos * this.yscaled_end_value + (1.0 - relative_yend_pos) * this.yscaled_start_value;
|
7370
|
-
console.log(zoom_ystart_value, zoom_yend_value);
|
7371
7393
|
return this.zoom_to(zoom_xstart_value, zoom_xend_value, zoom_ystart_value, zoom_yend_value);
|
7372
7394
|
};
|
7373
7395
|
|
@@ -7474,11 +7496,14 @@ if (typeof module !== 'undefined') {
|
|
7474
7496
|
this.ctx.moveTo(this.x_value_to_pixel(0), this.y_value_to_pixel(data[0]));
|
7475
7497
|
this.ctx.closePath();
|
7476
7498
|
this.ctx.fillStyle = this.options.fill_color;
|
7477
|
-
if (this.options.fill_color) {
|
7499
|
+
if (this.options.fill_color && this.options.fill) {
|
7478
7500
|
this.ctx.fill();
|
7479
7501
|
}
|
7480
7502
|
this.ctx.stroke();
|
7481
|
-
|
7503
|
+
this.draw_ticks();
|
7504
|
+
if (this.options.draw_zero) {
|
7505
|
+
return this.draw_zero();
|
7506
|
+
}
|
7482
7507
|
};
|
7483
7508
|
|
7484
7509
|
Plot.prototype.draw_ticks = function() {
|
@@ -7510,6 +7535,14 @@ if (typeof module !== 'undefined') {
|
|
7510
7535
|
return this.ctx.stroke();
|
7511
7536
|
};
|
7512
7537
|
|
7538
|
+
Plot.prototype.draw_zero = function() {
|
7539
|
+
this.ctx.strokeStyle = this.options.zero_color;
|
7540
|
+
this.ctx.beginPath();
|
7541
|
+
this.ctx.moveTo(0, this.y_value_to_pixel(0));
|
7542
|
+
this.ctx.lineTo(this.canvas_width, this.y_value_to_pixel(0));
|
7543
|
+
return this.ctx.stroke();
|
7544
|
+
};
|
7545
|
+
|
7513
7546
|
Plot.prototype.update = function(data) {
|
7514
7547
|
this.data = data.data;
|
7515
7548
|
$.extend(this.options, data);
|
@@ -357,20 +357,37 @@ void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?voi
|
|
357
357
|
return target.append(element);
|
358
358
|
},
|
359
359
|
dropdown: function(data) {
|
360
|
-
var element, item, j, len, ref, target;
|
360
|
+
var element, item, j, k, len, option, ref, ref1, target, v;
|
361
361
|
target = this.__parent.check_target(data);
|
362
362
|
element = $("<select class='inline-dropdown' name='" + data.id + "'></select>");
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
363
|
+
console.log(data.options);
|
364
|
+
if (data.options instanceof Array) {
|
365
|
+
ref = data.options;
|
366
|
+
for (j = 0, len = ref.length; j < len; j++) {
|
367
|
+
item = ref[j];
|
368
|
+
element.append($("<option>" + item + "</option>"));
|
369
|
+
}
|
370
|
+
} else {
|
371
|
+
ref1 = data.options;
|
372
|
+
for (k in ref1) {
|
373
|
+
v = ref1[k];
|
374
|
+
option = $("<option>" + k + "</option>");
|
375
|
+
option.val(JSON.stringify(v));
|
376
|
+
element.append(option);
|
377
|
+
}
|
367
378
|
}
|
368
379
|
element.change((function(_this) {
|
369
380
|
return function(e) {
|
381
|
+
var val;
|
382
|
+
val = element.find('option:selected').text();
|
383
|
+
if (element.find('option:selected')[0].value) {
|
384
|
+
val = $.parseJSON(element.find('option:selected')[0].value);
|
385
|
+
}
|
370
386
|
return _this.__parent.send({
|
371
387
|
id: data.id,
|
372
388
|
action: 'callback',
|
373
389
|
source: 'dropdown',
|
390
|
+
value: val,
|
374
391
|
text: element.find('option:selected').text()
|
375
392
|
});
|
376
393
|
};
|
@@ -23,9 +23,9 @@
|
|
23
23
|
}
|
24
24
|
});
|
25
25
|
|
26
|
-
|
27
|
-
Plot.prototype.default_options = {
|
28
|
-
color: $(
|
26
|
+
$(document).ready(function() {
|
27
|
+
return Plot.prototype.default_options = {
|
28
|
+
color: $('#plot-style').css("color"),
|
29
29
|
replace: true,
|
30
30
|
size: 1.0,
|
31
31
|
orientation: 'vertical',
|
@@ -33,16 +33,22 @@
|
|
33
33
|
yscale: 1.0,
|
34
34
|
tick_height: 15,
|
35
35
|
number_of_ticks: 10,
|
36
|
-
tick_color: "
|
36
|
+
tick_color: $("#plot-style > .tickmarks").css("color"),
|
37
37
|
tick_precision: 2,
|
38
38
|
id: "spec0",
|
39
39
|
draw_zero: true,
|
40
40
|
fill_color: null,
|
41
41
|
draw_line: true,
|
42
42
|
draw_marker: false,
|
43
|
-
marker_color:
|
43
|
+
marker_color: $("#plot-style > .markers").css("color"),
|
44
|
+
ystart: 'min',
|
45
|
+
fill: false,
|
46
|
+
fill_color: $('#plot-style').css("background-color"),
|
47
|
+
zero_color: $('#plot-style > .zero').css("color")
|
44
48
|
};
|
49
|
+
});
|
45
50
|
|
51
|
+
Plot = (function() {
|
46
52
|
Plot.prototype.parse_property = function(prop) {
|
47
53
|
return parseInt(prop.slice(0, -1));
|
48
54
|
};
|
@@ -71,7 +77,7 @@
|
|
71
77
|
mouse_x_value = relative_x_pos * this.xscaled_end_value + (1.0 - relative_x_pos) * this.xscaled_start_value;
|
72
78
|
mouse_x_value = mouse_x_value * this.xvalue_scale;
|
73
79
|
mouse_y_value = relative_y_pos * this.yscaled_end_value + (1.0 - relative_y_pos) * this.yscaled_start_value;
|
74
|
-
this.mouse_element.text((mouse_x_value.toFixed(2)) + "
|
80
|
+
this.mouse_element.text((mouse_x_value.toFixed(2)) + ", " + (mouse_y_value.toFixed(2)));
|
75
81
|
if (this.mouse_is_down) {
|
76
82
|
return this.move_zoom(event);
|
77
83
|
}
|
@@ -109,7 +115,6 @@
|
|
109
115
|
relative_yend_pos = 1.0 - (zoom_yend_pixel / this.plot_height);
|
110
116
|
zoom_ystart_value = relative_ystart_pos * this.yscaled_end_value + (1.0 - relative_ystart_pos) * this.yscaled_start_value;
|
111
117
|
zoom_yend_value = relative_yend_pos * this.yscaled_end_value + (1.0 - relative_yend_pos) * this.yscaled_start_value;
|
112
|
-
console.log(zoom_ystart_value, zoom_yend_value);
|
113
118
|
return this.zoom_to(zoom_xstart_value, zoom_xend_value, zoom_ystart_value, zoom_yend_value);
|
114
119
|
};
|
115
120
|
|
@@ -216,11 +221,14 @@
|
|
216
221
|
this.ctx.moveTo(this.x_value_to_pixel(0), this.y_value_to_pixel(data[0]));
|
217
222
|
this.ctx.closePath();
|
218
223
|
this.ctx.fillStyle = this.options.fill_color;
|
219
|
-
if (this.options.fill_color) {
|
224
|
+
if (this.options.fill_color && this.options.fill) {
|
220
225
|
this.ctx.fill();
|
221
226
|
}
|
222
227
|
this.ctx.stroke();
|
223
|
-
|
228
|
+
this.draw_ticks();
|
229
|
+
if (this.options.draw_zero) {
|
230
|
+
return this.draw_zero();
|
231
|
+
}
|
224
232
|
};
|
225
233
|
|
226
234
|
Plot.prototype.draw_ticks = function() {
|
@@ -252,6 +260,14 @@
|
|
252
260
|
return this.ctx.stroke();
|
253
261
|
};
|
254
262
|
|
263
|
+
Plot.prototype.draw_zero = function() {
|
264
|
+
this.ctx.strokeStyle = this.options.zero_color;
|
265
|
+
this.ctx.beginPath();
|
266
|
+
this.ctx.moveTo(0, this.y_value_to_pixel(0));
|
267
|
+
this.ctx.lineTo(this.canvas_width, this.y_value_to_pixel(0));
|
268
|
+
return this.ctx.stroke();
|
269
|
+
};
|
270
|
+
|
255
271
|
Plot.prototype.update = function(data) {
|
256
272
|
this.data = data.data;
|
257
273
|
$.extend(this.options, data);
|
@@ -665,6 +665,11 @@ html {
|
|
665
665
|
height: 100%;
|
666
666
|
width: 100%;
|
667
667
|
overflow: hidden;
|
668
|
+
padding: 2px;
|
669
|
+
padding-bottom: 0px;
|
670
|
+
height: calc(100% - 2px);
|
671
|
+
width: calc(100% - 4px);
|
672
|
+
box-shadow: inset 0px 0px 2px 2px #bebebe;
|
668
673
|
}
|
669
674
|
a {
|
670
675
|
text-decoration: none;
|
@@ -708,34 +713,10 @@ p a:hover {
|
|
708
713
|
width: 100%;
|
709
714
|
box-sizing: border-box;
|
710
715
|
}
|
711
|
-
html {
|
712
|
-
padding-top: 2px;
|
713
|
-
box-shadow: inset 0px 0px 2px 2px #bebebe;
|
714
|
-
}
|
715
716
|
.horizontal > .pane {
|
716
717
|
height: 100%;
|
717
718
|
float: left;
|
718
719
|
}
|
719
|
-
.plot {
|
720
|
-
width: 100%;
|
721
|
-
height: 100%;
|
722
|
-
border: 1px solid #333;
|
723
|
-
margin: -1px;
|
724
|
-
overflow: none;
|
725
|
-
}
|
726
|
-
#plot-mouseover {
|
727
|
-
position: absolute;
|
728
|
-
background-color: rgba(0,0,0,0.5);
|
729
|
-
color: #333;
|
730
|
-
pointer-events: none;
|
731
|
-
font-family: Monospace;
|
732
|
-
}
|
733
|
-
#plot-zoom-element {
|
734
|
-
position: absolute;
|
735
|
-
background-color: rgba(0,3,10,0.75);
|
736
|
-
pointer-events: none;
|
737
|
-
border: 1px solid #012;
|
738
|
-
}
|
739
720
|
hr {
|
740
721
|
width: 95%;
|
741
722
|
background-color: #333;
|
@@ -3318,6 +3299,41 @@ hr {
|
|
3318
3299
|
max-width: 45em;
|
3319
3300
|
margin: auto;
|
3320
3301
|
}
|
3302
|
+
.plot {
|
3303
|
+
width: 100%;
|
3304
|
+
height: 100%;
|
3305
|
+
border: 1px solid #333;
|
3306
|
+
margin: -1px;
|
3307
|
+
overflow: none;
|
3308
|
+
}
|
3309
|
+
#plot-mouseover {
|
3310
|
+
position: absolute;
|
3311
|
+
background-color: rgba(190,190,190,0.5);
|
3312
|
+
color: #333;
|
3313
|
+
pointer-events: none;
|
3314
|
+
font-family: Monospace;
|
3315
|
+
padding: 0.25em;
|
3316
|
+
box-shadow: 2px 2px 4px 2px #bebebe;
|
3317
|
+
}
|
3318
|
+
#plot-zoom-element {
|
3319
|
+
position: absolute;
|
3320
|
+
background-color: rgba(0,3,10,0.75);
|
3321
|
+
pointer-events: none;
|
3322
|
+
border: 1px solid #012;
|
3323
|
+
}
|
3324
|
+
#plot-style {
|
3325
|
+
color: #333;
|
3326
|
+
background-color: #d6d6d6;
|
3327
|
+
}
|
3328
|
+
#plot-style .tickmarks {
|
3329
|
+
color: #707070;
|
3330
|
+
}
|
3331
|
+
#plot-style .markers {
|
3332
|
+
color: #707070;
|
3333
|
+
}
|
3334
|
+
#plot-style .zero {
|
3335
|
+
color: rgba(190,190,190,0.75);
|
3336
|
+
}
|
3321
3337
|
::-webkit-scrollbar {
|
3322
3338
|
width: 0.666em;
|
3323
3339
|
height: 0.666em;
|
@@ -19,6 +19,11 @@ html {
|
|
19
19
|
height: 100%;
|
20
20
|
width: 100%;
|
21
21
|
overflow: hidden;
|
22
|
+
padding: 2px;
|
23
|
+
padding-bottom: 0px;
|
24
|
+
height: calc(100% - 2px);
|
25
|
+
width: calc(100% - 4px);
|
26
|
+
box-shadow: inset 0px 0px 2px 2px #bebebe;
|
22
27
|
}
|
23
28
|
a {
|
24
29
|
text-decoration: none;
|
@@ -62,34 +67,10 @@ p a:hover {
|
|
62
67
|
width: 100%;
|
63
68
|
box-sizing: border-box;
|
64
69
|
}
|
65
|
-
html {
|
66
|
-
padding-top: 2px;
|
67
|
-
box-shadow: inset 0px 0px 2px 2px #bebebe;
|
68
|
-
}
|
69
70
|
.horizontal > .pane {
|
70
71
|
height: 100%;
|
71
72
|
float: left;
|
72
73
|
}
|
73
|
-
.plot {
|
74
|
-
width: 100%;
|
75
|
-
height: 100%;
|
76
|
-
border: 1px solid #333;
|
77
|
-
margin: -1px;
|
78
|
-
overflow: none;
|
79
|
-
}
|
80
|
-
#plot-mouseover {
|
81
|
-
position: absolute;
|
82
|
-
background-color: rgba(0,0,0,0.5);
|
83
|
-
color: #333;
|
84
|
-
pointer-events: none;
|
85
|
-
font-family: Monospace;
|
86
|
-
}
|
87
|
-
#plot-zoom-element {
|
88
|
-
position: absolute;
|
89
|
-
background-color: rgba(0,3,10,0.75);
|
90
|
-
pointer-events: none;
|
91
|
-
border: 1px solid #012;
|
92
|
-
}
|
93
74
|
hr {
|
94
75
|
width: 95%;
|
95
76
|
background-color: #333;
|
@@ -0,0 +1,35 @@
|
|
1
|
+
.plot {
|
2
|
+
width: 100%;
|
3
|
+
height: 100%;
|
4
|
+
border: 1px solid #333;
|
5
|
+
margin: -1px;
|
6
|
+
overflow: none;
|
7
|
+
}
|
8
|
+
#plot-mouseover {
|
9
|
+
position: absolute;
|
10
|
+
background-color: rgba(190,190,190,0.5);
|
11
|
+
color: #333;
|
12
|
+
pointer-events: none;
|
13
|
+
font-family: Monospace;
|
14
|
+
padding: 0.25em;
|
15
|
+
box-shadow: 2px 2px 4px 2px #bebebe;
|
16
|
+
}
|
17
|
+
#plot-zoom-element {
|
18
|
+
position: absolute;
|
19
|
+
background-color: rgba(0,3,10,0.75);
|
20
|
+
pointer-events: none;
|
21
|
+
border: 1px solid #012;
|
22
|
+
}
|
23
|
+
#plot-style {
|
24
|
+
color: #333;
|
25
|
+
background-color: #d6d6d6;
|
26
|
+
}
|
27
|
+
#plot-style .tickmarks {
|
28
|
+
color: #707070;
|
29
|
+
}
|
30
|
+
#plot-style .markers {
|
31
|
+
color: #707070;
|
32
|
+
}
|
33
|
+
#plot-style .zero {
|
34
|
+
color: rgba(190,190,190,0.75);
|
35
|
+
}
|
@@ -106,12 +106,23 @@ $.extend WSClient.prototype.actions,
|
|
106
106
|
dropdown: (data) ->
|
107
107
|
target = @__parent.check_target(data)
|
108
108
|
element = $("<select class='inline-dropdown' name='#{data.id}'></select>")
|
109
|
-
|
109
|
+
console.log data.options
|
110
|
+
if data.options instanceof Array
|
111
|
+
element.append($("<option>#{item}</option>")) for item in data.options
|
112
|
+
else
|
113
|
+
for k, v of data.options
|
114
|
+
option = $("<option>#{k}</option>")
|
115
|
+
option.val(JSON.stringify(v))
|
116
|
+
element.append(option)
|
110
117
|
element.change (e) =>
|
118
|
+
val = element.find('option:selected').text()
|
119
|
+
if element.find('option:selected')[0].value
|
120
|
+
val = $.parseJSON(element.find('option:selected')[0].value)
|
111
121
|
@__parent.send({
|
112
122
|
id:data.id
|
113
123
|
action:'callback'
|
114
124
|
source:'dropdown'
|
125
|
+
value: val
|
115
126
|
text: element.find('option:selected').text()
|
116
127
|
})
|
117
128
|
@__parent.add(element, target, data)
|
@@ -11,25 +11,30 @@ $.extend WSClient.prototype.actions,
|
|
11
11
|
else
|
12
12
|
@__plots[data.id] = new Plot(target, @__parent, data)
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
14
|
+
$(document).ready ->
|
15
|
+
Plot.prototype.default_options =
|
16
|
+
color: $('#plot-style').css("color")
|
17
|
+
replace: true
|
18
|
+
size: 1.0
|
19
|
+
orientation: 'vertical'
|
20
|
+
xscale: 1.0
|
21
|
+
yscale: 1.0
|
22
|
+
tick_height: 15
|
23
|
+
number_of_ticks: 10
|
24
|
+
tick_color: $("#plot-style > .tickmarks").css("color")
|
25
|
+
tick_precision: 2
|
26
|
+
id: "spec0"
|
27
|
+
draw_zero: true
|
28
|
+
fill_color: null
|
29
|
+
draw_line: true
|
30
|
+
draw_marker: false
|
31
|
+
marker_color: $("#plot-style > .markers").css("color")
|
32
|
+
ystart: 'min'
|
33
|
+
fill: false
|
34
|
+
fill_color: $('#plot-style').css("background-color")
|
35
|
+
zero_color: $('#plot-style > .zero').css("color")
|
32
36
|
|
37
|
+
class Plot
|
33
38
|
parse_property: (prop) ->
|
34
39
|
parseInt(prop.slice(0, -1))
|
35
40
|
|
@@ -54,7 +59,7 @@ class Plot
|
|
54
59
|
mouse_x_value = relative_x_pos * @xscaled_end_value + (1.0 - relative_x_pos) * @xscaled_start_value
|
55
60
|
mouse_x_value = mouse_x_value * @xvalue_scale
|
56
61
|
mouse_y_value = relative_y_pos * @yscaled_end_value + (1.0 - relative_y_pos) * @yscaled_start_value
|
57
|
-
@mouse_element.text "#{mouse_x_value.toFixed(2)}
|
62
|
+
@mouse_element.text "#{mouse_x_value.toFixed(2)}, #{mouse_y_value.toFixed(2)}"
|
58
63
|
|
59
64
|
@move_zoom(event) if @mouse_is_down
|
60
65
|
|
@@ -94,7 +99,7 @@ class Plot
|
|
94
99
|
zoom_ystart_value = relative_ystart_pos * @yscaled_end_value + (1.0 - relative_ystart_pos) * @yscaled_start_value
|
95
100
|
zoom_yend_value = relative_yend_pos * @yscaled_end_value + (1.0 - relative_yend_pos) * @yscaled_start_value
|
96
101
|
|
97
|
-
console.log zoom_ystart_value, zoom_yend_value
|
102
|
+
# console.log zoom_ystart_value, zoom_yend_value
|
98
103
|
|
99
104
|
@zoom_to(zoom_xstart_value, zoom_xend_value, zoom_ystart_value, zoom_yend_value)
|
100
105
|
|
@@ -178,9 +183,10 @@ class Plot
|
|
178
183
|
@ctx.closePath()
|
179
184
|
|
180
185
|
@ctx.fillStyle = @options.fill_color
|
181
|
-
@ctx.fill() if @options.fill_color
|
186
|
+
@ctx.fill() if @options.fill_color and @options.fill
|
182
187
|
@ctx.stroke()
|
183
188
|
@draw_ticks()
|
189
|
+
@draw_zero() if @options.draw_zero
|
184
190
|
|
185
191
|
draw_ticks: ->
|
186
192
|
@ctx.font = "#{@options.tick_height - 3}px Monospace";
|
@@ -210,6 +216,13 @@ class Plot
|
|
210
216
|
@ctx.lineTo(@canvas_width, @plot_height)
|
211
217
|
@ctx.stroke()
|
212
218
|
|
219
|
+
draw_zero: ->
|
220
|
+
@ctx.strokeStyle = @options.zero_color
|
221
|
+
@ctx.beginPath()
|
222
|
+
@ctx.moveTo(0, @y_value_to_pixel(0))
|
223
|
+
@ctx.lineTo(@canvas_width, @y_value_to_pixel(0))
|
224
|
+
@ctx.stroke()
|
225
|
+
|
213
226
|
update: (data) ->
|
214
227
|
@data = data.data
|
215
228
|
$.extend @options, data
|
@@ -18,6 +18,13 @@ html
|
|
18
18
|
width 100%
|
19
19
|
overflow hidden
|
20
20
|
|
21
|
+
if $enable-gradients
|
22
|
+
padding 2px
|
23
|
+
padding-bottom 0px
|
24
|
+
height calc(100% - 2px)
|
25
|
+
width calc(100% - 4px)
|
26
|
+
box-shadow-inset()
|
27
|
+
|
21
28
|
a
|
22
29
|
text-decoration none
|
23
30
|
p &
|
@@ -52,35 +59,10 @@ a
|
|
52
59
|
width 100%
|
53
60
|
box-sizing: border-box
|
54
61
|
|
55
|
-
html
|
56
|
-
if $enable-gradients
|
57
|
-
padding-top 2px
|
58
|
-
box-shadow-inset()
|
59
|
-
|
60
62
|
.horizontal > .pane
|
61
63
|
height 100%
|
62
64
|
float left
|
63
65
|
|
64
|
-
.plot
|
65
|
-
width 100%
|
66
|
-
height 100%
|
67
|
-
border 1px solid #333
|
68
|
-
margin -1px
|
69
|
-
overflow none
|
70
|
-
|
71
|
-
#plot-mouseover
|
72
|
-
position absolute
|
73
|
-
background-color rgba(0, 0, 0, 0.5)
|
74
|
-
color $fg-color
|
75
|
-
pointer-events none
|
76
|
-
font-family Monospace
|
77
|
-
|
78
|
-
#plot-zoom-element
|
79
|
-
position absolute
|
80
|
-
background-color rgba(0, 3, 10, 0.75)
|
81
|
-
pointer-events none
|
82
|
-
border 1px solid #012
|
83
|
-
|
84
66
|
hr
|
85
67
|
width 95%
|
86
68
|
background-color $fg-color
|
@@ -0,0 +1,36 @@
|
|
1
|
+
@import "mixins.styl"
|
2
|
+
@import "colors.styl"
|
3
|
+
|
4
|
+
.plot
|
5
|
+
width 100%
|
6
|
+
height 100%
|
7
|
+
border 1px solid #333
|
8
|
+
margin -1px
|
9
|
+
overflow none
|
10
|
+
|
11
|
+
#plot-mouseover
|
12
|
+
position absolute
|
13
|
+
background-color rgba($active-highlight, 0.5)
|
14
|
+
color $fg-color
|
15
|
+
pointer-events none
|
16
|
+
font-family Monospace
|
17
|
+
padding 0.25em
|
18
|
+
drop-shadow()
|
19
|
+
|
20
|
+
#plot-zoom-element
|
21
|
+
position absolute
|
22
|
+
background-color rgba(0, 3, 10, 0.75)
|
23
|
+
pointer-events none
|
24
|
+
border 1px solid #012
|
25
|
+
|
26
|
+
// Note: You have to add a div with each of these to
|
27
|
+
// index.html.slim for this to take effect.
|
28
|
+
#plot-style
|
29
|
+
color $fg-color
|
30
|
+
background-color activate($bg-color, 10%)
|
31
|
+
& .tickmarks
|
32
|
+
color activate($fg-color, 30%)
|
33
|
+
& .markers
|
34
|
+
color activate($fg-color, 30%)
|
35
|
+
& .zero
|
36
|
+
color rgba(activate($bg-color, 20%), 0.75)
|
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.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-01-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: em-websocket
|
@@ -183,6 +183,7 @@ files:
|
|
183
183
|
- lib/html/source/layouts/layout.erb
|
184
184
|
- lib/html/source/stylesheets/scrollbar.styl
|
185
185
|
- lib/html/source/stylesheets/normalize.bak
|
186
|
+
- lib/html/source/stylesheets/plot.styl
|
186
187
|
- lib/html/source/stylesheets/leaflet.css
|
187
188
|
- lib/html/source/stylesheets/buttons.styl
|
188
189
|
- lib/html/source/stylesheets/all.css
|
@@ -242,6 +243,7 @@ files:
|
|
242
243
|
- lib/html/build/stylesheets/map.css
|
243
244
|
- lib/html/build/stylesheets/buttons.css
|
244
245
|
- lib/html/build/stylesheets/code.css
|
246
|
+
- lib/html/build/stylesheets/plot.css
|
245
247
|
- lib/html/build/stylesheets/status.css
|
246
248
|
- lib/html/build/stylesheets/ansi_colors.css
|
247
249
|
- lib/html/build/stylesheets/font-awesome/HELP-US-OUT.txt
|