motion-prime 1.0.0 → 1.0.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 +8 -8
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +3 -3
- data/ROADMAP.md +5 -3
- data/files/Gemfile +1 -1
- data/lib/motion-prime.rb +1 -1
- data/motion-prime/core_ext/kernel.rb +16 -0
- data/motion-prime/elements/base_element.rb +1 -1
- data/motion-prime/elements/draw/image.rb +3 -1
- data/motion-prime/elements/label.rb +1 -1
- data/motion-prime/elements/page_view_controller.rb +23 -0
- data/motion-prime/helpers/has_class_factory.rb +6 -0
- data/motion-prime/prime.rb +8 -0
- data/motion-prime/screens/_sections_mixin.rb +9 -1
- data/motion-prime/sections/abstract_collection.rb +10 -1
- data/motion-prime/sections/base_section.rb +1 -1
- data/motion-prime/sections/page_view.rb +27 -0
- data/motion-prime/sections/page_view/page_view_delegate.rb +84 -0
- data/motion-prime/sections/tabbed.rb +1 -1
- data/motion-prime/sections/table.rb +4 -2
- data/motion-prime/sections/table/refresh_mixin.rb +11 -1
- data/motion-prime/sections/table/table_delegate.rb +1 -1
- data/motion-prime/support/_control_content_alignment.rb +0 -1
- data/motion-prime/support/mp_table_cell_with_section.rb +7 -1
- data/motion-prime/support/mp_text_field.rb +3 -1
- data/motion-prime/version.rb +1 -1
- data/motion-prime/views/layout.rb +1 -1
- data/motion-prime/views/view_builder.rb +10 -0
- data/motion-prime/views/view_styler.rb +11 -7
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NDJkNjczMjI4MjA3OTZjZjM5ZGNkOTliZjhiMDMzNGYzM2Q2ODFlNQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
M2ZjNWU2ZTNiZDlmN2NlNzE1M2QxN2RkOTdhMmFiYTYwZTljOWU3Mg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Y2Y1M2RlNWU3YWRmZjRjNjRkOTBkNDc5NzY4OGY1ODViYzc3YjkxOGI1MzAw
|
10
|
+
OTgzZGFkN2FhZGUzZGQ5OTAzYTA2MDlkMTExOGRiNjI4OTdkNmY1NzViN2Fi
|
11
|
+
NGE5OWJjZGE1MjY0YzZlNDllZTU4Yjc5Mjg3NTg3MmQ5ODRhYjU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MTU4Zjc1NjgyYzczZDRmNzE0MThhYTI2ZWZmNDdjNzYwNGE2NTNmNzE3Yzc2
|
14
|
+
ZWE5NWViNWZkMjkwZjQxOTFjMWI5YjY5MjFjYjdiY2Q1MzJhODJmMjM0NDdk
|
15
|
+
YWQ1NDQ4MDQzM2RlOTdhOTI0YTRhNTY5MmQ0NTg1YTZmOTcxZTk=
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
motion-prime (1.0.
|
4
|
+
motion-prime (1.0.1)
|
5
5
|
activesupport
|
6
6
|
afmotion (~> 2.1.0)
|
7
7
|
bubble-wrap (~> 1.6.0)
|
@@ -20,8 +20,8 @@ GEM
|
|
20
20
|
activesupport (3.2.17)
|
21
21
|
i18n (~> 0.6, >= 0.6.4)
|
22
22
|
multi_json (~> 1.0)
|
23
|
-
afmotion (2.1.
|
24
|
-
motion-cocoapods (
|
23
|
+
afmotion (2.1.5)
|
24
|
+
motion-cocoapods (>= 1.4.1)
|
25
25
|
motion-require (>= 0.1)
|
26
26
|
bubble-wrap (1.6.0)
|
27
27
|
bubble-wrap-http (= 1.6.0)
|
data/ROADMAP.md
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
=== 1.
|
1
|
+
=== 1.1.0
|
2
|
+
* grid item width should be calculated based on uicollectionview with
|
3
|
+
* ability to change access token param name
|
2
4
|
* bug: if mp label do not have text and was set as hidden, it should unhide after setting text.
|
3
5
|
* bug: size_to_fit works incorrect with relative width.
|
4
6
|
* bug: bind_keyboard_close breaks bind_guesture
|
@@ -10,12 +12,12 @@
|
|
10
12
|
* add different templates. some templates should be more like final app.
|
11
13
|
* add size_to_fit support for images.
|
12
14
|
|
13
|
-
=== 1.
|
15
|
+
=== 1.2.0
|
14
16
|
* Move api_client and model sync mixin to prime_model_sync gem.
|
15
17
|
* Move models to prime_model gem.
|
16
18
|
* Move bind keyboard events to forms.
|
17
19
|
|
18
|
-
=== 1.
|
20
|
+
=== 1.3.0
|
19
21
|
* add cell preload for reverse scrolling table.
|
20
22
|
* add computed_options.get(), this will allow to make sure that options is computed.
|
21
23
|
* add testing framework
|
data/files/Gemfile
CHANGED
data/lib/motion-prime.rb
CHANGED
@@ -18,7 +18,7 @@ Motion::Project::App.setup do |app|
|
|
18
18
|
app.pods do
|
19
19
|
pod 'NanoStore', '~> 2.7.7'
|
20
20
|
pod 'SDWebImage'
|
21
|
-
pod 'SVPullToRefresh'
|
21
|
+
pod 'SVPullToRefresh', git: 'git@github.com:droidlabs/SVPullToRefresh.git'
|
22
22
|
pod 'MBAlertView'
|
23
23
|
pod 'MBProgressHUD', '~> 0.8'
|
24
24
|
end
|
@@ -1,4 +1,20 @@
|
|
1
1
|
class Kernel
|
2
|
+
def benchmark(key, &block)
|
3
|
+
if Prime.env.development?
|
4
|
+
t = Time.now
|
5
|
+
result = block.call
|
6
|
+
time = Time.now - t
|
7
|
+
MotionPrime.benchmark_data[key] ||= {}
|
8
|
+
MotionPrime.benchmark_data[key][:count] ||= 0
|
9
|
+
MotionPrime.benchmark_data[key][:total] ||= 0
|
10
|
+
MotionPrime.benchmark_data[key][:count] += 1
|
11
|
+
MotionPrime.benchmark_data[key][:total] += time
|
12
|
+
result
|
13
|
+
else
|
14
|
+
block.call
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
2
18
|
def pp(*attrs)
|
3
19
|
NSLog([*attrs].map(&:inspect).join(' '))
|
4
20
|
attrs
|
@@ -26,7 +26,7 @@ module MotionPrime
|
|
26
26
|
@view_class = options[:view_class] || 'UIView'
|
27
27
|
@name = options[:name]
|
28
28
|
@block = options[:block]
|
29
|
-
@view_name = self.class_name_without_kvo.demodulize.
|
29
|
+
@view_name = underscore_factory(self.class_name_without_kvo.demodulize).gsub(/(_draw)?_element/, '')
|
30
30
|
|
31
31
|
if Prime.env.development?
|
32
32
|
info = []
|
@@ -68,7 +68,9 @@ module MotionPrime
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def strong_references
|
71
|
-
[section, (section.collection_section if section.respond_to?(:cell_section_name))]
|
71
|
+
refs = [section, (section.collection_section if section.respond_to?(:cell_section_name))]
|
72
|
+
refs += section.try(:strong_references)
|
73
|
+
refs.compact
|
72
74
|
end
|
73
75
|
|
74
76
|
def load_image
|
@@ -19,7 +19,7 @@ module MotionPrime
|
|
19
19
|
view.sizeToFit
|
20
20
|
# we should re-set values, because sizeToFit do not use padding
|
21
21
|
view.setWidth(view.bounds.size.width + content_padding_width)
|
22
|
-
view.setHeight(view.bounds.size.height + content_padding_height)
|
22
|
+
view.setHeight(computed_options[:height] || (view.bounds.size.height + content_padding_height))
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module MotionPrime
|
2
|
+
class PageViewControllerElement < BaseElement
|
3
|
+
def view_class
|
4
|
+
"UIPageViewController"
|
5
|
+
end
|
6
|
+
|
7
|
+
def render!(options = {}, &block)
|
8
|
+
builder = ViewBuilder.new(class_factory(view_class), computed_options.merge(options))
|
9
|
+
controller = builder.view
|
10
|
+
ViewStyler.new(controller, CGRectZero, builder.options).apply
|
11
|
+
|
12
|
+
first = section.collection_delegate.fetch_item(0)
|
13
|
+
controller.setViewControllers([first], direction:UIPageViewControllerNavigationDirectionForward,
|
14
|
+
animated:false, completion:lambda{|a|}) # completion:nil blows up!
|
15
|
+
|
16
|
+
screen.addChildViewController(controller)
|
17
|
+
screen.view.addSubview(controller.view)
|
18
|
+
controller.didMoveToParentViewController(screen)
|
19
|
+
screen.view.gestureRecognizers = controller.gestureRecognizers
|
20
|
+
self.view = controller
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -24,6 +24,12 @@ module MotionPrime
|
|
24
24
|
Prime.camelize_factory_cache[name] = name.camelize
|
25
25
|
end
|
26
26
|
|
27
|
+
def underscore_factory(name)
|
28
|
+
value = Prime.underscore_factory_cache[name]
|
29
|
+
return value if value
|
30
|
+
Prime.underscore_factory_cache[name] = name.underscore
|
31
|
+
end
|
32
|
+
|
27
33
|
def low_camelize_factory(name)
|
28
34
|
value = Prime.low_camelize_factory_cache[name]
|
29
35
|
return value if value
|
data/motion-prime/prime.rb
CHANGED
@@ -11,6 +11,14 @@ module MotionPrime
|
|
11
11
|
@low_camelize_factory_cache ||= {}
|
12
12
|
end
|
13
13
|
|
14
|
+
def self.underscore_factory_cache
|
15
|
+
@underscore_factory_cache ||= {}
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.benchmark_data
|
19
|
+
@benchmark_data ||= {}
|
20
|
+
end
|
21
|
+
|
14
22
|
def self.env
|
15
23
|
@env ||= MotionPrime::Env.new
|
16
24
|
end
|
@@ -15,6 +15,10 @@ module MotionPrime
|
|
15
15
|
@main_section || all_sections.first
|
16
16
|
end
|
17
17
|
|
18
|
+
def main_section=(value)
|
19
|
+
@main_section = value
|
20
|
+
end
|
21
|
+
|
18
22
|
def all_sections
|
19
23
|
Array.wrap(@sections.try(:values))
|
20
24
|
end
|
@@ -49,7 +53,11 @@ module MotionPrime
|
|
49
53
|
return unless section_options
|
50
54
|
@sections = {}
|
51
55
|
section_options.map do |name, options|
|
52
|
-
|
56
|
+
if options[:instance]
|
57
|
+
section = options[:instance]
|
58
|
+
else
|
59
|
+
section = create_section(name, options.clone)
|
60
|
+
end
|
53
61
|
@sections[name] = section if section
|
54
62
|
end
|
55
63
|
end
|
@@ -92,7 +92,7 @@ module MotionPrime
|
|
92
92
|
# @return [Boolean] true
|
93
93
|
def reset_collection_data
|
94
94
|
@did_appear = false
|
95
|
-
Array.wrap(@data).each do |section|
|
95
|
+
Array.wrap(@data).flatten.each do |section|
|
96
96
|
section.container_element.try(:update_options, reuse_identifier: nil)
|
97
97
|
end
|
98
98
|
@data = nil
|
@@ -226,6 +226,15 @@ module MotionPrime
|
|
226
226
|
end
|
227
227
|
|
228
228
|
def scroll_view_did_scroll(scroll)
|
229
|
+
return unless refresh_view = collection_view.try(:pullToRefreshView)
|
230
|
+
return refresh_view.alpha = 1 if refresh_view.state == SVPullToRefreshStateLoading
|
231
|
+
|
232
|
+
current_offset = scroll.contentOffset.y
|
233
|
+
table_inset = collection_view.contentInset.top
|
234
|
+
refresh_offset = refresh_view.yOrigin
|
235
|
+
alpha = [[-(current_offset + table_inset)/refresh_view.size.height, 0].max, 1].min
|
236
|
+
|
237
|
+
refresh_view.alpha = alpha
|
229
238
|
end
|
230
239
|
|
231
240
|
def scroll_view_did_end_dragging(scroll, willDecelerate: will_decelerate)
|
@@ -104,7 +104,7 @@ module MotionPrime
|
|
104
104
|
#
|
105
105
|
# @return name [String] section default name
|
106
106
|
def default_name
|
107
|
-
self.class_name_without_kvo.demodulize.
|
107
|
+
underscore_factory(self.class_name_without_kvo.demodulize).gsub(/\_section$/, '')
|
108
108
|
end
|
109
109
|
|
110
110
|
# Get section elements options, where the key is element name.
|
@@ -0,0 +1,27 @@
|
|
1
|
+
motion_require './page_view/page_view_delegate'
|
2
|
+
|
3
|
+
module MotionPrime
|
4
|
+
class PageViewSection < AbstractCollectionSection
|
5
|
+
before_render :render_collection
|
6
|
+
|
7
|
+
def collection_styles_base
|
8
|
+
:base_page_view
|
9
|
+
end
|
10
|
+
|
11
|
+
def collection_delegate
|
12
|
+
@collection_delegate ||= PageViewDelegate.new(section: self)
|
13
|
+
end
|
14
|
+
|
15
|
+
def grid_element_options
|
16
|
+
collection_element_options
|
17
|
+
end
|
18
|
+
|
19
|
+
def render_collection
|
20
|
+
self.collection_element = screen.page_view_controller(grid_element_options)
|
21
|
+
end
|
22
|
+
|
23
|
+
def create_section_elements
|
24
|
+
return
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module MotionPrime
|
2
|
+
class PageViewDelegate
|
3
|
+
include DelegateMixin
|
4
|
+
attr_accessor :collection_section
|
5
|
+
|
6
|
+
def initialize(options)
|
7
|
+
self.collection_section = options[:section].try(:weak_ref)
|
8
|
+
@section_instance = collection_section.to_s
|
9
|
+
@view_controllers = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
# def dealloc
|
13
|
+
# pp 'Deallocating page_view_delegate for ', @section_instance
|
14
|
+
# super
|
15
|
+
# end
|
16
|
+
|
17
|
+
def data
|
18
|
+
collection_section.data
|
19
|
+
end
|
20
|
+
|
21
|
+
def fetch_item(index)
|
22
|
+
if @view_controllers[index]
|
23
|
+
@view_controllers[index]
|
24
|
+
else
|
25
|
+
controller = MotionPrime::Screen.new
|
26
|
+
section = data[index]
|
27
|
+
section.screen = controller.weak_ref
|
28
|
+
controller.set_section :main, instance: section
|
29
|
+
@view_controllers[index] = controller
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def viewControllerAtIndex(index, storyboard:storyboard)
|
34
|
+
return nil if data.length == 0 || index >= data.size
|
35
|
+
fetch_item(index)
|
36
|
+
end
|
37
|
+
|
38
|
+
def indexOfViewController(viewController)
|
39
|
+
@view_controllers.key(viewController)
|
40
|
+
end
|
41
|
+
|
42
|
+
def pageViewController(pvc, viewControllerBeforeViewController:vc)
|
43
|
+
index = indexOfViewController(vc)
|
44
|
+
return if !index || index <= 0
|
45
|
+
fetch_item(index - 1)
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
def pageViewController(pvc, viewControllerAfterViewController:vc)
|
50
|
+
index = indexOfViewController(vc)
|
51
|
+
return if !index || index >= data.size - 1
|
52
|
+
fetch_item(index + 1)
|
53
|
+
end
|
54
|
+
|
55
|
+
def presentationCountForPageViewController(controller)
|
56
|
+
data.size
|
57
|
+
end
|
58
|
+
|
59
|
+
def pageViewController(pvc, spineLocationForInterfaceOrientation:orientation)
|
60
|
+
page_view_controller = collection_section.collection_view
|
61
|
+
current = page_view_controller.viewControllers[0]
|
62
|
+
is_portrait = UIDevice.currentDevice.orientation == UIDeviceOrientationLandscapeLeft ||
|
63
|
+
UIDevice.currentDevice.orientation == UIDeviceOrientationPortraitUpsideDown ||
|
64
|
+
UIDevice.currentDevice.orientation == UIDeviceOrientationUnknown
|
65
|
+
if is_portrait
|
66
|
+
page_view_controller.setViewControllers([current], direction:UIPageViewControllerNavigationDirectionForward, animated:true, completion:lambda{|a|})
|
67
|
+
page_view_controller.doubleSided = false
|
68
|
+
return UIPageViewControllerSpineLocationMin
|
69
|
+
else
|
70
|
+
index = indexOfViewController(current)
|
71
|
+
if (index==0 || index%2==0)
|
72
|
+
next_vc = pageViewController(page_view_controller, viewControllerAfterViewController: current)
|
73
|
+
viewControllers = [current, next_vc]
|
74
|
+
else
|
75
|
+
prev_vc = pageViewController(page_view_controller, viewControllerBeforeViewController: current)
|
76
|
+
viewControllers = [prev_vc, current]
|
77
|
+
end
|
78
|
+
page_view_controller.setViewControllers(viewControllers, direction:UIPageViewControllerNavigationDirectionForward, animated:true, completion:lambda{|a|})
|
79
|
+
page_view_controller.doubleSided = true
|
80
|
+
return UIPageViewControllerSpineLocationMid
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -18,7 +18,7 @@ module MotionPrime
|
|
18
18
|
element :control, type: :segmented_control,
|
19
19
|
styles: [:base_segmented_control], items: proc { tab_control_items }
|
20
20
|
|
21
|
-
|
21
|
+
before_render :render_tab_pages
|
22
22
|
after_render :render_tab_controls
|
23
23
|
|
24
24
|
def tab_options
|
@@ -6,7 +6,7 @@ module MotionPrime
|
|
6
6
|
include TableSectionRefreshMixin
|
7
7
|
include HasSearchBar
|
8
8
|
|
9
|
-
class_attribute :group_header_options, :pull_to_refresh_block
|
9
|
+
class_attribute :group_header_options, :pull_to_refresh_block, :pull_to_refresh_options
|
10
10
|
|
11
11
|
attr_accessor :group_header_sections, :group_header_options
|
12
12
|
after_render :init_pull_to_refresh
|
@@ -212,6 +212,7 @@ module MotionPrime
|
|
212
212
|
def cached_cell(index)
|
213
213
|
collection_view.dequeueReusableCellWithIdentifier(cell_name(index)) || begin
|
214
214
|
section = cell_section_by_index(index)
|
215
|
+
section.create_elements
|
215
216
|
cell = section.try(:cell)
|
216
217
|
if cell.try(:superview)
|
217
218
|
Prime.logger.error "cell already exists: #{section.name}: #{cell}"
|
@@ -253,7 +254,8 @@ module MotionPrime
|
|
253
254
|
self.group_header_options[section] = options
|
254
255
|
end
|
255
256
|
|
256
|
-
def pull_to_refresh(&block)
|
257
|
+
def pull_to_refresh(options = {}, &block)
|
258
|
+
self.pull_to_refresh_options = options
|
257
259
|
self.pull_to_refresh_block = block
|
258
260
|
end
|
259
261
|
end
|
@@ -4,7 +4,17 @@ module MotionPrime
|
|
4
4
|
screen.automaticallyAdjustsScrollViewInsets = false
|
5
5
|
|
6
6
|
collection_view.addPullToRefreshWithActionHandler(block) # block must be a variable
|
7
|
-
|
7
|
+
refresh_view = collection_view.pullToRefreshView
|
8
|
+
|
9
|
+
options[:styles] ||= []
|
10
|
+
options[:styles] += [:base_pull_to_refresh]
|
11
|
+
# pass yOrigin to override view top
|
12
|
+
base_options = {
|
13
|
+
alpha: 0,
|
14
|
+
custom_offset_threshold: - collection_view.contentInset.top - refresh_view.size.height,
|
15
|
+
original_top_inset: collection_view.contentInset.top
|
16
|
+
}
|
17
|
+
screen.set_options_for refresh_view, base_options.merge(options)
|
8
18
|
end
|
9
19
|
|
10
20
|
def finish_pull_to_refresh
|
@@ -15,7 +15,7 @@ module MotionPrime
|
|
15
15
|
|
16
16
|
def init_pull_to_refresh
|
17
17
|
return unless block = table_section.class.pull_to_refresh_block
|
18
|
-
table_section.add_pull_to_refresh do
|
18
|
+
table_section.add_pull_to_refresh(table_section.class.pull_to_refresh_options || {}) do
|
19
19
|
table_section.instance_eval(&block)
|
20
20
|
end
|
21
21
|
end
|
@@ -14,7 +14,13 @@ class MPTableCellWithSection < UITableViewCell
|
|
14
14
|
|
15
15
|
def initialize_content
|
16
16
|
self.scroll_view = self.subviews.first
|
17
|
-
|
17
|
+
# iOS 8
|
18
|
+
if self.scroll_view.is_a?(UITableViewCellContentView)
|
19
|
+
self.scroll_view.removeFromSuperview
|
20
|
+
self.scroll_view = self
|
21
|
+
else
|
22
|
+
self.scroll_view.subviews.first.removeFromSuperview
|
23
|
+
end
|
18
24
|
self.content_view = MPTableViewCellContentView.alloc.initWithFrame(self.bounds)
|
19
25
|
self.content_view.setBackgroundColor(:clear.uicolor)
|
20
26
|
self.content_view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight
|
@@ -21,7 +21,7 @@ class MPTextField < UITextField
|
|
21
21
|
|
22
22
|
# placeholder position
|
23
23
|
def textRectForBounds(bounds)
|
24
|
-
@_line_height =
|
24
|
+
@_line_height = font.pointSize
|
25
25
|
rect = calculate_rect_for(bounds)
|
26
26
|
@_line_height = nil
|
27
27
|
rect
|
@@ -36,6 +36,8 @@ class MPTextField < UITextField
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def drawPlaceholderInRect(rect)
|
39
|
+
font_diff = self.font.pointSize - placeholder_font.pointSize
|
40
|
+
rect.origin.y += font_diff/2.0
|
39
41
|
color = self.placeholderColor || :gray.uicolor
|
40
42
|
color.setFill
|
41
43
|
|
data/motion-prime/version.rb
CHANGED
@@ -53,7 +53,7 @@ module MotionPrime
|
|
53
53
|
[::UIActionSheet, ::UIActivityIndicatorView, ::MPButton, ::UIDatePicker, ::UIImageView, ::MPLabel,
|
54
54
|
::UIPageControl, ::UIPickerView, ::UIProgressView, ::UIScrollView, ::UISearchBar, ::UISegmentedControl,
|
55
55
|
::UISlider, ::UIStepper, ::UISwitch, ::UITabBar, ::UICollectionView, ::UITableView, ::UITableViewCell,
|
56
|
-
::MPTextField, ::MPTextView, ::UIToolbar, ::UIWebView, ::UINavigationBar,
|
56
|
+
::MPTextField, ::MPTextView, ::UIToolbar, ::UIWebView, ::UINavigationBar, ::UIPageViewController,
|
57
57
|
::MPTableCellWithSection, ::MPCollectionCellWithSection, ::MBProgressHUD, ::MPSpinner].each do |klass|
|
58
58
|
|
59
59
|
shorthand = "#{klass}"[2..-1].underscore.to_sym
|
@@ -80,6 +80,10 @@ module MotionPrime
|
|
80
80
|
items = options.delete(:items) || []
|
81
81
|
klass.alloc.initWithItems items
|
82
82
|
},
|
83
|
+
'UIPageViewController' => Proc.new{|klass, options|
|
84
|
+
klass.alloc.initWithTransitionStyle(UIPageViewControllerTransitionStylePageCurl,
|
85
|
+
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal, options:nil)
|
86
|
+
},
|
83
87
|
'UITableView' => Proc.new{|klass, options|
|
84
88
|
style = options.delete(:style) || UITableViewStylePlain
|
85
89
|
view = klass.alloc.initWithFrame CGRectZero, style: style
|
@@ -167,5 +171,11 @@ module MotionPrime
|
|
167
171
|
}
|
168
172
|
end
|
169
173
|
end
|
174
|
+
|
175
|
+
%w[MPLabel MPTextField MPTextView MPButton].each do |default_view|
|
176
|
+
register default_view do |klass, options|
|
177
|
+
klass.alloc.initWithFrame CGRectZero
|
178
|
+
end
|
179
|
+
end
|
170
180
|
end
|
171
181
|
end
|
@@ -5,12 +5,12 @@ module MotionPrime
|
|
5
5
|
include HasClassFactory
|
6
6
|
include ElementTextMixin
|
7
7
|
|
8
|
-
ORDER = %w[font placeholder_font text]
|
8
|
+
ORDER = %w[frame font placeholder_font text title_label title]
|
9
9
|
|
10
10
|
attr_reader :view, :options
|
11
11
|
|
12
12
|
def initialize(view, parent_bounds = CGRectZero, options = {})
|
13
|
-
@options = Styles.extend_and_normalize_options
|
13
|
+
@options = Styles.extend_and_normalize_options(options)
|
14
14
|
@view = view
|
15
15
|
prepare_frame_for(parent_bounds) if @options.delete(:calculate_frame)
|
16
16
|
prepare_options!
|
@@ -39,8 +39,8 @@ module MotionPrime
|
|
39
39
|
mask |= UIViewAutoresizingFlexibleLeftMargin if options[:left].nil?
|
40
40
|
mask |= UIViewAutoresizingFlexibleBottomMargin if options[:bottom].nil?
|
41
41
|
mask |= UIViewAutoresizingFlexibleRightMargin if options[:right].nil?
|
42
|
-
mask |= UIViewAutoresizingFlexibleWidth if !options[:left].nil? && !options[:right].nil?
|
43
|
-
mask |= UIViewAutoresizingFlexibleHeight if options[:height_to_fit].nil? && (!options[:top].nil? && !options[:bottom].nil?)
|
42
|
+
mask |= UIViewAutoresizingFlexibleWidth if options[:width].nil? && (!options[:left].nil? && !options[:right].nil?)
|
43
|
+
mask |= UIViewAutoresizingFlexibleHeight if options[:height].nil? && options[:height_to_fit].nil? && (!options[:top].nil? && !options[:bottom].nil?)
|
44
44
|
options[:autoresizingMask] = mask
|
45
45
|
end
|
46
46
|
end
|
@@ -66,7 +66,11 @@ module MotionPrime
|
|
66
66
|
extract_font_options(options)
|
67
67
|
extract_font_options(options, 'placeholder')
|
68
68
|
|
69
|
-
@options = Hash[
|
69
|
+
@options = Hash[
|
70
|
+
options.sort_by do |k,v|
|
71
|
+
index = ORDER.index(k.to_s) || -1
|
72
|
+
end.reverse
|
73
|
+
]
|
70
74
|
end
|
71
75
|
|
72
76
|
def extract_font_options(options, prefix = nil)
|
@@ -154,10 +158,10 @@ module MotionPrime
|
|
154
158
|
|
155
159
|
def set_text_options(key, value)
|
156
160
|
if key == 'content_horizontal_alignment' && value.is_a?(Symbol) && %[left right center fill].include?(value.to_s)
|
157
|
-
view.setValue "
|
161
|
+
view.setValue class_factory("UIControlContentHorizontalAlignment_#{value.camelize}"), forKey: camelize_factory(key)
|
158
162
|
true
|
159
163
|
elsif key == 'content_vertical_alignment' && value.is_a?(Symbol) && %[top bottom center fill].include?(value.to_s)
|
160
|
-
view.setValue "
|
164
|
+
view.setValue class_factory("UIControlContentVerticalAlignment_#{value.camelize}"), forKey: camelize_factory(key)
|
161
165
|
true
|
162
166
|
elsif key.end_with?('alignment') && value.is_a?(Symbol)
|
163
167
|
view.setValue value.nstextalignment, forKey: camelize_factory(key)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion-prime
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Iskander Haziev
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-06-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -282,6 +282,7 @@ files:
|
|
282
282
|
- motion-prime/elements/image.rb
|
283
283
|
- motion-prime/elements/label.rb
|
284
284
|
- motion-prime/elements/map.rb
|
285
|
+
- motion-prime/elements/page_view_controller.rb
|
285
286
|
- motion-prime/elements/progress_hud.rb
|
286
287
|
- motion-prime/elements/spinner.rb
|
287
288
|
- motion-prime/elements/table_header.rb
|
@@ -347,6 +348,8 @@ files:
|
|
347
348
|
- motion-prime/sections/form/text_field_section.rb
|
348
349
|
- motion-prime/sections/grid.rb
|
349
350
|
- motion-prime/sections/header.rb
|
351
|
+
- motion-prime/sections/page_view.rb
|
352
|
+
- motion-prime/sections/page_view/page_view_delegate.rb
|
350
353
|
- motion-prime/sections/tabbed.rb
|
351
354
|
- motion-prime/sections/table.rb
|
352
355
|
- motion-prime/sections/table/refresh_mixin.rb
|