motion-prime 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG.md +3 -0
- data/Gemfile.lock +1 -1
- data/files/Gemfile +1 -1
- data/files/Gemfile.lock +9 -13
- data/files/app/screens/application_screen.rb +1 -1
- data/motion-prime/core_ext/kernel.rb +4 -0
- data/motion-prime/elements/_content_text_mixin.rb +2 -1
- data/motion-prime/elements/_text_mixin.rb +7 -3
- data/motion-prime/elements/draw.rb +5 -0
- data/motion-prime/elements/draw/image.rb +8 -6
- data/motion-prime/elements/draw/label.rb +2 -1
- data/motion-prime/env.rb +4 -0
- data/motion-prime/screens/_aliases_mixin.rb +0 -2
- data/motion-prime/screens/_base_mixin.rb +4 -14
- data/motion-prime/screens/screen.rb +4 -3
- data/motion-prime/sections/base_section.rb +1 -2
- data/motion-prime/sections/table.rb +15 -15
- data/motion-prime/sections/table/table_delegate.rb +10 -0
- data/motion-prime/version.rb +1 -1
- data/motion-prime/views/view_builder.rb +6 -3
- data/motion-prime/views/view_styler.rb +2 -2
- data/spec/prime/env.rb +20 -0
- data/spec/screens/screen_spec.rb +0 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YzJhZGY0OTNiNDY5YmZmOWQ0NDZhNGEzOWY4MjM3ZDU3YjUzODVkOQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZDcyYmRiYWM3MWQyYmI5OTA0M2U2YzcyYTlmZGFkNjBjZWIzMWJlMw==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NzAwYWU2NDlmYjUyZGVhZjkxMzcyZGE0ZTBiNmYyN2EwZmEyNGMzYjJmNTcz
|
10
|
+
N2IyZmRkNWVjZjU0ZDVmNGQxYmYxZGJkOTE0YTdkZTBjMDc3MmMwZDU2NjJk
|
11
|
+
NWUyYWRjN2E4NDg4YWEwY2U0N2MyMDhlMzI2OTY0MDJmNjRiZGE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MmYyY2I4MTQ5ZTA4OGIxZjYzOWFhOTc1NDk5NWI5YWMwZjJmN2Q0NGU1Y2Jm
|
14
|
+
MTQwZGU3ZDlmNTgwMThkZGQ2OTBmMjU5NTY3OTY3OGQ5NzA3NjQxODYwZThj
|
15
|
+
MThjMjgxMmQ0YzU0MTYyZDljZGY1NTI0NzllZGExYzRkZjMxYmU=
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/files/Gemfile
CHANGED
@@ -5,7 +5,7 @@ gem 'motion-support', '~> 0.2.4'
|
|
5
5
|
gem 'sugarcube', '~> 1.3.7', require: 'sugarcube-classic'
|
6
6
|
gem 'bubble-wrap', '~> 1.3.0'
|
7
7
|
|
8
|
-
gem 'motion-prime', '~> 0.5.
|
8
|
+
gem 'motion-prime', '~> 0.5.1'
|
9
9
|
|
10
10
|
# add reside menu for sidebar support
|
11
11
|
gem 'prime_reside_menu', '~> 0.1.3'
|
data/files/Gemfile.lock
CHANGED
@@ -1,15 +1,3 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ../
|
3
|
-
specs:
|
4
|
-
motion-prime (0.5.0)
|
5
|
-
bubble-wrap
|
6
|
-
cocoapods
|
7
|
-
methadone
|
8
|
-
motion-cocoapods
|
9
|
-
motion-require
|
10
|
-
motion-support
|
11
|
-
sugarcube
|
12
|
-
|
13
1
|
GEM
|
14
2
|
remote: http://rubygems.org/
|
15
3
|
specs:
|
@@ -44,6 +32,14 @@ GEM
|
|
44
32
|
bundler
|
45
33
|
motion-cocoapods (1.4.0)
|
46
34
|
cocoapods (>= 0.26.2)
|
35
|
+
motion-prime (0.5.1)
|
36
|
+
bubble-wrap
|
37
|
+
cocoapods
|
38
|
+
methadone
|
39
|
+
motion-cocoapods
|
40
|
+
motion-require
|
41
|
+
motion-support
|
42
|
+
sugarcube
|
47
43
|
motion-require (0.0.7)
|
48
44
|
motion-support (0.2.5)
|
49
45
|
motion-require (>= 0.0.6)
|
@@ -67,7 +63,7 @@ PLATFORMS
|
|
67
63
|
DEPENDENCIES
|
68
64
|
bubble-wrap (~> 1.3.0)
|
69
65
|
motion-cocoapods (~> 1.4.0)
|
70
|
-
motion-prime (~> 0.5.
|
66
|
+
motion-prime (~> 0.5.1)
|
71
67
|
motion-support (~> 0.2.4)
|
72
68
|
prime_reside_menu (~> 0.1.3)
|
73
69
|
sugarcube (~> 1.3.7)
|
@@ -21,7 +21,8 @@ module MotionPrime
|
|
21
21
|
options = {
|
22
22
|
text: content_text,
|
23
23
|
font: content_font,
|
24
|
-
line_spacing: computed_options[:line_spacing]
|
24
|
+
line_spacing: computed_options[:line_spacing],
|
25
|
+
line_height: computed_options[:line_height]
|
25
26
|
}
|
26
27
|
computed_options[:html].present? ? html_string(options) : attributed_string(options)
|
27
28
|
end
|
@@ -13,7 +13,7 @@ module MotionPrime
|
|
13
13
|
def html_string(options)
|
14
14
|
styles = []
|
15
15
|
styles << "color: #{options[:text_color].hex};" if options[:text_color]
|
16
|
-
styles << "line-height: #{options[:line_spacing].to_f + options[:font].pointSize}px;"
|
16
|
+
styles << "line-height: #{options.fetch(:line_height, options[:line_spacing].to_f + options[:font].pointSize)}px;"
|
17
17
|
styles << "font-family: '#{options[:font].familyName}';"
|
18
18
|
styles << "font-size: #{options[:font].pointSize}px;"
|
19
19
|
styles << "text-align: #{options[:text_alignment_name]};" if options[:text_alignment_name]
|
@@ -28,13 +28,17 @@ module MotionPrime
|
|
28
28
|
# DTCoreTextFontDescriptor.setOverrideFontName(Prime::Config.font.bold_italic, forFontFamily: 'Calibri', bold: true, italic: true)
|
29
29
|
|
30
30
|
text = "#{options[:text]}<style>* { #{styles.join} }</style>"
|
31
|
-
NSAttributedString.alloc.initWithData(text.dataUsingEncoding(
|
31
|
+
NSAttributedString.alloc.initWithData(text.dataUsingEncoding(NSUTF8StringEncoding), options: html_options, documentAttributes: nil, error: nil)
|
32
32
|
end
|
33
33
|
|
34
34
|
def attributed_string(options)
|
35
35
|
paragrahStyle = NSMutableParagraphStyle.alloc.init
|
36
36
|
|
37
|
-
|
37
|
+
if options[:line_height]
|
38
|
+
paragrahStyle.setMinimumLineHeight(options[:line_height])
|
39
|
+
elsif options[:line_spacing]
|
40
|
+
paragrahStyle.setLineSpacing(options[:line_spacing])
|
41
|
+
end
|
38
42
|
paragrahStyle.setAlignment(options[:text_alignment]) if options[:text_alignment]
|
39
43
|
paragrahStyle.setLineBreakMode(options[:line_break_mode]) if options[:line_break_mode]
|
40
44
|
attributes = {}
|
@@ -65,18 +65,23 @@ module MotionPrime
|
|
65
65
|
end
|
66
66
|
|
67
67
|
def hide
|
68
|
+
return if computed_options[:hidden]
|
68
69
|
computed_options[:hidden] = true
|
70
|
+
section.cached_draw_image = nil
|
69
71
|
view.setNeedsDisplay
|
70
72
|
end
|
71
73
|
|
72
74
|
def show
|
75
|
+
return if !computed_options[:hidden]
|
73
76
|
computed_options[:hidden] = false
|
77
|
+
section.cached_draw_image = nil
|
74
78
|
view.setNeedsDisplay
|
75
79
|
end
|
76
80
|
|
77
81
|
def update_with_options(new_options = {})
|
78
82
|
options.merge!(new_options)
|
79
83
|
compute_options!
|
84
|
+
section.cached_draw_image = nil
|
80
85
|
view.setNeedsDisplay
|
81
86
|
end
|
82
87
|
|
@@ -4,11 +4,6 @@ module MotionPrime
|
|
4
4
|
include DrawBackgroundMixin
|
5
5
|
attr_accessor :image_data
|
6
6
|
|
7
|
-
def dealloc
|
8
|
-
@break_async_block = true
|
9
|
-
super
|
10
|
-
end
|
11
|
-
|
12
7
|
def draw_options
|
13
8
|
image = image_data || computed_options[:image]
|
14
9
|
image ||= computed_options[:default] if computed_options[:url]
|
@@ -73,11 +68,17 @@ module MotionPrime
|
|
73
68
|
return if image_data || !computed_options[:url]
|
74
69
|
BW::Reactor.schedule do
|
75
70
|
manager = SDWebImageManager.sharedManager
|
71
|
+
@screen_ref = screen.strong_ref
|
72
|
+
@section_ref = section.strong_ref
|
76
73
|
manager.downloadWithURL(computed_options[:url],
|
77
74
|
options: 0,
|
78
75
|
progress: lambda{ |r_size, e_size| },
|
79
76
|
completed: lambda{ |image, error, type, finished|
|
80
|
-
|
77
|
+
if !image || screen.retainCount == 1 || section.retainCount == 1
|
78
|
+
@screen_ref = @section_ref = nil
|
79
|
+
return
|
80
|
+
end
|
81
|
+
|
81
82
|
self.image_data = image
|
82
83
|
|
83
84
|
section.cached_draw_image = nil
|
@@ -86,6 +87,7 @@ module MotionPrime
|
|
86
87
|
else
|
87
88
|
self.view.performSelectorOnMainThread :setNeedsDisplay, withObject: nil, waitUntilDone: false
|
88
89
|
end
|
90
|
+
@screen_ref = @section_ref = nil
|
89
91
|
}
|
90
92
|
)
|
91
93
|
end
|
@@ -30,6 +30,7 @@ module MotionPrime
|
|
30
30
|
line_break_mode_name: line_break_mode_name,
|
31
31
|
line_break_mode: line_break_mode,
|
32
32
|
line_spacing: options[:line_spacing],
|
33
|
+
line_height: options[:line_height],
|
33
34
|
underline: options[:underline],
|
34
35
|
top_left_corner: top_left_corner,
|
35
36
|
inner_rect: inner_rect
|
@@ -49,7 +50,7 @@ module MotionPrime
|
|
49
50
|
|
50
51
|
UIGraphicsPushContext(context)
|
51
52
|
options = draw_options
|
52
|
-
if options[:is_html] || options[:line_spacing] || options[:underline]
|
53
|
+
if options[:is_html] || options[:line_spacing] || options[:line_height] || options[:underline]
|
53
54
|
prepared_text = options[:is_html] ? html_string(options) : attributed_string(options)
|
54
55
|
|
55
56
|
if options[:inner_rect]
|
data/motion-prime/env.rb
CHANGED
@@ -13,20 +13,10 @@ module MotionPrime
|
|
13
13
|
attr_accessor :parent_screen, :modal, :params, :main_section, :options, :tab_bar
|
14
14
|
class_attribute :current_screen
|
15
15
|
|
16
|
-
included do
|
17
|
-
define_callbacks :load
|
18
|
-
end
|
19
|
-
|
20
16
|
def app_delegate
|
21
17
|
UIApplication.sharedApplication.delegate
|
22
18
|
end
|
23
19
|
|
24
|
-
def on_screen_load
|
25
|
-
run_callbacks :load do
|
26
|
-
on_load
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
20
|
# Setup the screen, this method will be called when you run MPViewController.new
|
31
21
|
# @param options [hash] Options passed to setup
|
32
22
|
# @return [MotionPrime::Screen] Ready to use screen
|
@@ -74,11 +64,11 @@ module MotionPrime
|
|
74
64
|
t ? @title = t : @title ||= self.to_s
|
75
65
|
end
|
76
66
|
end
|
77
|
-
def
|
78
|
-
set_callback :
|
67
|
+
def before_render(method_name)
|
68
|
+
set_callback :render, :before, method_name
|
79
69
|
end
|
80
|
-
def
|
81
|
-
set_callback :
|
70
|
+
def after_render(method_name)
|
71
|
+
set_callback :render, :after, method_name
|
82
72
|
end
|
83
73
|
def create_with_options(screen, navigation = true, options = {})
|
84
74
|
if screen.is_a?(Symbol)
|
@@ -20,6 +20,8 @@ module MotionPrime
|
|
20
20
|
|
21
21
|
extend HasClassFactory
|
22
22
|
|
23
|
+
define_callbacks :render
|
24
|
+
|
23
25
|
def render
|
24
26
|
end
|
25
27
|
|
@@ -30,15 +32,14 @@ module MotionPrime
|
|
30
32
|
def will_appear
|
31
33
|
unless @on_appear_happened
|
32
34
|
setup view, styles: default_styles do
|
33
|
-
render
|
35
|
+
run_callbacks :render { render }
|
34
36
|
end
|
35
37
|
end
|
36
38
|
@on_appear_happened = true
|
37
39
|
end
|
38
40
|
|
39
41
|
def dealloc
|
40
|
-
pp 'Deallocating Screen'
|
41
|
-
@main_section.instance_variable_set(:"@break_preload", true) # TODO: find a better option
|
42
|
+
pp self.object_id, 'Deallocating Screen', self.retainCount
|
42
43
|
# FIXME: calling instance_eval in title method (_base_screen_mixin) instance variables need to be cleared manually
|
43
44
|
# clear_instance_variables cause BAD_ACCESS errors too
|
44
45
|
@main_section = nil
|
@@ -37,7 +37,7 @@ module MotionPrime
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def dealloc
|
40
|
-
|
40
|
+
pp 'deallocating section', self.name, self.elements.try(:count), self.to_s, self.object_id
|
41
41
|
NSNotificationCenter.defaultCenter.removeObserver self # unbinding events created in bind_keyboard_events
|
42
42
|
super
|
43
43
|
end
|
@@ -72,7 +72,6 @@ module MotionPrime
|
|
72
72
|
@section_loading = true
|
73
73
|
create_elements
|
74
74
|
@section_loading = false
|
75
|
-
|
76
75
|
return @section_loaded = true
|
77
76
|
end
|
78
77
|
|
@@ -15,12 +15,6 @@ module MotionPrime
|
|
15
15
|
after_render :init_pull_to_refresh
|
16
16
|
delegate :init_pull_to_refresh, to: :table_delegate
|
17
17
|
|
18
|
-
def dealloc
|
19
|
-
cancel_block = proc { :cancelled }.weak!
|
20
|
-
@preloader_queue.map!(&cancel_block) if @preloader_queue.present?
|
21
|
-
super
|
22
|
-
end
|
23
|
-
|
24
18
|
def table_data
|
25
19
|
[]
|
26
20
|
end
|
@@ -55,14 +49,6 @@ module MotionPrime
|
|
55
49
|
@preloader_cancelled = false
|
56
50
|
@data_stamp = nil
|
57
51
|
@preloader_queue[-1] = :cancelled if @preloader_queue.present?
|
58
|
-
# @ids.each do |id|
|
59
|
-
# table_view.dequeueReusableCellWithIdentifier(id)
|
60
|
-
# end if @ids
|
61
|
-
# table_view.valueForKey('_reusableTableCells').removeAllObjects
|
62
|
-
|
63
|
-
# releasing table_delegate
|
64
|
-
# @table_delegate = nil
|
65
|
-
# table_view.delegate = table_delegate
|
66
52
|
end
|
67
53
|
|
68
54
|
def table_styles
|
@@ -379,22 +365,36 @@ module MotionPrime
|
|
379
365
|
load_count = [left_to_load, limit].compact.min
|
380
366
|
@preloader_cancelled = false
|
381
367
|
@preloader_queue ||= []
|
368
|
+
@strong_refs ||= []
|
382
369
|
|
383
370
|
# TODO: do not release parent_objcets unless finished
|
384
371
|
BW::Reactor.schedule(@preloader_queue.count) do |queue_id|
|
385
372
|
@preloader_queue[queue_id] = :in_progress
|
373
|
+
@strong_refs[queue_id] = screen.strong_ref
|
386
374
|
|
387
375
|
result = load_count.times do |offset|
|
388
|
-
|
376
|
+
if @preloader_queue[queue_id] == :cancelled
|
377
|
+
@strong_refs[queue_id] = nil
|
378
|
+
break
|
379
|
+
end
|
380
|
+
|
381
|
+
if screen.retainCount == 1
|
382
|
+
@strong_refs[queue_id] = nil
|
383
|
+
@preloader_queue[queue_id] = :dealloc
|
384
|
+
break
|
385
|
+
end
|
386
|
+
|
389
387
|
load_cell_by_index(index, preload: true)
|
390
388
|
unless offset == load_count - 1
|
391
389
|
index = service.sum_index(index, 1)
|
392
390
|
end
|
393
391
|
end
|
392
|
+
|
394
393
|
if result
|
395
394
|
on_async_data_preloaded(index)
|
396
395
|
@preloader_queue[queue_id] = :completed
|
397
396
|
end
|
397
|
+
@strong_refs[queue_id] = nil
|
398
398
|
end
|
399
399
|
load_count
|
400
400
|
end
|
@@ -22,6 +22,16 @@ module MotionPrime
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def tableView(table, cellForRowAtIndexPath: index)
|
25
|
+
curCallTime = Time.now.to_f
|
26
|
+
curCallOffset = table.contentOffset.y
|
27
|
+
if @prevCallTime
|
28
|
+
timeDelta = curCallTime - @prevCallTime
|
29
|
+
offsetDelta = curCallOffset - @prevCallOffset
|
30
|
+
@deceleration_speed = offsetDelta/timeDelta
|
31
|
+
end
|
32
|
+
@prevCallTime = curCallTime
|
33
|
+
@prevCallOffset = curCallOffset
|
34
|
+
|
25
35
|
table_section.cell_for_index(table, index)
|
26
36
|
end
|
27
37
|
|
data/motion-prime/version.rb
CHANGED
@@ -32,10 +32,11 @@ module MotionPrime
|
|
32
32
|
{
|
33
33
|
'UIView' => Proc.new {|klass, options| klass.alloc.initWithFrame CGRectZero },
|
34
34
|
'UILabel' => Proc.new {|klass, options|
|
35
|
-
if options.slice(:line_spacing, :underline, :fragment_color).any?
|
35
|
+
if options.slice(:line_spacing, :line_height, :underline, :fragment_color).any?
|
36
36
|
options[:attributed_text_options] = {
|
37
37
|
text: options.delete(:text),
|
38
38
|
line_spacing: options.delete(:line_spacing),
|
39
|
+
line_height: options.delete(:line_height),
|
39
40
|
fragment_color: options.delete(:fragment_color),
|
40
41
|
underline: options.delete(:underline)
|
41
42
|
}
|
@@ -132,11 +133,13 @@ module MotionPrime
|
|
132
133
|
},
|
133
134
|
'UIWebView' => Proc.new{|klass, options|
|
134
135
|
web_view = klass.alloc.initWithFrame CGRectZero
|
136
|
+
if delegate = options.delete(:delegate)
|
137
|
+
web_view.delegate = delegate
|
138
|
+
end
|
135
139
|
if url = options.delete(:url)
|
136
140
|
request = NSURLRequest.requestWithURL url.nsurl
|
137
|
-
web_view.loadRequest
|
141
|
+
web_view.loadRequest(request)
|
138
142
|
end
|
139
|
-
web_view.delegate = options.delete(:delegate)
|
140
143
|
web_view
|
141
144
|
}
|
142
145
|
}
|
@@ -106,9 +106,9 @@ module MotionPrime
|
|
106
106
|
view.mask = mask_layer
|
107
107
|
elsif key == 'attributed_text_options'
|
108
108
|
attributes = {}
|
109
|
-
if line_spacing = value[:line_spacing]
|
109
|
+
if line_spacing = value[:line_spacing] || line_height = value[:line_height]
|
110
110
|
paragrahStyle = NSMutableParagraphStyle.alloc.init
|
111
|
-
paragrahStyle.setLineSpacing(line_spacing)
|
111
|
+
line_height ? paragrahStyle.setMinimumLineHeight(line_height) : paragrahStyle.setLineSpacing(line_spacing)
|
112
112
|
attributes[NSParagraphStyleAttributeName] = paragrahStyle
|
113
113
|
end
|
114
114
|
|
data/spec/prime/env.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
describe "Prime.env" do
|
2
|
+
|
3
|
+
before do
|
4
|
+
ENV['PRIME_ENV'] = 'staging'
|
5
|
+
end
|
6
|
+
|
7
|
+
it 'to_s should return string' do
|
8
|
+
Prime.env.to_s.is_a?(String).should.be.true
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should be comparable with string' do
|
12
|
+
(Prime.env == 'staging').should.be.true
|
13
|
+
(Prime.env == 'test').should.be.false
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should respond to question mark' do
|
17
|
+
Prime.env.staging?.should.be.true
|
18
|
+
Prime.env.test?.should.be.false
|
19
|
+
end
|
20
|
+
end
|
data/spec/screens/screen_spec.rb
CHANGED
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: 0.5.
|
4
|
+
version: 0.5.2
|
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-01-
|
12
|
+
date: 2014-01-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -325,6 +325,7 @@ files:
|
|
325
325
|
- spec/models/model_spec.rb
|
326
326
|
- spec/models/store_extension_spec.rb
|
327
327
|
- spec/models/store_spec.rb
|
328
|
+
- spec/prime/env.rb
|
328
329
|
- spec/screens/screen_spec.rb
|
329
330
|
- travis.sh
|
330
331
|
homepage: ''
|
@@ -366,4 +367,5 @@ test_files:
|
|
366
367
|
- spec/models/model_spec.rb
|
367
368
|
- spec/models/store_extension_spec.rb
|
368
369
|
- spec/models/store_spec.rb
|
370
|
+
- spec/prime/env.rb
|
369
371
|
- spec/screens/screen_spec.rb
|