motion-kit 0.10.0 → 0.10.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.
- checksums.yaml +4 -4
- data/README.md +41 -39
- data/lib/motion-kit/layouts/base_layout.rb +1 -4
- data/lib/motion-kit/layouts/base_layout_class_methods.rb +6 -0
- data/lib/motion-kit/layouts/tree_layout.rb +18 -6
- data/lib/motion-kit/version.rb +1 -1
- data/spec/ios/custom_root_layout_spec.rb +21 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c38cc123b569dc34b2b5b8b829d7520d549f1c84
|
4
|
+
data.tar.gz: 36d097e9d6ad953a6f245ce2550e223a30a6db88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f88abc1b00777b63b6272626aed88526f93b459b0e9ab6daf0c815921ec403b23d954e6e70b19517b584b713fe3160de649f215fd9da302eba780dfc5c663c7
|
7
|
+
data.tar.gz: 93e2b1fd29e5b046ccd64b4fa67569a64b6c5ffd491f0017320be5970609c61f39eb7e1047fbc5cd03164c258a80e483ddc60052212cb2edd5656a996621df0f
|
data/README.md
CHANGED
@@ -270,6 +270,46 @@ end
|
|
270
270
|
```
|
271
271
|
|
272
272
|
|
273
|
+
### Setting a custom root view
|
274
|
+
|
275
|
+
If you need to use a custom root view, you can use the `root` method from within
|
276
|
+
the `layout` method. When you create or assign the root view this way, you must
|
277
|
+
assign subviews and styles *inside* a block that you pass to `root`.
|
278
|
+
|
279
|
+
```ruby
|
280
|
+
def layout
|
281
|
+
root(SomeOtherViewclass) do
|
282
|
+
add UILabel
|
283
|
+
end
|
284
|
+
end
|
285
|
+
```
|
286
|
+
|
287
|
+
You can also pass in a root view to your layout, like this:
|
288
|
+
|
289
|
+
```ruby
|
290
|
+
def loadView
|
291
|
+
@layout = MyLayout.new(root: self.view).build
|
292
|
+
end
|
293
|
+
```
|
294
|
+
|
295
|
+
Make sure to call `.build`; otherwise, the layout will be returned but the view not built.
|
296
|
+
|
297
|
+
In this case, if you want to style the root view, just refer to it in your layout:
|
298
|
+
|
299
|
+
```ruby
|
300
|
+
def layout
|
301
|
+
root :my_root_view do
|
302
|
+
# ...
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
def my_root_view_style
|
307
|
+
background_color UIColor.grayColor
|
308
|
+
end
|
309
|
+
```
|
310
|
+
|
311
|
+
This is especially useful with collection views, table views, and table cells.
|
312
|
+
|
273
313
|
### How do styles get applied?
|
274
314
|
|
275
315
|
If you've used RMQ's Stylers, you'll recognize a very similar pattern here. In
|
@@ -638,7 +678,7 @@ class MainController < UIViewController
|
|
638
678
|
|
639
679
|
def loadView
|
640
680
|
@layout = MainLayout.new
|
641
|
-
self.view = @layout
|
681
|
+
self.view = @layout.view
|
642
682
|
end
|
643
683
|
|
644
684
|
# for the constraints to work reliably they should be added in this method:
|
@@ -765,44 +805,6 @@ annoying subtletees of the NSCell/NSControl dichotomy.
|
|
765
805
|
gem install sweet-kit
|
766
806
|
|
767
807
|
|
768
|
-
### Setting a custom root view
|
769
|
-
|
770
|
-
If you need to use a custom root view, you can use the `root` method from within
|
771
|
-
the `layout` method. When you create or assign the root view this way, you must
|
772
|
-
assign subviews and styles *inside* a block that you pass to `root`.
|
773
|
-
|
774
|
-
```ruby
|
775
|
-
def layout
|
776
|
-
root(SomeOtherViewclass) do
|
777
|
-
add UILabel
|
778
|
-
end
|
779
|
-
end
|
780
|
-
```
|
781
|
-
|
782
|
-
You can also pass in a root view to your layout, like this:
|
783
|
-
|
784
|
-
```ruby
|
785
|
-
def loadView
|
786
|
-
@layout = MyLayout.new(root: self.view)
|
787
|
-
end
|
788
|
-
```
|
789
|
-
|
790
|
-
In this case, if you want to style the root view, just refer to it in your layout:
|
791
|
-
|
792
|
-
```ruby
|
793
|
-
def layout
|
794
|
-
root :my_root_view do
|
795
|
-
# ...
|
796
|
-
end
|
797
|
-
end
|
798
|
-
|
799
|
-
def my_root_view_style
|
800
|
-
background_color UIColor.grayColor
|
801
|
-
end
|
802
|
-
```
|
803
|
-
|
804
|
-
This is especially useful with collection views, table views, and table cells.
|
805
|
-
|
806
808
|
# Contributing
|
807
809
|
|
808
810
|
We welcome your contributions! Please be sure to run the specs before you do,
|
@@ -24,10 +24,7 @@ module MotionKit
|
|
24
24
|
@layout_delegate = nil
|
25
25
|
@layout_state = :initial
|
26
26
|
# You can set a root view by using .new(root: some_view)
|
27
|
-
|
28
|
-
@preset_root = args[:root]
|
29
|
-
view # Prebuild the view
|
30
|
-
end
|
27
|
+
@preset_root = args[:root]
|
31
28
|
end
|
32
29
|
|
33
30
|
def set_layout(layout)
|
@@ -11,7 +11,13 @@ module MotionKit
|
|
11
11
|
return nil if klass.nil? && self == BaseLayout
|
12
12
|
return @targets || superclass.targets if klass.nil?
|
13
13
|
@targets = klass
|
14
|
+
|
15
|
+
if BaseLayout.target_klasses.key?(klass) && BaseLayout.target_klasses[klass] != self
|
16
|
+
NSLog('WARNING! The class “%@” was registered with the layout class “%@”',
|
17
|
+
klass, BaseLayout.target_klasses[klass])
|
18
|
+
end
|
14
19
|
BaseLayout.target_klasses[klass] = self
|
20
|
+
|
15
21
|
nil
|
16
22
|
end
|
17
23
|
|
@@ -56,6 +56,18 @@ module MotionKit
|
|
56
56
|
@view ||= build_view
|
57
57
|
end
|
58
58
|
|
59
|
+
# Builds the layout and then returns self for chaining.
|
60
|
+
def build
|
61
|
+
view
|
62
|
+
self
|
63
|
+
end
|
64
|
+
|
65
|
+
# Checks if the layout has been built yet or not.
|
66
|
+
def built?
|
67
|
+
!@view.nil?
|
68
|
+
end
|
69
|
+
alias build? built? # just in case
|
70
|
+
|
59
71
|
# Assign a view to act as the 'root' view for this layout. This method can
|
60
72
|
# only be called once, and must be called before `add` is called for the
|
61
73
|
# first time (otherwise `add` will create a default root view). This method
|
@@ -78,13 +90,13 @@ module MotionKit
|
|
78
90
|
element_id = element
|
79
91
|
# See note below about why we don't need to `apply(:default_root)`
|
80
92
|
element = preset_root || default_root
|
81
|
-
elsif @preset_root
|
93
|
+
elsif @preset_root && @preset_root != element
|
82
94
|
# You're trying to make two roots, one at initialization
|
83
95
|
# and one in your layout itself.
|
84
96
|
raise ContextConflictError.new("Already created the root view")
|
85
97
|
end
|
86
98
|
|
87
|
-
@view =
|
99
|
+
@view = initialize_element(element)
|
88
100
|
if block
|
89
101
|
if @context
|
90
102
|
raise ContextConflictError.new("Already in a context")
|
@@ -104,7 +116,7 @@ module MotionKit
|
|
104
116
|
|
105
117
|
# instantiates a view, possibly running a 'layout block' to add child views.
|
106
118
|
def create(element, element_id=nil, &block)
|
107
|
-
element =
|
119
|
+
element = initialize_element(element)
|
108
120
|
|
109
121
|
if element_id
|
110
122
|
# We set the optional id and call the '_style' method, if it's been
|
@@ -168,7 +180,7 @@ module MotionKit
|
|
168
180
|
# make sure we have a target - raises NoContextError if none exists
|
169
181
|
self.target
|
170
182
|
|
171
|
-
element =
|
183
|
+
element = initialize_element(element)
|
172
184
|
unless @context
|
173
185
|
create_default_root_context
|
174
186
|
end
|
@@ -264,7 +276,7 @@ module MotionKit
|
|
264
276
|
# view-related methods, but actually this method *only* gets called
|
265
277
|
# from within the `layout` method, and so should already be inside the
|
266
278
|
# correct Layout subclass.
|
267
|
-
@context = root(default_root)
|
279
|
+
@context = root(preset_root || default_root)
|
268
280
|
else
|
269
281
|
raise NoContextError.new("No top level view specified (missing outer 'create' method?)")
|
270
282
|
end
|
@@ -322,7 +334,7 @@ module MotionKit
|
|
322
334
|
#
|
323
335
|
# Accepts a view instance, a class (which is instantiated with 'new') or a
|
324
336
|
# `ViewLayout`, which returns the root view.
|
325
|
-
def
|
337
|
+
def initialize_element(elem)
|
326
338
|
if elem.is_a?(Class) && elem < TreeLayout
|
327
339
|
elem = elem.new_child(@layout, nil, self).view
|
328
340
|
elsif elem.is_a?(Class)
|
data/lib/motion-kit/version.rb
CHANGED
@@ -33,4 +33,25 @@ describe MotionKit::Layout do
|
|
33
33
|
@subject.view.subviews.first.subviews.first.backgroundColor.should == UIColor.blackColor
|
34
34
|
end
|
35
35
|
|
36
|
+
it "shouldn't build if `build` or `view` aren't called" do
|
37
|
+
@subject.built?.should == false
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should build when `build` is called" do
|
41
|
+
@subject.build
|
42
|
+
@subject.built?.should == true
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should build when `view` is called" do
|
46
|
+
@subject.view
|
47
|
+
@subject.built?.should == true
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should allow bare styles in layout when root is specified in initializer" do
|
51
|
+
@subject = TestNoRootLayout.new(root: @view).build
|
52
|
+
@subject.view.should == @view
|
53
|
+
@subject.view.backgroundColor.should == UIColor.redColor
|
54
|
+
@subject.view.subviews.first.should.be.kind_of?(UILabel)
|
55
|
+
end
|
56
|
+
|
36
57
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion-kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Colin T.A. Gray
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-05-
|
12
|
+
date: 2014-05-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: dbt
|