_rubyapp 0.0.3

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.
Files changed (197) hide show
  1. data/.gitignore +6 -0
  2. data/.rvmrc +1 -0
  3. data/Gemfile +4 -0
  4. data/README.md +0 -0
  5. data/Rakefile +65 -0
  6. data/bin/rubyapp +78 -0
  7. data/features/breadcrumbs.feature +10 -0
  8. data/features/content.feature +15 -0
  9. data/features/default.feature +9 -0
  10. data/features/exception.feature +50 -0
  11. data/features/input.feature +12 -0
  12. data/features/list.feature +12 -0
  13. data/features/step_definitions/default_macros.rb +15 -0
  14. data/features/step_definitions/default_steps.rb +36 -0
  15. data/features/support/env.rb +8 -0
  16. data/lib/rubyapp.rb +1 -0
  17. data/lib/rubyapp/config.ru +22 -0
  18. data/lib/rubyapp/element.css.haml +3 -0
  19. data/lib/rubyapp/element.html.haml +2 -0
  20. data/lib/rubyapp/element.js.haml +3 -0
  21. data/lib/rubyapp/element.rb +100 -0
  22. data/lib/rubyapp/elements/button.css.haml +5 -0
  23. data/lib/rubyapp/elements/button.html.haml +3 -0
  24. data/lib/rubyapp/elements/button.rb +19 -0
  25. data/lib/rubyapp/elements/click.js.haml +9 -0
  26. data/lib/rubyapp/elements/click.rb +44 -0
  27. data/lib/rubyapp/elements/content.css.haml +12 -0
  28. data/lib/rubyapp/elements/content.html.haml +3 -0
  29. data/lib/rubyapp/elements/content.js.haml +9 -0
  30. data/lib/rubyapp/elements/content.rb +51 -0
  31. data/lib/rubyapp/elements/dialog.css.haml +30 -0
  32. data/lib/rubyapp/elements/dialog.html.haml +8 -0
  33. data/lib/rubyapp/elements/dialog.rb +58 -0
  34. data/lib/rubyapp/elements/dialogs/exception_dialog.css.haml +4 -0
  35. data/lib/rubyapp/elements/dialogs/exception_dialog.html.haml +8 -0
  36. data/lib/rubyapp/elements/dialogs/exception_dialog.rb +32 -0
  37. data/lib/rubyapp/elements/dialogs/message_dialog.html.haml +8 -0
  38. data/lib/rubyapp/elements/dialogs/message_dialog.rb +33 -0
  39. data/lib/rubyapp/elements/exception_element.css.haml +12 -0
  40. data/lib/rubyapp/elements/exception_element.html.haml +6 -0
  41. data/lib/rubyapp/elements/exception_element.rb +19 -0
  42. data/lib/rubyapp/elements/input.css.haml +5 -0
  43. data/lib/rubyapp/elements/input.html.haml +2 -0
  44. data/lib/rubyapp/elements/input.js.haml +8 -0
  45. data/lib/rubyapp/elements/input.rb +55 -0
  46. data/lib/rubyapp/elements/link.css.haml +5 -0
  47. data/lib/rubyapp/elements/link.html.haml +3 -0
  48. data/lib/rubyapp/elements/link.rb +19 -0
  49. data/lib/rubyapp/elements/list.css.haml +33 -0
  50. data/lib/rubyapp/elements/list.html.haml +11 -0
  51. data/lib/rubyapp/elements/list.js.haml +9 -0
  52. data/lib/rubyapp/elements/list.rb +60 -0
  53. data/lib/rubyapp/elements/mobile/ios/page.html.haml +36 -0
  54. data/lib/rubyapp/elements/mobile/ios/page.rb +29 -0
  55. data/lib/rubyapp/elements/navigation/breadcrumbs.css.haml +24 -0
  56. data/lib/rubyapp/elements/navigation/breadcrumbs.html.haml +16 -0
  57. data/lib/rubyapp/elements/navigation/breadcrumbs.js.haml +9 -0
  58. data/lib/rubyapp/elements/navigation/breadcrumbs.rb +49 -0
  59. data/lib/rubyapp/elements/navigation/page_link.css.haml +12 -0
  60. data/lib/rubyapp/elements/navigation/page_link.html.haml +8 -0
  61. data/lib/rubyapp/elements/navigation/page_link.js.haml +9 -0
  62. data/lib/rubyapp/elements/navigation/page_link.rb +56 -0
  63. data/lib/rubyapp/elements/navigation/page_menu.css.haml +36 -0
  64. data/lib/rubyapp/elements/navigation/page_menu.html.haml +11 -0
  65. data/lib/rubyapp/elements/navigation/page_menu.js.haml +9 -0
  66. data/lib/rubyapp/elements/navigation/page_menu.rb +57 -0
  67. data/lib/rubyapp/elements/page.css.haml +50 -0
  68. data/lib/rubyapp/elements/page.html.haml +30 -0
  69. data/lib/rubyapp/elements/page.js.haml +52 -0
  70. data/lib/rubyapp/elements/page.rb +60 -0
  71. data/lib/rubyapp/elements/pages/default_page.css.haml +4 -0
  72. data/lib/rubyapp/elements/pages/default_page.html.haml +5 -0
  73. data/lib/rubyapp/elements/pages/default_page.js.haml +4 -0
  74. data/lib/rubyapp/elements/pages/default_page.rb +33 -0
  75. data/lib/rubyapp/elements/pages/exception_page.css.haml +4 -0
  76. data/lib/rubyapp/elements/pages/exception_page.html.haml +3 -0
  77. data/lib/rubyapp/elements/pages/exception_page.rb +27 -0
  78. data/lib/rubyapp/elements/pages/test_pages/alphabet_list.html.haml +3 -0
  79. data/lib/rubyapp/elements/pages/test_pages/base_test_page.css.haml +17 -0
  80. data/lib/rubyapp/elements/pages/test_pages/base_test_page.html.haml +6 -0
  81. data/lib/rubyapp/elements/pages/test_pages/base_test_page.js.haml +4 -0
  82. data/lib/rubyapp/elements/pages/test_pages/base_test_page.rb +41 -0
  83. data/lib/rubyapp/elements/pages/test_pages/breadcrumbs_test_page.html.haml +4 -0
  84. data/lib/rubyapp/elements/pages/test_pages/breadcrumbs_test_page.rb +36 -0
  85. data/lib/rubyapp/elements/pages/test_pages/content_test_page.css.haml +5 -0
  86. data/lib/rubyapp/elements/pages/test_pages/content_test_page.html.haml +6 -0
  87. data/lib/rubyapp/elements/pages/test_pages/content_test_page.js.haml +4 -0
  88. data/lib/rubyapp/elements/pages/test_pages/content_test_page.rb +40 -0
  89. data/lib/rubyapp/elements/pages/test_pages/default_test_page.html.haml +3 -0
  90. data/lib/rubyapp/elements/pages/test_pages/default_test_page.rb +26 -0
  91. data/lib/rubyapp/elements/pages/test_pages/exception_content.html.haml +8 -0
  92. data/lib/rubyapp/elements/pages/test_pages/exception_test_page.css.haml +9 -0
  93. data/lib/rubyapp/elements/pages/test_pages/exception_test_page.html.haml +21 -0
  94. data/lib/rubyapp/elements/pages/test_pages/exception_test_page.rb +65 -0
  95. data/lib/rubyapp/elements/pages/test_pages/input_test_page.css.haml +5 -0
  96. data/lib/rubyapp/elements/pages/test_pages/input_test_page.html.haml +7 -0
  97. data/lib/rubyapp/elements/pages/test_pages/input_test_page.js.haml +4 -0
  98. data/lib/rubyapp/elements/pages/test_pages/input_test_page.rb +40 -0
  99. data/lib/rubyapp/elements/pages/test_pages/list_test_page.css.haml +5 -0
  100. data/lib/rubyapp/elements/pages/test_pages/list_test_page.html.haml +7 -0
  101. data/lib/rubyapp/elements/pages/test_pages/list_test_page.js.haml +4 -0
  102. data/lib/rubyapp/elements/pages/test_pages/list_test_page.rb +56 -0
  103. data/lib/rubyapp/mixins/duration.rb +18 -0
  104. data/lib/rubyapp/mixins/render.rb +69 -0
  105. data/lib/rubyapp/mixins/route.rb +40 -0
  106. data/lib/rubyapp/mixins/template.rb +38 -0
  107. data/lib/rubyapp/mixins/translate.rb +47 -0
  108. data/lib/rubyapp/rack/duration.rb +32 -0
  109. data/lib/rubyapp/rack/locale.rb +32 -0
  110. data/lib/rubyapp/rack/logger.rb +30 -0
  111. data/lib/rubyapp/rack/route.rb +97 -0
  112. data/lib/rubyapp/rack/session.rb +32 -0
  113. data/lib/rubyapp/resources/application.manifest +0 -0
  114. data/lib/rubyapp/resources/favicon.ico +0 -0
  115. data/lib/rubyapp/resources/mobile/ios/icon.png +0 -0
  116. data/lib/rubyapp/resources/mobile/ios/icon.psd +0 -0
  117. data/lib/rubyapp/resources/mobile/ios/start.png +0 -0
  118. data/lib/rubyapp/resources/mobile/ios/start.psd +0 -0
  119. data/lib/rubyapp/session.rb +44 -0
  120. data/lib/rubyapp/template/Gemfile +3 -0
  121. data/lib/rubyapp/template/Rakefile +25 -0
  122. data/lib/rubyapp/template/config.ru +22 -0
  123. data/lib/rubyapp/template/elements/pages/default_page.css.haml +13 -0
  124. data/lib/rubyapp/template/elements/pages/default_page.html.haml +6 -0
  125. data/lib/rubyapp/template/elements/pages/default_page.rb +22 -0
  126. data/lib/rubyapp/template/resources/application.manifest +0 -0
  127. data/lib/rubyapp/template/resources/favicon.ico +0 -0
  128. data/lib/rubyapp/template/resources/mobile/ios/icon.png +0 -0
  129. data/lib/rubyapp/template/resources/mobile/ios/start.png +0 -0
  130. data/lib/rubyapp/template/session.rb +17 -0
  131. data/lib/rubyapp/template/translations/en.yml +5 -0
  132. data/lib/rubyapp/translations/ar.yml +46 -0
  133. data/lib/rubyapp/translations/bg.yml +46 -0
  134. data/lib/rubyapp/translations/ca.yml +46 -0
  135. data/lib/rubyapp/translations/cs.yml +46 -0
  136. data/lib/rubyapp/translations/da.yml +46 -0
  137. data/lib/rubyapp/translations/de.yml +46 -0
  138. data/lib/rubyapp/translations/el.yml +46 -0
  139. data/lib/rubyapp/translations/en.bak +44 -0
  140. data/lib/rubyapp/translations/en.yml +48 -0
  141. data/lib/rubyapp/translations/es.yml +46 -0
  142. data/lib/rubyapp/translations/et.yml +46 -0
  143. data/lib/rubyapp/translations/fa.yml +46 -0
  144. data/lib/rubyapp/translations/fi.yml +46 -0
  145. data/lib/rubyapp/translations/fr.yml +46 -0
  146. data/lib/rubyapp/translations/gl.yml +46 -0
  147. data/lib/rubyapp/translations/hi.yml +46 -0
  148. data/lib/rubyapp/translations/hr.yml +46 -0
  149. data/lib/rubyapp/translations/ht.yml +46 -0
  150. data/lib/rubyapp/translations/hu.yml +46 -0
  151. data/lib/rubyapp/translations/id.yml +46 -0
  152. data/lib/rubyapp/translations/it.yml +46 -0
  153. data/lib/rubyapp/translations/iw.yml +46 -0
  154. data/lib/rubyapp/translations/ja.yml +46 -0
  155. data/lib/rubyapp/translations/ko.yml +46 -0
  156. data/lib/rubyapp/translations/lt.yml +46 -0
  157. data/lib/rubyapp/translations/lv.yml +46 -0
  158. data/lib/rubyapp/translations/mt.yml +46 -0
  159. data/lib/rubyapp/translations/nl.yml +46 -0
  160. data/lib/rubyapp/translations/no.yml +47 -0
  161. data/lib/rubyapp/translations/pl.yml +46 -0
  162. data/lib/rubyapp/translations/pt-PT.yml +46 -0
  163. data/lib/rubyapp/translations/ro.yml +46 -0
  164. data/lib/rubyapp/translations/ru.yml +46 -0
  165. data/lib/rubyapp/translations/sk.yml +46 -0
  166. data/lib/rubyapp/translations/sl.yml +46 -0
  167. data/lib/rubyapp/translations/sq.yml +46 -0
  168. data/lib/rubyapp/translations/sr.yml +46 -0
  169. data/lib/rubyapp/translations/sv.yml +46 -0
  170. data/lib/rubyapp/translations/th.yml +46 -0
  171. data/lib/rubyapp/translations/tl.yml +46 -0
  172. data/lib/rubyapp/translations/tr.yml +46 -0
  173. data/lib/rubyapp/translations/uk.yml +46 -0
  174. data/lib/rubyapp/translations/vi.yml +46 -0
  175. data/lib/rubyapp/translations/zh-CN.yml +46 -0
  176. data/lib/rubyapp/translations/zh-TW.yml +46 -0
  177. data/lib/rubyapp/translations/zh.yml +46 -0
  178. data/lib/rubyapp/version.rb +3 -0
  179. data/rubyapp.gemspec +36 -0
  180. data/spec/element_spec.rb +20 -0
  181. data/spec/mixins/duration_spec.rb +17 -0
  182. data/spec/mixins/render_spec.rb +190 -0
  183. data/spec/mixins/route_spec.rb +60 -0
  184. data/spec/mixins/template_spec.rb +78 -0
  185. data/spec/mixins/test_a.css.haml +3 -0
  186. data/spec/mixins/test_a.html.haml +3 -0
  187. data/spec/mixins/test_a.js.haml +3 -0
  188. data/spec/mixins/test_b.css.haml +4 -0
  189. data/spec/mixins/test_b.html.haml +3 -0
  190. data/spec/mixins/test_b.js.haml +4 -0
  191. data/spec/mixins/test_c.css.haml +4 -0
  192. data/spec/mixins/test_c.html.haml +2 -0
  193. data/spec/mixins/test_c.js.haml +4 -0
  194. data/spec/mixins/test_e.html.haml +2 -0
  195. data/spec/mixins/test_f.html.haml +2 -0
  196. data/spec/mixins/test_g.css.haml +4 -0
  197. metadata +540 -0
@@ -0,0 +1,5 @@
1
+ :plain
2
+ /* RubyApp::Elements::Button */
3
+ button.click
4
+ {}
5
+ = yield
@@ -0,0 +1,3 @@
1
+ / RubyApp::Elements::Button
2
+ %button.click{attributes}
3
+ = yield :body
@@ -0,0 +1,19 @@
1
+ module RubyApp
2
+
3
+ module Elements
4
+ require 'rubyapp/elements/click'
5
+
6
+ class Button < RubyApp::Elements::Click
7
+
8
+ template_path(__FILE__)
9
+
10
+ def initialize
11
+ super
12
+ attributes.merge!(:type => :button)
13
+ end
14
+
15
+ end
16
+
17
+ end
18
+
19
+ end
@@ -0,0 +1,9 @@
1
+ :plain
2
+ // RubyApp::Elements::Click
3
+ $(document).ready(function() {
4
+ $('.click').live('click', function(event) {
5
+ event.preventDefault();
6
+ RubyApp.sendEvent({_class:'RubyApp::Elements::Click::ClickedEvent', source_id:this.id});
7
+ });
8
+ });
9
+ = yield
@@ -0,0 +1,44 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+
4
+ require 'ruby-event'
5
+
6
+ module RubyApp
7
+
8
+ module Elements
9
+ require 'rubyapp/element'
10
+
11
+ class Click < RubyApp::Element
12
+
13
+ class ClickedEvent < RubyApp::Element::Event
14
+
15
+ def initialize(data)
16
+ super(data)
17
+ end
18
+
19
+ end
20
+
21
+ template_path(__FILE__)
22
+
23
+ event :clicked
24
+
25
+ def initialize
26
+ super
27
+ end
28
+
29
+ protected
30
+
31
+ def on_event(event)
32
+ super(event)
33
+ on_clicked(event) if event.is_a?(RubyApp::Elements::Click::ClickedEvent)
34
+ end
35
+
36
+ def on_clicked(event)
37
+ clicked(event)
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -0,0 +1,12 @@
1
+ :plain
2
+ /* RubyApp::Elements::Content */
3
+ div.content
4
+ {}
5
+
6
+ div.content p
7
+ {
8
+ margin-top: 0px;
9
+ }
10
+
11
+ = yield
12
+
@@ -0,0 +1,3 @@
1
+ / RubyApp::Elements::Content
2
+ %div.content{attributes}
3
+ = yield :body
@@ -0,0 +1,9 @@
1
+ :plain
2
+ // RubyApp::Elements::Content
3
+ $(document).ready(function() {
4
+ $('div.content a').live('click', function(event) {
5
+ event.preventDefault();
6
+ RubyApp.sendEvent({_class:'RubyApp::Elements::Content::NavigatedEvent', source_id:$(this).parents('div.content').attr('id'), name:$(this).attr('href')});
7
+ });
8
+ });
9
+ = yield
@@ -0,0 +1,51 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+
4
+ require 'ruby-event'
5
+
6
+ module RubyApp
7
+
8
+ module Elements
9
+ require 'rubyapp/element'
10
+
11
+ class Content < RubyApp::Element
12
+
13
+ class NavigatedEvent < RubyApp::Element::Event
14
+
15
+ attr_reader :name
16
+
17
+ def initialize(data)
18
+ super(data)
19
+ @name = data['name']
20
+ end
21
+
22
+ def to_hash
23
+ super.merge('name' => @name)
24
+ end
25
+
26
+ end
27
+
28
+ template_path(__FILE__)
29
+
30
+ event :navigated
31
+
32
+ def initialize
33
+ super
34
+ end
35
+
36
+ protected
37
+
38
+ def on_event(event)
39
+ super(event)
40
+ on_navigated(event) if event.is_a?(RubyApp::Elements::Content::NavigatedEvent)
41
+ end
42
+
43
+ def on_navigated(event)
44
+ navigated(event)
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ end
@@ -0,0 +1,30 @@
1
+ :plain
2
+ /* RubyApp::Elements::Dialog */
3
+ div.dialog
4
+ {
5
+ background-color: #ffffff;
6
+ border: 2px solid #666666;
7
+ margin-left: auto;
8
+ margin-right: auto;
9
+ padding: 10px 15px;
10
+ width: 50%;
11
+ }
12
+
13
+ div.dialog div.title
14
+ {
15
+ font-weight: bold;
16
+ padding: 5px 7px;
17
+ }
18
+
19
+ div.dialog div.body
20
+ {
21
+ padding: 5px 7px;
22
+ }
23
+
24
+ div.dialog div.footer
25
+ {
26
+ text-align: right;
27
+ padding: 5px 7px;
28
+ }
29
+
30
+ = yield
@@ -0,0 +1,8 @@
1
+ / RubyApp::Elements::Dialog
2
+ %div.dialog{attributes}
3
+ %div.title
4
+ = yield :title
5
+ %div.body
6
+ = yield :body
7
+ %div.footer
8
+ = yield :footer
@@ -0,0 +1,58 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+
4
+ require 'ruby-event'
5
+
6
+ module RubyApp
7
+
8
+ module Elements
9
+ require 'rubyapp/element'
10
+
11
+ class Dialog < RubyApp::Element
12
+
13
+ class ShownEvent < RubyApp::Element::Event
14
+
15
+ def initialize(data)
16
+ super(data)
17
+ end
18
+
19
+ end
20
+
21
+ class HiddenEvent < RubyApp::Element::Event
22
+
23
+ def initialize(data)
24
+ super(data)
25
+ end
26
+
27
+ end
28
+
29
+ template_path(__FILE__)
30
+
31
+ event :shown
32
+ event :hidden
33
+
34
+ def initialize
35
+ super
36
+ end
37
+
38
+ protected
39
+
40
+ def on_event(event)
41
+ super(event)
42
+ on_shown(event) if event.is_a?(RubyApp::Elements::Dialog::ShownEvent)
43
+ on_hidden(event) if event.is_a?(RubyApp::Elements::Dialog::HiddenEvent)
44
+ end
45
+
46
+ def on_shown(event)
47
+ shown(event)
48
+ end
49
+
50
+ def on_hidden(event)
51
+ hidden(event)
52
+ end
53
+
54
+ end
55
+
56
+ end
57
+
58
+ end
@@ -0,0 +1,4 @@
1
+ :plain
2
+ /* RubyApp::Elements::Dialogs::ExceptionDialog */
3
+ = RubyApp::Elements::ExceptionElement.render(:css)
4
+ = yield
@@ -0,0 +1,8 @@
1
+ / RubyApp::Elements::Dialogs::ExceptionDialog
2
+ - content_for(:title) do
3
+ = self.class.translate.title
4
+ - content_for(:body) do
5
+ = @exception_element.render(:html)
6
+ - content_for(:footer) do
7
+ = @close.render(:html) do |element|
8
+ - element.content_for(:body, self.class.translate.close)
@@ -0,0 +1,32 @@
1
+ module RubyApp
2
+
3
+ module Elements
4
+
5
+ module Dialogs
6
+ require 'rubyapp/elements/dialog'
7
+
8
+ class ExceptionDialog < RubyApp::Elements::Dialog
9
+
10
+ template_path(__FILE__)
11
+
12
+ def initialize(exception)
13
+ super()
14
+
15
+ require 'rubyapp/elements/exception_element'
16
+
17
+ @exception_element = RubyApp::Elements::ExceptionElement.new(exception)
18
+
19
+ @close = RubyApp::Elements::Link.new
20
+ @close.clicked do |element, event|
21
+ event.hide_dialog(self)
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,8 @@
1
+ / RubyApp::Elements::Dialogs::MessageDialog
2
+ - content_for(:title) do
3
+ = @title
4
+ - content_for(:body) do
5
+ = @message
6
+ - content_for(:footer) do
7
+ = @close.render(:html) do |element|
8
+ - element.content_for(:body, self.class.translate.close)
@@ -0,0 +1,33 @@
1
+ module RubyApp
2
+
3
+ module Elements
4
+
5
+ module Dialogs
6
+ require 'rubyapp/elements/dialog'
7
+
8
+ class MessageDialog < RubyApp::Elements::Dialog
9
+
10
+ template_path(__FILE__)
11
+
12
+ def initialize(title, message)
13
+ super()
14
+
15
+ @title = title
16
+ @message = message
17
+
18
+ require 'rubyapp/elements/link'
19
+
20
+ @close = RubyApp::Elements::Link.new
21
+ @close.clicked do |element, event|
22
+ event.hide_dialog(self)
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,12 @@
1
+ :plain
2
+ /* RubyApp::Elements::ExceptionElement */
3
+ div.exception
4
+ {}
5
+
6
+ div.exception div.class
7
+ {}
8
+
9
+ div.exception div.message
10
+ {}
11
+
12
+ = yield
@@ -0,0 +1,6 @@
1
+ / RubyApp::Elements::ExceptionElement
2
+ %div.exception{attributes}
3
+ %div.class
4
+ = @exception.class
5
+ %div.message
6
+ = @exception.message
@@ -0,0 +1,19 @@
1
+ module RubyApp
2
+
3
+ module Elements
4
+ require 'rubyapp/element'
5
+
6
+ class ExceptionElement < RubyApp::Element
7
+
8
+ template_path(__FILE__)
9
+
10
+ def initialize(exception)
11
+ super()
12
+ @exception = exception
13
+ end
14
+
15
+ end
16
+
17
+ end
18
+
19
+ end
@@ -0,0 +1,5 @@
1
+ :plain
2
+ /* RubyApp::Elements::Input */
3
+ input.input
4
+ {}
5
+ = yield
@@ -0,0 +1,2 @@
1
+ / RubyApp::Elements::Input
2
+ %input.input{attributes.merge(:value => value)}
@@ -0,0 +1,8 @@
1
+ :plain
2
+ // RubyApp::Elements::Input
3
+ $(document).ready(function() {
4
+ $('.input').live('change', function(event) {
5
+ RubyApp.sendEvent({_class:'RubyApp::Elements::Input::ChangedEvent', source_id:this.id, value:this.value});
6
+ });
7
+ });
8
+ = yield
@@ -0,0 +1,55 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+
4
+ require 'ruby-event'
5
+
6
+ module RubyApp
7
+
8
+ module Elements
9
+ require 'rubyapp/element'
10
+
11
+ class Input < RubyApp::Element
12
+
13
+ class ChangedEvent < RubyApp::Element::Event
14
+
15
+ attr_reader :value
16
+
17
+ def initialize(data)
18
+ super(data)
19
+ @value = data['value']
20
+ end
21
+
22
+ def to_hash
23
+ super.merge(:value => @value)
24
+ end
25
+
26
+ end
27
+
28
+ template_path(__FILE__)
29
+
30
+ attr_accessor :value
31
+
32
+ event :changed
33
+
34
+ def initialize
35
+ super
36
+ attributes.merge!(:type => :text)
37
+ end
38
+
39
+ protected
40
+
41
+ def on_event(event)
42
+ super(event)
43
+ on_changed(event) if event.is_a?(RubyApp::Elements::Input::ChangedEvent)
44
+ end
45
+
46
+ def on_changed(event)
47
+ @value = event.value
48
+ changed(event)
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+
55
+ end