motion-prime 0.4.5 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +14 -6
- data/.gitignore +1 -0
- data/CHANGELOG.md +14 -0
- data/Gemfile.lock +1 -1
- data/README.md +10 -8
- data/ROADMAP.md +9 -10
- data/Rakefile +1 -1
- data/doc/code/getting_started.rb +3 -3
- data/doc/code/screens.rb +25 -10
- data/doc/code/sections.rb +41 -0
- data/doc/docs/getting_started.html +8 -3
- data/doc/docs/screens.html +58 -19
- data/doc/docs/sections.html +134 -0
- data/files/Gemfile +7 -1
- data/files/Gemfile.lock +18 -9
- data/files/Rakefile +2 -11
- data/files/app/app_delegate.rb +2 -2
- data/files/app/config/base.rb +0 -4
- data/files/app/screens/application_screen.rb +2 -2
- data/files/app/screens/home_screen.rb +2 -0
- data/files/app/screens/sidebar_screen.rb +3 -3
- data/files/app/sections/home/section.rb +3 -0
- data/files/app/sections/sidebar/action.rb +1 -1
- data/files/app/styles/home.rb +9 -0
- data/files/app/styles/sidebar.rb +3 -3
- data/lib/motion-prime.rb +9 -0
- data/motion-prime/api_client.rb +5 -1
- data/motion-prime/app_delegate.rb +40 -45
- data/motion-prime/core_ext/kernel.rb +8 -0
- data/motion-prime/elements/_content_text_mixin.rb +3 -1
- data/motion-prime/elements/_text_mixin.rb +1 -1
- data/motion-prime/elements/base_element.rb +6 -5
- data/motion-prime/elements/draw/image.rb +6 -1
- data/motion-prime/elements/view_with_section.rb +7 -0
- data/motion-prime/helpers/has_style_chain_builder.rb +4 -1
- data/motion-prime/models/_association_mixin.rb +139 -0
- data/motion-prime/models/_base_mixin.rb +184 -0
- data/motion-prime/models/_dirty_mixin.rb +31 -0
- data/motion-prime/models/_finder_mixin.rb +208 -0
- data/motion-prime/models/{bag.rb → _nano_bag_mixin.rb} +4 -4
- data/motion-prime/models/{sync.rb → _sync_mixin.rb} +75 -76
- data/motion-prime/models/json.rb +6 -9
- data/motion-prime/models/model.rb +24 -172
- data/motion-prime/{mp.rb → prime.rb} +0 -1
- data/motion-prime/screens/_base_mixin.rb +9 -10
- data/motion-prime/screens/_navigation_mixin.rb +12 -17
- data/motion-prime/screens/extensions/_indicators_mixin.rb +1 -1
- data/motion-prime/screens/extensions/_navigation_bar_mixin.rb +3 -3
- data/motion-prime/screens/{base_screen.rb → screen.rb} +11 -5
- data/motion-prime/sections/_cell_section_mixin.rb +13 -0
- data/motion-prime/sections/_draw_section_mixin.rb +17 -0
- data/motion-prime/sections/base_section.rb +51 -16
- data/motion-prime/sections/form/base_field_section.rb +27 -16
- data/motion-prime/sections/form/base_header_section.rb +4 -3
- data/motion-prime/sections/form/password_field_section.rb +4 -0
- data/motion-prime/sections/form/select_field_section.rb +4 -0
- data/motion-prime/sections/form/string_field_section.rb +4 -0
- data/motion-prime/sections/form/submit_field_section.rb +4 -0
- data/motion-prime/sections/form/text_field_section.rb +4 -0
- data/motion-prime/sections/form.rb +7 -1
- data/motion-prime/sections/tabbed.rb +1 -1
- data/motion-prime/sections/table/table_delegate.rb +5 -0
- data/motion-prime/sections/table.rb +71 -51
- data/motion-prime/services/logger.rb +37 -0
- data/motion-prime/support/mp_cell_with_section.rb +9 -4
- data/motion-prime/support/tab_bar_controller.rb +2 -1
- data/motion-prime/version.rb +1 -1
- data/motion-prime/views/layout.rb +1 -1
- data/motion-prime/views/view_builder.rb +7 -0
- data/motion-prime.gemspec +1 -1
- data/spec/delegate/{base_delegate_spec.rb → delegate_spec.rb} +1 -1
- data/spec/helpers/{base_delegate.rb → delegates.rb} +0 -0
- data/spec/helpers/models.rb +11 -18
- data/spec/helpers/{base_screen.rb → screens.rb} +1 -1
- data/spec/models/{association_spec.rb → associations_spec.rb} +1 -1
- data/spec/models/bag_spec.rb +1 -1
- data/spec/models/errors_spec.rb +1 -1
- data/spec/models/finder_spec.rb +1 -1
- data/spec/models/json.rb +87 -0
- data/spec/models/model_spec.rb +23 -3
- data/spec/models/store_extension_spec.rb +1 -1
- data/spec/models/store_spec.rb +1 -1
- data/spec/screens/{base_screen_spec.rb → screen_spec.rb} +5 -1
- metadata +52 -43
- data/motion-prime/models/association.rb +0 -134
- data/motion-prime/models/base.rb +0 -27
- data/motion-prime/models/finder.rb +0 -202
- data/motion-prime/screens/sidebar_container_screen.rb +0 -80
@@ -0,0 +1,134 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
|
3
|
+
<html>
|
4
|
+
<head>
|
5
|
+
<title>sections.rb</title>
|
6
|
+
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
7
|
+
<meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
|
8
|
+
<link rel="stylesheet" media="all" href="docco.css" />
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
<div id="container">
|
12
|
+
<div id="background"></div>
|
13
|
+
|
14
|
+
<ul id="jump_to">
|
15
|
+
<li>
|
16
|
+
<a class="large" href="javascript:void(0);">Jump To …</a>
|
17
|
+
<a class="small" href="javascript:void(0);">+</a>
|
18
|
+
<div id="jump_wrapper">
|
19
|
+
<div id="jump_page">
|
20
|
+
|
21
|
+
|
22
|
+
<a class="source" href="getting_started.html">
|
23
|
+
getting_started.rb
|
24
|
+
</a>
|
25
|
+
|
26
|
+
|
27
|
+
<a class="source" href="screens.html">
|
28
|
+
screens.rb
|
29
|
+
</a>
|
30
|
+
|
31
|
+
|
32
|
+
<a class="source" href="sections.html">
|
33
|
+
sections.rb
|
34
|
+
</a>
|
35
|
+
|
36
|
+
</div>
|
37
|
+
</li>
|
38
|
+
</ul>
|
39
|
+
|
40
|
+
<ul class="sections">
|
41
|
+
|
42
|
+
<li id="title">
|
43
|
+
<div class="annotation">
|
44
|
+
<h1>sections.rb</h1>
|
45
|
+
</div>
|
46
|
+
</li>
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
<li id="section-1">
|
51
|
+
<div class="annotation">
|
52
|
+
|
53
|
+
<div class="pilwrap ">
|
54
|
+
<a class="pilcrow" href="#section-1">¶</a>
|
55
|
+
</div>
|
56
|
+
<p><strong> What is a Section? </strong></p>
|
57
|
+
<p>"Section" is something like "partial" which you may know from RubyOnRails.
|
58
|
+
In the first look it's just a list of elements which will be added to the "Screen".
|
59
|
+
But the magic is inside.
|
60
|
+
When you add "Element" to a "Section", e.g. image or label,
|
61
|
+
it will try to draw it using CALayer/CGContext/etc, instead of adding new UIView.
|
62
|
+
That way increases application speed (especially on Table elements) by 5-10 times.</p>
|
63
|
+
<p>Let's get started.</p>
|
64
|
+
|
65
|
+
</div>
|
66
|
+
|
67
|
+
<div class="content"><div class='highlight'><pre>---</pre></div></div>
|
68
|
+
|
69
|
+
</li>
|
70
|
+
|
71
|
+
|
72
|
+
<li id="section-2">
|
73
|
+
<div class="annotation">
|
74
|
+
|
75
|
+
<div class="pilwrap ">
|
76
|
+
<a class="pilcrow" href="#section-2">¶</a>
|
77
|
+
</div>
|
78
|
+
<p><strong> Create a section. </strong></p>
|
79
|
+
<p>Just inherit it from <code>Prime::Section</code>.</p>
|
80
|
+
|
81
|
+
</div>
|
82
|
+
|
83
|
+
<div class="content"><div class='highlight'><pre><span class="class"><span class="keyword">class</span> <span class="title">FooSection</span> <span class="inheritance">< <span class="parent">Prime::Section</span></span></span>
|
84
|
+
<span class="keyword">end</span></pre></div></div>
|
85
|
+
|
86
|
+
</li>
|
87
|
+
|
88
|
+
|
89
|
+
<li id="section-3">
|
90
|
+
<div class="annotation">
|
91
|
+
|
92
|
+
<div class="pilwrap ">
|
93
|
+
<a class="pilcrow" href="#section-3">¶</a>
|
94
|
+
</div>
|
95
|
+
<p><strong> Add some elements to the section. </strong></p>
|
96
|
+
<p>Each element should have name and type: "image", "label", "button", etc.
|
97
|
+
When you send <code>:text</code> option, type will be "label" by default.
|
98
|
+
When you send <code>:image</code> option, type will be "image" by default.</p>
|
99
|
+
|
100
|
+
</div>
|
101
|
+
|
102
|
+
<div class="content"><div class='highlight'><pre><span class="class"><span class="keyword">class</span> <span class="title">FooSection</span> <span class="inheritance">< <span class="parent">Prime::Section</span></span></span>
|
103
|
+
element <span class="symbol">:welcome</span>, <span class="symbol">text:</span> <span class="string">'Hello World!'</span>
|
104
|
+
element <span class="symbol">:avatar</span>, <span class="symbol">image:</span> <span class="string">'images/users/avatar.jpg'</span>
|
105
|
+
element <span class="symbol">:cheer</span>, <span class="symbol">type:</span> <span class="symbol">:button</span>
|
106
|
+
<span class="keyword">end</span></pre></div></div>
|
107
|
+
|
108
|
+
</li>
|
109
|
+
|
110
|
+
|
111
|
+
<li id="section-4">
|
112
|
+
<div class="annotation">
|
113
|
+
|
114
|
+
<div class="pilwrap ">
|
115
|
+
<a class="pilcrow" href="#section-4">¶</a>
|
116
|
+
</div>
|
117
|
+
<p><strong> Render Section in Screen </strong></p>
|
118
|
+
<p>NOTE: You must send "screen" option on section initialization.</p>
|
119
|
+
|
120
|
+
</div>
|
121
|
+
|
122
|
+
<div class="content"><div class='highlight'><pre><span class="class"><span class="keyword">class</span> <span class="title">FooScreen</span> <span class="inheritance">< <span class="parent">Prime::Screen</span></span></span>
|
123
|
+
<span class="function"><span class="keyword">def</span> <span class="title">render</span></span>
|
124
|
+
<span class="variable">@main_section</span> = <span class="constant">FooSection</span>.new(<span class="symbol">screen:</span> <span class="keyword">self</span>)
|
125
|
+
<span class="variable">@main_section</span>.render
|
126
|
+
<span class="keyword">end</span>
|
127
|
+
<span class="keyword">end</span></pre></div></div>
|
128
|
+
|
129
|
+
</li>
|
130
|
+
|
131
|
+
</ul>
|
132
|
+
</div>
|
133
|
+
</body>
|
134
|
+
</html>
|
data/files/Gemfile
CHANGED
@@ -5,4 +5,10 @@ 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.
|
8
|
+
gem 'motion-prime', '~> 0.5.0.beta', path: '../'
|
9
|
+
|
10
|
+
# add reside menu for sidebar support
|
11
|
+
gem 'prime_reside_menu', '~> 0.1.0'
|
12
|
+
|
13
|
+
# or add sliding menu for sidebar support
|
14
|
+
# gem 'prime_sliding_menu', '~> 0.1.0'
|
data/files/Gemfile.lock
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ../
|
3
|
+
specs:
|
4
|
+
motion-prime (0.5.0.beta)
|
5
|
+
bubble-wrap
|
6
|
+
cocoapods
|
7
|
+
methadone
|
8
|
+
motion-cocoapods
|
9
|
+
motion-require
|
10
|
+
motion-support
|
11
|
+
sugarcube
|
12
|
+
|
1
13
|
GEM
|
2
14
|
remote: http://rubygems.org/
|
3
15
|
specs:
|
@@ -32,20 +44,16 @@ GEM
|
|
32
44
|
bundler
|
33
45
|
motion-cocoapods (1.4.0)
|
34
46
|
cocoapods (>= 0.26.2)
|
35
|
-
motion-prime (0.4.4)
|
36
|
-
bubble-wrap
|
37
|
-
cocoapods
|
38
|
-
methadone
|
39
|
-
motion-cocoapods
|
40
|
-
motion-require
|
41
|
-
motion-support
|
42
|
-
sugarcube
|
43
47
|
motion-require (0.0.7)
|
44
48
|
motion-support (0.2.5)
|
45
49
|
motion-require (>= 0.0.6)
|
46
50
|
multi_json (1.8.2)
|
47
51
|
nap (0.6.0)
|
48
52
|
open4 (1.3.0)
|
53
|
+
prime_reside_menu (0.1.0)
|
54
|
+
cocoapods
|
55
|
+
motion-cocoapods
|
56
|
+
motion-require
|
49
57
|
rake (10.1.1)
|
50
58
|
sugarcube (1.3.11)
|
51
59
|
xcodeproj (0.14.1)
|
@@ -59,6 +67,7 @@ PLATFORMS
|
|
59
67
|
DEPENDENCIES
|
60
68
|
bubble-wrap (~> 1.3.0)
|
61
69
|
motion-cocoapods (~> 1.4.0)
|
62
|
-
motion-prime (~> 0.
|
70
|
+
motion-prime (~> 0.5.0.beta)!
|
63
71
|
motion-support (~> 0.2.4)
|
72
|
+
prime_reside_menu (~> 0.1.0)
|
64
73
|
sugarcube (~> 1.3.7)
|
data/files/Rakefile
CHANGED
@@ -6,21 +6,12 @@ require 'motion-cocoapods'
|
|
6
6
|
require 'bundler'
|
7
7
|
Bundler.require
|
8
8
|
require 'sugarcube-common'
|
9
|
+
require 'bubble-wrap/reactor'
|
9
10
|
require 'motion-prime'
|
10
11
|
|
11
12
|
Motion::Project::App.setup do |app|
|
12
13
|
# Use `rake config' to see complete project settings.
|
13
|
-
app.name = '
|
14
|
-
|
15
|
-
app.pods do
|
16
|
-
pod 'NanoStore', '~> 2.7.7'
|
17
|
-
pod 'SDWebImage'
|
18
|
-
pod 'SVPullToRefresh'
|
19
|
-
pod 'MBAlertView'
|
20
|
-
pod 'SDSegmentedControl'
|
21
|
-
pod 'RESideMenu', git: 'https://github.com/feklistov/RESideMenu.git'
|
22
|
-
pod 'MBProgressHUD'
|
23
|
-
end
|
14
|
+
app.name = 'Prime Project'
|
24
15
|
|
25
16
|
app.version = '0.0.1'
|
26
17
|
app.icons = %w{Icon.png}
|
data/files/app/app_delegate.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
class AppDelegate < Prime::BaseAppDelegate
|
2
2
|
def on_load(app, options)
|
3
3
|
setup_navigation_styles
|
4
|
-
open_screen HomeScreen.new
|
4
|
+
open_screen HomeScreen.new, sidebar: SidebarScreen.new(navigation: false)
|
5
5
|
end
|
6
6
|
|
7
7
|
def setup_navigation_styles
|
@@ -9,7 +9,7 @@ class AppDelegate < Prime::BaseAppDelegate
|
|
9
9
|
bar_appearance.barTintColor = Prime::Config.color.dark.uicolor
|
10
10
|
|
11
11
|
settings = {
|
12
|
-
UITextAttributeFont =>
|
12
|
+
UITextAttributeFont => Prime::Config.font.name.uifont(17),
|
13
13
|
UITextAttributeTextColor => :white.uicolor
|
14
14
|
}
|
15
15
|
bar_appearance.setTitleTextAttributes(settings)
|
data/files/app/config/base.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
class ApplicationScreen < Prime::
|
1
|
+
class ApplicationScreen < Prime::Screen
|
2
2
|
before_load :setup_navigation
|
3
3
|
|
4
4
|
def setup_navigation
|
5
|
-
set_navigation_left_button 'menu', image: 'images/menu_button.png', action: :
|
5
|
+
set_navigation_left_button 'menu', image: 'images/menu_button.png', action: :toggle_sidebar
|
6
6
|
end
|
7
7
|
end
|
@@ -1,14 +1,14 @@
|
|
1
|
-
class SidebarScreen < Prime::
|
1
|
+
class SidebarScreen < Prime::Screen
|
2
2
|
def render
|
3
3
|
@main_section = SidebarTableSection.new(screen: self)
|
4
4
|
@main_section.render
|
5
5
|
end
|
6
6
|
|
7
7
|
def open_home
|
8
|
-
open_screen HomeScreen.new
|
8
|
+
app_delegate.open_screen HomeScreen.new
|
9
9
|
end
|
10
10
|
|
11
11
|
def open_help
|
12
|
-
open_screen HelpScreen.new
|
12
|
+
app_delegate.open_screen HelpScreen.new
|
13
13
|
end
|
14
14
|
end
|
data/files/app/styles/sidebar.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
Prime::Styles.define :sidebar do
|
2
2
|
style :screen,
|
3
3
|
background_color: proc { Prime::Config.color.dark }
|
4
|
+
|
4
5
|
style :table,
|
5
6
|
top: 150,
|
6
7
|
left: 0,
|
@@ -14,10 +15,9 @@ Prime::Styles.define :sidebar do
|
|
14
15
|
|
15
16
|
style :action_title,
|
16
17
|
text_color: :white,
|
18
|
+
left: 20,
|
17
19
|
top: 10,
|
18
20
|
width: 320,
|
19
21
|
font: proc { :system.uifont(20) },
|
20
|
-
size_to_fit: true
|
21
|
-
left: 20,
|
22
|
-
text_color: :white
|
22
|
+
size_to_fit: true
|
23
23
|
end
|
data/lib/motion-prime.rb
CHANGED
@@ -4,4 +4,13 @@ Motion::Require.all(Dir.glob(File.expand_path('../../motion-prime/**/*.rb', __FI
|
|
4
4
|
|
5
5
|
Motion::Project::App.setup do |app|
|
6
6
|
app.detect_dependencies = false
|
7
|
+
|
8
|
+
app.pods do
|
9
|
+
pod 'NanoStore', '~> 2.7.7'
|
10
|
+
pod 'SDWebImage'
|
11
|
+
pod 'SVPullToRefresh'
|
12
|
+
pod 'MBAlertView'
|
13
|
+
pod 'SDSegmentedControl'
|
14
|
+
pod 'MBProgressHUD'
|
15
|
+
end
|
7
16
|
end
|
data/motion-prime/api_client.rb
CHANGED
@@ -6,7 +6,7 @@ class ApiClient
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def parse_json(text)
|
9
|
-
|
9
|
+
Prime::JSON.parse(text)
|
10
10
|
rescue
|
11
11
|
NSLog("Can't parse json: #{text}")
|
12
12
|
false
|
@@ -51,6 +51,10 @@ class ApiClient
|
|
51
51
|
"#{MotionPrime::Config.api.base}/api/v1#{path}"
|
52
52
|
end
|
53
53
|
|
54
|
+
def page_url(path)
|
55
|
+
"#{MotionPrime::Config.api.base}/#{path}"
|
56
|
+
end
|
57
|
+
|
54
58
|
def resource_url(path)
|
55
59
|
# return if path.blank?
|
56
60
|
base = Prime::Config.api.resource_base.present? ? Prime::Config.api.resource_base : Prime::Config.api.base
|
@@ -1,9 +1,10 @@
|
|
1
1
|
motion_require './helpers/has_authorization'
|
2
|
+
motion_require './helpers/has_class_factory'
|
2
3
|
module MotionPrime
|
3
4
|
class BaseAppDelegate
|
4
|
-
include
|
5
|
+
include HasAuthorization
|
5
6
|
|
6
|
-
attr_accessor :window
|
7
|
+
attr_accessor :window
|
7
8
|
|
8
9
|
def application(application, willFinishLaunchingWithOptions:opts)
|
9
10
|
application.setStatusBarStyle UIStatusBarStyleLightContent
|
@@ -15,60 +16,33 @@ module MotionPrime
|
|
15
16
|
true
|
16
17
|
end
|
17
18
|
|
18
|
-
def
|
19
|
-
|
19
|
+
def application(application, didRegisterForRemoteNotificationsWithDeviceToken: token)
|
20
|
+
on_apn_register_success(application, token)
|
20
21
|
end
|
21
|
-
|
22
|
-
|
23
|
-
screen = create_tab_bar(screen) if screen.is_a?(Array)
|
24
|
-
if options[:sidebar]
|
25
|
-
open_with_sidebar(screen, options.delete(:sidebar), options)
|
26
|
-
elsif options[:root] || !self.window
|
27
|
-
open_root_screen(screen)
|
28
|
-
else
|
29
|
-
open_content_screen(screen)
|
30
|
-
end
|
22
|
+
def application(application, didFailToRegisterForRemoteNotificationsWithError: error)
|
23
|
+
on_apn_register_fail(application, error)
|
31
24
|
end
|
32
25
|
|
33
|
-
|
34
|
-
def open_root_screen(screen)
|
35
|
-
screen.send(:on_screen_load) if screen.respond_to?(:on_screen_load)
|
36
|
-
screen.wrap_in_navigation if screen.respond_to?(:wrap_in_navigation)
|
37
|
-
|
38
|
-
screen = screen.main_controller if screen.respond_to?(:main_controller)
|
39
|
-
|
40
|
-
self.window ||= UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
|
41
|
-
self.window.rootViewController = screen
|
42
|
-
self.window.makeKeyAndVisible
|
43
|
-
screen
|
44
|
-
end
|
45
|
-
|
46
|
-
# TODO: move to private methods
|
47
|
-
def open_content_screen(screen)
|
48
|
-
if sidebar?
|
49
|
-
sidebar_container.content_controller = screen
|
50
|
-
else
|
51
|
-
open_root_screen(screen)
|
52
|
-
end
|
26
|
+
def on_load(application, launch_options)
|
53
27
|
end
|
54
28
|
|
55
|
-
|
56
|
-
def open_with_sidebar(content, sidebar, options={})
|
57
|
-
self.sidebar_container = SidebarContainerScreen.new(sidebar, content, options)
|
58
|
-
self.sidebar_container.delegate = self
|
59
|
-
open_root_screen(sidebar_container)
|
29
|
+
def on_apn_register_success(application, token)
|
60
30
|
end
|
61
31
|
|
62
|
-
def
|
63
|
-
self.window && self.window.rootViewController.is_a?(SidebarContainerScreen)
|
32
|
+
def on_apn_register_fail(application, error)
|
64
33
|
end
|
65
34
|
|
66
|
-
def
|
67
|
-
|
35
|
+
def app_window
|
36
|
+
self.app_delegate.window
|
68
37
|
end
|
69
38
|
|
70
|
-
def
|
71
|
-
|
39
|
+
def open_screen(screen, options = {})
|
40
|
+
screen = prepare_screen_for_open(screen, options)
|
41
|
+
if options[:root] || !self.window
|
42
|
+
open_root_screen(screen)
|
43
|
+
else
|
44
|
+
open_content_screen(screen)
|
45
|
+
end
|
72
46
|
end
|
73
47
|
|
74
48
|
def current_user
|
@@ -84,6 +58,27 @@ module MotionPrime
|
|
84
58
|
end
|
85
59
|
|
86
60
|
private
|
61
|
+
def prepare_screen_for_open(screen, options = {})
|
62
|
+
screen = create_tab_bar(screen) if screen.is_a?(Array)
|
63
|
+
Screen.create_with_options(screen, true, options)
|
64
|
+
end
|
65
|
+
|
66
|
+
def open_root_screen(screen, options = {})
|
67
|
+
screen.send(:on_screen_load) if screen.respond_to?(:on_screen_load)
|
68
|
+
screen.wrap_in_navigation if screen.respond_to?(:wrap_in_navigation)
|
69
|
+
|
70
|
+
screen = screen.main_controller if screen.respond_to?(:main_controller)
|
71
|
+
|
72
|
+
self.window ||= UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
|
73
|
+
self.window.rootViewController = screen
|
74
|
+
self.window.makeKeyAndVisible
|
75
|
+
screen
|
76
|
+
end
|
77
|
+
|
78
|
+
def open_content_screen(screen, options = {})
|
79
|
+
open_root_screen(screen)
|
80
|
+
end
|
81
|
+
|
87
82
|
def create_tab_bar(screens)
|
88
83
|
MotionPrime::TabBarController.new(screens)
|
89
84
|
end
|
@@ -10,4 +10,12 @@ class Kernel
|
|
10
10
|
def weak_ref
|
11
11
|
WeakRef.new(self)
|
12
12
|
end
|
13
|
+
|
14
|
+
def clear_instance_variables(options = {})
|
15
|
+
ivars = self.instance_variables.clone
|
16
|
+
ivars.each do |ivar|
|
17
|
+
next if Array.wrap(options[:except]).include?(ivar[1..-1])
|
18
|
+
self.instance_variable_set(ivar, nil)
|
19
|
+
end
|
20
|
+
end
|
13
21
|
end
|
@@ -70,8 +70,10 @@ module MotionPrime
|
|
70
70
|
input_value_text.blank? ? input_placeholder_text : input_value_text
|
71
71
|
end
|
72
72
|
|
73
|
+
# TODO: normalize_object will not be required after refactoring computed options.
|
73
74
|
def input_content_font
|
74
|
-
input_value_text.blank? ? computed_options[:placeholder_font] : computed_options[:font]
|
75
|
+
font = input_value_text.blank? ? computed_options[:placeholder_font] : computed_options[:font]
|
76
|
+
normalize_object(font, section || self)
|
75
77
|
end
|
76
78
|
|
77
79
|
def input_value_text
|
@@ -42,7 +42,7 @@ module MotionPrime
|
|
42
42
|
attributes[NSForegroundColorAttributeName] = options[:text_color]
|
43
43
|
attributes[NSFontAttributeName] = options[:font]
|
44
44
|
|
45
|
-
prepared_text = NSMutableAttributedString.alloc.initWithString(options[:text], attributes: attributes)
|
45
|
+
prepared_text = NSMutableAttributedString.alloc.initWithString(options[:text] || '', attributes: attributes)
|
46
46
|
if underline_range = options[:underline]
|
47
47
|
# FIXME
|
48
48
|
# prepared_text = NSMutableAttributedString.alloc.initWithAttributedString(prepared_text)
|
@@ -28,10 +28,10 @@ module MotionPrime
|
|
28
28
|
@view_name = self.class_name_without_kvo.demodulize.underscore.gsub(/(_draw)?_element/, '')
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
31
|
+
def dealloc
|
32
|
+
# pp 'deallocating elemenet', self.name, self.to_s, view_class, view.try(:to_s)
|
33
|
+
super
|
34
|
+
end
|
35
35
|
|
36
36
|
def add_target(target = nil, action = 'on_click:', event = :touch)
|
37
37
|
return false unless self.view
|
@@ -153,7 +153,8 @@ module MotionPrime
|
|
153
153
|
# table element: categories_table_cell_icon, categories_table_title_icon
|
154
154
|
@styles += build_styles_chain(base_styles[:specific], suffixes[:specific])
|
155
155
|
end
|
156
|
-
|
156
|
+
# don't use present? here, it's slower, while this method should be very fast
|
157
|
+
if section && section.name && section.name != '' && name && name != ''
|
157
158
|
# using for base sections
|
158
159
|
@styles << [section.name, name].join('_').to_sym
|
159
160
|
end
|
@@ -4,6 +4,11 @@ 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
|
+
|
7
12
|
def draw_options
|
8
13
|
image = image_data || computed_options[:image]
|
9
14
|
image ||= computed_options[:default] if computed_options[:url]
|
@@ -72,7 +77,7 @@ module MotionPrime
|
|
72
77
|
options: 0,
|
73
78
|
progress: lambda{ |r_size, e_size| },
|
74
79
|
completed: lambda{ |image, error, type, finished|
|
75
|
-
break
|
80
|
+
break if @break_async_block || !image
|
76
81
|
self.image_data = image
|
77
82
|
|
78
83
|
section.cached_draw_image = nil
|
@@ -5,7 +5,10 @@ module MotionPrime
|
|
5
5
|
[*base_styles].each do |base_style|
|
6
6
|
[*suffixes].each do |suffix|
|
7
7
|
components = []
|
8
|
-
|
8
|
+
# don't use present? here, it's slower, while this method should be very fast
|
9
|
+
if base_style && base_style != '' && suffix && suffix != ''
|
10
|
+
styles << [base_style.to_s, suffix.to_s].join('_').to_sym
|
11
|
+
end
|
9
12
|
end
|
10
13
|
end
|
11
14
|
styles
|