ruby_motion_query 1.1.0 → 1.2.0

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 (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: