motion-prime 0.4.5 → 0.5.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 +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
|