ruby_motion_query 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/motion/ruby_motion_query/actions.rb +16 -0
  3. data/motion/ruby_motion_query/app.rb +11 -0
  4. data/motion/ruby_motion_query/color.rb +7 -2
  5. data/motion/ruby_motion_query/data.rb +10 -0
  6. data/motion/ruby_motion_query/format.rb +13 -1
  7. data/motion/ruby_motion_query/position.rb +38 -12
  8. data/motion/ruby_motion_query/stylers/protocols/ui_text_input_traits.rb +3 -3
  9. data/motion/ruby_motion_query/stylers/ui_activity_indicator_view.rb +50 -0
  10. data/motion/ruby_motion_query/stylers/ui_button_styler.rb +20 -0
  11. data/motion/ruby_motion_query/stylers/ui_label_styler.rb +18 -1
  12. data/motion/ruby_motion_query/stylers/ui_scroll_view_styler.rb +10 -0
  13. data/motion/ruby_motion_query/stylers/ui_segmented_control_styler.rb +15 -3
  14. data/motion/ruby_motion_query/stylers/ui_table_view_cell_styler.rb +43 -1
  15. data/motion/ruby_motion_query/stylers/ui_table_view_styler.rb +11 -0
  16. data/motion/ruby_motion_query/stylers/ui_text_field_styler.rb +5 -2
  17. data/motion/ruby_motion_query/stylers/ui_text_view_styler.rb +3 -0
  18. data/motion/ruby_motion_query/stylers/ui_view_styler.rb +92 -6
  19. data/motion/ruby_motion_query/stylesheet.rb +19 -18
  20. data/motion/ruby_motion_query/subviews.rb +5 -0
  21. data/motion/ruby_motion_query/tags.rb +7 -0
  22. data/motion/ruby_motion_query/validation.rb +6 -0
  23. data/motion/ruby_motion_query/version.rb +1 -1
  24. data/templates/collection_view_controller/spec/views/{name_cell.rb → name_cell_spec.rb} +0 -0
  25. data/templates/lib/spec/lib/{name.rb → name_spec.rb} +0 -0
  26. data/templates/model/spec/models/{name.rb → name_spec.rb} +0 -0
  27. data/templates/shared/spec/shared/{name.rb → name_spec.rb} +0 -0
  28. data/templates/table_view_controller/spec/views/{name_cell.rb → name_cell_spec.rb} +0 -0
  29. data/templates/view/spec/views/{name.rb → name_spec.rb} +0 -0
  30. metadata +11 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9913c04791559fa0a0408ca563e38d8eea89c38d
4
- data.tar.gz: 2a523d42844327abfe26e233697045ef1294049c
3
+ metadata.gz: 076402a0a8e41d928b775cb8319a0f0ba942c7a9
4
+ data.tar.gz: 3a41cd46bdc0deb04b462372d1390e41f4868621
5
5
  SHA512:
6
- metadata.gz: bf40b66623205cb835426352ad33a2103bb37cbfea6dc4541a793711d6778052141d48e502767a01196fb6b8c27224413589f2fd3da94abf8dfd1ed56dc3b592
7
- data.tar.gz: 474192216610a6115742b429c76d142f11fc99148e63823fe99567f077c3bda60ac3f4238b87d4b8df041cfafca128f000201564f9495039f1793ccdea54d13a
6
+ metadata.gz: fbfa05daa2ca2013f0402ec58ecc6ef0a9e4d0e3a7e656a43aaf8e3e75f74fd587a8d1fb31d3e8291f1a09bf03a150224abdf3ea3d08d3dce20bdebf382820db
7
+ data.tar.gz: 9eb821d64590ef1670c3dc4b97b0beb49ade5aecd765e8a75baee54953f1142a5cb93019eca3587f305b105dc7f7778f7d4574a7027dd20319b11ee3b58a67e6
@@ -155,5 +155,21 @@ module RubyMotionQuery
155
155
  self
156
156
  end
157
157
 
158
+ # For UIActivityIndicatorViews
159
+ def start_animating
160
+ selected.each do |view|
161
+ view.startAnimating if view.respond_to?(:startAnimating)
162
+ end
163
+ self
164
+ end
165
+
166
+ # For UIActivityIndicatorViews
167
+ def stop_animating
168
+ selected.each do |view|
169
+ view.stopAnimating if view.respond_to?(:startAnimating)
170
+ end
171
+ self
172
+ end
173
+
158
174
  end
159
175
  end
@@ -83,6 +83,17 @@ module RubyMotionQuery
83
83
  NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true)[0]
84
84
  end
85
85
 
86
+ # @return [NSTimer] NSTimer instance, fires once after <seconds>
87
+ def after(seconds, &callback)
88
+ NSTimer.scheduledTimerWithTimeInterval(seconds, target: callback, selector: 'call:', userInfo: nil, repeats: false)
89
+ end
90
+ alias delay after
91
+
92
+ # @return [NSTimer] NSTimer instance, set to repeat every <seconds>
93
+ def every(seconds, &callback)
94
+ NSTimer.scheduledTimerWithTimeInterval(seconds, target: callback, selector: 'call:', userInfo: nil, repeats: true)
95
+ end
96
+
86
97
  # Returns the current view controller in the app. If the current controller is a tab or
87
98
  # navigation controller, then it gets the current tab or topmost controller in the nav, etc
88
99
  #
@@ -161,8 +161,13 @@ module RubyMotionQuery
161
161
 
162
162
  def self.from_base_color(values)
163
163
  base = values[:base] || values[:color]
164
- r, g, b, a = Pointer.new('d'), Pointer.new('d'), Pointer.new('d'), Pointer.new('d')
165
- base.getRed(r, green: g, blue: b, alpha: a)
164
+ begin
165
+ r, g, b, a = Pointer.new('d'), Pointer.new('d'), Pointer.new('d'), Pointer.new('d')
166
+ base.getRed(r, green: g, blue: b, alpha: a)
167
+ rescue
168
+ r, g, b, a = Pointer.new('f'), Pointer.new('f'), Pointer.new('f'), Pointer.new('f')
169
+ base.getRed(r, green: g, blue: b, alpha: a)
170
+ end
166
171
 
167
172
  r = values[:r] || values[:red] || r.value
168
173
  g = values[:g] || values[:green] || g.value
@@ -32,6 +32,16 @@ module RubyMotionQuery
32
32
  end
33
33
  end
34
34
 
35
+ # *Do not* use this, use {RMQ#untag} instead:
36
+ # @example
37
+ # rmq(my_view).untag(:foo, :bar)
38
+ # Do nothing if no tag supplied or tag not present
39
+ def untag(*tag_or_tags)
40
+ tag_or_tags.flatten.each do |tag_name|
41
+ tags.delete tag_name
42
+ end
43
+ end
44
+
35
45
  # Check if this view contains a specific tag
36
46
  #
37
47
  # @param tag_name name of tag to check
@@ -24,7 +24,7 @@ module RubyMotionQuery
24
24
  #
25
25
  # See <http://www.unicode.org/reports/tr35/tr35-19.html#Date_Format_Patterns>
26
26
  # for more information about date format strings.
27
- def date(date, *format_or_styles)
27
+ def date(date = nil, *format_or_styles)
28
28
  RubyMotionQuery::Format::Date.formatter(*format_or_styles).stringFromDate(date)
29
29
  end
30
30
 
@@ -35,6 +35,10 @@ module RubyMotionQuery
35
35
  def date_formatter(*format_or_styles)
36
36
  RubyMotionQuery::Format::Date.formatter(*format_or_styles)
37
37
  end
38
+
39
+ def add_datetime_style(style, format)
40
+ RubyMotionQuery::Format::Date.add_datetime_style(style, format)
41
+ end
38
42
  end
39
43
  end
40
44
 
@@ -108,6 +112,9 @@ module RubyMotionQuery
108
112
  @_date_formatters[styles.to_s] ||= begin
109
113
  date_formatter = NSDateFormatter.alloc.init
110
114
 
115
+ date_formatter.setDateStyle(NSDateFormatterNoStyle)
116
+ date_formatter.setDateStyle(NSDateFormatterNoStyle)
117
+
111
118
  styles.each do |style|
112
119
  if DATE_STYLES.has_key?(style)
113
120
  date_formatter.setDateStyle(DATE_STYLES.fetch(style))
@@ -120,6 +127,11 @@ module RubyMotionQuery
120
127
  end
121
128
  end
122
129
 
130
+ def add_datetime_style(style_name, format)
131
+ @_date_formatters ||= {}
132
+
133
+ @_date_formatters[[style_name].to_s] ||= formatter_from_format(format)
134
+ end
123
135
  end
124
136
  end
125
137
  end
@@ -106,22 +106,26 @@ module RubyMotionQuery
106
106
  self
107
107
  end
108
108
 
109
- def resize_to_fit_subviews
109
+ def resize_frame_to_fit_subviews(args = {})
110
110
  selected.each do |view|
111
- w = 0
112
- h = 0
111
+ view.rmq.layout(subviews_bottom_right(view, args))
112
+ end
113
113
 
114
- view.subviews.each do |subview|
115
- rect = subview.rmq.frame
116
- w = [rect.right, w].max
117
- h = [rect.bottom, h].max
118
- end
114
+ self
115
+ end
116
+ alias :resize_to_fit_subviews :resize_frame_to_fit_subviews
119
117
 
120
- rect = view.rmq.frame
121
- w = rect.width if w == 0
122
- h = rect.height if h == 0
118
+ def resize_content_to_fit_subviews(args = {})
119
+ selected.each do |view|
120
+ unless view.respond_to?(:contentSize)
121
+ puts "\n[RMQ ERROR] resize_content_to_fit_subviews must be called on a view that supports `contentSize`. Called on #{view}\n\n"
122
+ next
123
+ end
123
124
 
124
- view.rmq.layout(w: w, h: h)
125
+ view.rmq.style do |st|
126
+ bottom_right = subviews_bottom_right(view, args)
127
+ st.content_size = CGSizeMake(bottom_right[:w], bottom_right[:h])
128
+ end
125
129
  end
126
130
 
127
131
  self
@@ -142,5 +146,27 @@ module RubyMotionQuery
142
146
  out
143
147
  end
144
148
 
149
+ private
150
+
151
+ # Calculates the bottom right of a view using its subviews
152
+ #
153
+ # @return [Hash]
154
+ def subviews_bottom_right(view, args = {})
155
+ w = 0
156
+ h = 0
157
+
158
+ view.subviews.each do |subview|
159
+ rect = subview.rmq.frame
160
+ w = [rect.right, w].max
161
+ h = [rect.bottom, h].max
162
+ end
163
+
164
+ rect = view.rmq.frame
165
+ w = rect.width if (w == 0 || args[:only_height])
166
+ h = rect.height if (h == 0 || args[:only_width])
167
+
168
+ {w: (w + (args[:right] || 0)), h: (h + (args[:bottom] || 0))}
169
+ end
170
+
145
171
  end
146
172
  end
@@ -5,16 +5,16 @@ module RubyMotionQuery
5
5
  # UITExtInputTraits protocol
6
6
  module UITextInputTraits
7
7
  def autocapitalization_type ; view.autocapitalizationType ; end
8
- def autocapitalization_type=(v) ; view.autocapitalizationType = v ; end
8
+ def autocapitalization_type=(v) ; view.autocapitalizationType = AUTO_CAPITALIZATION_TYPES[v] || v ; end
9
9
 
10
10
  def autocorrection_type ; view.autocorrectionType ; end
11
- def autocorrection_type=(v) ; view.autocorrectionType = v ; end
11
+ def autocorrection_type=(v) ; view.autocorrectionType = AUTO_CORRECTION_TYPES[v] || v ; end
12
12
 
13
13
  def enables_return_key_automatically ; view.enablesReturnKeyAutomatically ; end
14
14
  def enables_return_key_automatically=(v) ; view.enablesReturnKeyAutomatically = v ; end
15
15
 
16
16
  def keyboard_appearance ; view.keyboardAppearance ; end
17
- def keyboard_appearance=(v) ; view.keyboardAppearance = v ; end
17
+ def keyboard_appearance=(v) ; view.keyboardAppearance = KEYBOARD_APPEARANCES[v] || v ; end
18
18
 
19
19
  def keyboard_type ; view.keyboardType ; end
20
20
  def keyboard_type=(v) ; view.setKeyboardType(KEYBOARD_TYPES[v] || v) ; end
@@ -0,0 +1,50 @@
1
+ module RubyMotionQuery
2
+ module Stylers
3
+ class UIActivityIndicatorViewStyler < UIViewStyler
4
+
5
+ UI_ACTIVITY_INDICATOR_VIEW_STYLES = {
6
+ large: UIActivityIndicatorViewStyleWhiteLarge,
7
+ white_large: UIActivityIndicatorViewStyleWhiteLarge,
8
+ default: UIActivityIndicatorViewStyleWhite,
9
+ white: UIActivityIndicatorViewStyleWhite,
10
+ gray: UIActivityIndicatorViewStyleGray
11
+ }
12
+
13
+ def start_animating
14
+ @view.startAnimating
15
+ end
16
+ alias :start :start_animating
17
+
18
+ def stop_animating
19
+ @view.stopAnimating
20
+ end
21
+ alias :stop :stop_animating
22
+
23
+ def is_animating?
24
+ @view.isAnimating
25
+ end
26
+ alias :animating? :is_animating?
27
+
28
+ def hides_when_stopped=(value)
29
+ @view.hidesWhenStopped = value
30
+ end
31
+ def hides_when_stopped
32
+ @view.hidesWhenStopped
33
+ end
34
+
35
+ def activity_indicator_style=(value)
36
+ @view.activityIndicatorViewStyle = UI_ACTIVITY_INDICATOR_VIEW_STYLES[value] || value
37
+ end
38
+ def activity_indicator_style
39
+ @view.activityIndicatorViewStyle
40
+ end
41
+
42
+ def color=(value)
43
+ @view.color = value
44
+ end
45
+ def color
46
+ @view.color
47
+ end
48
+ end
49
+ end
50
+ end
@@ -52,6 +52,26 @@ module RubyMotionQuery
52
52
  @view.setBackgroundImage value, forState: UIControlStateHighlighted
53
53
  end
54
54
 
55
+ def background_image_selected=(value)
56
+ @view.setBackgroundImage value, forState: UIControlStateSelected
57
+ end
58
+
59
+ def adjust_image_when_highlighted=(value)
60
+ @view.adjustsImageWhenHighlighted = value
61
+ end
62
+
63
+ def adjust_image_when_highlighted
64
+ @view.adjustsImageWhenHighlighted
65
+ end
66
+
67
+ def selected=(value)
68
+ @view.setSelected(value)
69
+ end
70
+
71
+ def selected
72
+ @view.isSelected
73
+ end
74
+
55
75
  # Accepts UIEdgeInsetsMake OR and array of values to be the inset.
56
76
  # st.title_edge_insets = UIEdgeInsetsMake(0, 10.0, 0, 0)
57
77
  # OR
@@ -13,6 +13,8 @@ module RubyMotionQuery
13
13
 
14
14
  def color=(value) ; @view.setTextColor value ; end
15
15
  def color ; @view.textColor ; end
16
+ alias :text_color :color
17
+ alias :text_color= :color=
16
18
 
17
19
  def number_of_lines=(value)
18
20
  value = 0 if value == :unlimited
@@ -27,7 +29,7 @@ module RubyMotionQuery
27
29
  end
28
30
 
29
31
  def line_break_mode=(value)
30
- @view.lineBreakMode = value
32
+ @view.lineBreakMode = LINE_BREAK_MODES[value] || value
31
33
  end
32
34
  def line_break_mode
33
35
  @view.lineBreakMode
@@ -39,6 +41,8 @@ module RubyMotionQuery
39
41
  def text_alignment
40
42
  @view.textAlignment
41
43
  end
44
+ alias :text_align= :text_alignment=
45
+ alias :text_align :text_alignment
42
46
 
43
47
  def resize_to_fit_text
44
48
  @view.sizeToFit
@@ -54,6 +58,19 @@ module RubyMotionQuery
54
58
  def adjusts_font_size
55
59
  @view.adjustsFontSizeToFitWidth
56
60
  end
61
+ alias :adjusts_font_size_to_fit_width= :adjusts_font_size=
62
+ alias :adjusts_font_size_to_fit_width :adjusts_font_size
63
+
64
+ def resize_height_to_fit
65
+ @view.lineBreakMode = UILineBreakModeWordWrap
66
+ @view.numberOfLines = 0
67
+
68
+ attributed_text = NSAttributedString.alloc.initWithString(@view.text, attributes:{NSFontAttributeName => @view.font})
69
+ rect = attributed_text.boundingRectWithSize([@view.frame.size.width, Float::MAX], options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading), context:nil)
70
+
71
+ expected_label_size = [@view.frame.size.width, rect.size.height.ceil]
72
+ @view.frame = [@view.frame.origin, expected_label_size]
73
+ end
57
74
  end
58
75
 
59
76
  end
@@ -1,6 +1,14 @@
1
1
  module RubyMotionQuery
2
2
  module Stylers
3
3
 
4
+ INDICATOR_STYLES = {
5
+ default: UIScrollViewIndicatorStyleDefault,
6
+ black: UIScrollViewIndicatorStyleBlack,
7
+ dark: UIScrollViewIndicatorStyleBlack,
8
+ white: UIScrollViewIndicatorStyleWhite,
9
+ light: UIScrollViewIndicatorStyleWhite
10
+ }
11
+
4
12
  class UIScrollViewStyler < UIViewStyler
5
13
  def paging=(value) ; @view.pagingEnabled = value ; end
6
14
  def paging ; @view.isPagingEnabled ; end
@@ -32,6 +40,8 @@ module RubyMotionQuery
32
40
  def scroll_indicator_insets=(value); @view.scrollIndicatorInsets = value; end
33
41
  def scroll_indicator_insets; @view.scrollIndicatorInsets; end
34
42
 
43
+ def indicator_style=(value); @view.indicatorStyle = INDICATOR_STYLES[value] || value; end
44
+ def indicator_style; @view.indicatorStyle; end
35
45
 
36
46
  end
37
47
 
@@ -1,8 +1,20 @@
1
1
  module RubyMotionQuery
2
2
  module Stylers
3
+ class UISegmentedControlStyler < UIControlStyler
3
4
 
4
- class UISegmentedControlStyler < UIControlStyler
5
- end
5
+ def prepend_segments=(value)
6
+ if value.class == Array
7
+ value.each_with_index do |title, index|
8
+ @view.insertSegmentWithTitle(title, atIndex:index, animated:false)
9
+ end
10
+ elsif value.class == String
11
+ @view.insertSegmentWithTitle(value, atIndex:0, animated:false)
12
+ else
13
+ raise "#{__method__} takes an array or string."
14
+ end
15
+ end
16
+ alias :unshift= :prepend_segments=
6
17
 
18
+ end
7
19
  end
8
- end
20
+ end
@@ -19,7 +19,49 @@ module RubyMotionQuery
19
19
  @view.accessoryView
20
20
  end
21
21
 
22
+ def text_color ; @view.textLabel.textColor ; end
23
+ def text_color=(v) ; @view.textLabel.textColor = v ; end
24
+ alias :color :text_color
25
+ alias :color= :text_color=
26
+
27
+ def detail_text_color
28
+ if @view.detailTextLabel
29
+ @view.detailTextLabel.textColor
30
+ end
31
+ end
32
+
33
+ def detail_text_color=(v)
34
+ if @view.detailTextLabel
35
+ @view.detailTextLabel.textColor = v
36
+ end
37
+ end
38
+ alias :detail_color :text_color
39
+ alias :detail_color= :text_color=
40
+
41
+ def font ; @view.textLabel.font ; end
42
+ def font=(v) ; @view.textLabel.font = v ; end
43
+
44
+ def detail_font
45
+ @view.detailTextLabel.font if @view.detailTextLabel
46
+ end
47
+
48
+ def detail_font=(v)
49
+ if @view.detailTextLabel
50
+ @view.detailTextLabel.font = v
51
+ end
52
+ end
53
+
54
+ def selection_style ; @view.selectionStyle ; end
55
+ def selection_style=(v) ; @view.selectionStyle = v ; end
56
+
57
+ def separator_inset=(value)
58
+ @view.separatorInset = value
59
+ end
60
+ def separator_inset
61
+ @view.separatorInset
62
+ end
63
+
22
64
  end
23
65
 
24
66
  end
25
- end
67
+ end
@@ -22,6 +22,17 @@ module RubyMotionQuery
22
22
  @view.rowHeight = value
23
23
  end
24
24
 
25
+ def background_image=(value)
26
+ @view.backgroundView = UIImageView.alloc.initWithImage(value)
27
+ end
28
+ def background_image
29
+ if @view.backgroundView
30
+ @view.backgroundView.image
31
+ else
32
+ nil
33
+ end
34
+ end
35
+
25
36
  SEPARATOR_STYLES = {
26
37
  none: UITableViewCellSeparatorStyleNone,
27
38
  single: UITableViewCellSeparatorStyleSingleLine,
@@ -25,6 +25,7 @@ module RubyMotionQuery
25
25
  def text_color ; view.textColor ; end
26
26
  def text_color=(v) ; view.textColor = v ; end
27
27
  alias :color :text_color
28
+ alias :color= :text_color=
28
29
 
29
30
  def text_alignment ; view.textAlignment ; end
30
31
  def text_alignment=(v) ; view.textAlignment = TEXT_ALIGNMENTS[v] || v ; end
@@ -35,6 +36,8 @@ module RubyMotionQuery
35
36
  # Sizing the Text Field's Text
36
37
  def adjusts_font_size_to_fit_width ; view.adjustsFontSizeToFitWidth ; end
37
38
  def adjusts_font_size_to_fit_width=(v) ; view.adjustsFontSizeToFitWidth = v ; end
39
+ alias :adjusts_font_size= :adjusts_font_size_to_fit_width=
40
+ alias :adjusts_font_size :adjusts_font_size_to_fit_width
38
41
 
39
42
  def minimum_font_size ; view.minimumFontSize ; end
40
43
  def minimum_font_size=(v) ; view.minimumFontSize = v ; end
@@ -70,13 +73,13 @@ module RubyMotionQuery
70
73
  def left_view=(v) ; view.leftView = v ; end
71
74
 
72
75
  def left_view_mode ; view.leftViewMode ; end
73
- def left_view_mode=(v) ; view.leftViewMode = v ; end
76
+ def left_view_mode=(v); view.leftViewMode = TEXT_FIELD_MODES[v] || v ; end
74
77
 
75
78
  def right_view ; view.rightView ; end
76
79
  def right_view=(v) ; view.rightView = v ; end
77
80
 
78
81
  def right_view_mode ; view.rightViewMode ; end
79
- def right_view_mode=(v) ; view.rightViewMode = v ; end
82
+ def right_view_mode=(v); view.rightViewMode = TEXT_FIELD_MODES[v] || v ; end
80
83
  end
81
84
  end
82
85
  end
@@ -20,6 +20,9 @@ module RubyMotionQuery
20
20
  def font ; view.font ; end
21
21
  def font=(v) ; view.font = v ; end
22
22
 
23
+ def text_alignment ; view.textAlignment ; end
24
+ def text_alignment=(v) ; view.textAlignment = TEXT_ALIGNMENTS[v] || v ; end
25
+
23
26
  def text_color ; view.textColor ; end
24
27
  def text_color=(v) ; view.textColor = v ; end
25
28
  alias :color :text_color
@@ -4,6 +4,7 @@ module RubyMotionQuery
4
4
  TEXT_ALIGNMENTS = {
5
5
  left: NSTextAlignmentLeft,
6
6
  center: NSTextAlignmentCenter,
7
+ centered: NSTextAlignmentCenter,
7
8
  right: NSTextAlignmentRight,
8
9
  justified: NSTextAlignmentJustified,
9
10
  natural: NSTextAlignmentNatural
@@ -25,6 +26,13 @@ module RubyMotionQuery
25
26
  alphabet: UIKeyboardTypeASCIICapable
26
27
  }
27
28
 
29
+ KEYBOARD_APPEARANCES = {
30
+ default: UIKeyboardAppearanceDefault,
31
+ dark: UIKeyboardAppearanceDark,
32
+ light: UIKeyboardAppearanceLight,
33
+ alert: UIKeyboardAppearanceAlert
34
+ }
35
+
28
36
  RETURN_KEY_TYPES = {
29
37
  default: UIReturnKeyDefault,
30
38
  go: UIReturnKeyGo,
@@ -53,6 +61,53 @@ module RubyMotionQuery
53
61
  rounded: UITextBorderStyleRoundedRect
54
62
  }
55
63
 
64
+ TEXT_FIELD_MODES = {
65
+ never: UITextFieldViewModeNever,
66
+ while_editing: UITextFieldViewModeWhileEditing,
67
+ unless_editing: UITextFieldViewModeUnlessEditing,
68
+ always: UITextFieldViewModeAlways
69
+ }
70
+
71
+ LINE_BREAK_MODES = {
72
+ word_wrapping: NSLineBreakByWordWrapping,
73
+ word_wrap: NSLineBreakByWordWrapping,
74
+ char_wrapping: NSLineBreakByCharWrapping,
75
+ char_wrap: NSLineBreakByCharWrapping,
76
+ clipping: NSLineBreakByClipping,
77
+ truncating_head: NSLineBreakByTruncatingHead,
78
+ truncating_tail: NSLineBreakByTruncatingTail,
79
+ truncating_middle: NSLineBreakByTruncatingMiddle
80
+ }
81
+
82
+ AUTO_CORRECTION_TYPES = {
83
+ default: UITextAutocorrectionTypeDefault,
84
+ no: UITextAutocorrectionTypeNo,
85
+ yes: UITextAutocorrectionTypeYes,
86
+ }
87
+
88
+ AUTO_CAPITALIZATION_TYPES = {
89
+ none: UITextAutocapitalizationTypeNone,
90
+ words: UITextAutocapitalizationTypeWords,
91
+ sentences: UITextAutocapitalizationTypeSentences,
92
+ all: UITextAutocapitalizationTypeAllCharacters
93
+ }
94
+
95
+ CONTENT_MODE_TYPES = {
96
+ scale_to_fill: UIViewContentModeScaleToFill,
97
+ scale_aspect_fit: UIViewContentModeScaleAspectFit,
98
+ scale_aspect_fill: UIViewContentModeScaleAspectFill,
99
+ redraw: UIViewContentModeRedraw,
100
+ center: UIViewContentModeCenter,
101
+ top: UIViewContentModeTop,
102
+ bottom: UIViewContentModeBottom,
103
+ left: UIViewContentModeLeft,
104
+ right: UIViewContentModeRight,
105
+ top_left: UIViewContentModeTopLeft,
106
+ top_right: UIViewContentModeTopRight,
107
+ bottom_left: UIViewContentModeBottomLeft,
108
+ bottom_right: UIViewContentModeBottomRight
109
+ }
110
+
56
111
  # When you create a styler, always inherit UIViewStyler
57
112
  class UIViewStyler
58
113
  def initialize(view)
@@ -233,7 +288,7 @@ module RubyMotionQuery
233
288
  end
234
289
 
235
290
  def content_mode=(value)
236
- @view.setContentMode value
291
+ @view.setContentMode(CONTENT_MODE_TYPES[value] || value)
237
292
  end
238
293
  def content_mode
239
294
  @view.contentMode
@@ -271,10 +326,10 @@ module RubyMotionQuery
271
326
  end
272
327
 
273
328
  def border_color=(value)
274
- if is_color(value)
329
+ if value.is_a?(UIColor)
275
330
  @view.layer.setBorderColor(value.CGColor)
276
331
  else
277
- @view.layer.setBorderColor value
332
+ @view.layer.setBorderColor(value)
278
333
  end
279
334
  end
280
335
 
@@ -316,7 +371,26 @@ module RubyMotionQuery
316
371
  def alpha ; view.alpha ; end
317
372
  def alpha=(v) ; view.alpha = v ; end
318
373
 
374
+ def shadow_color=(c)
375
+ c = c.CGColor if c.kind_of?(UIColor)
376
+ @view.layer.shadowColor = c
377
+ end
378
+ def shadow_color ; @view.layer.shadowColor ; end
379
+
380
+ def shadow_offset=(offset)
381
+ @view.layer.shadowOffset = offset
382
+ end
383
+ def shadow_offset ; @view.layer.shadowOffset ; end
319
384
 
385
+ def shadow_opacity=(opacity)
386
+ @view.layer.shadowOpacity = opacity
387
+ end
388
+ def shadow_opacity ; @view.layer.shadowOpacity ; end
389
+
390
+ def shadow_path=(path)
391
+ @view.layer.shadowPath = path
392
+ end
393
+ def shadow_path ; @view.layer.shadowPath ; end
320
394
 
321
395
 
322
396
  # @deprecated - use frame hashs
@@ -454,11 +528,23 @@ module RubyMotionQuery
454
528
  end
455
529
  end
456
530
 
457
- private
531
+ #param is a hash of locations and colors: { locations: [], colors: [] }
532
+ def background_gradient=(options)
533
+ colors = options.fetch(:colors).collect { |c| c.CGColor }
534
+ locations = options.fetch(:locations)
458
535
 
459
- def is_color(value)
460
- [UICachedDeviceRGBColor, UIDeviceRGBColor].include?(value.class)
536
+ CAGradientLayer.alloc.init.tap do |layer|
537
+ layer.colors = colors
538
+ layer.locations = locations
539
+ if view.layer.sublayers
540
+ view.layer.replaceSublayer(view.layer.sublayers[0], with: layer)
541
+ else
542
+ view.layer.insertSublayer(layer, atIndex: 0)
543
+ end
544
+ view.layer.sublayers[0].frame = view.bounds
545
+ end
461
546
  end
547
+
462
548
  end
463
549
  end
464
550
  end
@@ -97,24 +97,25 @@ module RubyMotionQuery
97
97
  # memoize this, however if you do that, make sure the dev doesn't retain them in a var
98
98
  custom_stylers(view) || begin
99
99
  case view
100
- when UILabel then Stylers::UILabelStyler.new(view)
101
- when UIButton then Stylers::UIButtonStyler.new(view)
102
- when UIImageView then Stylers::UIImageViewStyler.new(view)
103
- when UITableView then Stylers::UITableViewStyler.new(view)
104
- when UISwitch then Stylers::UISwitchStyler.new(view)
105
- when UIDatePicker then Stylers::UIDatePickerStyler.new(view)
106
- when UISegmentedControl then Stylers::UISegmentedControlStyler.new(view)
107
- when UIRefreshControl then Stylers::UIRefreshControlStyler.new(view)
108
- when UIPageControl then Stylers::UIPageControlStyler.new(view)
109
- when UIProgressView then Stylers::UIProgressViewStyler.new(view)
110
- when UISlider then Stylers::UISliderStyler.new(view)
111
- when UIStepper then Stylers::UIStepperStyler.new(view)
112
- when UITabBar then Stylers::UITabBarStyler.new(view)
113
- when UITableViewCell then Stylers::UITableViewCellStyler.new(view)
114
- when UITextView then Stylers::UITextViewStyler.new(view)
115
- when UITextField then Stylers::UITextFieldStyler.new(view)
116
- when UINavigationBar then Stylers::UINavigationBarStyler.new(view)
117
- when UIScrollView then Stylers::UIScrollViewStyler.new(view)
100
+ when UILabel then Stylers::UILabelStyler.new(view)
101
+ when UIButton then Stylers::UIButtonStyler.new(view)
102
+ when UIActivityIndicatorView then Stylers::UIActivityIndicatorViewStyler.new(view)
103
+ when UIImageView then Stylers::UIImageViewStyler.new(view)
104
+ when UITableView then Stylers::UITableViewStyler.new(view)
105
+ when UISwitch then Stylers::UISwitchStyler.new(view)
106
+ when UIDatePicker then Stylers::UIDatePickerStyler.new(view)
107
+ when UISegmentedControl then Stylers::UISegmentedControlStyler.new(view)
108
+ when UIRefreshControl then Stylers::UIRefreshControlStyler.new(view)
109
+ when UIPageControl then Stylers::UIPageControlStyler.new(view)
110
+ when UIProgressView then Stylers::UIProgressViewStyler.new(view)
111
+ when UISlider then Stylers::UISliderStyler.new(view)
112
+ when UIStepper then Stylers::UIStepperStyler.new(view)
113
+ when UITabBar then Stylers::UITabBarStyler.new(view)
114
+ when UITableViewCell then Stylers::UITableViewCellStyler.new(view)
115
+ when UITextView then Stylers::UITextViewStyler.new(view)
116
+ when UITextField then Stylers::UITextFieldStyler.new(view)
117
+ when UINavigationBar then Stylers::UINavigationBarStyler.new(view)
118
+ when UIScrollView then Stylers::UIScrollViewStyler.new(view)
118
119
  # TODO, all the controls are done, but missing some views, add
119
120
  else
120
121
  if view.respond_to?(:rmq_styler)
@@ -199,6 +199,11 @@ module RubyMotionQuery
199
199
  #o.setTitle('Ok', forState: UIControlStateNormal)
200
200
  o.opaque = true
201
201
  end
202
+ elsif (klass == UIActivityIndicatorView) || klass < UIActivityIndicatorView
203
+ klass.alloc.initWithActivityIndicatorStyle(UIActivityIndicatorViewStyleWhite).tap do |o|
204
+ o.hidden = false
205
+ o.opaque = true
206
+ end
202
207
  elsif reuse_identifier = opts[:reuse_identifier]
203
208
  style = opts[:cell_style] || UITableViewCellStyleDefault
204
209
  klass.alloc.initWithStyle(style, reuseIdentifier: reuse_identifier).tap do |o|
@@ -20,6 +20,13 @@ module RubyMotionQuery
20
20
  self
21
21
  end
22
22
 
23
+ def untag(*tag_or_tags)
24
+ selected.each do |view|
25
+ view.rmq_data.untag(tag_or_tags)
26
+ end
27
+ self
28
+ end
29
+
23
30
  # @return [RMQ]
24
31
  def clear_tags
25
32
  selected.each do |view|
@@ -130,8 +130,12 @@ module RubyMotionQuery
130
130
  TIME = Regexp.new('^(20|21|22|23|[01]\d|\d)((:[0-5]\d){1,2})$')
131
131
  # Future Password strength validations -> http://stackoverflow.com/questions/5142103/regex-for-password-strength
132
132
  USZIP = Regexp.new('^\d{5}(-\d{4})?$')
133
+ # UK Postal Code regex from: http://stackoverflow.com/a/7259020/814123
134
+ UKZIP = Regexp.new('^(GIR ?0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]([0-9ABEHMNPRV-Y])?)|[0-9][A-HJKPS-UW]) ?[0-9][ABD-HJLNP-UW-Z]{2})$')
133
135
  # 7 or 10 digit number, delimiters are spaces, dashes, or periods
134
136
  USPHONE = Regexp.new('^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]‌​)\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-‌​9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})$')
137
+ # International Phone numbers
138
+ INTLPHONE = Regexp.new('^(\(?\+?[0-9]*\)?)?[0-9_\- \(\)]*$')
135
139
  # Strong password (at least [8 chars, 1 upper, 1 lower, 1 number])
136
140
  STRONGPW = Regexp.new('^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$')
137
141
  # Has at least 1 uppercase letter
@@ -150,7 +154,9 @@ module RubyMotionQuery
150
154
  :ipv4 => lambda { |value, opts| Validation.regex_match?(value, IPV4)},
151
155
  :time => lambda { |value, opts| Validation.regex_match?(value, TIME)},
152
156
  :uszip => lambda { |value, opts| Validation.regex_match?(value, USZIP)},
157
+ :ukzip => lambda { |value, opts| Validation.regex_match?(value.upcase, UKZIP)},
153
158
  :usphone => lambda { |value, opts| Validation.regex_match?(value, USPHONE)},
159
+ :intlphone => lambda { |value, opts| Validation.regex_match?(value, INTLPHONE)},
154
160
  :strong_password => lambda { |value, opts| Validation.regex_match?(value, STRONGPW)},
155
161
  :has_upper => lambda { |value, opts| Validation.regex_match?(value, HASUPPER)},
156
162
  :has_lower => lambda { |value, opts| Validation.regex_match?(value, HASLOWER)},
@@ -1,5 +1,5 @@
1
1
  module RubyMotionQuery
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
 
4
4
  class RMQ
5
5
  def version
File without changes
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_motion_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todd Werth
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-01-23 00:00:00.000000000 Z
12
+ date: 2015-03-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bacon
@@ -75,6 +75,7 @@ files:
75
75
  - motion/ruby_motion_query/rect.rb
76
76
  - motion/ruby_motion_query/selectors.rb
77
77
  - motion/ruby_motion_query/stylers/protocols/ui_text_input_traits.rb
78
+ - motion/ruby_motion_query/stylers/ui_activity_indicator_view.rb
78
79
  - motion/ruby_motion_query/stylers/ui_button_styler.rb
79
80
  - motion/ruby_motion_query/stylers/ui_control_styler.rb
80
81
  - motion/ruby_motion_query/stylers/ui_date_picker_styler.rb
@@ -108,24 +109,24 @@ files:
108
109
  - templates/collection_view_controller/app/stylesheets/name_controller_stylesheet.rb
109
110
  - templates/collection_view_controller/app/views/name_cell.rb
110
111
  - templates/collection_view_controller/spec/controllers/name_controller_spec.rb
111
- - templates/collection_view_controller/spec/views/name_cell.rb
112
+ - templates/collection_view_controller/spec/views/name_cell_spec.rb
112
113
  - templates/controller/app/controllers/name_controller.rb
113
114
  - templates/controller/app/stylesheets/name_controller_stylesheet.rb
114
115
  - templates/controller/spec/controllers/name_controller_spec.rb
115
116
  - templates/lib/lib/name.rb
116
- - templates/lib/spec/lib/name.rb
117
+ - templates/lib/spec/lib/name_spec.rb
117
118
  - templates/model/app/models/name.rb
118
- - templates/model/spec/models/name.rb
119
+ - templates/model/spec/models/name_spec.rb
119
120
  - templates/shared/app/shared/name.rb
120
- - templates/shared/spec/shared/name.rb
121
+ - templates/shared/spec/shared/name_spec.rb
121
122
  - templates/table_view_controller/app/controllers/name_controller.rb
122
123
  - templates/table_view_controller/app/stylesheets/name_controller_stylesheet.rb
123
124
  - templates/table_view_controller/app/views/name_cell.rb
124
125
  - templates/table_view_controller/spec/controllers/name_controller_spec.rb
125
- - templates/table_view_controller/spec/views/name_cell.rb
126
+ - templates/table_view_controller/spec/views/name_cell_spec.rb
126
127
  - templates/view/app/stylesheets/name_stylesheet.rb
127
128
  - templates/view/app/views/name.rb
128
- - templates/view/spec/views/name.rb
129
+ - templates/view/spec/views/name_spec.rb
129
130
  homepage: http://rubymotionquery.com
130
131
  licenses:
131
132
  - MIT
@@ -146,8 +147,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
147
  version: '0'
147
148
  requirements: []
148
149
  rubyforge_project:
149
- rubygems_version: 2.4.4
150
+ rubygems_version: 2.4.5
150
151
  signing_key:
151
152
  specification_version: 4
152
153
  summary: RubyMotionQuery - RMQ
153
154
  test_files: []
155
+ has_rdoc: