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
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ build
2
+ .idea
3
+ *~
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ opal_irb
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 1.9.3-p545
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+
4
+ gem 'opal', :git => "git://github.com/opal/opal.git"
5
+ gem 'opal-jquery', :git => "git://github.com/opal/opal-jquery.git"
6
+ gem 'opal-browser', :git => "git://github.com/opal/opal-browser.git"
7
+ gem 'opal-rspec', :git => "git://github.com/opal/opal-rspec.git"
8
+
9
+ gem 'guard'
10
+ gem 'guard-process'
11
+ gem 'rake'
12
+ gem 'rb-fsevent'
13
+
14
+ gem 'terminal-notifier'
data/Gemfile.lock ADDED
@@ -0,0 +1,113 @@
1
+ GIT
2
+ remote: git://github.com/opal/opal-browser.git
3
+ revision: dff179fd08b44d19b6558aa7c429e1cee4770487
4
+ specs:
5
+ opal-browser (0.2.0.beta1)
6
+ opal
7
+ paggio
8
+
9
+ GIT
10
+ remote: git://github.com/opal/opal-jquery.git
11
+ revision: 6d864fb0dfa0a5cd399f1a46bfa2e24fcb257768
12
+ specs:
13
+ opal-jquery (0.3.0)
14
+ opal (~> 0.7.0)
15
+
16
+ GIT
17
+ remote: git://github.com/opal/opal-rspec.git
18
+ revision: ef2a7b0b969c06617ebbf3f17fc73d7af2363f94
19
+ specs:
20
+ opal-rspec (0.4.1)
21
+ opal (~> 0.7.0)
22
+
23
+ GIT
24
+ remote: git://github.com/opal/opal.git
25
+ revision: 8acef558986dbb4471c6060857c1693302d6293b
26
+ specs:
27
+ opal (0.7.1)
28
+ hike (~> 1.2)
29
+ sourcemap (~> 0.1.0)
30
+ sprockets (>= 2.2.3, < 4.0.0)
31
+ tilt (~> 1.4)
32
+
33
+ PATH
34
+ remote: .
35
+ specs:
36
+ opal-irb (0.7.0)
37
+ opal (~> 0.7.0)
38
+ opal-jquery
39
+
40
+ GEM
41
+ remote: https://rubygems.org/
42
+ specs:
43
+ celluloid (0.16.0)
44
+ timers (~> 4.0.0)
45
+ coderay (1.1.0)
46
+ ffi (1.9.8)
47
+ formatador (0.2.5)
48
+ guard (2.12.5)
49
+ formatador (>= 0.2.4)
50
+ listen (~> 2.7)
51
+ lumberjack (~> 1.0)
52
+ nenv (~> 0.1)
53
+ notiffany (~> 0.0)
54
+ pry (>= 0.9.12)
55
+ shellany (~> 0.0)
56
+ thor (>= 0.18.1)
57
+ guard-compat (1.2.1)
58
+ guard-process (1.2.1)
59
+ guard-compat (~> 1.2, >= 1.2.1)
60
+ spoon (~> 0.0.1)
61
+ hike (1.2.3)
62
+ hitimes (1.2.2)
63
+ listen (2.9.0)
64
+ celluloid (>= 0.15.2)
65
+ rb-fsevent (>= 0.9.3)
66
+ rb-inotify (>= 0.9)
67
+ lumberjack (1.0.9)
68
+ method_source (0.8.2)
69
+ multi_json (1.11.0)
70
+ nenv (0.2.0)
71
+ notiffany (0.0.6)
72
+ nenv (~> 0.1)
73
+ shellany (~> 0.0)
74
+ paggio (0.2.4)
75
+ pry (0.10.1)
76
+ coderay (~> 1.1.0)
77
+ method_source (~> 0.8.1)
78
+ slop (~> 3.4)
79
+ rack (1.6.0)
80
+ rake (10.4.2)
81
+ rb-fsevent (0.9.4)
82
+ rb-inotify (0.9.5)
83
+ ffi (>= 0.5.0)
84
+ shellany (0.0.1)
85
+ slop (3.6.0)
86
+ sourcemap (0.1.1)
87
+ spoon (0.0.4)
88
+ ffi
89
+ sprockets (2.12.3)
90
+ hike (~> 1.2)
91
+ multi_json (~> 1.0)
92
+ rack (~> 1.0)
93
+ tilt (~> 1.1, != 1.3.0)
94
+ terminal-notifier (1.6.2)
95
+ thor (0.19.1)
96
+ tilt (1.4.1)
97
+ timers (4.0.1)
98
+ hitimes
99
+
100
+ PLATFORMS
101
+ ruby
102
+
103
+ DEPENDENCIES
104
+ guard
105
+ guard-process
106
+ opal!
107
+ opal-browser!
108
+ opal-irb!
109
+ opal-jquery!
110
+ opal-rspec!
111
+ rake
112
+ rb-fsevent
113
+ terminal-notifier
data/Guardfile ADDED
@@ -0,0 +1,5 @@
1
+ require 'guard/guard'
2
+
3
+ guard "process", :name => "Opal", :command => "rake" do
4
+ watch /(opal|spec)\/.+\.rb/
5
+ end
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2013 Forrest K. Chang
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,175 @@
1
+ opal-irb
2
+ =========
3
+
4
+ irb (interactive ruby) for Opal (Ruby running on javascript). This is
5
+ interactive console (REPL) on a webpage. Good for testing Opal/ruby
6
+ interactively without having to install anything. Intended to be part
7
+ of a browser based interactive development tool for Opal
8
+
9
+ Try it here: http://fkchang.github.io/opal-irb/index-jq.html
10
+
11
+ Embedded example http://fkchang.github.io/opal-irb/index-embeddable.html
12
+
13
+ Original https://github.com/larryng/coffeescript-repl based port http://fkchang.github.io/opal-irb/index-homebrew.html
14
+
15
+
16
+ Instructional Media
17
+ -------------------
18
+
19
+ Videos:
20
+ * Overview, no sound http://www.youtube.com/watch?v=6hUwN5BdSHo
21
+ * Demo of 1st cut of tab completion https://youtu.be/mQTulgBm5Nk
22
+
23
+ Blogposts:
24
+ * Thorough overview of features including embedded iframe examples of such http://funkworks.blogspot.com/2015/08/an-overview-of-opal-irbs-features.html
25
+
26
+ Presentations:
27
+ * Overview of features based on above blogpost (reveal.js exported by org-mode doc in doc/presentations directory)
28
+ http://fkchang.github.io/opal-irb/doc/presentations/opal_irb_overview.html
29
+
30
+ Features
31
+ --------
32
+
33
+ * Opal irb in your browser
34
+ * Command history - up/down arrows, ctrl-n/ctrl-p
35
+ * Multiline support - ctrl-m to enter editor, ctrl-Enter to submit code
36
+ * Colorized output
37
+ * Access last returned value via $_
38
+ * Shareable code links like [this](http://fkchang.github.io/opal-irb/index-jq.html#code:class%20Welcome%0A%20%20def%20announce%0A%20%20%20%20alert%20%22Welcome%20to%20opal-irb%22%0A%20%20end%0Aend%0Aw%20%3D%20Welcome.new%0Aw.announce)
39
+ * create links by hitting ctrl-L and the lines/multilines will be made into a shareable link
40
+ * also can create links using the history number, i.e. irb\_link\_for 2
41
+ * Emacs keystrokes like all GNU readline apps (original irb included)
42
+ * 100% HTML and JavaScript
43
+
44
+ HOW TOS
45
+ -------
46
+
47
+ ## Embedding into opal apps
48
+
49
+ ### Lissio
50
+
51
+ Embedding into lissio app, as made by lissio new
52
+
53
+ * add to Gemfile opal-irb
54
+ ```ruby
55
+ gem 'opal-irb', github: 'fkchang/opal-irb'
56
+ ```
57
+ * invoke app to require opal-jquery and opal-irb
58
+ ```bash
59
+ lissio start --require opal-irb
60
+ ```
61
+ * add a helper which includes the jquery and codemirror requirements
62
+
63
+ ```html
64
+ <%= OpalIrbUtils.include_opal_irb_jqconsole_requirements %>
65
+ ```
66
+
67
+ * change the require in app/app.rb -- order matters, at the moment to have opal-jquery and opal-browser coexist you need to load opal-jquery before loading lissio
68
+ ```ruby
69
+ require 'opal'
70
+ require 'jqconsole' # add these 3 jqconsole support
71
+ require 'opal_irb_jqconsole_css' # css for opal_irb_jqconsole_css
72
+ require 'opal_irb_jqconsole' # the console code
73
+ require 'lissio'
74
+
75
+ ```
76
+ * override Application#start() to create a button and hook up opal-irb
77
+ ```ruby
78
+ def start
79
+ super
80
+ element << DOM do
81
+ button.show_irb! "Show Irb"
82
+ end
83
+
84
+ OpalIrbJqconsole.create_bottom_panel
85
+ OpalIrbJqconsole.add_open_panel_behavior("show_irb")
86
+ end
87
+
88
+ ```
89
+
90
+ * profit!
91
+
92
+ ### Rails
93
+ * setup Rails app for opal use via https://github.com/opal/opal-rails
94
+ * add to Gemfile opal-irb, jquery-ui-rails (for multi editor)
95
+ ```ruby
96
+ gem 'opal-irb', github: 'fkchang/opal-irb', require: 'opal-irb-rails'
97
+ gem 'jquery-ui-rails'
98
+ ```
99
+ * include stylesheets in application.css.scss
100
+ ```scss
101
+ /*= require_self
102
+ *= require jquery-ui/dialog
103
+ *= require opal-irb/jqconsole
104
+ */
105
+ ```
106
+ * include jquery UI dialog in application.js
107
+ ```js
108
+ //= require jquery-ui/dialog
109
+ ```
110
+
111
+ * include codemirror js/css, you can pull from CDN w/the below in your template (haml example below)
112
+ ```haml
113
+ = OpalIrbUtils.include_code_mirror.html_safe
114
+ ```
115
+
116
+ * Set it up in opal code
117
+
118
+ * Example that creates a bottom panel, a button to bring it up
119
+ ```ruby
120
+ require 'opal_irb_jqconsole'
121
+
122
+ # opal-browser code to add a button
123
+ $document["#workarea"] << DOM do
124
+ button.show_irb! "Show Irb"
125
+ end
126
+ # opal-jquery code to add a button
127
+ Element.find(".main").append "<button class='btn' id='show_irb'>Show Irb</button>"
128
+
129
+ # creates a panel at the bottom
130
+ OpalIrbJqconsole.create_bottom_panel(hidden=true)
131
+ # adds open panel behavior to element w/id show_irb
132
+ OpalIrbJqconsole.add_open_panel_behavior("show_irb")
133
+ ```
134
+
135
+ * Example that creates a bottom panel, makes a hot key "shift-command-c" to toggle the panel
136
+
137
+ ```ruby
138
+ OpalIrbJqconsole.create_bottom_panel(hidden=true)
139
+ OpalIrbJqconsole.add_hot_key_panel_behavior(modifiers: %w(meta shift), key: "c")
140
+
141
+ ```
142
+
143
+ * profit!
144
+
145
+ Dependencies
146
+ ------------
147
+
148
+ * opal - of course
149
+ * opal-jquery (would like to do away with this, don't need it)
150
+ * jquery (cuz of the above)
151
+ * jquery-ui dialog - for the code dial
152
+ * code mirror - for code editing
153
+ * opal-browser (so you can use it from opal-irb) OPTIONAL, it's used in the examples but it can be deployed without opal-browser, esp. since Rails defaults to using jquery and opal-browser and opal-jquery have a lot of overlap, and some small conflicts
154
+
155
+ Version Scheme
156
+ --------------
157
+ While in my mind there are a lot of things that keep opal-irb at not yet suitable to be a gem/ 0.1.0 version number, I frequently have to change code to support the latest minor release for Opal, so I think I need to adopt a scheme that tracks such. So the 1st gem release will be 0.7.0, to indicate compatibility with 0.7.* versions of opal, followed fairly quickly with a 0.8.0 release to match 0.8.0 the current version (at time of writing) of opal.
158
+
159
+ Roadmap
160
+ -------
161
+ * Figure out how to keep variables -- DONE 6/10/2013, thx @adambeynon
162
+ * have it automatically know when a complete ruby expression is there instead of multi line mode like irb -- CLOSE ENOUGH 6/21/2013 via jqconsole
163
+ * Make a gem - DONE 6/23/2013 1st for use in opal-inspector
164
+ * Hook into smalltalk style object browser for opal that I plan to write - STARTED
165
+ * Some demos to show how convenient it can be - DONE 7/19/2013 - you tube video overview
166
+ * Add more irb/pry functionality
167
+ * tab completion
168
+ * cd ls
169
+ * show source via source maps and opal-inspector
170
+ * Make embeddable in any app STARTED 7/30/2013, made embeddable into lisso 2/4/2014
171
+ * print out inspect in ruby format
172
+ * Rails plugin - WORK done on 8/27/14, works w/opal rails and assets, need to document
173
+ * navigate stacktrace code via source maps
174
+ * remove jquery dependancy -- need to convert jqconsole, and remove the the jquery-ui dialog
175
+ * split up dependancy and hierarchy, jquery and jquery free versions, rails vs no rails, etc.
data/Rakefile ADDED
@@ -0,0 +1,65 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'bundler'
3
+ Bundler.require
4
+
5
+ require 'opal'
6
+ require 'opal-rspec'
7
+ require 'opal/sprockets/environment'
8
+
9
+ require 'opal/rspec/rake_task'
10
+ Opal::RSpec::RakeTask.new(:default)
11
+
12
+ desc "build irb with homebrew console"
13
+ task :build_homebrew_console do
14
+ File.open("compiled/application.js", "w+") do |out|
15
+ Opal::Processor.source_map_enabled = false
16
+ env = Opal::Environment.new
17
+ env.append_path "examples"
18
+ env.append_path "opal"
19
+ out << env["application"].to_s
20
+ end
21
+ system "open -a 'Google Chrome' index-homebrew.html"
22
+ end
23
+
24
+ desc "build jqconsole based irb"
25
+ task :build_jqconsole do
26
+
27
+ File.open("compiled/app-jqconsole.js", "w+") do |out|
28
+ env = Opal::Environment.new
29
+ env.append_path "examples"
30
+ env.append_path "opal"
31
+ out << env["app-jqconsole"].to_s
32
+ end
33
+ # system "terminal-notifier -title 'opal-irb build' -message 'js file built'"
34
+ system "open -a 'Google Chrome' index-jq.html"
35
+ end
36
+
37
+ desc "build embeddable irb"
38
+ task :build_embeddable do
39
+
40
+ File.open("compiled/app-embeddable.js", "w+") do |out|
41
+ env = Opal::Environment.new
42
+ env.append_path "examples"
43
+ env.append_path "opal"
44
+ out << env["app-embeddable"].to_s
45
+ end
46
+ # system "terminal-notifier -title 'opal-irb build' -message 'js file built'"
47
+ system "open -a 'Google Chrome' index-embeddable.html"
48
+ end
49
+
50
+ desc "build PhantomJS based repl"
51
+
52
+ task :build_phantomjs do
53
+ File.open("compiled/opal-phantom.js", "w+") do |out|
54
+ env = Opal::Environment.new
55
+ env.append_path "opal"
56
+ out << env["opal_phantomjs"].to_s
57
+ end
58
+ end
59
+
60
+
61
+ desc "build all the example apps and view them"
62
+ task :build_all => [:build_homebrew_console, :build_jqconsole, :build_embeddable]
63
+ desc "shortcut for build embeddable, cuz I'm lazy"
64
+ task :build_e => :build_embeddable
65
+ #task :default => :build_jqconsole
data/Roadmap.org ADDED
@@ -0,0 +1,17 @@
1
+ * Remove jquery dependency
2
+ - [ ] Remove jquery-ui dialog
3
+ - [ ] rewrite jq-console
4
+ * Smalltalk inspired
5
+ - [ ] create/proceed from nomethod error
6
+ - [ ] create/proceed from undefined constant
7
+ - [ ] method search (take in params and get result)
8
+
9
+ * Lisp Machine inspired
10
+ - [ ] right click edit of text
11
+ - [ ] edit objects from command line
12
+
13
+ * Other
14
+ - [ ] . tab completion
15
+ - [X] irb var tab completion
16
+ - [X] constant tab completion
17
+ - [X] free standing method completion
@@ -0,0 +1,263 @@
1
+ #opal-irb-console-bottom-panel {
2
+ width: 100%;
3
+ position: fixed;
4
+ bottom: 0px;
5
+ }
6
+ #opal-irb-console-topbar {
7
+ height:24px;
8
+ }
9
+ #opal-irb-console {
10
+ height: 400px;
11
+ position:relative;
12
+ background-color: #9b111e;
13
+ border: 2px solid #CCC;
14
+ margin: 0 auto;
15
+ }
16
+ .jqconsole-ansi-bold {
17
+ font-weight: bold!important;
18
+ }
19
+
20
+ .jqconsole-ansi-lighter {
21
+ font-weight: lighter!important;
22
+ }
23
+
24
+ .jqconsole-ansi-italic {
25
+ font-style: italic!important;
26
+ }
27
+
28
+ .jqconsole-ansi-underline {
29
+ text-decoration: underline!important;
30
+ }
31
+
32
+ @-webkit-keyframes blinker {
33
+ from { opacity: 1.0; }
34
+ to { opacity: 0.0; }
35
+ }
36
+
37
+ @-moz-keyframes blinker {
38
+ from { opacity: 1.0; }
39
+ to { opacity: 0.0; }
40
+ }
41
+
42
+ @-ms-keyframes blinker {
43
+ from { opacity: 1.0; }
44
+ to { opacity: 0.0; }
45
+ }
46
+
47
+ @-o-keyframes blinker {
48
+ from { opacity: 1.0; }
49
+ to { opacity: 0.0; }
50
+ }
51
+
52
+ .jqconsole-ansi-blink {
53
+ -webkit-animation-name: blinker;
54
+ -moz-animation-name: blinker;
55
+ -ms-animation-name: blinker;
56
+ -o-animation-name: blinker;
57
+ -webkit-animation-iteration-count: infinite;
58
+ -moz-animation-iteration-count: infinite;
59
+ -ms-animation-iteration-count: infinite;
60
+ -o-animation-iteration-count: infinite;
61
+ -webkit-animation-timing-function: cubic-bezier(1.0,0,0,1.0);
62
+ -ms-animation-timing-function: cubic-bezier(1.0,0,0,1.0);
63
+ -o-animation-timing-function: cubic-bezier(1.0,0,0,1.0);
64
+ -moz-animation-timing-function: cubic-bezier(1.0,0,0,1.0);
65
+ -webkit-animation-duration: 1s;
66
+ -moz-animation-duration: 1s;
67
+ -o-animation-duration: 1s;
68
+ -ms-animation-duration: 1s;
69
+ }
70
+
71
+ .jqconsole-ansi-blink-rapid {
72
+ -webkit-animation-name: blinker;
73
+ -moz-animation-name: blinker;
74
+ -ms-animation-name: blinker;
75
+ -o-animation-name: blinker;
76
+ -webkit-animation-iteration-count: infinite;
77
+ -moz-animation-iteration-count: infinite;
78
+ -ms-animation-iteration-count: infinite;
79
+ -o-animation-iteration-count: infinite;
80
+ -webkit-animation-timing-function: cubic-bezier(1.0,0,0,1.0);
81
+ -ms-animation-timing-function: cubic-bezier(1.0,0,0,1.0);
82
+ -o-animation-timing-function: cubic-bezier(1.0,0,0,1.0);
83
+ -moz-animation-timing-function: cubic-bezier(1.0,0,0,1.0);
84
+ -webkit-animation-duration: 0.5s;
85
+ -moz-animation-duration: 0.5s;
86
+ -o-animation-duration: 0.5s;
87
+ -ms-animation-duration: 0.5s;
88
+ }
89
+
90
+
91
+ .jqconsole-ansi-hidden {
92
+ visibility:hidden!important;
93
+ }
94
+
95
+ .jqconsole-ansi-line-through {
96
+ text-decoration: line-through;
97
+ }
98
+
99
+ .jqconsole-ansi-fonts-1 {
100
+
101
+ }
102
+ .jqconsole-ansi-fonts-2 {
103
+
104
+ }
105
+ .jqconsole-ansi-fonts-3 {
106
+
107
+ }
108
+ .jqconsole-ansi-fonts-4 {
109
+
110
+ }
111
+ .jqconsole-ansi-fonts-5 {
112
+
113
+ }
114
+ .jqconsole-ansi-fonts-6 {
115
+
116
+ }
117
+ .jqconsole-ansi-fonts-7 {
118
+
119
+ }
120
+ .jqconsole-ansi-fonts-8 {
121
+
122
+ }
123
+ .jqconsole-ansi-fonts-9 {
124
+
125
+ }
126
+
127
+ .jqconsole-ansi-fraktur {
128
+
129
+ }
130
+
131
+ .jqconsole-ansi-color-black {
132
+ color: black!important;
133
+ }
134
+ .jqconsole-ansi-color-red {
135
+ color: red!important;
136
+ }
137
+ .jqconsole-ansi-color-green {
138
+ color: green!important;
139
+ }
140
+ .jqconsole-ansi-color-yellow {
141
+ color: yellow!important;
142
+ }
143
+ .jqconsole-ansi-color-blue {
144
+ color: blue!important;
145
+ }
146
+ .jqconsole-ansi-color-magenta {
147
+ color: magenta!important;
148
+ }
149
+ .jqconsole-ansi-color-cyan {
150
+ color: cyan!important;
151
+ }
152
+ .jqconsole-ansi-color-white {
153
+ color: white!important;
154
+ }
155
+
156
+ .jqconsole-ansi-background-color-black {
157
+ background-color: black!important;
158
+ }
159
+ .jqconsole-ansi-background-color-red {
160
+ background-color: red!important;
161
+ }
162
+ .jqconsole-ansi-background-color-green {
163
+ background-color: green!important;
164
+ }
165
+ .jqconsole-ansi-background-color-yellow {
166
+ background-color: yellow!important;
167
+ }
168
+ .jqconsole-ansi-background-color-blue {
169
+ background-color: blue!important;
170
+ }
171
+ .jqconsole-ansi-background-color-magenta {
172
+ background-color: magenta!important;
173
+ }
174
+ .jqconsole-ansi-background-color-cyan {
175
+ background-color: cyan!important;
176
+ }
177
+ .jqconsole-ansi-background-color-white {
178
+ background-color: white!important;
179
+ }
180
+
181
+ .jqconsole-ansi-framed {
182
+ border: 1px solid!important;
183
+ }
184
+ .jqconsole-ansi-overline {
185
+ text-decoration: overline!important;
186
+ }
187
+
188
+
189
+ #opal-irb-console-bottom-panel {
190
+ margin: 0;
191
+ padding: 0;
192
+ background-color: #333;
193
+ color: white;
194
+ font-family: monospace;
195
+ width: 98%;
196
+ position: fixed;
197
+ bottom: 0px;
198
+ }
199
+ #opal-irb-console-topbar {
200
+ height:24px;
201
+ }
202
+ #opal-irb-console {
203
+ height: 400px;
204
+ position:relative;
205
+ background-color: #9b111e;
206
+ border: 2px solid #CCC;
207
+ margin: 0 auto;
208
+ }
209
+ .jqconsole {
210
+ padding: 10px;
211
+ padding-bottom: 10px;
212
+ }
213
+ .jqconsole-cursor {
214
+ background-color: #999;
215
+ }
216
+ .jqconsole-blurred .jqconsole-cursor {
217
+ background-color: #666;
218
+ }
219
+ .jqconsole-prompt {
220
+ color: #0d0;
221
+ }
222
+ .jqconsole-old-prompt {
223
+ color: #0b0;
224
+ font-weight: normal;
225
+ }
226
+ .jqconsole-input {
227
+ color: #dd0;
228
+ }
229
+ .jqconsole-old-input {
230
+ color: #bb0;
231
+ font-weight: normal;
232
+ }
233
+ .brace {
234
+ color: #00FFFF;
235
+ }
236
+ .paran {
237
+ color: #FF00FF;
238
+ }
239
+ .bracket {
240
+ color: #FFFF00;
241
+ }
242
+ .jqconsole-composition {
243
+ background-color: red;
244
+ }
245
+
246
+ span.boxclose, a.boxclose{
247
+ float:right;
248
+ cursor:pointer;
249
+ color: #fff;
250
+ border: 1px solid #AEAEAE;
251
+ border-radius: 30px;
252
+ background: red;
253
+ font-family: helvetica;
254
+ font-size: 20px;
255
+ font-weight: bold;
256
+ display: inline-block;
257
+ line-height: 0px;
258
+ padding: 11px 3px;
259
+ }
260
+
261
+ .boxclose:before {
262
+ content: "x";
263
+ }