opal-irb 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/.gitignore +3 -0
  2. data/.ruby-gemset +1 -0
  3. data/.ruby-version +1 -0
  4. data/Gemfile +14 -0
  5. data/Gemfile.lock +113 -0
  6. data/Guardfile +5 -0
  7. data/LICENSE +21 -0
  8. data/README.md +175 -0
  9. data/Rakefile +65 -0
  10. data/Roadmap.org +17 -0
  11. data/app/assets/stylesheets/opal-irb/jqconsole.css +263 -0
  12. data/compiled/app-embeddable.js +39765 -0
  13. data/compiled/app-jqconsole.js +39767 -0
  14. data/compiled/application.js +27399 -0
  15. data/css/ansi.css +172 -0
  16. data/css/opal_irb_jqconsole.css +79 -0
  17. data/css/show-hint.css +38 -0
  18. data/doc/presentations/opal_irb_overview.html +678 -0
  19. data/doc/presentations/opal_irb_overview.org +448 -0
  20. data/examples/app-embeddable.rb +8 -0
  21. data/examples/app-jqconsole.rb +10 -0
  22. data/examples/application.rb +8 -0
  23. data/index-embeddable.html +29 -0
  24. data/index-homebrew.html +115 -0
  25. data/index-jq.html +80 -0
  26. data/js/anyword-hint.js +44 -0
  27. data/js/jqconsole.js +1583 -0
  28. data/js/nodeutil.js +546 -0
  29. data/js/ruby.js +285 -0
  30. data/js/show-hint.js +383 -0
  31. data/lib/opal-irb/rails_engine.rb +3 -0
  32. data/lib/opal-irb/version.rb +3 -0
  33. data/lib/opal-irb-rails.rb +2 -0
  34. data/lib/opal-irb.rb +44 -0
  35. data/opal/object_extensions.rb +20 -0
  36. data/opal/opal_irb/completion_engine.rb +202 -0
  37. data/opal/opal_irb/completion_formatter.rb +49 -0
  38. data/opal/opal_irb/completion_results.rb +88 -0
  39. data/opal/opal_irb.rb +88 -0
  40. data/opal/opal_irb_homebrew_console.rb +398 -0
  41. data/opal/opal_irb_jqconsole.rb +517 -0
  42. data/opal/opal_irb_jqconsole_css.rb +259 -0
  43. data/opal/opal_irb_log_redirector.rb +32 -0
  44. data/opal/opal_phantomjs.rb +49 -0
  45. data/opal-irb.gemspec +20 -0
  46. data/spec/code_link_handler_spec.rb +30 -0
  47. data/spec/jquery.js +5 -0
  48. data/spec/object_extensions_spec.rb +32 -0
  49. data/spec/opal_irb/completion_engine_spec.rb +204 -0
  50. data/spec/opal_irb/completion_results_spec.rb +32 -0
  51. data/spec/opal_irb_log_director_spec.rb +19 -0
  52. data/spec/opal_irb_spec.rb +19 -0
  53. data/spec/spec_helper.rb +1 -0
  54. metadata +151 -0
@@ -0,0 +1,448 @@
1
+ #+Title: Overview of Opal-IRB features
2
+ #+Author: Forrest Chang
3
+ #+Email: fkchang2000@yahoo.com
4
+ #+REVEAL_ROOT: http://cdn.jsdelivr.net/reveal.js/3.0.0/
5
+ #+OPTIONS: num:nil toc:nil
6
+ * Reason for the talk
7
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
8
+ #+ATTR_HTML: :target "_blank"
9
+ - [[https://github.com/fkchang/opal-irb/blob/master/README.md][opal-irb]] has many features
10
+ - Most don't know about them
11
+ - Hence this talk (based on http://funkworks.blogspot.com/2015/08/an-overview-of-opal-irbs-features.html)
12
+
13
+
14
+ * What is opal-irb?
15
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
16
+ - https://github.com/fkchang/opal-irb
17
+ - An in browser REPL (read eval print loop)
18
+ - Aims to be the opal equivalent of Ruby's irb (interactive ruby), and pry
19
+ - A tool in which you can play with Ruby any time you have access to a browser
20
+
21
+
22
+ * 3 Sections
23
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
24
+ 1. What opal-irb has in common with irb
25
+ 2. How opal-irb differs from irb
26
+ 3. Features unique to opal-irb
27
+
28
+ * 1) In Common with irb
29
+
30
+ ** Terminal Emulation (of sorts)
31
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
32
+ - irb - terminal formatting
33
+ - opal-irb, via a jqconsole fork, supports some ANSI formatting code
34
+
35
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
36
+ Example
37
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
38
+ #+BEGIN_SRC ruby
39
+ puts "\033[31mRed Text"
40
+ #+END_SRC
41
+
42
+ *** ANSI colors In browser
43
+ #+BEGIN_HTML
44
+ <iframe width="100%" height="500" src="http://git.io/vmQVY" frameborder="0" allowfullscreen></iframe>
45
+ #+END_HTML
46
+
47
+ ** History up down history
48
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
49
+ - Like irb, opal-irb stores a history of previous statements.
50
+ - Navigate this history with the up/down arrows
51
+ - or use the "GNU readline commands".
52
+
53
+ *** GNU readline commands (emacs subset)
54
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
55
+ - A subset of the gnu readline manipulation is supported.
56
+ - Will likely add more support over time.
57
+ - The currently supported bindings are:
58
+
59
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
60
+ #+BEGIN_SRC
61
+ Up/Down Arrow and ctrl-p/ctrl-n: Navigate through history
62
+ ctrl-a: Beginning of line
63
+ ctrl-e: End of line
64
+ ctrl-b: Back 1 character
65
+ ctrl-f: Forward 1 character
66
+ ctrl-d: Delete 1 character
67
+ ctrl-k: Kill to the end of the line
68
+ alt-b: Back 1 word
69
+ alt-f: Forward 1 word
70
+ alt-d: Delete 1 word
71
+ #+END_SRC
72
+
73
+ ** Autocomplete
74
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
75
+ - A work-in-progress
76
+ - Same tab completion model that irb does. It looks like this:
77
+
78
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
79
+ #+BEGIN_SRC
80
+ opal> S<tab>
81
+ STDERR STDIN STDOUT ScriptError Set
82
+ SignalException StandardError StopIteration String StringIO
83
+ StringScanner Struct Symbol SyntaxError SystemCallError
84
+ SystemExit
85
+ #+END_SRC
86
+
87
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
88
+ #+BEGIN_SRC
89
+ opal> ST<tab>
90
+ STDERR STDIN STDOUT
91
+ #+END_SRC
92
+
93
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
94
+ #+BEGIN_SRC
95
+ opal> STDI<tab>
96
+ #+END_SRC
97
+
98
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
99
+ #+BEGIN_SRC
100
+ opal> STDIN
101
+ #+END_SRC
102
+
103
+ ** Live Autocomplete demo
104
+ #+BEGIN_HTML
105
+ <iframe width="100%" height="500" src="http://fkchang.github.io/opal-irb/index-jq.html" frameborder="0" allowfullscreen></iframe>
106
+ #+END_HTML
107
+
108
+
109
+ ** Multi Line Input
110
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
111
+ - You can type multiple lines until your entry is complete.
112
+ - Incomplete lines shown with leading periods:
113
+
114
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
115
+ #+BEGIN_SRC
116
+ Welcome to Opal 0.7.1
117
+ type help for assistance
118
+ opal> class Foo
119
+ ... def bar
120
+ ... :bar
121
+ ... end
122
+ ... end
123
+ => "bar"
124
+ opal>
125
+
126
+ #+END_SRC
127
+
128
+
129
+ * 2) Different than irb
130
+
131
+ ** Last value returned - irb
132
+ In irb the last value returned is stored in _ variable:
133
+
134
+ #+BEGIN_SRC
135
+ 2.2.1 :001 > 2 * 3
136
+ => 6
137
+ 2.2.1 :002 > puts _
138
+ 6
139
+ => nil
140
+ 2.2.1 :003 >
141
+ #+END_SRC
142
+
143
+ ** Opal-irb
144
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
145
+ - Last value is stored as $_.
146
+ - Departs due to technical reasons
147
+ - Would like to make it the same
148
+
149
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
150
+ #+BEGIN_SRC
151
+ opal> 2 * 3
152
+ => 6
153
+ opal> puts $_
154
+ 6
155
+ => nil
156
+ opal>
157
+ #+END_SRC
158
+
159
+ ** Help command
160
+
161
+ *** irb
162
+
163
+ Help in irb allows you to lookup documentation for methods via ri and rdoc docs.
164
+
165
+ #+BEGIN_SRC
166
+ 2.0.0-p247 :001 > help
167
+
168
+ Enter the method name you want to look up.
169
+ You can use tab to autocomplete.
170
+ Enter a blank line to exit.
171
+
172
+ >>
173
+ #+END_SRC
174
+
175
+ *** Opal-irb
176
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
177
+ - Opal-irb's help shows how to operate opal-irb.
178
+ - Help for method lookup to be done in a different fashion.
179
+
180
+ *** Current help command output
181
+ #+BEGIN_SRC
182
+ opal> help
183
+ help: This text
184
+ $_ last value returned is stored in this global
185
+ history: Shows history
186
+ irb_link_for history_num: Create a link for the code in the history
187
+ ctrl-c: Abort prompt
188
+ ctrl-m: Pop up multi-line editor
189
+ ctrl-Enter: Submit code in multi-line editor
190
+ ctrl-l: Creates a link with the code you have on the current line/lines
191
+
192
+ EDITOR FUNCTIONALITY
193
+ Up/Down Arrow and ctrl-p/ctrl-n: Navigate through history
194
+ ctrl-a: Beginning of line
195
+ ctrl-e: End of line
196
+ ctrl-b: Back 1 character
197
+ ctrl-f: Forward 1 character
198
+ ctrl-d: Delete 1 character
199
+ ctrl-k: Kill to the end of the line
200
+ alt-b: Back 1 word
201
+ alt-f: Forward 1 word
202
+ alt-d: Delete 1 word
203
+ => nil
204
+
205
+ #+END_SRC
206
+
207
+ * 3) Beyond irb
208
+
209
+ There are number of things that opal-irb does that irb does not:
210
+
211
+
212
+ ** "Live gist", create a link w/code
213
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
214
+ - Create a link with =ctl-l= (=l= for =link=),
215
+ - Link will be displayed above the line in question.
216
+ - Scroll through history, hit =ctl-l= to give history for that line
217
+
218
+ *** Live gist
219
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
220
+ - Like a gist, it's shareable bit of code.
221
+ - Unlike a gist, it's "live code"
222
+ - Live gist can be shared in any real app that has opal-irb embedded.
223
+ - Already used this in a production codebase to duplicate a bug condition for a coworker to debug.
224
+ - All embedded opal-irb's on this prensentation are all done via "live gist."
225
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
226
+ - For example, the red text printing example eariler
227
+
228
+ ** Enhanced History
229
+ *** History Command (like shells have, bash, etc.)
230
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
231
+ - You can type =history= at the prompt to get a listing of your history.
232
+ - Shows listing of the code you've typed in including line numbers.
233
+
234
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
235
+ #+BEGIN_SRC
236
+ opal> history
237
+ 1: class Foo
238
+ def bar
239
+ :bar
240
+ end
241
+ end
242
+ 2: f = Foo.new
243
+ 3: f.bar
244
+ 4: history
245
+ => nil
246
+ opal>
247
+ #+END_SRC
248
+
249
+ *** Link for History
250
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
251
+ - Alternate to navigating through history and typing =ctrl-l=
252
+ - Use =irb_link_for= command with the history number
253
+ - Different from =jsbin=, =jsfiddle=, etc.
254
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
255
+ - Experiment and have several "live gists"
256
+ - Matches repl-based experimentation.
257
+
258
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
259
+ #+BEGIN_SRC
260
+ irb_link_for <history_num>
261
+ #+END_SRC
262
+
263
+
264
+ ** Multiline edit
265
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in roll-in roll-in roll-in roll-in)
266
+ - irb's multi-line edit can be cumbersome if you make a mistake
267
+ - I've made many
268
+ - Need to =ctrl-c= and start over
269
+ - opal-irb has multi-line editor support.
270
+ - Invoke with =ctrl-m= (m for the multi-line editor)
271
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
272
+ - Pops up editor window will pop up with the code on the prompt.
273
+ - Has syntax highlighting
274
+ - Auto indenting
275
+ - WIP autocomplete functionality
276
+
277
+ *** More tips
278
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
279
+ - Editor can be used with all code in the history
280
+ - Navigate to the desired code in your history and hit =ctl-m=.
281
+ - Run the code by hitting the run it button, or the =ctrl-Enter= short cut.
282
+ - Close the window with either the close icon, or hit escape.
283
+
284
+ *** Live demo of Multiline edit
285
+ #+BEGIN_HTML
286
+ <iframe width="100%" height="500" src="http://fkchang.github.io/opal-irb/index-jq.html" frameborder="0" allowfullscreen></iframe>
287
+ #+END_HTML
288
+
289
+
290
+ ** Requiring code at run time
291
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
292
+ - *opal-irb* intended to be able to explore things at run-time
293
+ - 2 commands to support this
294
+
295
+
296
+ *** require_remote
297
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
298
+ - Part of *opal-parser*
299
+ - =require_remote= allows you require a remote ruby file.
300
+
301
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
302
+ #+BEGIN_SRC ruby
303
+ require_remote <url_to_ruby_file>"
304
+ #+END_SRC
305
+
306
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
307
+ As an example, I'll require the raw form of this gist, which prints
308
+ out "require_remote is cool" 10 times.
309
+
310
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
311
+ #+BEGIN_HTML
312
+ <script src="https://gist.github.com/fkchang/c52173c276976a9ccede.js"></script>
313
+ #+END_HTML
314
+
315
+ *** require_remote In browser
316
+ #+BEGIN_HTML
317
+ <iframe width="100%" height="500" src="http://git.io/vOmoR" frameborder="0" allowfullscreen></iframe>
318
+ #+END_HTML
319
+
320
+ *** require_js (asynchronous require)
321
+
322
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
323
+ - require_js requires javascript with a URL.
324
+ - Asynchronous
325
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
326
+ - Ok when typed in by hand, is usually fine, the file
327
+ - If not hand typed, say via live-gist, you'll need to put some sort of delay.
328
+
329
+ *** A Raphael.js based example.
330
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
331
+ - does a =require_js= of the raphael.js lib
332
+ - Adds a reanimate button (via Opal-browser's DOM DSL)
333
+ - delays via a =Timeout= and creates an animation and bind reanimation
334
+ code to the reanimate button
335
+
336
+ *** require_js Raphael.js example
337
+ #+BEGIN_HTML
338
+ <iframe width="100%" height="500" src="http://git.io/vOm1c" frameborder="0" allowfullscreen></iframe>
339
+ #+END_HTML
340
+
341
+
342
+ *** require_js_sync (synchronous require)
343
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
344
+ - Synchronous calls are atypical in javascript
345
+ - Chrome says this is deprecated
346
+ - Still might be useful
347
+
348
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
349
+ Same raphael example, but without the delay
350
+
351
+ *** require_js_sync Raphael.js
352
+ #+BEGIN_HTML
353
+ <iframe width="100%" height="500" src="http://git.io/vOmDg" frameborder="0" allowfullscreen></iframe>
354
+ #+END_HTML
355
+
356
+ ** Say, say, say, what you want...
357
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
358
+ - I use the =say= command in OSX a lot
359
+ - Lets me know when a long running process is done
360
+ - Implemented for opal-irb, may make a standalone gem
361
+
362
+ *** say example in the browser
363
+ #+BEGIN_HTML
364
+ <iframe width="100%" height="500" src="http://git.io/vYveZ" frameborder="0" allowfullscreen></iframe>
365
+ #+END_HTML
366
+
367
+
368
+ * Examples
369
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
370
+ - There are several example opal-irb pages referenced from the README on https://github.com/fkchang/opal-irb. They are:
371
+
372
+ ** Homebrew console example
373
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
374
+ #+ATTR_HTML: :target "_blank"
375
+ - My 1st attempt, port of a [[https://github.com/larryng/coffeescript-repl][coffescript repl]] with hand written terminal code
376
+ - not as full features as the jq-console example
377
+
378
+ ** Homebrew console live
379
+ #+ATTR_HTML: :target "_blank"
380
+ http://fkchang.github.io/opal-irb/index-homebrew.html
381
+
382
+ #+BEGIN_HTML
383
+ <iframe width="100%" height="500" src="http://fkchang.github.io/opal-irb/index-homebrew.html" frameborder="0" allowfullscreen></iframe>
384
+ #+END_HTML
385
+
386
+ ** jq-console Example
387
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
388
+ - This uses (a fork of) =jq-console=, for improved console support.
389
+ - Most development has been on a =jq-console= based *opal-irb*
390
+ - I might revisit a =jq-console= port to remove the *jquery* dependency in *opal-irb*
391
+
392
+ ** jq-console Live
393
+ #+ATTR_HTML: :target "_blank"
394
+ http://fkchang.github.io/opal-irb/index-jq.html
395
+ #+BEGIN_HTML
396
+ <iframe width="100%" height="500" src="http://fkchang.github.io/opal-irb/index-jq.html" frameborder="0" allowfullscreen></iframe>
397
+ #+END_HTML
398
+
399
+
400
+ ** Embedded console example
401
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
402
+ - How opal-irb might be embedded in an app
403
+ - Has some nominal DOM elements for maniuplation
404
+ - Button to show opal-irb
405
+ - *Opal-irb* supports 2 ways to display a hidden opal-irb:
406
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
407
+ - hot key
408
+ - click event on a DOM element
409
+ #+ATTR_HTML: :target "_blank"
410
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
411
+ - Both are documented in the [[https://github.com/fkchang/opal-irb/blob/master/README.md][README]]
412
+
413
+ ** Embedded Console live
414
+ embedded iframe does not render right in safari, use chrome
415
+ #+ATTR_HTML: :target "_blank"
416
+ http://fkchang.github.io/opal-irb/index-embeddable.html
417
+ #+BEGIN_HTML
418
+ <iframe width="100%" height="500" onload='setTimeout(function() {this.height = 550;}, 100);' src="http://fkchang.github.io/opal-irb/index-embeddable.html" frameborder="0" allowfullscreen></iframe>
419
+ #+END_HTML
420
+
421
+
422
+ ** Embedded in the opal-playground
423
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
424
+ - *Opal-irb* has been embedded into my fork of the *opal-playground*.
425
+ - *Opal-irb* is available in the RESULTS section by hitting the blue "Show Irb" button.
426
+ - Sometimes repl is what you need
427
+ ** Opal-Playground live
428
+ #+ATTR_HTML: :target "_blank"
429
+ http://fkchang.github.io/opal-playground/
430
+ #+BEGIN_HTML
431
+ <iframe width="100%" height="500" src="http://fkchang.github.io/opal-playground/" frameborder="0" allowfullscreen></iframe>
432
+ #+END_HTML
433
+
434
+ ** Videos and more
435
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
436
+ #+ATTR_HTML: :target "_blank"
437
+ - Many features demonstrated in part of [[https://www.youtube.com/watch?feature%3Dplayer_detailpage&v%3DGH9FAfKG-qY#t%3D1838][RubyConf 2013 talk "Opal - A New Hope"]];
438
+ - [[Https://www.youtube.com/watch?v%3DmQTulgBm5Nk][Video]] for the in progress auto complete in the console.
439
+ #+ATTR_HTML: :target "_blank"
440
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
441
+ - Video [[https://www.youtube.com/watch?feature%3Dplayer_detailpage&v%3DGH9FAfKG-qY#t%3D2099][preview]] of a prototype of opal-inspector 2 years back
442
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
443
+ - Showing features previously only supported in Smalltalk and Lisp machines.
444
+ #+ATTR_REVEAL: :frag (roll-in roll-in roll-in roll-in roll-in roll-in)
445
+ - Intend on beefing it up
446
+
447
+ * Done for now
448
+ Thanks!
@@ -0,0 +1,8 @@
1
+ require 'opal_irb_jqconsole'
2
+ require 'browser' # include opal browser so we have access to it
3
+ require 'browser/dom'
4
+
5
+ Document.ready? do
6
+ OpalIrbJqconsole.create_bottom_panel
7
+ OpalIrbJqconsole.add_open_panel_behavior("show-irb")
8
+ end
@@ -0,0 +1,10 @@
1
+ require 'opal'
2
+ require 'opal-jquery'
3
+ require 'opal-parser'
4
+ require 'browser' # include opal browser so we have access to it
5
+ require 'browser/dom'
6
+ require 'opal_irb_jqconsole'
7
+
8
+ Document.ready? do
9
+ OpalIrbJqconsole.create("#console")
10
+ end
@@ -0,0 +1,8 @@
1
+ require 'opal'
2
+ require 'opal-jquery'
3
+ require 'opal-parser'
4
+ require 'opal_irb_homebrew_console'
5
+
6
+ Document.ready? do
7
+ OpalIRBHomebrewConsole.create("#container")
8
+ end
@@ -0,0 +1,29 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html>
4
+ <head>
5
+ <link rel="stylesheet" href="css/ansi.css" type="text/css" media="all" />
6
+
7
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script>
8
+ <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
9
+ <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
10
+ <script src="js/jqconsole.js"></script>
11
+ <link href="css/opal_irb_jqconsole.css" rel="stylesheet" type="text/css">
12
+ <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
13
+ <link rel="stylesheet" href="http://codemirror.net/lib/codemirror.css"/>
14
+ <link rel="stylesheet" href="css/show-hint.css"/>
15
+ <script src="http://codemirror.net/lib/codemirror.js"></script>
16
+ <script src="js/show-hint.js"></script>
17
+ <script src="js/anyword-hint.js"></script>
18
+ <script type="text/javascript" src="http://codemirror.net/keymap/emacs.js"></script>
19
+ <script src="http://codemirror.net/mode/ruby/ruby.js"></script>
20
+ <script src="compiled/app-embeddable.js"></script>
21
+ </head>
22
+ <body>
23
+ <button id="show-irb">Show Irb</button>
24
+ <div id='mydiv'>
25
+ <h1 id="h1">An h1 headline inside of #mydiv</h1>
26
+ </div>
27
+ <h2 id="h2">An h2 headline standalone</h2>
28
+ </body>
29
+ </html>
@@ -0,0 +1,115 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Online OPAL Interactive Console (REPL)</title>
5
+ <meta charset='utf-8' />
6
+ <meta name="description" content="An Opal interactive console (REPL) as a webpage." />
7
+
8
+ <style>
9
+
10
+ a {
11
+ color: #fff;
12
+ text-decoration: none;
13
+ }
14
+
15
+ a:hover {
16
+ text-decoration: underline;
17
+ }
18
+
19
+ pre {
20
+ margin: 0;
21
+ padding: 0;
22
+ font: inherit;
23
+ }
24
+
25
+ body {
26
+ background-color: #9b111e;
27
+ color: #fff;
28
+ font-size: 14px;
29
+ font-family: DejaVu Sans Mono, monospace;
30
+ }
31
+
32
+ #container {
33
+ width: 100%;
34
+ height: 100%;
35
+ font: inherit;
36
+ }
37
+
38
+ #output {
39
+ word-wrap: break-word;
40
+ }
41
+
42
+ #inputdiv {
43
+ width: 100%;
44
+ }
45
+
46
+ #inputl {
47
+ display: inline;
48
+ float: left;
49
+ }
50
+
51
+ #inputr {
52
+ display: inline;
53
+ float: left;
54
+ }
55
+
56
+ #input {
57
+ border: none;
58
+ outline: none;
59
+ background-color: #9b111e;
60
+ color: #fff;
61
+ font: inherit;
62
+ margin: 0;
63
+ padding: 0;
64
+ resize: none;
65
+ position: absolute;
66
+ overflow: hidden;
67
+ }
68
+
69
+ #inputcopy {
70
+ display: none;
71
+ white-space: pre-wrap;
72
+ min-height: 2em;
73
+ padding: 0;
74
+ margin: 0;
75
+ word-wrap: break-word;
76
+ }
77
+
78
+ .s_special { color: #4ff }
79
+
80
+ .s_number { color: #ff4 }
81
+
82
+ .s_boolean { color: #ff4 }
83
+
84
+ .s_undefined { color: #999 }
85
+
86
+ .s_null { font-weight: bold }
87
+
88
+ .s_string { color: #4f4 }
89
+
90
+ .s_date { color: #f4f }
91
+
92
+ .s_regexp { color: #f44 }
93
+
94
+ </style>
95
+ <link rel="stylesheet" href="http://codemirror.net/lib/codemirror.css"/>
96
+ <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
97
+ </head>
98
+ <body>
99
+ <div id="container">
100
+ </div>
101
+ <div id="dialog" class="dialog" style="display:none" >
102
+ <textarea name="multi_line_input" id="multi_line_input"></textarea>
103
+ </div>
104
+
105
+ <script src="http://codemirror.net/lib/codemirror.js"></script>
106
+ <script type="text/javascript" src="http://codemirror.net/keymap/emacs.js"></script>
107
+ <script src="http://codemirror.net/mode/ruby/ruby.js"></script>
108
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script>
109
+ <script src="js/nodeutil.js"></script>
110
+ <script src="compiled/application.js"></script>
111
+
112
+
113
+ <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
114
+ </body>
115
+ </html>