rbmobile 0.0.3 → 1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/mobile_helpers.rb +282 -26
- metadata +3 -4
data/lib/mobile_helpers.rb
CHANGED
@@ -14,14 +14,24 @@
|
|
14
14
|
module RBMobile
|
15
15
|
|
16
16
|
# Assume jquery.mobile installed in public/jquery.mobile-1.0b2/
|
17
|
+
# NOTE: I tested this helper set with version 1.0b2 but you can of course
|
18
|
+
# use any latest/older version at your own risk.
|
19
|
+
# Please don't fill any tickets regarding to the jquery.mobile when
|
20
|
+
# you're using other version than 1.0b2. Only tickets that will be not
|
21
|
+
# deleted will be those with attached patch :-)
|
22
|
+
#
|
17
23
|
JQUERY_MOBILE_VERSION = 'jquery.mobile-1.0b2'
|
18
24
|
|
19
25
|
# Assume jquery library installed in public/jquery-1.6.2.min.js
|
26
|
+
# I don't think that jquery.mobile rely on exact JQuery version.
|
20
27
|
JQUERY_VERSION = 'jquery-1.6.2'
|
21
28
|
|
22
29
|
# Default configuration
|
23
30
|
@configuration = {
|
24
|
-
:ajax => true
|
31
|
+
:ajax => true,
|
32
|
+
:mobile_css_path => "/#{JQUERY_MOBILE_VERSION}/#{JQUERY_MOBILE_VERSION}.min.css",
|
33
|
+
:mobile_js_path => "/#{JQUERY_MOBILE_VERSION}/#{JQUERY_MOBILE_VERSION}.min.js",
|
34
|
+
:jquery_path => "/#{JQUERY_VERSION}.min.js"
|
25
35
|
}
|
26
36
|
|
27
37
|
# You can disable or enable configuration properties
|
@@ -47,6 +57,30 @@ module RBMobile
|
|
47
57
|
@configuration[bool] = false
|
48
58
|
end
|
49
59
|
|
60
|
+
# Set URI path to jquery.mobile CSS file
|
61
|
+
#
|
62
|
+
# Default: "/#{JQUERY_MOBILE_VERSION}/#{JQUERY_MOBILE_VERSION}.min.css"
|
63
|
+
#
|
64
|
+
def self.jquery_mobile_css_path(path)
|
65
|
+
@configuration[:mobile_css_path] = path
|
66
|
+
end
|
67
|
+
|
68
|
+
# Set URI path to jquery.mobile javascript file
|
69
|
+
#
|
70
|
+
# Default: "/#{JQUERY_MOBILE_VERSION}/#{JQUERY_MOBILE_VERSION}.min.js"
|
71
|
+
#
|
72
|
+
def self.jquery_mobile_js_path(path)
|
73
|
+
@configuration[:mobile_js_path] = path
|
74
|
+
end
|
75
|
+
|
76
|
+
# Set URI path to jquery library
|
77
|
+
#
|
78
|
+
# Default: "/#{JQUERY_VERSION}.min.js"
|
79
|
+
#
|
80
|
+
def self.jquery_path(path)
|
81
|
+
@configuration[:jquery_path] = path
|
82
|
+
end
|
83
|
+
|
50
84
|
# This module should be included as a view helper
|
51
85
|
# In Sinatra you need to do following:
|
52
86
|
#
|
@@ -69,14 +103,17 @@ module RBMobile
|
|
69
103
|
#
|
70
104
|
# This method should be placed right after %head tag.
|
71
105
|
#
|
106
|
+
# Additional options:
|
107
|
+
#
|
108
|
+
# [:scale] Set initial scale of display (Default: 1)
|
109
|
+
# [:no_jquery] Disable inclusion of JQuery library
|
110
|
+
#
|
72
111
|
def mobile_include(opts={})
|
73
112
|
capture_haml do
|
74
|
-
haml_tag :meta, :name => 'viewport', :content =>
|
75
|
-
haml_tag :
|
76
|
-
|
77
|
-
|
78
|
-
end
|
79
|
-
haml_tag :script, :type => 'text/javascript', :src => "/#{JQUERY_MOBILE_VERSION}/#{JQUERY_MOBILE_VERSION}.min.js"
|
113
|
+
haml_tag :meta, :name => 'viewport', :content => "width=device-width, initial-scale=#{opts[:scale] || '1'}"
|
114
|
+
haml_tag :script, :type => 'text/javascript', :src => RBMobile::config[:jquery_path] unless opts[:no_jquery]
|
115
|
+
haml_tag :link, :rel => 'stylesheet', :href => RBMobile::config[:mobile_css_path]
|
116
|
+
haml_tag :script, :type => 'text/javascript', :src => RBMobile::config[:mobile_js_path]
|
80
117
|
end
|
81
118
|
end
|
82
119
|
|
@@ -95,8 +132,8 @@ module RBMobile
|
|
95
132
|
#
|
96
133
|
# Additional properties that could be set:
|
97
134
|
#
|
98
|
-
# [title] Set 'data-title' attribute
|
99
|
-
# [theme] Change mobile theme ('a'..'f')
|
135
|
+
# [:title] Set 'data-title' attribute
|
136
|
+
# [:theme] Change mobile theme ('a'..'f')
|
100
137
|
#
|
101
138
|
# Example usage:
|
102
139
|
#
|
@@ -125,7 +162,7 @@ module RBMobile
|
|
125
162
|
#
|
126
163
|
# Additional properties that could be set:
|
127
164
|
#
|
128
|
-
# [theme] Change mobile theme ('a'..'f')
|
165
|
+
# [:theme] Change mobile theme ('a'..'f')
|
129
166
|
#
|
130
167
|
def header(opts={}, &block)
|
131
168
|
opts.merge!(:'data-position' => 'inline')
|
@@ -141,7 +178,7 @@ module RBMobile
|
|
141
178
|
#
|
142
179
|
# Additional properties that could be set:
|
143
180
|
#
|
144
|
-
# [theme] Change mobile theme ('a'..'f')
|
181
|
+
# [:theme] Change mobile theme ('a'..'f')
|
145
182
|
|
146
183
|
def content(opts={}, &block)
|
147
184
|
role :content, opts, &block
|
@@ -162,7 +199,7 @@ module RBMobile
|
|
162
199
|
#
|
163
200
|
# Additional properties that could be set:
|
164
201
|
#
|
165
|
-
# [theme] Change mobile theme ('a'..'f')
|
202
|
+
# [:theme] Change mobile theme ('a'..'f')
|
166
203
|
|
167
204
|
def dialog(opts={}, &block)
|
168
205
|
role :dialog, opts, &block
|
@@ -187,7 +224,7 @@ module RBMobile
|
|
187
224
|
#
|
188
225
|
# Additional properties that could be set:
|
189
226
|
#
|
190
|
-
# [theme] Change mobile theme ('a'..'f')
|
227
|
+
# [:theme] Change mobile theme ('a'..'f')
|
191
228
|
|
192
229
|
def navbar(opts={}, &block)
|
193
230
|
role :navbar, opts do
|
@@ -214,9 +251,9 @@ module RBMobile
|
|
214
251
|
#
|
215
252
|
# Additional properties that could be set:
|
216
253
|
#
|
217
|
-
# [theme] Change mobile theme ('a'..'f')
|
218
|
-
# [icon] Icon to use, eg. 'delete' (refer to jquery mobile icon names)
|
219
|
-
# [active] This will make current navigation item active
|
254
|
+
# [:theme] Change mobile theme ('a'..'f')
|
255
|
+
# [:icon] Icon to use, eg. 'delete' (refer to jquery mobile icon names)
|
256
|
+
# [:active] This will make current navigation item active
|
220
257
|
#
|
221
258
|
def navigate_to(url, label, opts={})
|
222
259
|
options = {
|
@@ -246,9 +283,9 @@ module RBMobile
|
|
246
283
|
#
|
247
284
|
# Additional properties that could be set:
|
248
285
|
#
|
249
|
-
# [theme] Change mobile theme ('a'..'f')
|
250
|
-
# [uibar] Include padding on the bar
|
251
|
-
# [fixed] Fixed toolbars will re-appear after you scroll
|
286
|
+
# [:theme] Change mobile theme ('a'..'f')
|
287
|
+
# [:uibar] Include padding on the bar
|
288
|
+
# [:fixed] Fixed toolbars will re-appear after you scroll
|
252
289
|
|
253
290
|
def footer(opts={}, &block)
|
254
291
|
opts.merge!(:class => "ui-bar") if opts.delete(:uibar)
|
@@ -299,8 +336,8 @@ module RBMobile
|
|
299
336
|
# [kind] Define icon used for button
|
300
337
|
# [url] Where to move after click
|
301
338
|
# [label] Text displayed in button
|
302
|
-
# [theme] Change mobile theme ('a'..'f')
|
303
|
-
# [ajax] Overide default AJAX setting
|
339
|
+
# [:theme] Change mobile theme ('a'..'f')
|
340
|
+
# [:ajax] Overide default AJAX setting
|
304
341
|
|
305
342
|
def button(kind, url, label, opts={})
|
306
343
|
options = {
|
@@ -384,7 +421,8 @@ module RBMobile
|
|
384
421
|
# <p>I'm the collapsible content. By default I'm open and displayed on the page, but you can click the header to hide me.</p>
|
385
422
|
# </div>
|
386
423
|
#
|
387
|
-
# [
|
424
|
+
# [title] Give title to collapsable block
|
425
|
+
# [:collapsed] Determine whenever this block is collapsed or not
|
388
426
|
#
|
389
427
|
def collapse(title, opts={}, &block)
|
390
428
|
opts[:'data-collapsed'] = 'true' if opts.delete(:collapsed) or @collapsed
|
@@ -411,6 +449,10 @@ module RBMobile
|
|
411
449
|
# - collapse 'This is collapsible' do
|
412
450
|
# Hello world!
|
413
451
|
#
|
452
|
+
# Attributes:
|
453
|
+
#
|
454
|
+
# [:theme] Change default theme
|
455
|
+
#
|
414
456
|
def collapse_set(opts={}, &block)
|
415
457
|
@collapsed = true
|
416
458
|
role :'collapsible-set', opts do
|
@@ -434,7 +476,8 @@ module RBMobile
|
|
434
476
|
# Hello World!
|
435
477
|
# = counter('3')
|
436
478
|
#
|
437
|
-
# [filter] Determine if search filter will show up or not
|
479
|
+
# [:filter] Determine if search filter will show up or not
|
480
|
+
# [:ordered] Create ordered list instead of unordered (Use 'ordered_list' method for this)
|
438
481
|
#
|
439
482
|
def list(opts={}, &block)
|
440
483
|
opts[:element] = opts.delete(:ordered) ? :ol : :ul
|
@@ -449,6 +492,10 @@ module RBMobile
|
|
449
492
|
# Same as 'list' but instead of creating a unorder list will create an
|
450
493
|
# ordered list
|
451
494
|
#
|
495
|
+
# Options:
|
496
|
+
#
|
497
|
+
# See 'list' method
|
498
|
+
#
|
452
499
|
def ordered_list(opts={}, &block)
|
453
500
|
list(opts.merge(:ordered => true), &block)
|
454
501
|
end
|
@@ -459,9 +506,9 @@ module RBMobile
|
|
459
506
|
#
|
460
507
|
# Options:
|
461
508
|
#
|
462
|
-
# [icon] Define the right icon in list
|
463
|
-
# [theme] Change default theme for single list item
|
464
|
-
# [item_icon_url] Allow to display custom (64x64) icon on the left side
|
509
|
+
# [:icon] Define the right icon in list
|
510
|
+
# [:theme] Change default theme for single list item
|
511
|
+
# [:item_icon_url] Allow to display custom (64x64) icon on the left side
|
465
512
|
#
|
466
513
|
def item(opts={}, &block)
|
467
514
|
opts[:'data-icon'] = opts.delete(:icon) if opts[:icon]
|
@@ -480,6 +527,10 @@ module RBMobile
|
|
480
527
|
# - link 'a.html', :icon => 'alert' do
|
481
528
|
# This item will send you to a.html
|
482
529
|
#
|
530
|
+
# Options:
|
531
|
+
#
|
532
|
+
# See 'item' method
|
533
|
+
#
|
483
534
|
def link(url, opts={}, &block)
|
484
535
|
original_block = block
|
485
536
|
new_block = Proc::new do
|
@@ -500,6 +551,10 @@ module RBMobile
|
|
500
551
|
# - nested_item 'This is item header', :theme => 'b' do
|
501
552
|
# This is item content
|
502
553
|
#
|
554
|
+
# Options:
|
555
|
+
#
|
556
|
+
# See 'item' method
|
557
|
+
#
|
503
558
|
def nested_item(title, opts={}, &block)
|
504
559
|
original_block = block
|
505
560
|
new_block = Proc::new do
|
@@ -551,6 +606,10 @@ module RBMobile
|
|
551
606
|
# - item do
|
552
607
|
# Andreas Muller
|
553
608
|
#
|
609
|
+
# Options:
|
610
|
+
#
|
611
|
+
# [:theme] Change default theme for divider (broken in jquery.mobile 1.0b2)
|
612
|
+
#
|
554
613
|
def divider(title, opts={})
|
555
614
|
opts[:element] = :li
|
556
615
|
capture_haml do
|
@@ -560,6 +619,22 @@ module RBMobile
|
|
560
619
|
end
|
561
620
|
end
|
562
621
|
|
622
|
+
# Wrapper for all HTML forms
|
623
|
+
#
|
624
|
+
# Example:
|
625
|
+
#
|
626
|
+
# - form '/save', :post do
|
627
|
+
# = input :name, :text, 'Name'
|
628
|
+
# = textarea :text
|
629
|
+
# = search_input :city, 'City'
|
630
|
+
# = toogle :switch, 'Switch'
|
631
|
+
#
|
632
|
+
# Options:
|
633
|
+
#
|
634
|
+
# [url] URL that handle the form data processing on the server
|
635
|
+
# [method] HTTP method to use (Default: POST)
|
636
|
+
# [:ajax] Overide default AJAX setting for this form
|
637
|
+
#
|
563
638
|
def form(url, method=:post, opts={}, &block)
|
564
639
|
opts.merge!(
|
565
640
|
:method => method,
|
@@ -571,6 +646,31 @@ module RBMobile
|
|
571
646
|
end
|
572
647
|
end
|
573
648
|
|
649
|
+
# Text inputs and textareas are coded with standard HTML elements, then
|
650
|
+
# enhanced by jQuery Mobile to make them more attractive and useable on a
|
651
|
+
# mobile.
|
652
|
+
#
|
653
|
+
# Example:
|
654
|
+
#
|
655
|
+
# - form '/save' do
|
656
|
+
# = input :name, :text, 'Name'
|
657
|
+
# = input :surname, :text, 'Name', :required => true
|
658
|
+
#
|
659
|
+
# Options:
|
660
|
+
#
|
661
|
+
# [name] Element name
|
662
|
+
# [kind] Element type (:text, :radio, :checkbox, ...)
|
663
|
+
# [label] Element label (if nil, it will use 'name' as label)
|
664
|
+
# [:value] Default value for this input box
|
665
|
+
# [:placeholder] As soon as you click on (or tab to) the input field, the placeholder text disappears (HTML5)
|
666
|
+
# [:required] Mark this input as required (HTML5)
|
667
|
+
# [:patter] Validate value using regular expression (HTML5)
|
668
|
+
# [:min] Minimal value
|
669
|
+
# [:max] Maximum value
|
670
|
+
# [:maxlength] Maximum string length
|
671
|
+
# [:checked] Mark this input as 'checked' (used in :checkbox os :radio 'kind')
|
672
|
+
# [:no_complete] Disable autocompletetion
|
673
|
+
#
|
574
674
|
def input(name, kind, label=nil, opts={})
|
575
675
|
capture_haml do
|
576
676
|
form_field do
|
@@ -587,12 +687,67 @@ module RBMobile
|
|
587
687
|
end
|
588
688
|
end
|
589
689
|
|
690
|
+
# Search inputs are a new HTML type that is styled with pill-shaped corners
|
691
|
+
# and adds a "x" icon to clear the field once you start typing.
|
692
|
+
#
|
693
|
+
# Example:
|
694
|
+
#
|
695
|
+
# - form 'save' do
|
696
|
+
# = search_input :city, 'City'
|
697
|
+
#
|
698
|
+
# Options:
|
699
|
+
#
|
700
|
+
# [name] Element name
|
701
|
+
#
|
702
|
+
# For more options see 'input' method.
|
703
|
+
#
|
590
704
|
def search_input(name, label=nil, opts={})
|
591
705
|
input(name, :search, label, {
|
592
706
|
:'data-type' => :search,
|
593
707
|
}.merge(opts))
|
594
708
|
end
|
595
709
|
|
710
|
+
# To add a slider widget to your page, start with an input with a new HTML5
|
711
|
+
# type="range" attribute. Specify the value (current value), min and max
|
712
|
+
# attribute values to configure the slider.
|
713
|
+
#
|
714
|
+
# Example:
|
715
|
+
#
|
716
|
+
# - form '/save' do
|
717
|
+
# = slider :cash, 0, 100, 'How much?'
|
718
|
+
#
|
719
|
+
# Options:
|
720
|
+
#
|
721
|
+
# [name] Element name
|
722
|
+
# [min] Starting value
|
723
|
+
# [max] Maximum value
|
724
|
+
# [label] Element label
|
725
|
+
# [:value] Current value
|
726
|
+
#
|
727
|
+
# For other options see 'input' method
|
728
|
+
#
|
729
|
+
def slider(name, min, max, label=nil, opts={})
|
730
|
+
input(name, :range, label, {
|
731
|
+
:min => min,
|
732
|
+
:max => max
|
733
|
+
}.merge(opts))
|
734
|
+
end
|
735
|
+
|
736
|
+
# A binary "flip" switch is a common UI element on mobile devices that is
|
737
|
+
# used for any binary on/off or true/false type of data input. You can
|
738
|
+
# either drag the flip handle like a slider or tap on each half of the
|
739
|
+
# switch.
|
740
|
+
#
|
741
|
+
# Example:
|
742
|
+
#
|
743
|
+
# - form '/save' do
|
744
|
+
# = toogle :question, 'Be or not to be?'
|
745
|
+
#
|
746
|
+
# Options:
|
747
|
+
#
|
748
|
+
# [:first] Replace default 'on' with custom text
|
749
|
+
# [:second] Replace default 'off' with custom text
|
750
|
+
#
|
596
751
|
def toogle(name, label=nil, opts={})
|
597
752
|
capture_haml do
|
598
753
|
form_field do
|
@@ -611,6 +766,25 @@ module RBMobile
|
|
611
766
|
end
|
612
767
|
end
|
613
768
|
|
769
|
+
# The select menus are driven off native select elements, but the native
|
770
|
+
# selects are hidden from view and replaced with a custom-styled select
|
771
|
+
# button that matches the look and feel of the jQuery Mobile framework. The
|
772
|
+
# replacement selects are ARIA-enabled and are keyboard accessible on the
|
773
|
+
# desktop as well.
|
774
|
+
#
|
775
|
+
# Example:
|
776
|
+
#
|
777
|
+
# - form '/save' do
|
778
|
+
# = select :pet, 'Select pet', ['Choose Pet', ['dog', 'Dog'], ['cat', 'Cat'], ['hamster', 'Hamster']]
|
779
|
+
#
|
780
|
+
# [name] Element name
|
781
|
+
# [label] Element label
|
782
|
+
# [options] Array with select options. This array should contain two
|
783
|
+
# dimensional array with 'value' and 'name'. If array item is a string
|
784
|
+
# instead of array it's used as select placeholder
|
785
|
+
# [:native] Enable native elements (don't use jquery.mobile UI)
|
786
|
+
# [:theme] Change theme for this select
|
787
|
+
#
|
614
788
|
def select(name, label=nil, options=[], opts={})
|
615
789
|
opts = {
|
616
790
|
:'data-native-menu' => opts.delete(:native) ? 'true' : 'false',
|
@@ -634,6 +808,25 @@ module RBMobile
|
|
634
808
|
end
|
635
809
|
end
|
636
810
|
|
811
|
+
# Radio buttons are used to provide a list of options where only a single
|
812
|
+
# items can be selected. Traditional desktop radio buttons are not optimized
|
813
|
+
# for touch input so in jQuery Mobile, we style the label for the radio
|
814
|
+
# buttons so they are larger and look clickable. A custom set of icons are
|
815
|
+
# added to the label to provide additional visual feedback.
|
816
|
+
#
|
817
|
+
# Example:
|
818
|
+
#
|
819
|
+
# - form '/save' do
|
820
|
+
# = radio :pet, 'Choose pet vertical', ['cat', :dog, 'hamster', 'honey badger']
|
821
|
+
# = radio :pet, 'Choose pet', ['cat', :dog, 'hamster', 'honey badger'], :type => :horizontal
|
822
|
+
#
|
823
|
+
# Options:
|
824
|
+
#
|
825
|
+
# [name] Element name
|
826
|
+
# [label] Element label
|
827
|
+
# [options] List of possible options. Use 'Symbol' instead of 'String' if you want to make some value 'checked'
|
828
|
+
# [:type] You can have 'horizontal' or 'vertical' radio group (Default: vertical)
|
829
|
+
#
|
637
830
|
def radio(name, label=nil, options=[], opts={})
|
638
831
|
capture_haml do
|
639
832
|
form_field do
|
@@ -653,6 +846,31 @@ module RBMobile
|
|
653
846
|
end
|
654
847
|
end
|
655
848
|
|
849
|
+
# Checkboxes are used to provide a list of options where more than one can
|
850
|
+
# be selected. Traditional desktop checkboxes are not optimized for touch
|
851
|
+
# input so in jQuery Mobile, we style the label for the checkboxes so they
|
852
|
+
# are larger and look clickable. A custom set of icons are added to the
|
853
|
+
# label to provide additional visual feedback.
|
854
|
+
|
855
|
+
# Both the radio and checkbox controls below use standard input/label
|
856
|
+
# markup, but are styled to be more touch-friendly. The styled control you
|
857
|
+
# see is actually the label element, which sits over the real input, so if
|
858
|
+
# images fail to load, you'll still have a functional control. In most
|
859
|
+
# browsers, clicking the label automatically triggers a click on the input,
|
860
|
+
# but we've had to trigger the update manually for a few mobile browsers
|
861
|
+
# that don't do this natively. On the desktop, these controls are keyboard
|
862
|
+
# and screen-reader accessible.
|
863
|
+
#
|
864
|
+
# Examples:
|
865
|
+
#
|
866
|
+
# - form do
|
867
|
+
# = checkbox :pet, 'Choose multiple pets', ['cat', :dog, 'hamster', 'honey badger']
|
868
|
+
# = checkbox :pet, 'Choose multiple pets horizontal', ['cat', :dog, 'hamster', 'honey badger'], :type => :horizontal
|
869
|
+
#
|
870
|
+
# Options:
|
871
|
+
#
|
872
|
+
# See 'radio' method.
|
873
|
+
#
|
656
874
|
def checkbox(name, label=nil, options=[], opts={})
|
657
875
|
capture_haml do
|
658
876
|
form_field do
|
@@ -672,6 +890,26 @@ module RBMobile
|
|
672
890
|
end
|
673
891
|
end
|
674
892
|
|
893
|
+
# For multi-line text inputs, use a textarea element. The framework will
|
894
|
+
# auto-grow the height of the textarea to avoid the need for an internal
|
895
|
+
# scrollbar which is very hard to use on a mobile device.
|
896
|
+
#
|
897
|
+
# Examples:
|
898
|
+
#
|
899
|
+
# - form do
|
900
|
+
# = textarea :text
|
901
|
+
#
|
902
|
+
# Options:
|
903
|
+
#
|
904
|
+
# [name] Element name
|
905
|
+
# [label] Element label
|
906
|
+
# [:cols] Number of columns
|
907
|
+
# [:rows] Number of rows
|
908
|
+
# [:placeholder] See 'input'
|
909
|
+
# [:required] Make textarea required (HTML5)
|
910
|
+
# [:content] Insert some content into textarea
|
911
|
+
# [:maxlength] Maximum text length (HTML5)
|
912
|
+
#
|
675
913
|
def textarea(name, label=nil, opts={})
|
676
914
|
capture_haml do
|
677
915
|
form_field do
|
@@ -687,10 +925,28 @@ module RBMobile
|
|
687
925
|
end
|
688
926
|
end
|
689
927
|
|
928
|
+
# Basic wrapper for all form fields
|
929
|
+
#
|
930
|
+
# Options:
|
931
|
+
#
|
932
|
+
# [:theme] Change default theme
|
933
|
+
#
|
690
934
|
def form_field(opts={}, &block)
|
691
935
|
role :'fieldcontain', opts, &block
|
692
936
|
end
|
693
937
|
|
938
|
+
# Form submitter
|
939
|
+
#
|
940
|
+
# Example:
|
941
|
+
#
|
942
|
+
# - form do
|
943
|
+
# = submit 'Submit this form'
|
944
|
+
#
|
945
|
+
# Options:
|
946
|
+
#
|
947
|
+
# [label] Text displayed in button (Default: 'Submit')
|
948
|
+
# [:theme] Change the default theme for button
|
949
|
+
#
|
694
950
|
def submit(label=nil, opts={})
|
695
951
|
opts = {
|
696
952
|
:'data-theme' => opts.delete(:theme)
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbmobile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
|
9
|
-
- 3
|
10
|
-
version: 0.0.3
|
9
|
+
version: "1.0"
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Michal Fojtik
|