iruby 0.2.8 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,38 @@
1
+ module IRuby
2
+ module Input
3
+ class Popup < Widget
4
+ needs :title, :form, buttons: []
5
+
6
+ def widget_css
7
+ style = '.modal-body { overflow: auto; }'
8
+ widget_join :widget_css, style, @form, *@buttons
9
+ end
10
+
11
+ def widget_js
12
+ js = <<-JS
13
+ require(['base/js/dialog'], function(dialog) {
14
+ var popup = dialog.modal({
15
+ title: '#{@title.gsub("'"){"\\'"}}',
16
+ body: '#{@form.to_html}',
17
+ destroy: true,
18
+ sanitize: false,
19
+ keyboard_manager: Jupyter.notebook.keyboard_manager,
20
+ open: function() {
21
+ #{widget_join :widget_js, @form, *@buttons}
22
+
23
+ var popup = $(this);
24
+ $('#iruby-form').submit(function() {
25
+ popup.modal('hide');
26
+ })
27
+ }
28
+ });
29
+
30
+ popup.find('.modal-footer').each(function(e) {
31
+ $(this).append('#{@buttons.map(&:to_html).join}');
32
+ });
33
+ });
34
+ JS
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,47 @@
1
+ module IRuby
2
+ module Input
3
+ class Radio < Label
4
+ needs :options
5
+
6
+ builder :radio do |*args, **params|
7
+ key = :radio
8
+ key, *args = args if args.first.is_a? Symbol
9
+
10
+ params[:key] = unique_key(key)
11
+ params[:options] = args
12
+ add_field Radio.new(**params)
13
+ end
14
+
15
+ def widget_js
16
+ <<-JS
17
+ $('.iruby-radio input').change(function(){
18
+ var parent = $(this).closest('.iruby-radio');
19
+ $(parent).data('iruby-value',
20
+ $(parent).find(':checked').val()
21
+ );
22
+ });
23
+ JS
24
+ end
25
+
26
+ def widget_html
27
+ params = {
28
+ :'data-iruby-key' => @key,
29
+ :'data-iruby-value' => @options.first,
30
+ class: 'iruby-radio form-control'
31
+ }
32
+ widget_label do
33
+ div **params do
34
+ @options.each do |option|
35
+ label class: 'radio-inline' do
36
+ input(
37
+ name: @key, value: option, type: 'radio'
38
+ )
39
+ text option
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,45 @@
1
+ module IRuby
2
+ module Input
3
+ class Select < Label
4
+ needs :options
5
+
6
+ builder :select do |*args, **params|
7
+ key = :select
8
+ key, *args = args if args.first.is_a? Symbol
9
+
10
+ key = unique_key(key)
11
+ add_field Select.new(key: key, options: args)
12
+ end
13
+
14
+ def widget_css
15
+ '.iruby-select { margin-left: 0 !important }'
16
+ end
17
+
18
+ def widget_js
19
+ <<-JS
20
+ $('.iruby-select').change(function(){
21
+ $(this).data('iruby-value',
22
+ $(this).find('option:selected').text()
23
+ );
24
+ });
25
+ JS
26
+ end
27
+
28
+ def widget_html
29
+ widget_label do
30
+ div class: 'form-control' do
31
+ params = {
32
+ class: 'iruby-select',
33
+ :'data-iruby-key' => @key,
34
+ :'data-iruby-value' => @options.first
35
+ }
36
+
37
+ select **params do
38
+ @options.each {|o| option o }
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,22 @@
1
+ module IRuby
2
+ module Input
3
+ class Textarea < Field
4
+ needs rows: 5
5
+
6
+ builder :textarea do |key='textarea', **params|
7
+ params[:key] = unique_key key
8
+ add_field Textarea.new(**params)
9
+ end
10
+
11
+ def widget_html
12
+ widget_label do
13
+ textarea(
14
+ rows: @rows,
15
+ :'data-iruby-key' => @key,
16
+ class: 'form-control iruby-field'
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,34 @@
1
+ module IRuby
2
+ module Input
3
+ class Widget < Erector::Widget
4
+ needs key: nil
5
+
6
+ def widget_js; end
7
+ def widget_css; end
8
+ def widget_html; end
9
+ def content; widget_html; end
10
+
11
+ def self.builder method, &block
12
+ Builder.instance_eval do
13
+ define_method method, &block
14
+ end
15
+ end
16
+
17
+ def widget_join method, *args
18
+ strings = args.map do |arg|
19
+ arg.is_a?(String) ? arg : arg.send(method)
20
+ end
21
+ strings.uniq.join("\n")
22
+ end
23
+
24
+ def widget_display
25
+ IRuby.display(IRuby.html(
26
+ Erector.inline{ style raw(widget_css) }.to_html
27
+ ))
28
+
29
+ IRuby.display(IRuby.html(to_html))
30
+ IRuby.display(IRuby.javascript(widget_js))
31
+ end
32
+ end
33
+ end
34
+ end
@@ -14,6 +14,9 @@ module IRuby
14
14
  pub_socket = c.socket(ZMQ::PUB)
15
15
  pub_socket.bind(connection % config['iopub_port'])
16
16
 
17
+ stdin_socket = c.socket(ZMQ::XREP)
18
+ stdin_socket.bind(connection % config['stdin_port'])
19
+
17
20
  Thread.new do
18
21
  begin
19
22
  hb_socket = c.socket(ZMQ::REP)
@@ -24,7 +27,10 @@ module IRuby
24
27
  end
25
28
  end
26
29
 
27
- @sockets = { publish: pub_socket, reply: reply_socket }
30
+ @sockets = {
31
+ publish: pub_socket, reply: reply_socket, stdin: stdin_socket
32
+ }
33
+
28
34
  @session = SecureRandom.uuid
29
35
  unless config['key'].to_s.empty? || config['signature_scheme'].to_s.empty?
30
36
  raise 'Unknown signature scheme' unless config['signature_scheme'] =~ /\Ahmac-(.*)\Z/
@@ -70,5 +76,12 @@ module IRuby
70
76
 
71
77
  @last_recvd_msg = unserialize(msg)
72
78
  end
79
+
80
+ def recv_input
81
+ last_recvd_msg = @last_recvd_msg
82
+ input = recv(:stdin)[:content]["value"]
83
+ @last_recvd_msg = last_recvd_msg
84
+ input
85
+ end
73
86
  end
74
87
  end
@@ -14,6 +14,9 @@ module IRuby
14
14
  pub_socket = c.socket(:PUB)
15
15
  pub_socket.bind(connection % config['iopub_port'])
16
16
 
17
+ stdin_socket = c.socket(:ROUTER)
18
+ stdin_socket.bind(connection % config['stdin_port'])
19
+
17
20
  Thread.new do
18
21
  begin
19
22
  hb_socket = c.socket(:REP)
@@ -24,7 +27,10 @@ module IRuby
24
27
  end
25
28
  end
26
29
 
27
- @sockets = { publish: pub_socket, reply: reply_socket }
30
+ @sockets = {
31
+ publish: pub_socket, reply: reply_socket, stdin: stdin_socket
32
+ }
33
+
28
34
  @session = SecureRandom.uuid
29
35
  unless config['key'].to_s.empty? || config['signature_scheme'].to_s.empty?
30
36
  raise 'Unknown signature scheme' unless config['signature_scheme'] =~ /\Ahmac-(.*)\Z/
@@ -54,5 +60,9 @@ module IRuby
54
60
  def recv(socket)
55
61
  @last_recvd_msg = unserialize(@sockets[socket].recv_message)
56
62
  end
63
+
64
+ def recv_input
65
+ unserialize(@sockets[:stdin].recv_message)[:content]["value"]
66
+ end
57
67
  end
58
68
  end
@@ -1,3 +1,3 @@
1
1
  module IRuby
2
- VERSION = '0.2.8'
2
+ VERSION = '0.2.9'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Mendler
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-12-06 00:00:00.000000000 Z
12
+ date: 2016-05-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -81,6 +81,20 @@ dependencies:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0.3'
84
+ - !ruby/object:Gem::Dependency
85
+ name: data_uri
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '0.1'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '0.1'
84
98
  description: A Ruby kernel for Jupyter/IPython frontends (e.g. notebook). Try it at
85
99
  try.jupyter.org.
86
100
  email:
@@ -110,6 +124,23 @@ files:
110
124
  - lib/iruby/command.rb
111
125
  - lib/iruby/display.rb
112
126
  - lib/iruby/formatter.rb
127
+ - lib/iruby/input.rb
128
+ - lib/iruby/input/README.ipynb
129
+ - lib/iruby/input/autoload.rb
130
+ - lib/iruby/input/builder.rb
131
+ - lib/iruby/input/button.rb
132
+ - lib/iruby/input/cancel.rb
133
+ - lib/iruby/input/checkbox.rb
134
+ - lib/iruby/input/date.rb
135
+ - lib/iruby/input/field.rb
136
+ - lib/iruby/input/file.rb
137
+ - lib/iruby/input/form.rb
138
+ - lib/iruby/input/label.rb
139
+ - lib/iruby/input/popup.rb
140
+ - lib/iruby/input/radio.rb
141
+ - lib/iruby/input/select.rb
142
+ - lib/iruby/input/textarea.rb
143
+ - lib/iruby/input/widget.rb
113
144
  - lib/iruby/kernel.rb
114
145
  - lib/iruby/logger.rb
115
146
  - lib/iruby/ostream.rb
@@ -152,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
183
  version: '0'
153
184
  requirements: []
154
185
  rubyforge_project:
155
- rubygems_version: 2.2.2
186
+ rubygems_version: 2.4.6
156
187
  signing_key:
157
188
  specification_version: 4
158
189
  summary: Ruby Kernel for Jupyter/IPython
@@ -160,3 +191,4 @@ test_files:
160
191
  - test/integration_test.rb
161
192
  - test/iruby/multi_logger_test.rb
162
193
  - test/test_helper.rb
194
+ has_rdoc: