flammarion 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
data/lib/flammarion.rb
CHANGED
data/lib/flammarion/version.rb
CHANGED
data/lib/flammarion/writeable.rb
CHANGED
@@ -39,41 +39,81 @@ module Flammarion
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
+
# @!macro [new] escape_options
|
43
|
+
# @option options [Boolean] :raw (false) Perform no escaping at all.
|
44
|
+
# @option options [Boolean] :colorize (true) Translate ANSI color escape
|
45
|
+
# codes into displayable colors.
|
46
|
+
# @option options [Boolean] :escape_html (true) Renders any html tags as
|
47
|
+
# plain text. If false, allows any arbitrary html to be rendered in the
|
48
|
+
# writeable area.
|
49
|
+
# @option options [Boolean] :escape_icons (false) If true, will translate
|
50
|
+
# any text between two `:` into a font-awesome icon. (E.g. :thumbs-up:)
|
51
|
+
|
52
|
+
# @!macro [new] string_representation
|
53
|
+
# The string can be included in text for text-accepting methods (such as
|
54
|
+
# +#puts+, +#table+, etc).
|
55
|
+
# @note Don't forget to set the :escape_html option to false when including
|
56
|
+
# this string.
|
57
|
+
|
42
58
|
def send_json(hash)
|
43
59
|
@front_end.send_json({target: @pane_name}.merge(hash))
|
44
60
|
end
|
45
61
|
|
62
|
+
# Adds text to the writeable area without appending a newline.
|
63
|
+
# @param str [String] The text to append
|
64
|
+
# @macro escape_options
|
46
65
|
def send(str, options = {})
|
47
66
|
@front_end.send_json({action:'append', text:str, target:@pane_name}.merge(options))
|
48
67
|
end
|
49
68
|
alias_method :print, :send
|
50
69
|
|
70
|
+
# Adds text to the writeable area and appends a newline.
|
71
|
+
# @param str [String] The text to append
|
72
|
+
# @macro escape_options
|
51
73
|
def puts(str = "", options = {})
|
52
74
|
send str, options
|
53
75
|
send "\n"
|
54
76
|
return nil
|
55
77
|
end
|
56
78
|
|
79
|
+
# Replaces the contents of the writeable area with text
|
80
|
+
# @param str [String] The text to append
|
81
|
+
# @macro escape_options
|
57
82
|
def replace(str, options = {})
|
58
83
|
send_json({action:'replace', text:str}.merge(options))
|
59
84
|
return nil
|
60
85
|
end
|
61
86
|
|
87
|
+
# Clears the contents of the writeable area
|
62
88
|
def clear
|
63
89
|
send_json({action:'clear'})
|
64
90
|
return nil
|
65
91
|
end
|
66
92
|
|
93
|
+
# Closes the pane or window
|
67
94
|
def close
|
68
95
|
send_json({action:'closepane'})
|
96
|
+
return nil
|
69
97
|
end
|
70
98
|
|
99
|
+
# Creates a new plot to display single axis data
|
100
|
+
# @param [Array<Number>] values A list of numbers to plot
|
101
|
+
# TODO: @options
|
102
|
+
# @return [Spectrum] A Spectrum object for manipulation after creation.
|
71
103
|
def plot(values, options = {})
|
72
104
|
id = @front_end.make_id
|
73
105
|
send_json({action:'plot', data:values, id:id}.merge(options))
|
74
106
|
return Spectrum.new(id, @pane_name, @front_end)
|
75
107
|
end
|
76
108
|
|
109
|
+
# @overload highlight(data, options)
|
110
|
+
# Adds a pretty-printed, highlighted display of data
|
111
|
+
# @param text [Hash, Array] A dataset to be displayed
|
112
|
+
# @macro escape_options
|
113
|
+
# @overload highlight(text, options)
|
114
|
+
# Adds syntax-highlighted text or code to the writeable area
|
115
|
+
# @param text [String] Code to be highlighed
|
116
|
+
# @macro escape_options
|
77
117
|
def highlight(text, options = {})
|
78
118
|
output = text
|
79
119
|
output = JSON.pretty_generate(text) if text.is_a? Hash or text.is_a? Array
|
@@ -81,6 +121,12 @@ module Flammarion
|
|
81
121
|
nil
|
82
122
|
end
|
83
123
|
|
124
|
+
# Adds a clickable button which will call +block+ when clicked
|
125
|
+
# @param label [String] The text of the button
|
126
|
+
# @option options [Boolean] :inline (false) If true, creates a small button
|
127
|
+
# embedded in the text. If false, creates a button that spans the width
|
128
|
+
# of the writeable area.
|
129
|
+
# @macro escape_options
|
84
130
|
def button(label, options = {}, &block)
|
85
131
|
id = @front_end.make_id
|
86
132
|
send_json({action:'button', label:label, id:id}.merge(options))
|
@@ -88,22 +134,63 @@ module Flammarion
|
|
88
134
|
id
|
89
135
|
end
|
90
136
|
|
137
|
+
# Creates a string representing a button will call the given block when it
|
138
|
+
# is clicked.
|
139
|
+
# @macro string_representation
|
140
|
+
# @param label [String] The label on the button
|
141
|
+
# @return A string representing the html for the button.
|
91
142
|
def embedded_button(label, options = {}, &block)
|
92
143
|
id = @front_end.make_id
|
93
144
|
@front_end.callbacks[id] = block
|
94
145
|
%|<a class="floating-button" href="#" onClick="$ws.send({id:'#{id}', action:'callback', source:'embedded_button'})">#{label}</a>|
|
95
146
|
end
|
96
147
|
|
148
|
+
# Creates a string representing a hyperlink that when clicked will call the
|
149
|
+
# given block.
|
150
|
+
# @macro string_representation
|
151
|
+
# @param label [String] The text to become the link
|
152
|
+
# @return a string representing the html for the link.
|
97
153
|
def callback_link(label, options = {}, &block)
|
98
154
|
id = @front_end.make_id
|
99
155
|
@front_end.callbacks[id] = block
|
100
156
|
%|<a href="#" onClick="$ws.send({id:'#{id}', action:'callback', source:'link'})">#{label}</a>|
|
101
157
|
end
|
102
158
|
|
159
|
+
# Creates a string representing a Font Awesome icon.
|
160
|
+
# @macro string_representation
|
161
|
+
# @param name [String] The name of a Font Awesome icon class. See
|
162
|
+
# @see https://fortawesome.github.io/Font-Awesome/icons/ for the list.
|
103
163
|
def icon(name, additional_classes = [])
|
104
164
|
%|<i class="fa fa-#{name} #{additional_classes.collect{|c| "fa-#{c}"}.join(" ")}"></i>|
|
105
165
|
end
|
106
166
|
|
167
|
+
# Creates a new text-input field into which the user can enter text.
|
168
|
+
# If a block is given, the block will be called when ever the text is
|
169
|
+
# changed. If a block is not given, it will return a DeferredValue object
|
170
|
+
# which can be used to get the value at any time.
|
171
|
+
# @param label [String] The displayed placeholder text for the input. This
|
172
|
+
# does not set the actual value of the input field or the returned
|
173
|
+
# +DeferredValue+. Use the +:value+ option for that.
|
174
|
+
# @option options [Boolean] :multiline (false) Creates a large text box if
|
175
|
+
# true; otherwise creates a single line input box.
|
176
|
+
# @option options [Boolean] :autoclear (false) Automatically clears the
|
177
|
+
# input field every time the user changes the value. The callback will only
|
178
|
+
# be called for user initiated changes, not for auto-clear changes.
|
179
|
+
# @option options [String] :value Sets the starting value of the field and
|
180
|
+
# the returned +DeferredValue+.
|
181
|
+
# @option options [Boolean] :once (false) If true, then the input box will
|
182
|
+
# be converted into a normal line of text once the user has changed it.
|
183
|
+
# The callback will still be called, but the user will no longer be able
|
184
|
+
# to change the text.
|
185
|
+
# @option options [Boolean] :keep_label (false) If +:once+ is also set, this
|
186
|
+
# will prepend +label+ when converting the input to plain text.
|
187
|
+
# @overload input(label, options = {})
|
188
|
+
# @return [DeferredValue] An object representing the current value of the
|
189
|
+
# input, which can be converted to text using +#to_s+.
|
190
|
+
# @overload input(label, options = {})
|
191
|
+
# @yield [message_hash] Invokes the block every time the text changes. The
|
192
|
+
# new text of the input can be obtained from the +"text"+ key of the
|
193
|
+
# +message_hash+.
|
107
194
|
def input(label, options = {}, &block)
|
108
195
|
id = @front_end.make_id
|
109
196
|
send_json({action:'input', label:label, id:id}.merge(options))
|
@@ -116,6 +203,16 @@ module Flammarion
|
|
116
203
|
end
|
117
204
|
end
|
118
205
|
|
206
|
+
# Creates a new checkbox which the user can click.
|
207
|
+
# @param label [String] The placeholder text for the input
|
208
|
+
# @macro escape_options
|
209
|
+
# @overload checkbox(label, options = {})
|
210
|
+
# @return [DeferredValue] An object representing the current value of the
|
211
|
+
# checkbox. Use +#checked?+ to get the state of the checkbox.
|
212
|
+
# @overload checkbox(label, options = {})
|
213
|
+
# @yield [message_hash] Invokes the block every time the checkbox is
|
214
|
+
# toggled. Use the "checked" field of +message_hash+ to get the new state
|
215
|
+
# of the checkbox.
|
119
216
|
def checkbox(label, options = {}, &block)
|
120
217
|
id = @front_end.make_id
|
121
218
|
send_json({action:'checkbox', label:label, id:id}.merge(options))
|
@@ -129,10 +226,12 @@ module Flammarion
|
|
129
226
|
end
|
130
227
|
end
|
131
228
|
|
229
|
+
# Adds a horizontal rule
|
132
230
|
def break(options = {})
|
133
231
|
send_json({action:'break'}.merge(options))
|
134
232
|
end
|
135
233
|
|
234
|
+
# Adds raw html
|
136
235
|
def html(data)
|
137
236
|
send_json({action:'replace', text:data, raw:true})
|
138
237
|
end
|
@@ -189,7 +288,7 @@ module Flammarion
|
|
189
288
|
send_json({action:'reorient', orientation:orientation})
|
190
289
|
end
|
191
290
|
|
192
|
-
def button_box(name)
|
291
|
+
def button_box(name = "buttonbox")
|
193
292
|
send_json({action:'buttonbox', name:name})
|
194
293
|
return Pane.new(@front_end, name)
|
195
294
|
end
|
@@ -205,7 +205,7 @@ void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?voi
|
|
205
205
|
element.append(this.__parent.escape(data.text, data));
|
206
206
|
results = [];
|
207
207
|
while (element.hasClass("pane")) {
|
208
|
-
atBottom = atBottomStack.
|
208
|
+
atBottom = atBottomStack.shift();
|
209
209
|
if (atBottom) {
|
210
210
|
element.scrollTop(element[0].scrollHeight - element.height() - marginSize);
|
211
211
|
}
|
@@ -6826,7 +6826,7 @@ if (typeof module !== 'undefined') {
|
|
6826
6826
|
element.append(this.__parent.escape(data.text, data));
|
6827
6827
|
results = [];
|
6828
6828
|
while (element.hasClass("pane")) {
|
6829
|
-
atBottom = atBottomStack.
|
6829
|
+
atBottom = atBottomStack.shift();
|
6830
6830
|
if (atBottom) {
|
6831
6831
|
element.scrollTop(element[0].scrollHeight - element.height() - marginSize);
|
6832
6832
|
}
|
@@ -15,7 +15,7 @@ $.extend WSClient.prototype.actions,
|
|
15
15
|
element.append(@__parent.escape(data.text, data))
|
16
16
|
|
17
17
|
while element.hasClass("pane")
|
18
|
-
atBottom = atBottomStack.
|
18
|
+
atBottom = atBottomStack.shift()
|
19
19
|
element.scrollTop(element[0].scrollHeight - element.height() - marginSize) if atBottom
|
20
20
|
element = element.parent()
|
21
21
|
|