motion-kit 0.9.6 → 0.10.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.
- checksums.yaml +4 -4
- data/README.md +75 -15
- data/lib/motion-kit-cocoa/layouts/sugarcube_compat.rb +10 -0
- data/lib/motion-kit-osx/layouts/nswindow_frame.rb +1 -0
- data/lib/motion-kit/layouts/base_layout.rb +6 -1
- data/lib/motion-kit/layouts/tree_layout.rb +12 -2
- data/lib/motion-kit/version.rb +1 -1
- data/spec/ios/custom_root_layout_spec.rb +36 -0
- data/spec/osx/custom_root_layout_spec.rb +36 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 525e32728b35f92e5b149c067887539f4e1fd493
|
4
|
+
data.tar.gz: e5170c04a01756a4626c943448ab80e169884b19
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2088f89d374db7d138d4a878ecc88fb59f819485e6aae7cf6a2c01037796cbf4225b0b00db55df2e255c82ec434670016c3babbb5521e73498bafd2c1d2a2d84
|
7
|
+
data.tar.gz: a7f7d63d194d14835d6d357f64cfb9ad33217f8d060a9d9fc401ea07e1b29c31a8d069e497bea7cbab3d257c772721a3e31e221c0358da8949283fc366647a34
|
data/README.md
CHANGED
@@ -11,12 +11,11 @@
|
|
11
11
|
- [Frame geometry][readmore-frames]
|
12
12
|
- [CoreAnimation][readmore-coreanimation]
|
13
13
|
- [NSMenu/NSMenuItem][readmore-nsmenu]
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
7. Written by [the authors][authors] of [ProMotion][] and [Teacup][]
|
14
|
+
4. Easily extendable to support custom, mini-DSLs
|
15
|
+
5. Non-polluting
|
16
|
+
6. ProMotion/RMQ/SugarCube-compatible (kind of goes hand-in-hand with being non-polluting)
|
17
|
+
7. Styles and layouts are "just code" (not hash-based like in Teacup)
|
18
|
+
8. Written by [the authors][authors] of [ProMotion][] and [Teacup][]
|
20
19
|
|
21
20
|
[authors]: CONTRIBUTORS.md
|
22
21
|
[Colin]: https://github.com/colinta
|
@@ -24,14 +23,14 @@
|
|
24
23
|
[ProMotion]: https://github.com/clearsightstudio/ProMotion
|
25
24
|
[RMQ]: https://github.com/infinitered/rmq
|
26
25
|
[Teacup]: https://github.com/rubymotion/teacup
|
26
|
+
[SweetKit]: https://github.com/rubymotion/sweet-kit
|
27
27
|
|
28
|
+
[READMORE]: https://github.com/rubymotion/motion-kit/blob/master/READMORE.md
|
28
29
|
[readmore-uikit]: https://github.com/rubymotion/motion-kit/blob/master/READMORE.md#uikit
|
29
30
|
[readmore-applicationkit]: https://github.com/rubymotion/motion-kit/blob/master/READMORE.md#applicationkit
|
30
|
-
[readmore-joybox]: https://github.com/rubymotion/motion-kit/blob/master/READMORE.md#joybox
|
31
|
-
[readmore-spritekit]: https://github.com/rubymotion/motion-kit/blob/master/READMORE.md#spritekit
|
32
31
|
[readmore-coreanimation]: https://github.com/rubymotion/motion-kit/blob/master/READMORE.md#coreanimation
|
33
|
-
[readmore-frames]:
|
34
|
-
[readmore-autolayout]:
|
32
|
+
[readmore-frames]: https://github.com/rubymotion/motion-kit/blob/master/READMORE.md#frames
|
33
|
+
[readmore-autolayout]: https://github.com/rubymotion/motion-kit/blob/master/READMORE.md#autolayout
|
35
34
|
[readmore-nsmenu]: https://github.com/rubymotion/motion-kit/blob/master/READMORE.md#nsmenu
|
36
35
|
|
37
36
|
|
@@ -370,6 +369,16 @@ class CustomLayout < MK::UIViewLayout
|
|
370
369
|
end
|
371
370
|
```
|
372
371
|
|
372
|
+
### Even more information...
|
373
|
+
|
374
|
+
...is in the [READMORE][] document. I re-explain some of these topics, go into
|
375
|
+
some more detail, that kinda thing. Basically an overflow document for topics I
|
376
|
+
don't want to stuff into the README.
|
377
|
+
|
378
|
+
|
379
|
+
## MotionKit extensions
|
380
|
+
|
381
|
+
These are all built-in, unless otherwise specified.
|
373
382
|
|
374
383
|
### Frames
|
375
384
|
|
@@ -641,10 +650,21 @@ class MainController < UIViewController
|
|
641
650
|
end
|
642
651
|
```
|
643
652
|
|
653
|
+
### MotionKit::Events
|
654
|
+
|
655
|
+
gem install motion-kit-events
|
656
|
+
|
657
|
+
Adds `on :event` and `trigger :event` methods to `MK::Layout` objects. These
|
658
|
+
can be used to send events from the Layout to your controller, further
|
659
|
+
simplifying the controller code (and usually making it more testable). See the
|
660
|
+
[MotionKit::Events documentation][motion-kit-events] for more information.
|
661
|
+
|
662
|
+
[motion-kit-events]: https://github.com/rubymotion/motion-kit-events
|
663
|
+
|
644
664
|
|
645
|
-
|
665
|
+
## Some handy tricks and Features
|
646
666
|
|
647
|
-
|
667
|
+
### Orientation specific styles
|
648
668
|
|
649
669
|
These are available on iOS.
|
650
670
|
|
@@ -659,7 +679,7 @@ add UIView, :container do
|
|
659
679
|
end
|
660
680
|
```
|
661
681
|
|
662
|
-
|
682
|
+
### Update views via 'initial', 'reapply', and 'deferred'
|
663
683
|
|
664
684
|
If you call 'layout.reapply!', your style methods will be called again (but
|
665
685
|
NOT the `layout` method). You very well might want to control what methods get
|
@@ -698,7 +718,7 @@ end
|
|
698
718
|
```
|
699
719
|
|
700
720
|
|
701
|
-
|
721
|
+
### Apply styles via module
|
702
722
|
|
703
723
|
```ruby
|
704
724
|
module AppStyles
|
@@ -727,8 +747,25 @@ class LoginLayout < MotionKit::Layout
|
|
727
747
|
end
|
728
748
|
```
|
729
749
|
|
750
|
+
### Using SweetKit
|
751
|
+
|
752
|
+
The [SweetKit][] gem combines MotionKit and SugarCube. The helpers it provides
|
753
|
+
allow for even more expressiveness, for instance:
|
754
|
+
|
755
|
+
```ruby
|
756
|
+
add UITextField do
|
757
|
+
return_key_type :email
|
758
|
+
text_alignment :right
|
759
|
+
end
|
760
|
+
```
|
761
|
+
|
762
|
+
The OS X helpers are really nice, because it tries to hide most of the
|
763
|
+
annoying subtletees of the NSCell/NSControl dichotomy.
|
764
|
+
|
765
|
+
gem install sweet-kit
|
766
|
+
|
730
767
|
|
731
|
-
|
768
|
+
### Setting a custom root view
|
732
769
|
|
733
770
|
If you need to use a custom root view, you can use the `root` method from within
|
734
771
|
the `layout` method. When you create or assign the root view this way, you must
|
@@ -742,6 +779,29 @@ def layout
|
|
742
779
|
end
|
743
780
|
```
|
744
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.
|
745
805
|
|
746
806
|
# Contributing
|
747
807
|
|
@@ -5,14 +5,24 @@
|
|
5
5
|
module MotionKit
|
6
6
|
class BaseLayout
|
7
7
|
|
8
|
+
delegate_method_fix :adjust
|
8
9
|
delegate_method_fix :frame
|
9
10
|
delegate_method_fix :left
|
10
11
|
delegate_method_fix :right
|
11
12
|
delegate_method_fix :up
|
12
13
|
delegate_method_fix :down
|
13
14
|
delegate_method_fix :origin
|
15
|
+
delegate_method_fix :thinner
|
16
|
+
delegate_method_fix :wider
|
17
|
+
delegate_method_fix :shorter
|
18
|
+
delegate_method_fix :taller
|
14
19
|
delegate_method_fix :size
|
15
20
|
delegate_method_fix :center
|
21
|
+
delegate_method_fix :shadow
|
22
|
+
delegate_method_fix :tree
|
23
|
+
delegate_method_fix :root
|
24
|
+
delegate_method_fix :restore
|
25
|
+
delegate_method_fix :blink
|
16
26
|
|
17
27
|
end
|
18
28
|
end
|
@@ -16,13 +16,18 @@ module MotionKit
|
|
16
16
|
|
17
17
|
attr :parent
|
18
18
|
|
19
|
-
def initialize
|
19
|
+
def initialize(args={})
|
20
20
|
# @layout is the object we look in for style methods
|
21
21
|
@layout = self
|
22
22
|
# the Layout object that implements custom style methods. Leave this as nil
|
23
23
|
# in the initializer.
|
24
24
|
@layout_delegate = nil
|
25
25
|
@layout_state = :initial
|
26
|
+
# You can set a root view by using .new(root: some_view)
|
27
|
+
if args[:root]
|
28
|
+
@preset_root = args[:root]
|
29
|
+
view # Prebuild the view
|
30
|
+
end
|
26
31
|
end
|
27
32
|
|
28
33
|
def set_layout(layout)
|
@@ -48,7 +48,7 @@ module MotionKit
|
|
48
48
|
|
49
49
|
end
|
50
50
|
|
51
|
-
# The
|
51
|
+
# The main view. This method builds the layout and returns the root view.
|
52
52
|
def view
|
53
53
|
if @layout != self
|
54
54
|
return @layout.view
|
@@ -77,7 +77,11 @@ module MotionKit
|
|
77
77
|
if element.is_a?(Symbol)
|
78
78
|
element_id = element
|
79
79
|
# See note below about why we don't need to `apply(:default_root)`
|
80
|
-
element = default_root
|
80
|
+
element = preset_root || default_root
|
81
|
+
elsif @preset_root
|
82
|
+
# You're trying to make two roots, one at initialization
|
83
|
+
# and one in your layout itself.
|
84
|
+
raise ContextConflictError.new("Already created the root view")
|
81
85
|
end
|
82
86
|
|
83
87
|
@view = initialize_view(element)
|
@@ -268,6 +272,12 @@ module MotionKit
|
|
268
272
|
|
269
273
|
protected
|
270
274
|
|
275
|
+
def preset_root
|
276
|
+
# Set in the initializer
|
277
|
+
# TreeLayout.new(root: some_view)
|
278
|
+
@preset_root
|
279
|
+
end
|
280
|
+
|
271
281
|
# This method builds the layout and returns the root view.
|
272
282
|
def build_view
|
273
283
|
# Only in the 'layout' method will we allow default container to be
|
data/lib/motion-kit/version.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
describe MotionKit::Layout do
|
2
|
+
before do
|
3
|
+
@view = UIView.new
|
4
|
+
@subject = TestCustomRootLayout.new(root: @view)
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should set the root view to the @view instance" do
|
8
|
+
@subject.view.should == @view
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should still create subviews" do
|
12
|
+
@subject.view.subviews.first.should.be.kind_of UIButton
|
13
|
+
@subject.view.subviews.first.subviews.first.should.be.kind_of UILabel
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should call style method" do
|
17
|
+
@subject.view.backgroundColor.should == UIColor.blueColor
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should raise exception if you try to specify a root inside the layout too" do
|
21
|
+
-> do
|
22
|
+
subject = TestCustomDuplicateRootLayout.new(root: @view)
|
23
|
+
subject.view
|
24
|
+
end.should.raise(MotionKit::ContextConflictError)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should allow multiple nested layouts" do
|
28
|
+
@subject = TestMultipleNestedLayout.new
|
29
|
+
@subject.view.backgroundColor.should == UIColor.purpleColor
|
30
|
+
@subject.view.subviews.first.should.be.kind_of TestNestedView
|
31
|
+
@subject.view.subviews.first.backgroundColor.should == UIColor.yellowColor
|
32
|
+
@subject.view.subviews.first.subviews.first.should.be.kind_of UIButton
|
33
|
+
@subject.view.subviews.first.subviews.first.backgroundColor.should == UIColor.blackColor
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
describe MotionKit::Layout do
|
2
|
+
before do
|
3
|
+
@view = NSView.new
|
4
|
+
@subject = TestCustomRootLayout.new(root: @view)
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should set the root view to the @view instance" do
|
8
|
+
@subject.view.should == @view
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should still create subviews" do
|
12
|
+
@subject.view.subviews.first.should.be.kind_of NSButton
|
13
|
+
@subject.view.subviews.first.subviews.first.should.be.kind_of NSTextField
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should call style method" do
|
17
|
+
@subject.view.backgroundColor.should == NSColor.blueColor
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should raise exception if you try to specify a root inside the layout too" do
|
21
|
+
-> do
|
22
|
+
subject = TestCustomDuplicateRootLayout.new(root: @view)
|
23
|
+
subject.view
|
24
|
+
end.should.raise(MotionKit::ContextConflictError)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should allow multiple nested layouts" do
|
28
|
+
@subject = TestMultipleNestedLayout.new
|
29
|
+
@subject.view.backgroundColor.should == NSColor.purpleColor
|
30
|
+
@subject.view.subviews.first.should.be.kind_of TestNestedView
|
31
|
+
@subject.view.subviews.first.backgroundColor.should == NSColor.yellowColor
|
32
|
+
@subject.view.subviews.first.subviews.first.should.be.kind_of NSButton
|
33
|
+
@subject.view.subviews.first.subviews.first.backgroundColor.should == NSColor.blackColor
|
34
|
+
end
|
35
|
+
|
36
|
+
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.
|
4
|
+
version: 0.10.0
|
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-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: dbt
|
@@ -95,6 +95,7 @@ files:
|
|
95
95
|
- spec/ios/constraints_helpers/view_lookup_constraints_spec.rb
|
96
96
|
- spec/ios/create_layout_spec.rb
|
97
97
|
- spec/ios/custom_layout_spec.rb
|
98
|
+
- spec/ios/custom_root_layout_spec.rb
|
98
99
|
- spec/ios/deferred_spec.rb
|
99
100
|
- spec/ios/device_helpers_spec.rb
|
100
101
|
- spec/ios/frame_helper_spec.rb
|
@@ -121,6 +122,7 @@ files:
|
|
121
122
|
- spec/osx/constraints_helpers/size_constraints_spec.rb
|
122
123
|
- spec/osx/create_menu_spec.rb
|
123
124
|
- spec/osx/create_via_extensions_spec.rb
|
125
|
+
- spec/osx/custom_root_layout_spec.rb
|
124
126
|
- spec/osx/deferred_spec.rb
|
125
127
|
- spec/osx/frame_helper_spec.rb
|
126
128
|
- spec/osx/menu_extensions_spec.rb
|
@@ -169,6 +171,7 @@ test_files:
|
|
169
171
|
- spec/ios/constraints_helpers/view_lookup_constraints_spec.rb
|
170
172
|
- spec/ios/create_layout_spec.rb
|
171
173
|
- spec/ios/custom_layout_spec.rb
|
174
|
+
- spec/ios/custom_root_layout_spec.rb
|
172
175
|
- spec/ios/deferred_spec.rb
|
173
176
|
- spec/ios/device_helpers_spec.rb
|
174
177
|
- spec/ios/frame_helper_spec.rb
|
@@ -195,6 +198,7 @@ test_files:
|
|
195
198
|
- spec/osx/constraints_helpers/size_constraints_spec.rb
|
196
199
|
- spec/osx/create_menu_spec.rb
|
197
200
|
- spec/osx/create_via_extensions_spec.rb
|
201
|
+
- spec/osx/custom_root_layout_spec.rb
|
198
202
|
- spec/osx/deferred_spec.rb
|
199
203
|
- spec/osx/frame_helper_spec.rb
|
200
204
|
- spec/osx/menu_extensions_spec.rb
|