jqmobile_helpers 0.0.1

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 (128) hide show
  1. data/Gemfile +13 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +6 -0
  4. data/Rakefile +29 -0
  5. data/lib/jqmobile_helpers.rb +1 -0
  6. data/lib/jqmobile_helpers/action_view_extensions/form_helper.rb +54 -0
  7. data/lib/jqmobile_helpers/buttons_helper.rb +639 -0
  8. data/lib/jqmobile_helpers/form_builder.rb +301 -0
  9. data/lib/jqmobile_helpers/list_views_helper.rb +326 -0
  10. data/lib/jqmobile_helpers/railtie.rb +23 -0
  11. data/lib/jqmobile_helpers/toolbars_helper.rb +115 -0
  12. data/rdoc/JqmobileHelpers.html +185 -0
  13. data/rdoc/JqmobileHelpers/ActionViewExtensions.html +160 -0
  14. data/rdoc/JqmobileHelpers/ActionViewExtensions/FormHelper.html +231 -0
  15. data/rdoc/JqmobileHelpers/ButtonsHelper.html +1502 -0
  16. data/rdoc/JqmobileHelpers/FormBuilder.html +816 -0
  17. data/rdoc/JqmobileHelpers/ListViewsHelper.html +952 -0
  18. data/rdoc/JqmobileHelpers/Railtie.html +177 -0
  19. data/rdoc/JqmobileHelpers/ToolbarsHelper.html +416 -0
  20. data/rdoc/README_rdoc.html +109 -0
  21. data/rdoc/created.rid +9 -0
  22. data/rdoc/index.html +180 -0
  23. data/rdoc/js/darkfish.js +116 -0
  24. data/rdoc/js/jquery.js +32 -0
  25. data/rdoc/js/quicksearch.js +114 -0
  26. data/rdoc/js/thickbox-compressed.js +10 -0
  27. data/rdoc/lib/jqmobile_helpers/action_view_extensions/form_helper_rb.html +52 -0
  28. data/rdoc/lib/jqmobile_helpers/buttons_helper_rb.html +52 -0
  29. data/rdoc/lib/jqmobile_helpers/form_builder_rb.html +52 -0
  30. data/rdoc/lib/jqmobile_helpers/list_views_helper_rb.html +52 -0
  31. data/rdoc/lib/jqmobile_helpers/railtie_rb.html +62 -0
  32. data/rdoc/lib/jqmobile_helpers/toolbars_helper_rb.html +52 -0
  33. data/rdoc/lib/jqmobile_helpers_rb.html +54 -0
  34. data/rdoc/rdoc.css +706 -0
  35. data/test/buttons_helper_test.rb +112 -0
  36. data/test/dummy/Rakefile +7 -0
  37. data/test/dummy/app/controllers/application_controller.rb +3 -0
  38. data/test/dummy/app/controllers/buttons_controller.rb +9 -0
  39. data/test/dummy/app/controllers/forms_controller.rb +71 -0
  40. data/test/dummy/app/controllers/posts_controller.rb +83 -0
  41. data/test/dummy/app/controllers/toolbars_controller.rb +16 -0
  42. data/test/dummy/app/helpers/application_helper.rb +2 -0
  43. data/test/dummy/app/helpers/posts_helper.rb +2 -0
  44. data/test/dummy/app/helpers/toolbars_helper.rb +2 -0
  45. data/test/dummy/app/models/post.rb +2 -0
  46. data/test/dummy/app/models/toolbar.rb +2 -0
  47. data/test/dummy/app/views/buttons/index.html.erb +168 -0
  48. data/test/dummy/app/views/forms/_form.html.erb +20 -0
  49. data/test/dummy/app/views/forms/edit.html.erb +6 -0
  50. data/test/dummy/app/views/forms/index.html.erb +7 -0
  51. data/test/dummy/app/views/forms/new.html.erb +5 -0
  52. data/test/dummy/app/views/forms/show.html.erb +24 -0
  53. data/test/dummy/app/views/layouts/application.html.erb +49 -0
  54. data/test/dummy/app/views/posts/_form.html.erb +29 -0
  55. data/test/dummy/app/views/posts/edit.html.erb +6 -0
  56. data/test/dummy/app/views/posts/index.html.erb +128 -0
  57. data/test/dummy/app/views/posts/new.html.erb +5 -0
  58. data/test/dummy/app/views/posts/show.html.erb +24 -0
  59. data/test/dummy/app/views/toolbars/index.html.erb +25 -0
  60. data/test/dummy/config.ru +4 -0
  61. data/test/dummy/config/application.rb +45 -0
  62. data/test/dummy/config/boot.rb +10 -0
  63. data/test/dummy/config/database.yml +22 -0
  64. data/test/dummy/config/environment.rb +5 -0
  65. data/test/dummy/config/environments/development.rb +26 -0
  66. data/test/dummy/config/environments/production.rb +49 -0
  67. data/test/dummy/config/environments/test.rb +35 -0
  68. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  69. data/test/dummy/config/initializers/inflections.rb +10 -0
  70. data/test/dummy/config/initializers/mime_types.rb +5 -0
  71. data/test/dummy/config/initializers/secret_token.rb +7 -0
  72. data/test/dummy/config/initializers/session_store.rb +8 -0
  73. data/test/dummy/config/locales/en.yml +5 -0
  74. data/test/dummy/config/routes.rb +69 -0
  75. data/test/dummy/db/development.sqlite3 +0 -0
  76. data/test/dummy/db/migrate/20110218095442_create_posts.rb +15 -0
  77. data/test/dummy/db/migrate/20110223031713_create_toolbars.rb +12 -0
  78. data/test/dummy/db/schema.rb +29 -0
  79. data/test/dummy/db/test.sqlite3 +0 -0
  80. data/test/dummy/log/development.log +7446 -0
  81. data/test/dummy/log/production.log +0 -0
  82. data/test/dummy/log/server.log +0 -0
  83. data/test/dummy/log/test.log +2278 -0
  84. data/test/dummy/public/404.html +26 -0
  85. data/test/dummy/public/422.html +26 -0
  86. data/test/dummy/public/500.html +26 -0
  87. data/test/dummy/public/favicon.ico +0 -0
  88. data/test/dummy/public/images/ajax-loader.png +0 -0
  89. data/test/dummy/public/images/form-check-off.png +0 -0
  90. data/test/dummy/public/images/form-check-on.png +0 -0
  91. data/test/dummy/public/images/form-radio-off.png +0 -0
  92. data/test/dummy/public/images/form-radio-on.png +0 -0
  93. data/test/dummy/public/images/icon-search-black.png +0 -0
  94. data/test/dummy/public/images/icons-18-black.png +0 -0
  95. data/test/dummy/public/images/icons-18-white.png +0 -0
  96. data/test/dummy/public/images/icons-36-black.png +0 -0
  97. data/test/dummy/public/images/icons-36-white.png +0 -0
  98. data/test/dummy/public/javascripts/application.js +2 -0
  99. data/test/dummy/public/javascripts/jquery-1.5.min.js +8176 -0
  100. data/test/dummy/public/javascripts/jquery-ui-1.8.9.custom.min.js +781 -0
  101. data/test/dummy/public/javascripts/jquery.mobile-1.0a3.min.js +121 -0
  102. data/test/dummy/public/javascripts/rails.js +175 -0
  103. data/test/dummy/public/stylesheets/images/ajax-loader.png +0 -0
  104. data/test/dummy/public/stylesheets/images/form-check-off.png +0 -0
  105. data/test/dummy/public/stylesheets/images/form-check-on.png +0 -0
  106. data/test/dummy/public/stylesheets/images/form-radio-off.png +0 -0
  107. data/test/dummy/public/stylesheets/images/form-radio-on.png +0 -0
  108. data/test/dummy/public/stylesheets/images/icon-search-black.png +0 -0
  109. data/test/dummy/public/stylesheets/images/icons-18-black.png +0 -0
  110. data/test/dummy/public/stylesheets/images/icons-18-white.png +0 -0
  111. data/test/dummy/public/stylesheets/images/icons-36-black.png +0 -0
  112. data/test/dummy/public/stylesheets/images/icons-36-white.png +0 -0
  113. data/test/dummy/public/stylesheets/jquery-ui-1.8.9.custom.css +573 -0
  114. data/test/dummy/public/stylesheets/jquery.mobile-1.0a3.min.css +16 -0
  115. data/test/dummy/public/stylesheets/scaffold.css +56 -0
  116. data/test/dummy/script/rails +6 -0
  117. data/test/dummy/tmp/pids/server.pid +1 -0
  118. data/test/form_helper_test.rb +13 -0
  119. data/test/integration/navigation_test.rb +7 -0
  120. data/test/list_views_helper_test.rb +65 -0
  121. data/test/support/integration_case.rb +5 -0
  122. data/test/support/misc_helpers.rb +18 -0
  123. data/test/support/mock_controller.rb +15 -0
  124. data/test/support/mock_response.rb +14 -0
  125. data/test/support/models.rb +135 -0
  126. data/test/test_helper.rb +92 -0
  127. data/test/toolbars_helper_test.rb +21 -0
  128. metadata +182 -0
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "rails", "3.0.3"
4
+ gem "capybara", ">= 0.4.0"
5
+ gem "sqlite3-ruby", :require => "sqlite3"
6
+
7
+ # To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
8
+ # gem 'ruby-debug'
9
+ # gem 'ruby-debug19'
10
+
11
+ group :test do
12
+ gem "mocha", :require => false
13
+ end
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2011 Consoci8 Sdn Bhd
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,6 @@
1
+ = jqmobile_helpers
2
+ Copyright (C) 2011 Consoci8 Sdn Bhd
3
+
4
+ jqmobile_helpers are view helpers for jquery mobile components e.g list view, buttons, form elements, etc
5
+
6
+ This project rocks and it uses MIT License.
data/Rakefile ADDED
@@ -0,0 +1,29 @@
1
+ # encoding: UTF-8
2
+ require 'rubygems'
3
+ begin
4
+ require 'bundler/setup'
5
+ rescue LoadError
6
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
7
+ end
8
+
9
+ require 'rake'
10
+ require 'rake/rdoctask'
11
+
12
+ require 'rake/testtask'
13
+
14
+ Rake::TestTask.new(:test) do |t|
15
+ t.libs << 'lib'
16
+ t.libs << 'test'
17
+ t.pattern = 'test/**/*_test.rb'
18
+ t.verbose = false
19
+ end
20
+
21
+ task :default => :test
22
+
23
+ Rake::RDocTask.new(:rdoc) do |rdoc|
24
+ rdoc.rdoc_dir = 'rdoc'
25
+ rdoc.title = 'JqmobileHelpers'
26
+ rdoc.options << '--line-numbers' << '--inline-source'
27
+ rdoc.rdoc_files.include('README.rdoc')
28
+ rdoc.rdoc_files.include('lib/**/*.rb')
29
+ end
@@ -0,0 +1 @@
1
+ require 'jqmobile_helpers/railtie'
@@ -0,0 +1,54 @@
1
+ module JqmobileHelpers
2
+ module ActionViewExtensions
3
+ # This module creates simple form wrappers around default form_for and fields_for.
4
+ #
5
+ # Example:
6
+ #
7
+ # jq_form_for @user do |f|
8
+ # f.input :name, :required => true, :description => 'Your name please'
9
+ # end
10
+ #
11
+ module FormHelper
12
+ # based on what is done in formtastic
13
+ # http://github.com/justinfrench/formtastic/blob/master/lib/formtastic.rb#L1706
14
+ @@default_field_error_proc = nil
15
+
16
+ # Override the default ActiveRecordHelper behaviour of wrapping the input.
17
+ # This gets taken care of semantically by adding an error class to the wrapper tag
18
+ # containing the input.
19
+ #
20
+ FIELD_ERROR_PROC = proc do |html_tag, instance_tag|
21
+ html_tag
22
+ end
23
+
24
+ def with_custom_field_error_proc(&block)
25
+ @@default_field_error_proc = ::ActionView::Base.field_error_proc
26
+ ::ActionView::Base.field_error_proc = FIELD_ERROR_PROC
27
+ result = yield
28
+ ::ActionView::Base.field_error_proc = @@default_field_error_proc
29
+ result
30
+ end
31
+
32
+ [:form_for, :fields_for].each do |helper|
33
+ class_eval <<-METHOD, __FILE__, __LINE__
34
+ def jq_#{helper}(record_or_name_or_array, *args, &block)
35
+ options = args.extract_options!
36
+ options[:builder] ||= JqmobileHelpers::FormBuilder
37
+ css_class = case record_or_name_or_array
38
+ when String, Symbol then record_or_name_or_array.to_s
39
+ when Array then dom_class(record_or_name_or_array.last)
40
+ else dom_class(record_or_name_or_array)
41
+ end
42
+ options[:html] ||= {}
43
+ options[:html][:class] = "jq_form \#{css_class} \#{options[:html][:class]}".strip
44
+
45
+ with_custom_field_error_proc do
46
+ #{helper}(record_or_name_or_array, *(args << options), &block)
47
+ end
48
+ end
49
+ METHOD
50
+ end
51
+ end
52
+ end
53
+ end
54
+ ActionView::Base.send :include, JqmobileHelpers::ActionViewExtensions::FormHelper
@@ -0,0 +1,639 @@
1
+ module JqmobileHelpers
2
+ # = JqmobileHelpers Buttons Helper
3
+ # Provides a set of helper methods for jquery-mobile buttons
4
+ module ButtonsHelper
5
+
6
+ # Button Link
7
+ #
8
+ # ==== Examples
9
+ # button_link 'New Post', new_post_path
10
+ # # => <a data-role="button" href="http://google.com">New Post</a>
11
+ #
12
+ # button_link 'New Post', new_post_path, {'data-theme' => 'c', 'data-icon' => 'plus', 'data-iconpos' => 'right'}
13
+ # # => <a data-icon="plus" data-iconpos="right" data-role="button" data-theme="c" href="http://google.com">New Post</a>
14
+ #
15
+ def button_link(name, link, options = {})
16
+
17
+ html_options = options.stringify_keys!
18
+ default_options = {'data-role' => "button"}
19
+
20
+ if html_options.has_key?('data-icon')
21
+ default_options = default_options.merge({'data-icon' => html_options['data-icon']})
22
+ end
23
+
24
+ if html_options.has_key?('data-theme')
25
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
26
+ end
27
+
28
+ if html_options.has_key?('data-iconpos')
29
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
30
+ end
31
+
32
+ if html_options.has_key?('data-inline')
33
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
34
+ end
35
+
36
+ content_tag(:a, name, {:href => link}.merge(default_options))
37
+ end
38
+
39
+ # Delete Button Link
40
+ #
41
+ # ==== Examples
42
+ # delete_button_link 'Delete', destroy_path
43
+ # # => <a data-role="button" data-icon="delete" href="/posts/new">Delete</a>
44
+ #
45
+ # delete_button_link 'Delete', destroy_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
46
+ # # => <a data-role="button" data-icon="delete" data-iconpos="right" data-theme="c" href="/posts/destroy">Delete</a>
47
+ #
48
+ def delete_button_link(name, link, options = {})
49
+
50
+ html_options = options.stringify_keys!
51
+ default_options = {'data-role' => "button", 'data-icon' => "delete"}
52
+
53
+ if html_options.has_key?('data-theme')
54
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
55
+ end
56
+
57
+ if html_options.has_key?('data-iconpos')
58
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
59
+ end
60
+
61
+ if html_options.has_key?('data-inline')
62
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
63
+ end
64
+
65
+ content_tag(:a, name, {:href => link}.merge(default_options))
66
+ end
67
+
68
+ # Left Button Link
69
+ #
70
+ # ==== Examples
71
+ # left_button_link 'Back', new_post_path
72
+ # # => <a data-role="button" data-icon="arrow-l" href="/posts/new">Back</a>
73
+ #
74
+ # left_button_link 'Back', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
75
+ # # => <a data-role="button" data-icon="arrow-l" data-iconpos="right" data-theme="c" href="/posts/new">Back</a>
76
+ #
77
+ def left_button_link(name, link, options = {})
78
+
79
+ html_options = options.stringify_keys!
80
+ default_options = {'data-role' => "button", 'data-icon' => "arrow-l"}
81
+
82
+ if html_options.has_key?('data-theme')
83
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
84
+ end
85
+
86
+ if html_options.has_key?('data-iconpos')
87
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
88
+ end
89
+
90
+ if html_options.has_key?('data-inline')
91
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
92
+ end
93
+
94
+ content_tag(:a, name, {:href => link}.merge(default_options))
95
+ end
96
+
97
+ # Right Button Link
98
+ #
99
+ # ==== Examples
100
+ # right_button_link 'Proceed', new_post_path
101
+ # # => <a data-role="button" data-icon="arrow-r" href="/posts/new" data-theme="c">Proceed</a>
102
+ #
103
+ # right_button_link 'Proceed', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
104
+ # # => <a data-role="button" data-icon="arrow-r" data-iconpos="right" data-theme="c" href="/posts/new">Proceed</a>
105
+ #
106
+ def right_button_link(name, link, options = {})
107
+
108
+ html_options = options.stringify_keys!
109
+ default_options = {'data-role' => "button", 'data-icon' => "arrow-r"}
110
+
111
+ if html_options.has_key?('data-theme')
112
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
113
+ end
114
+
115
+ if html_options.has_key?('data-iconpos')
116
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
117
+ end
118
+
119
+ if html_options.has_key?('data-inline')
120
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
121
+ end
122
+
123
+ content_tag(:a, name, {:href => link}.merge(default_options))
124
+ end
125
+
126
+ # Up Button Link
127
+ #
128
+ # ==== Examples
129
+ # up_button_link 'top', new_post_path
130
+ # # => <a data-role="button" data-icon="arrow-u" href="/posts/new">top</a>
131
+ #
132
+ # up_button_link 'top', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'top'}
133
+ # # => <a data-role="button" data-icon="arrow-u" data-iconpos="top" data-theme="c" href="/posts/new">top</a>
134
+ #
135
+ def up_button_link(name, link, options = {})
136
+
137
+ html_options = options.stringify_keys!
138
+ default_options = {'data-role' => "button", 'data-icon' => "arrow-u"}
139
+
140
+ if html_options.has_key?('data-theme')
141
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
142
+ end
143
+
144
+ if html_options.has_key?('data-iconpos')
145
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
146
+ end
147
+
148
+ if html_options.has_key?('data-inline')
149
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
150
+ end
151
+
152
+ content_tag(:a, name, {:href => link}.merge(default_options))
153
+ end
154
+
155
+ # Down Button Link
156
+ #
157
+ # ==== Examples
158
+ # down_button_link 'bottom', new_post_path
159
+ # # => <a data-role="button" data-icon="arrow-d" href="/posts/new">bottom</a>
160
+ #
161
+ # down_button_link 'bottom', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'bottom'}
162
+ # # => <a data-role="button" data-icon="arrow-d" data-iconpos="bottom" data-theme="c" href="/posts/new">bottom</a>
163
+ #
164
+ def down_button_link(name, link, options = {})
165
+
166
+ html_options = options.stringify_keys!
167
+ default_options = {'data-role' => "button", 'data-icon' => "arrow-d"}
168
+
169
+ if html_options.has_key?('data-theme')
170
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
171
+ end
172
+
173
+ if html_options.has_key?('data-iconpos')
174
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
175
+ end
176
+
177
+ if html_options.has_key?('data-inline')
178
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
179
+ end
180
+
181
+ content_tag(:a, name, {:href => link}.merge(default_options))
182
+ end
183
+
184
+ # Plus Button Link
185
+ #
186
+ # ==== Examples
187
+ # plus_button_link 'plus', new_post_path
188
+ # # => <a data-role="button" data-icon="plus" href="/posts/new">plus</a>
189
+ #
190
+ # plus_button_link 'plus', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
191
+ # # => <a data-role="button" data-icon="plus" data-iconpos="right" data-theme="c" href="/posts/new">plus</a>
192
+ #
193
+ def plus_button_link(name, link, options = {})
194
+
195
+ html_options = options.stringify_keys!
196
+ default_options = {'data-role' => "button", 'data-icon' => "plus"}
197
+
198
+ if html_options.has_key?('data-theme')
199
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
200
+ end
201
+
202
+ if html_options.has_key?('data-iconpos')
203
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
204
+ end
205
+
206
+ if html_options.has_key?('data-inline')
207
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
208
+ end
209
+
210
+ content_tag(:a, name, {:href => link}.merge(default_options))
211
+ end
212
+
213
+ # Minus Button Link
214
+ #
215
+ # ==== Examples
216
+ # minus_button_link 'minus', new_post_path
217
+ # # => <a data-role="button" data-icon="minus" href="/posts/new">minus</a>
218
+ #
219
+ # minus_button_link 'minus', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
220
+ # # => <a data-role="button" data-icon="minus" data-iconpos="right" data-theme="c" href="/posts/new">minus</a>
221
+ #
222
+ def minus_button_link(name, link, options = {})
223
+
224
+ html_options = options.stringify_keys!
225
+ default_options = {'data-role' => "button", 'data-icon' => "minus"}
226
+
227
+ if html_options.has_key?('data-theme')
228
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
229
+ end
230
+
231
+ if html_options.has_key?('data-iconpos')
232
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
233
+ end
234
+
235
+ if html_options.has_key?('data-inline')
236
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
237
+ end
238
+
239
+ content_tag(:a, name, {:href => link}.merge(default_options))
240
+ end
241
+
242
+ # Check Button Link
243
+ #
244
+ # ==== Examples
245
+ # check_button_link 'check', new_post_path
246
+ # # => <a data-role="button" data-icon="check" href="/posts/new">check</a>
247
+ #
248
+ # check_button_link 'check', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
249
+ # # => <a data-role="button" data-icon="check" data-iconpos="right" data-theme="c" href="/posts/new">check</a>
250
+ #
251
+ def check_button_link(name, link, options = {})
252
+
253
+ html_options = options.stringify_keys!
254
+ default_options = {'data-role' => "button", 'data-icon' => "check"}
255
+
256
+ if html_options.has_key?('data-theme')
257
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
258
+ end
259
+
260
+ if html_options.has_key?('data-iconpos')
261
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
262
+ end
263
+
264
+ if html_options.has_key?('data-inline')
265
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
266
+ end
267
+
268
+ content_tag(:a, name, {:href => link}.merge(default_options))
269
+ end
270
+
271
+ # Gear Button Link
272
+ #
273
+ # ==== Examples
274
+ # gear_button_link 'gear', new_post_path
275
+ # # => <a data-role="button" data-icon="gear" href="/posts/new">gear</a>
276
+ #
277
+ # gear_button_link 'gear', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
278
+ # # => <a data-role="button" data-icon="gear" data-iconpos="right" data-theme="c" href="/posts/new">gear</a>
279
+ #
280
+ def gear_button_link(name, link, options = {})
281
+
282
+ html_options = options.stringify_keys!
283
+ default_options = {'data-role' => "button", 'data-icon' => "gear"}
284
+
285
+ if html_options.has_key?('data-theme')
286
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
287
+ end
288
+
289
+ if html_options.has_key?('data-iconpos')
290
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
291
+ end
292
+
293
+ if html_options.has_key?('data-inline')
294
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
295
+ end
296
+
297
+ content_tag(:a, name, {:href => link}.merge(default_options))
298
+ end
299
+
300
+ # Refresh Button Link
301
+ #
302
+ # ==== Examples
303
+ # refresh_button_link 'refresh', new_post_path
304
+ # # => <a data-role="button" data-icon="refresh" href="/posts/new">refresh</a>
305
+ #
306
+ # refresh_button_link 'refresh', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
307
+ # # => <a data-role="button" data-icon="refresh" data-iconpos="right" data-theme="c" href="/posts/new">refresh</a>
308
+ #
309
+ def refresh_button_link(name, link, options = {})
310
+
311
+ html_options = options.stringify_keys!
312
+ default_options = {'data-role' => "button", 'data-icon' => "refresh"}
313
+
314
+ if html_options.has_key?('data-theme')
315
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
316
+ end
317
+
318
+ if html_options.has_key?('data-iconpos')
319
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
320
+ end
321
+
322
+ if html_options.has_key?('data-inline')
323
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
324
+ end
325
+
326
+ content_tag(:a, name, {:href => link}.merge(default_options))
327
+ end
328
+
329
+ # Forward Button Link
330
+ #
331
+ # ==== Examples
332
+ # forward_button_link 'forward', new_post_path
333
+ # # => <a data-role="button" data-icon="forward" href="/posts/new">forward</a>
334
+ #
335
+ # forward_button_link 'forward', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
336
+ # # => <a data-role="button" data-icon="forward" data-iconpos="right" data-theme="c" href="/posts/new">forward</a>
337
+ #
338
+ def forward_button_link(name, link, options = {})
339
+
340
+ html_options = options.stringify_keys!
341
+ default_options = {'data-role' => "button", 'data-icon' => "forward"}
342
+
343
+ if html_options.has_key?('data-theme')
344
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
345
+ end
346
+
347
+ if html_options.has_key?('data-iconpos')
348
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
349
+ end
350
+
351
+ if html_options.has_key?('data-inline')
352
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
353
+ end
354
+
355
+ content_tag(:a, name, {:href => link}.merge(default_options))
356
+ end
357
+
358
+ # Back Button Link
359
+ #
360
+ # ==== Examples
361
+ # back_button_link 'back', new_post_path
362
+ # # => <a data-role="button" data-icon="back" href="/posts/new">back</a>
363
+ #
364
+ # back_button_link 'back', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
365
+ # # => <a data-role="button" data-icon="back" data-iconpos="right" data-theme="c" href="/posts/new">back</a>
366
+ #
367
+ def back_button_link(name, link, options = {})
368
+
369
+ html_options = options.stringify_keys!
370
+ default_options = {'data-role' => "button", 'data-icon' => "back"}
371
+
372
+ if html_options.has_key?('data-theme')
373
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
374
+ end
375
+
376
+ if html_options.has_key?('data-iconpos')
377
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
378
+ end
379
+
380
+ if html_options.has_key?('data-inline')
381
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
382
+ end
383
+
384
+ content_tag(:a, name, {:href => link}.merge(default_options))
385
+ end
386
+
387
+ # Grid Button Link
388
+ #
389
+ # ==== Examples
390
+ # grid_button_link 'grid', new_post_path
391
+ # # => <a data-role="button" data-icon="grid" href="/posts/new">grid</a>
392
+ #
393
+ # grid_button_link 'grid', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
394
+ # # => <a data-role="button" data-icon="grid" data-iconpos="right" data-theme="c" href="/posts/new">grid</a>
395
+ #
396
+ def grid_button_link(name, link, options = {})
397
+
398
+ html_options = options.stringify_keys!
399
+ default_options = {'data-role' => "button", 'data-icon' => "grid"}
400
+
401
+ if html_options.has_key?('data-theme')
402
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
403
+ end
404
+
405
+ if html_options.has_key?('data-iconpos')
406
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
407
+ end
408
+
409
+ if html_options.has_key?('data-inline')
410
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
411
+ end
412
+
413
+ content_tag(:a, name, {:href => link}.merge(default_options))
414
+ end
415
+
416
+ # Star Button Link
417
+ #
418
+ # ==== Examples
419
+ # star_button_link 'star', new_post_path
420
+ # # => <a data-role="button" data-icon="star" href="/posts/new">star</a>
421
+ #
422
+ # star_button_link 'star', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
423
+ # # => <a data-role="button" data-icon="star" data-iconpos="right" data-theme="c" href="/posts/new">star</a>
424
+ #
425
+ def star_button_link(name, link, options = {})
426
+
427
+ html_options = options.stringify_keys!
428
+ default_options = {'data-role' => "button", 'data-icon' => "star"}
429
+
430
+ if html_options.has_key?('data-theme')
431
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
432
+ end
433
+
434
+ if html_options.has_key?('data-iconpos')
435
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
436
+ end
437
+
438
+ if html_options.has_key?('data-inline')
439
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
440
+ end
441
+
442
+ content_tag(:a, name, {:href => link}.merge(default_options))
443
+ end
444
+
445
+ # Alert Button Link
446
+ #
447
+ # ==== Examples
448
+ # alert_button_link 'alert', new_post_path
449
+ # # => <a data-role="button" data-icon="alert" href="/posts/new">alert</a>
450
+ #
451
+ # alert_button_link 'alert', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
452
+ # # => <a data-role="button" data-icon="alert" data-iconpos="right" data-theme="c" href="/posts/new">alert</a>
453
+ #
454
+ def alert_button_link(name, link, options = {})
455
+
456
+ html_options = options.stringify_keys!
457
+ default_options = {'data-role' => "button", 'data-icon' => "alert"}
458
+
459
+ if html_options.has_key?('data-theme')
460
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
461
+ end
462
+
463
+ if html_options.has_key?('data-iconpos')
464
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
465
+ end
466
+
467
+ if html_options.has_key?('data-inline')
468
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
469
+ end
470
+
471
+ content_tag(:a, name, {:href => link}.merge(default_options))
472
+ end
473
+
474
+ # Info Button Link
475
+ #
476
+ # ==== Examples
477
+ # info_button_link 'info', new_post_path
478
+ # # => <a data-role="button" data-icon="info" href="/posts/new">info</a>
479
+ #
480
+ # info_button_link 'info', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
481
+ # # => <a data-role="button" data-icon="info" data-iconpos="right" data-theme="c" href="/posts/new">info</a>
482
+ #
483
+ def info_button_link(name, link, options = {})
484
+
485
+ html_options = options.stringify_keys!
486
+ default_options = {'data-role' => "button", 'data-icon' => "info"}
487
+
488
+ if html_options.has_key?('data-theme')
489
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
490
+ end
491
+
492
+ if html_options.has_key?('data-iconpos')
493
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
494
+ end
495
+
496
+ if html_options.has_key?('data-inline')
497
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
498
+ end
499
+
500
+ content_tag(:a, name, {:href => link}.merge(default_options))
501
+ end
502
+
503
+ # Home Button Link
504
+ #
505
+ # ==== Examples
506
+ # home_button_link 'home', new_post_path
507
+ # # => <a data-role="button" data-icon="home" href="/posts/new">home</a>
508
+ #
509
+ # home_button_link 'home', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
510
+ # # => <a data-role="button" data-icon="home" data-iconpos="right" data-theme="c" href="/posts/new">home</a>
511
+ #
512
+ def home_button_link(name, link, options = {})
513
+
514
+ html_options = options.stringify_keys!
515
+ default_options = {'data-role' => "button", 'data-icon' => "home"}
516
+
517
+ if html_options.has_key?('data-theme')
518
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
519
+ end
520
+
521
+ if html_options.has_key?('data-iconpos')
522
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
523
+ end
524
+
525
+ if html_options.has_key?('data-inline')
526
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
527
+ end
528
+
529
+ content_tag(:a, name, {:href => link}.merge(default_options))
530
+ end
531
+
532
+ # Search Button Link
533
+ #
534
+ # ==== Examples
535
+ # search_button_link 'search', new_post_path
536
+ # # => <a data-role="button" data-icon="search" href="/posts/new">search</a>
537
+ #
538
+ # search_button_link 'search', new_post_path, {'data-theme' => 'c', 'data-iconpos' => 'right'}
539
+ # # => <a data-role="button" data-icon="search" data-iconpos="right" data-theme="c" href="/posts/new">search</a>
540
+ #
541
+ def search_button_link(name, link, options = {})
542
+
543
+ html_options = options.stringify_keys!
544
+ default_options = {'data-role' => "button", 'data-icon' => "search"}
545
+
546
+ if html_options.has_key?('data-theme')
547
+ default_options = default_options.merge({'data-theme' => html_options['data-theme']})
548
+ end
549
+
550
+ if html_options.has_key?('data-iconpos')
551
+ default_options = default_options.merge({'data-iconpos' => html_options['data-iconpos']})
552
+ end
553
+
554
+ if html_options.has_key?('data-inline')
555
+ default_options = default_options.merge({'data-inline' => html_options['data-inline']})
556
+ end
557
+
558
+ content_tag(:a, name, {:href => link}.merge(default_options))
559
+ end
560
+
561
+
562
+
563
+ # ====================================== BACK-SPLIT-BUTTON ===========================================================
564
+ # In cases where there is more than one possible action per list item,
565
+ # a split button can be used to offer two independently clickable items -- the list item and a small arrow icon in the far right
566
+ # The framework will add a vertical divider line and sets the title attribute of the link to the text the link for accessibility.
567
+ # It is similar for the Split-Button List.
568
+ #
569
+ #
570
+ # ==== Options
571
+ # # => 'data-inset' => 'true' (Default data-inset is set to true)
572
+ # # => 'data-theme' => 'c' (Default data-theme is set to c)
573
+ #
574
+ # ==== Examples
575
+ # <%= back_split_button "Back", posts_path %>
576
+ # # => <div data-role="content"><a href="index.html" data-role="button" data-rel="back">Back</a></div>
577
+ #
578
+ #
579
+ def back_split_button(name, link, options ={} )
580
+ html_options = options.stringify_keys!
581
+ default_options = {'data-role' => "button", 'data-rel' => "back"}
582
+ content_tag(:a, name, {:href => link}.merge(default_options))
583
+ end
584
+
585
+ # Grouped Button
586
+ #
587
+ # ==== Examples
588
+ # group_button("
589
+ # #{home_button_link('home', buttons_path, 'data-iconpos' => 'right')}
590
+ # #{refresh_button_link 'refresh', buttons_path}
591
+ # ")
592
+ # # => <div data-role="controlgroup">
593
+ # <a data-icon="home" data-iconpos="right" data-role="button" href="/buttons">home</a>
594
+ # <a data-icon="refresh" data-role="button" href="/buttons">refresh</a>
595
+ # </div>
596
+ #
597
+ # group_button("
598
+ # #{home_button_link('home', buttons_path, 'data-iconpos' => 'right')}
599
+ # #{refresh_button_link 'refresh', buttons_path}, {'data-type' => 'horizontal'}
600
+ # ")
601
+ # # => <div data-role="controlgroup" data-type="horizontal" >
602
+ # <a data-icon="home" data-iconpos="right" data-role="button" href="/buttons">home</a>
603
+ # <a data-icon="refresh" data-role="button" href="/buttons">refresh</a>
604
+ # </div>
605
+ def group_button(content, options = {})
606
+
607
+ html_options = options.stringify_keys!
608
+ default_options = {'data-role'=> "controlgroup"}
609
+
610
+ if html_options.has_key?('data-type')
611
+ default_options = default_options.merge({'data-type' => html_options['data-type']})
612
+ end
613
+
614
+ content_tag(:div, content, default_options, false)
615
+ end
616
+
617
+ # Inline Buttons
618
+ #
619
+ # ==== Examples
620
+ # inline_button("
621
+ # #{home_button_link('home', buttons_path, 'data-iconpos' => 'right')}
622
+ # #{refresh_button_link 'refresh', buttons_path}
623
+ # ")
624
+ # # => <div data-inline="true" data-role="controlgroup" data-type="horizontal">
625
+ # <a data-icon="home" data-iconpos="right" data-role="button" href="/buttons">home</a>
626
+ # <a data-icon="refresh" data-role="button" href="/buttons">refresh</a>
627
+ # </div>
628
+ #
629
+
630
+ def inline_button(content)
631
+
632
+ default_options = {'data-inline'=> "true", 'data-role'=> "controlgroup", 'data-type' => "horizontal"}
633
+
634
+ content_tag(:div, content, default_options, false)
635
+ end
636
+
637
+ end
638
+ end
639
+