teacup 2.1.12 → 2.1.13
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.
- data/Gemfile.lock +1 -1
- data/lib/teacup-ios/style.rb +8 -9
- data/lib/teacup/stylesheet.rb +16 -18
- data/lib/teacup/version.rb +1 -1
- data/spec/ios/table_view/table_view_spec.rb +2 -2
- data/teacup.gemspec +1 -1
- metadata +2 -18
- data/app/app_delegate.rb +0 -19
- data/app/controllers/appearance_controller.rb +0 -13
- data/app/controllers/constraints_controller.rb +0 -92
- data/app/controllers/dependency_controller.rb +0 -24
- data/app/controllers/gradient_controller.rb +0 -3
- data/app/controllers/landscape_only_controller.rb +0 -16
- data/app/controllers/main_controller.rb +0 -66
- data/app/controllers/memory_leak_controller.rb +0 -26
- data/app/controllers/motion_layout_controller.rb +0 -36
- data/app/controllers/present_modal_controller.rb +0 -30
- data/app/controllers/table_view_controller.rb +0 -106
- data/app/controllers/tableview_controller.rb +0 -0
- data/app/custom_class.rb +0 -22
- data/app/styles/appearance.rb +0 -24
- data/app/styles/main_styles.rb +0 -113
- data/app/views/custom_view.rb +0 -5
data/Gemfile.lock
CHANGED
data/lib/teacup-ios/style.rb
CHANGED
@@ -2,9 +2,8 @@
|
|
2
2
|
module Teacup
|
3
3
|
# The Style class is where the precedence rules are applied. A Style can
|
4
4
|
# query the Stylesheet that created it to look up other styles (for
|
5
|
-
# `extends:`) and to import other Stylesheets. If it is handed a
|
6
|
-
#
|
7
|
-
# as well.
|
5
|
+
# `extends:`) and to import other Stylesheets. If it is handed a class (e.g.
|
6
|
+
# `UIView`) and orientation, it will merge those in appropriately as well.
|
8
7
|
class Style < Hash
|
9
8
|
attr_accessor :stylename
|
10
9
|
attr_accessor :stylesheet
|
@@ -29,7 +28,7 @@ module Teacup
|
|
29
28
|
supports[orientation_key]
|
30
29
|
end
|
31
30
|
|
32
|
-
def build(
|
31
|
+
def build(target_class=nil, rotation_orientation=nil, seen={})
|
33
32
|
properties = Style.new
|
34
33
|
properties.stylename = self.stylename
|
35
34
|
properties.stylesheet = self.stylesheet
|
@@ -72,7 +71,7 @@ module Teacup
|
|
72
71
|
# local style
|
73
72
|
if stylesheet && stylesheet.is_a?(Teacup::Stylesheet)
|
74
73
|
stylesheet.imported_stylesheets.reverse.each do |stylesheet|
|
75
|
-
imported_properties = stylesheet.query(self.stylename,
|
74
|
+
imported_properties = stylesheet.query(self.stylename, target_class, rotation_orientation, seen)
|
76
75
|
delete_keys.each do |key|
|
77
76
|
imported_properties.delete(key)
|
78
77
|
end
|
@@ -85,7 +84,7 @@ module Teacup
|
|
85
84
|
# turn style names into Hashes by querying them on the stylesheet
|
86
85
|
# (this does not pass `seen`, because this is a new query)
|
87
86
|
also_includes.each do |also_include|
|
88
|
-
extended_properties = stylesheet.query(also_include,
|
87
|
+
extended_properties = stylesheet.query(also_include, target_class, rotation_orientation)
|
89
88
|
delete_keys.each do |key|
|
90
89
|
extended_properties.delete(key)
|
91
90
|
end
|
@@ -95,9 +94,9 @@ module Teacup
|
|
95
94
|
properties.delete(:extends)
|
96
95
|
|
97
96
|
# if we know the class of the target, we can apply styles via class
|
98
|
-
# inheritance.
|
99
|
-
if
|
100
|
-
|
97
|
+
# inheritance.
|
98
|
+
if target_class
|
99
|
+
target_class.class.ancestors.each do |ancestor|
|
101
100
|
extended_properties = stylesheet.query(ancestor, nil, rotation_orientation)
|
102
101
|
Teacup::merge_defaults!(properties, extended_properties)
|
103
102
|
end
|
data/lib/teacup/stylesheet.rb
CHANGED
@@ -125,23 +125,20 @@ module Teacup
|
|
125
125
|
# @stylesheet_cache object is manipulated directly (to invalidate entries,
|
126
126
|
# or the entire cache)
|
127
127
|
def stylesheet_cache
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
# end
|
128
|
+
@stylesheet_cache ||= Hash.new do |by_stylename,_stylename|
|
129
|
+
by_stylename[_stylename] = Hash.new do |by_target_class,_target_class|
|
130
|
+
by_orientation = {}
|
131
|
+
by_target_class[_target_class] = by_orientation
|
132
|
+
end
|
133
|
+
end
|
135
134
|
end
|
136
135
|
|
137
|
-
def get_stylesheet_cache(stylename,
|
138
|
-
|
139
|
-
# self.stylesheet_cache[stylename][target][orientation]
|
136
|
+
def get_stylesheet_cache(stylename, target_class, orientation)
|
137
|
+
self.stylesheet_cache[stylename][target_class][orientation]
|
140
138
|
end
|
141
139
|
|
142
|
-
def set_stylesheet_cache(stylename,
|
143
|
-
|
144
|
-
# self.stylesheet_cache[stylename][target][orientation] = value
|
140
|
+
def set_stylesheet_cache(stylename, target_class, orientation, value)
|
141
|
+
self.stylesheet_cache[stylename][target_class][orientation] = value
|
145
142
|
end
|
146
143
|
|
147
144
|
# Include another Stylesheet into this one, the rules defined
|
@@ -211,19 +208,20 @@ module Teacup
|
|
211
208
|
# @example
|
212
209
|
# Teacup::Stylesheet[:ipadbase].query(:continue_button)
|
213
210
|
# # => {backgroundImage: UIImage.imageNamed("big_red_shiny_button"), title: "Continue!", top: 50}
|
214
|
-
def query(stylename,
|
211
|
+
def query(stylename, target_class=nil, orientation=nil, seen={})
|
215
212
|
return {} if seen[self]
|
216
213
|
return {} unless stylename
|
217
214
|
|
218
|
-
|
219
|
-
if cached
|
215
|
+
cached = get_stylesheet_cache(stylename, target_class, orientation)
|
216
|
+
if cached
|
217
|
+
# mutable hashes could mess with our cache, so return a duplicate
|
220
218
|
return cached.dup
|
221
219
|
else
|
222
220
|
run_block
|
223
221
|
seen[self] = true
|
224
222
|
|
225
|
-
built = styles[stylename].build(
|
226
|
-
set_stylesheet_cache(stylename,
|
223
|
+
built = styles[stylename].build(target_class, orientation, seen)
|
224
|
+
set_stylesheet_cache(stylename, target_class, orientation, built)
|
227
225
|
return built.dup
|
228
226
|
end
|
229
227
|
end
|
data/lib/teacup/version.rb
CHANGED
@@ -5,7 +5,7 @@ describe "TableViewCells" do
|
|
5
5
|
before do
|
6
6
|
path = NSIndexPath.indexPathWithIndex(0).indexPathByAddingIndex(0)
|
7
7
|
@cell = controller.view.cellForRowAtIndexPath(path)
|
8
|
-
@padding = @cell.
|
8
|
+
@padding = @cell.padding
|
9
9
|
end
|
10
10
|
|
11
11
|
it "should have styled padding (backgroundColor.should)" do
|
@@ -82,7 +82,7 @@ describe "TableViewCells" do
|
|
82
82
|
path = NSIndexPath.indexPathWithIndex(0).indexPathByAddingIndex(9)
|
83
83
|
controller.view.scrollToRowAtIndexPath(path, atScrollPosition:UITableViewScrollPositionBottom, animated:false)
|
84
84
|
@cell = controller.view.cellForRowAtIndexPath(path)
|
85
|
-
@padding = @cell.
|
85
|
+
@padding = @cell.padding
|
86
86
|
end
|
87
87
|
|
88
88
|
it "should be a reused cell" do
|
data/teacup.gemspec
CHANGED
@@ -19,7 +19,7 @@ DESC
|
|
19
19
|
gem.summary = 'A community-driven DSL for creating user interfaces on iOS.'
|
20
20
|
gem.homepage = 'https://github.com/rubymotion/teacup'
|
21
21
|
|
22
|
-
gem.files = `git ls-files`.split($\)
|
22
|
+
gem.files = `git ls-files`.split($\).reject { |file| file =~ /^app\// }
|
23
23
|
gem.require_paths = ['lib']
|
24
24
|
gem.test_files = gem.files.grep(%r{^spec/})
|
25
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teacup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.13
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-10-
|
12
|
+
date: 2013-10-30 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! 'Teacup is a community-driven DSL for making CSS-like styling, and
|
15
15
|
layouts for
|
@@ -35,22 +35,6 @@ files:
|
|
35
35
|
- LICENSE
|
36
36
|
- README.md
|
37
37
|
- Rakefile
|
38
|
-
- app/app_delegate.rb
|
39
|
-
- app/controllers/appearance_controller.rb
|
40
|
-
- app/controllers/constraints_controller.rb
|
41
|
-
- app/controllers/dependency_controller.rb
|
42
|
-
- app/controllers/gradient_controller.rb
|
43
|
-
- app/controllers/landscape_only_controller.rb
|
44
|
-
- app/controllers/main_controller.rb
|
45
|
-
- app/controllers/memory_leak_controller.rb
|
46
|
-
- app/controllers/motion_layout_controller.rb
|
47
|
-
- app/controllers/present_modal_controller.rb
|
48
|
-
- app/controllers/table_view_controller.rb
|
49
|
-
- app/controllers/tableview_controller.rb
|
50
|
-
- app/custom_class.rb
|
51
|
-
- app/styles/appearance.rb
|
52
|
-
- app/styles/main_styles.rb
|
53
|
-
- app/views/custom_view.rb
|
54
38
|
- lib/teacup-ios/appearance.rb
|
55
39
|
- lib/teacup-ios/core_extensions/teacup_handlers.rb
|
56
40
|
- lib/teacup-ios/core_extensions/ui_view.rb
|
data/app/app_delegate.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
class AppDelegate
|
2
|
-
|
3
|
-
def application(application, didFinishLaunchingWithOptions:launchOptions)
|
4
|
-
return true if RUBYMOTION_ENV == 'test'
|
5
|
-
|
6
|
-
application.setStatusBarHidden(true, withAnimation:UIStatusBarAnimationSlide)
|
7
|
-
|
8
|
-
@window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
|
9
|
-
# change this controller to whatever controller you want to test, or are
|
10
|
-
# writing tests for.
|
11
|
-
ctlr = TableViewController.new
|
12
|
-
@window.rootViewController = ctlr
|
13
|
-
@window.rootViewController.wantsFullScreenLayout = true
|
14
|
-
@window.makeKeyAndVisible
|
15
|
-
|
16
|
-
true
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
class CustomAppearanceController < UIViewController
|
2
|
-
attr :label_1
|
3
|
-
attr :container
|
4
|
-
attr :label_2
|
5
|
-
|
6
|
-
layout do
|
7
|
-
@label_1 = subview(CustomAppearanceLabel)
|
8
|
-
@container = subview(CustomAppearanceContainer) do
|
9
|
-
@label_2 = subview(CustomAppearanceLabel)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
end
|
@@ -1,92 +0,0 @@
|
|
1
|
-
class ConstraintsController < UIViewController
|
2
|
-
attr :container,
|
3
|
-
:header_view,
|
4
|
-
:footer_view,
|
5
|
-
:center_view,
|
6
|
-
:left_view,
|
7
|
-
:top_right_view,
|
8
|
-
:btm_right_view
|
9
|
-
|
10
|
-
stylesheet :constraints
|
11
|
-
|
12
|
-
layout :root do
|
13
|
-
@container = subview(UIView, :container) do
|
14
|
-
@header_view = subview(UIView, :header)
|
15
|
-
@footer_view = subview(UIView, :footer)
|
16
|
-
@center_view = subview(UIView, :center) do
|
17
|
-
@left_view = subview(UIView, :left)
|
18
|
-
@top_right_view = subview(UIView, :top_right)
|
19
|
-
@btm_right_view = subview(UIView, :btm_right)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def supportedInterfaceOrientations
|
25
|
-
UIInterfaceOrientationMaskAllButUpsideDown
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
Teacup::Stylesheet.new :constraints do
|
32
|
-
|
33
|
-
style :root,
|
34
|
-
accessibilityLabel: 'root view'
|
35
|
-
|
36
|
-
style :container,
|
37
|
-
constraints: [:full],
|
38
|
-
backgroundColor: UIColor.blackColor
|
39
|
-
|
40
|
-
style :header,
|
41
|
-
backgroundColor: UIColor.blueColor,
|
42
|
-
constraints: [
|
43
|
-
:full_width,
|
44
|
-
:top,
|
45
|
-
constrain_height(52),
|
46
|
-
]
|
47
|
-
|
48
|
-
style :footer,
|
49
|
-
backgroundColor: UIColor.magentaColor,
|
50
|
-
constraints: [
|
51
|
-
:full_width,
|
52
|
-
:bottom,
|
53
|
-
constrain(:height).equals(:header, :height),
|
54
|
-
]
|
55
|
-
|
56
|
-
style :center,
|
57
|
-
backgroundColor: UIColor.lightGrayColor,
|
58
|
-
constraints: [
|
59
|
-
constrain_below(:header).plus(8),
|
60
|
-
constrain_above(:footer).minus(8),
|
61
|
-
constrain_left(8),
|
62
|
-
constrain_right(-8),
|
63
|
-
]
|
64
|
-
|
65
|
-
style :left,
|
66
|
-
backgroundColor: UIColor.redColor,
|
67
|
-
constraints: [
|
68
|
-
constrain_left(8),
|
69
|
-
constrain_top(8),
|
70
|
-
constrain(:right).plus(8).equals(:top_right, :left),
|
71
|
-
constrain(:right).plus(8).equals(:btm_right, :left),
|
72
|
-
constrain_bottom(-8),
|
73
|
-
constrain(:width).equals(:top_right, :width),
|
74
|
-
constrain(:width).equals(:btm_right, :width),
|
75
|
-
]
|
76
|
-
|
77
|
-
style :top_right,
|
78
|
-
backgroundColor: UIColor.greenColor,
|
79
|
-
constraints: [
|
80
|
-
constrain(:top).equals(:left, :top),
|
81
|
-
constrain_right(-8),
|
82
|
-
constrain(:height).equals(:btm_right, :height),
|
83
|
-
constrain(:bottom).plus(8).equals(:btm_right, :top),
|
84
|
-
]
|
85
|
-
|
86
|
-
style :btm_right,
|
87
|
-
backgroundColor: UIColor.yellowColor,
|
88
|
-
constraints: [
|
89
|
-
constrain(:bottom).equals(:left, :bottom),
|
90
|
-
]
|
91
|
-
|
92
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
class DependencyController < UIViewController
|
2
|
-
attr :button
|
3
|
-
|
4
|
-
stylesheet :dependency
|
5
|
-
|
6
|
-
layout do
|
7
|
-
@button = subview(UIView, :my_button)
|
8
|
-
end
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
Teacup::Stylesheet.new :dependency do
|
14
|
-
|
15
|
-
style :button,
|
16
|
-
size: [90, 90],
|
17
|
-
backgroundColor: UIColor.redColor
|
18
|
-
|
19
|
-
style :my_button, extends: :button,
|
20
|
-
top: 0,
|
21
|
-
center_x: 80, # <-- This results in a frame of [[80, 0], [90, 90]] instead of [[35, 0], [90, 90]]
|
22
|
-
title: 'My Button'
|
23
|
-
|
24
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
|
2
|
-
class LandscapeOnlyController < UIViewController
|
3
|
-
|
4
|
-
def viewDidLoad
|
5
|
-
UIApplication.sharedApplication.windows[0].rootViewController = MainController.alloc.init
|
6
|
-
end
|
7
|
-
|
8
|
-
def shouldAutorotateToInterfaceOrientation(orientation)
|
9
|
-
if orientation == UIInterfaceOrientationLandscapeLeft or orientation == UIInterfaceOrientationLandscapeRight
|
10
|
-
true
|
11
|
-
else
|
12
|
-
false
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
@@ -1,66 +0,0 @@
|
|
1
|
-
class MainController < UIViewController
|
2
|
-
attr :welcome
|
3
|
-
attr :button
|
4
|
-
|
5
|
-
stylesheet :main
|
6
|
-
|
7
|
-
layout :root do
|
8
|
-
subview(CustomView, :background) do
|
9
|
-
@welcome = subview(UILabel, :welcome)
|
10
|
-
subview(UILabel, :footer)
|
11
|
-
@button = subview(UIButton.buttonWithType(UIButtonTypeRoundedRect), :next_message)
|
12
|
-
end
|
13
|
-
|
14
|
-
@button.addTarget(self, action: :next_message, forControlEvents:UIControlEventTouchUpInside)
|
15
|
-
end
|
16
|
-
|
17
|
-
def next_view
|
18
|
-
end
|
19
|
-
|
20
|
-
def next_message
|
21
|
-
msg = messages.shift
|
22
|
-
if msg
|
23
|
-
@welcome.text = msg
|
24
|
-
else
|
25
|
-
@welcome.text = 'Next example...'
|
26
|
-
|
27
|
-
@button.removeTarget(self, action: :next_view, forControlEvents:UIControlEventTouchUpInside)
|
28
|
-
@button.addTarget(self, action: :next_view, forControlEvents:UIControlEventTouchUpInside)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def messages
|
33
|
-
@messages ||= [
|
34
|
-
'This is teacup',
|
35
|
-
'Welcome',
|
36
|
-
'This is teacup',
|
37
|
-
'Welcome to teacup',
|
38
|
-
'You can do anything at teacup',
|
39
|
-
'Anything at all',
|
40
|
-
'The only limit is yourself ',
|
41
|
-
'Welcome to teacup',
|
42
|
-
'Welcome to teacup',
|
43
|
-
'This is teacup',
|
44
|
-
'Welcome to teacup',
|
45
|
-
'This is teacup, Welcome',
|
46
|
-
'Yes, this is teacup',
|
47
|
-
'This is teacup and welcome to you who have come to teacup',
|
48
|
-
'Anything is possible at teacup',
|
49
|
-
'You can to anything teacup',
|
50
|
-
'The infinite is possible at teacup',
|
51
|
-
'The unattainable is unknown at teacup',
|
52
|
-
'Welcome to teacup',
|
53
|
-
'This is teacup',
|
54
|
-
'Welcome to teacup',
|
55
|
-
'Welcome',
|
56
|
-
'This is teacup',
|
57
|
-
'Welcome to teacup',
|
58
|
-
'Welcome to teacup',
|
59
|
-
]
|
60
|
-
end
|
61
|
-
|
62
|
-
def shouldAutorotateToInterfaceOrientation(orientation)
|
63
|
-
autorotateToOrientation(orientation)
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
class MemoryLeakController < UIViewController
|
2
|
-
DidDeallocNotification = 'DidDeallocNotification'
|
3
|
-
|
4
|
-
stylesheet :memory_leak
|
5
|
-
|
6
|
-
layout do
|
7
|
-
subview(UIView, :view) do
|
8
|
-
subview(UIView)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def dealloc
|
13
|
-
NSNotificationCenter.defaultCenter.postNotificationName(DidDeallocNotification, object:self)
|
14
|
-
super
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
|
20
|
-
Teacup::Stylesheet.new :memory_leak do
|
21
|
-
|
22
|
-
style :view,
|
23
|
-
frame: [[10, 10], [100, 100]],
|
24
|
-
backgroundColor: UIColor.whiteColor
|
25
|
-
|
26
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
class MotionLayoutController < UIViewController
|
2
|
-
attr :label1
|
3
|
-
attr :label2
|
4
|
-
attr :label3
|
5
|
-
attr :container
|
6
|
-
|
7
|
-
layout :root do
|
8
|
-
@label1 = subview(UILabel, :label1, text: 'label1')
|
9
|
-
@label2 = subview(UILabel, :label2, text: 'label2')
|
10
|
-
@label3 = subview(UILabel, :label3, text: 'label3')
|
11
|
-
@container = subview(CustomContainer, :container)
|
12
|
-
end
|
13
|
-
|
14
|
-
def layoutDidLoad
|
15
|
-
auto do
|
16
|
-
metrics "margin" => 20, "top" => 100
|
17
|
-
horizontal '|-margin-[label1]-margin-[label2(==label1)]-margin-|'
|
18
|
-
horizontal '|-margin-[label3]-margin-|'
|
19
|
-
horizontal '|-margin-[container]-margin-|'
|
20
|
-
vertical '|-top-[label1]'
|
21
|
-
vertical '|-220-[label3(==label1)]'
|
22
|
-
vertical '|-320-[container(==label1)]'
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
class CustomContainer < UIView
|
27
|
-
attr :label4
|
28
|
-
|
29
|
-
def init
|
30
|
-
super.tap do
|
31
|
-
@label4 = subview(UILabel, :label4, text: 'label4')
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
class PresentModalController < UIViewController
|
2
|
-
attr :modal
|
3
|
-
|
4
|
-
stylesheet :present_modal
|
5
|
-
|
6
|
-
layout :root do
|
7
|
-
@button = subview(UIButton.buttonWithType(UIButtonTypeRoundedRect), :open_modal_button)
|
8
|
-
@button.addTarget(self, action: :open_modal_button, forControlEvents:UIControlEventTouchUpInside)
|
9
|
-
end
|
10
|
-
|
11
|
-
def open_modal_button
|
12
|
-
@modal = ConstraintsController.new
|
13
|
-
self.presentViewController(@modal, animated:true, completion:nil)
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
|
-
Teacup::Stylesheet.new :present_modal do
|
20
|
-
|
21
|
-
style :root,
|
22
|
-
backgroundColor: UIColor.blackColor
|
23
|
-
|
24
|
-
style :open_modal_button,
|
25
|
-
title: 'Open Modal',
|
26
|
-
constraints: [
|
27
|
-
:centered
|
28
|
-
]
|
29
|
-
|
30
|
-
end
|
@@ -1,106 +0,0 @@
|
|
1
|
-
class TableViewController < UITableViewController
|
2
|
-
include Teacup::TableViewDelegate
|
3
|
-
|
4
|
-
stylesheet :table
|
5
|
-
|
6
|
-
def viewDidLoad
|
7
|
-
self.view.registerClass(CustomCell, forCellReuseIdentifier:'cell id')
|
8
|
-
end
|
9
|
-
|
10
|
-
def numberOfSectionsInTableView(table_view)
|
11
|
-
1
|
12
|
-
end
|
13
|
-
|
14
|
-
def tableView(table_view, numberOfRowsInSection:section)
|
15
|
-
10
|
16
|
-
end
|
17
|
-
|
18
|
-
def tableView(tableView, heightForRowAtIndexPath:index_path)
|
19
|
-
100
|
20
|
-
end
|
21
|
-
|
22
|
-
def tableView(table_view, cellForRowAtIndexPath:index_path)
|
23
|
-
cell = table_view.dequeueReusableCellWithIdentifier('cell id')
|
24
|
-
|
25
|
-
# for testing cell reuse
|
26
|
-
if cell.is_reused.nil?
|
27
|
-
cell.is_reused = false
|
28
|
-
else
|
29
|
-
cell.is_reused ||= true
|
30
|
-
end
|
31
|
-
|
32
|
-
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton
|
33
|
-
|
34
|
-
cell.backgroundView = layout(UIView, :bg)
|
35
|
-
|
36
|
-
layout(cell.contentView, :root) do
|
37
|
-
subview(UIView, :padding) do
|
38
|
-
cell.title_label = subview(UILabel, :cell_title_label, :text => "title #{index_path.row}")
|
39
|
-
cell.details_label = subview(UILabel, :cell_details_label, :text => "details #{index_path.row}")
|
40
|
-
cell.other_label = subview(UILabel, :cell_other_label, :text => "other #{index_path.row}")
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
return cell
|
45
|
-
end
|
46
|
-
|
47
|
-
def tableView(table_view, didSelectRowAtIndexPath:index_path)
|
48
|
-
table_view.deselectRowAtIndexPath(index_path, animated:true)
|
49
|
-
end
|
50
|
-
|
51
|
-
def tableView(tableView, willDisplayCell:cell, forRowAtIndexPath:indexPath)
|
52
|
-
super
|
53
|
-
# one more change, to prove that this method can be overridden
|
54
|
-
cell.title_label.textColor = UIColor.blueColor
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
|
60
|
-
class CustomCell < UITableViewCell
|
61
|
-
attr_accessor :title_label, :details_label, :other_label, :is_reused
|
62
|
-
end
|
63
|
-
|
64
|
-
|
65
|
-
Teacup::Stylesheet.new :table do
|
66
|
-
style :bg,
|
67
|
-
backgroundColor: UIColor.colorWithRed(247.0 / 256.0, green:221.0 / 256.0, blue:186.0 / 256.0, alpha:1)
|
68
|
-
|
69
|
-
style :padding,
|
70
|
-
backgroundColor: UIColor.greenColor,
|
71
|
-
constraints: [
|
72
|
-
constrain(:width).equals(:superview, :width).times(0.96),
|
73
|
-
constrain(:height).equals(:superview, :height).times(0.96),
|
74
|
-
constrain(:center_x).equals(:superview, :center_x),
|
75
|
-
constrain(:center_y).equals(:superview, :center_y)
|
76
|
-
]
|
77
|
-
|
78
|
-
style :cell_title_label,
|
79
|
-
font: UIFont.boldSystemFontOfSize(17),
|
80
|
-
constraints: [
|
81
|
-
constrain_height(20),
|
82
|
-
constrain(:top).equals(:superview, :top),
|
83
|
-
constrain(:width).equals(:superview, :width),
|
84
|
-
constrain(:center_x).equals(:superview, :center_x)
|
85
|
-
]
|
86
|
-
|
87
|
-
style :cell_details_label,
|
88
|
-
font: UIFont.systemFontOfSize(14),
|
89
|
-
color: UIColor.grayColor,
|
90
|
-
constraints: [
|
91
|
-
constrain_height(17),
|
92
|
-
constrain_below(:cell_title_label, 5),
|
93
|
-
constrain(:width).equals(:superview, :width),
|
94
|
-
constrain(:center_x).equals(:superview, :center_x)
|
95
|
-
]
|
96
|
-
|
97
|
-
style :cell_other_label,
|
98
|
-
font: UIFont.systemFontOfSize(14),
|
99
|
-
color: UIColor.grayColor,
|
100
|
-
constraints: [
|
101
|
-
constrain_height(17),
|
102
|
-
constrain_below(:cell_details_label, 5),
|
103
|
-
constrain(:width).equals(:superview, :width),
|
104
|
-
constrain(:center_x).equals(:superview, :center_x)
|
105
|
-
]
|
106
|
-
end
|
File without changes
|
data/app/custom_class.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
Teacup::Stylesheet.new :custom do
|
2
|
-
style :container,
|
3
|
-
frame: [[0, 0], [100, 20]]
|
4
|
-
|
5
|
-
style :label,
|
6
|
-
text: 'custom label',
|
7
|
-
frame: [[0, 0], [100, 20]]
|
8
|
-
end
|
9
|
-
|
10
|
-
class CustomTeacupClass
|
11
|
-
include Teacup::Layout
|
12
|
-
|
13
|
-
def initialize
|
14
|
-
self.stylesheet = :custom
|
15
|
-
end
|
16
|
-
|
17
|
-
def create_container
|
18
|
-
layout(UIView, :container) do
|
19
|
-
subview(UILabel, :label)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
data/app/styles/appearance.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
class CustomAppearanceLabel < UILabel
|
2
|
-
end
|
3
|
-
|
4
|
-
class CustomAppearanceContainer < UIView
|
5
|
-
end
|
6
|
-
|
7
|
-
Teacup.handler UIView, :redHerring do |view, alpha|
|
8
|
-
view.alpha = alpha
|
9
|
-
end
|
10
|
-
|
11
|
-
Teacup::Appearance.new do
|
12
|
-
|
13
|
-
style CustomAppearanceLabel,
|
14
|
-
redHerring: 0.75,
|
15
|
-
numberOfLines: 3
|
16
|
-
|
17
|
-
style CustomAppearanceContainer,
|
18
|
-
backgroundColor: UIColor.whiteColor
|
19
|
-
|
20
|
-
style CustomAppearanceLabel, when_contained_in: CustomAppearanceContainer,
|
21
|
-
redHerring: 0.5,
|
22
|
-
numberOfLines: 2
|
23
|
-
|
24
|
-
end
|
data/app/styles/main_styles.rb
DELETED
@@ -1,113 +0,0 @@
|
|
1
|
-
|
2
|
-
Teacup::Stylesheet.new(:main) do
|
3
|
-
|
4
|
-
# enable orientations on the root view
|
5
|
-
style :root,
|
6
|
-
left: 0,
|
7
|
-
top: 0,
|
8
|
-
width: 320,
|
9
|
-
height: 480,
|
10
|
-
backgroundColor: UIColor.yellowColor,
|
11
|
-
portrait: true,
|
12
|
-
upside_down: false,
|
13
|
-
|
14
|
-
layer: {
|
15
|
-
cornerRadius: 10.0,
|
16
|
-
},
|
17
|
-
|
18
|
-
landscape: {
|
19
|
-
backgroundColor: UIColor.redColor,
|
20
|
-
},
|
21
|
-
|
22
|
-
landscape_left: {
|
23
|
-
layer: {
|
24
|
-
transform: transform_layer.spin(-pi / 2),
|
25
|
-
},
|
26
|
-
},
|
27
|
-
|
28
|
-
landscape_right: {
|
29
|
-
layer: {
|
30
|
-
transform: transform_layer.spin(pi / 2),
|
31
|
-
},
|
32
|
-
}
|
33
|
-
|
34
|
-
style(UILabel, {
|
35
|
-
textColor: UIColor.blueColor,
|
36
|
-
})
|
37
|
-
|
38
|
-
style CustomView,
|
39
|
-
# for testing how styles override (this gets overridden by any property in
|
40
|
-
# a style block, regardless of whether it is in an orientation style)
|
41
|
-
portrait: {
|
42
|
-
alpha: 0.75
|
43
|
-
},
|
44
|
-
landscape: {
|
45
|
-
alpha: 0.75
|
46
|
-
}
|
47
|
-
|
48
|
-
style(:background, {
|
49
|
-
alpha: 0.5,
|
50
|
-
left: 10,
|
51
|
-
top: 30,
|
52
|
-
backgroundColor: UIColor.blackColor,
|
53
|
-
custom_attr: :custom_value,
|
54
|
-
|
55
|
-
portrait: {
|
56
|
-
width: 300,
|
57
|
-
height: 440,
|
58
|
-
backgroundColor: UIColor.darkGrayColor,
|
59
|
-
},
|
60
|
-
|
61
|
-
landscape: {
|
62
|
-
width: 460,
|
63
|
-
height: 280,
|
64
|
-
alpha: 0.8,
|
65
|
-
backgroundColor: UIColor.lightGrayColor,
|
66
|
-
},
|
67
|
-
})
|
68
|
-
|
69
|
-
style(:welcome, {
|
70
|
-
left: 10,
|
71
|
-
top: 40,
|
72
|
-
width: 280,
|
73
|
-
height: 20,
|
74
|
-
text: "Welcome to teacup",
|
75
|
-
landscape: {
|
76
|
-
left: 90,
|
77
|
-
},
|
78
|
-
})
|
79
|
-
|
80
|
-
style(:footer, {
|
81
|
-
left: 10,
|
82
|
-
top: 410,
|
83
|
-
width: 280,
|
84
|
-
height: 20,
|
85
|
-
text: "This is a teacup example",
|
86
|
-
landscape: {
|
87
|
-
top: 250,
|
88
|
-
left: 90,
|
89
|
-
},
|
90
|
-
})
|
91
|
-
|
92
|
-
|
93
|
-
style :next_message,
|
94
|
-
height: 20,
|
95
|
-
portrait: nil,
|
96
|
-
title: "Next Message..."
|
97
|
-
|
98
|
-
# deliberately declaring this twice for testing purposes
|
99
|
-
# (declaring twice extends it)
|
100
|
-
style :next_message,
|
101
|
-
portrait: {
|
102
|
-
left: 150,
|
103
|
-
top: 370,
|
104
|
-
width: 140, # this should get overridden
|
105
|
-
},
|
106
|
-
|
107
|
-
landscape: {
|
108
|
-
left: 20,
|
109
|
-
top: 200,
|
110
|
-
width: 140, # this should get overridden
|
111
|
-
}
|
112
|
-
|
113
|
-
end
|