motion-prime 0.7.2 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG.md +7 -0
- data/Gemfile.lock +1 -1
- data/README.md +8 -9
- data/ROADMAP.md +4 -5
- data/bin/prime +19 -14
- data/files/Rakefile +0 -1
- data/files/app/app_delegate.rb +0 -12
- data/files/app/config/base.rb +1 -12
- data/files/app/screens/application.rb +1 -5
- data/files/app/sections/.gitkeep +0 -0
- data/files/app/styles/.gitkeep +0 -0
- data/files/resources/Default-568h@2x.png +0 -0
- data/files/resources/Default.png +0 -0
- data/files/resources/Default@2x.png +0 -0
- data/motion-prime/api_client.rb +2 -1
- data/motion-prime/config/base.rb +8 -3
- data/motion-prime/config/config.rb +18 -0
- data/motion-prime/elements/_text_mixin.rb +0 -4
- data/motion-prime/elements/base_element.rb +64 -51
- data/motion-prime/elements/draw/image.rb +3 -2
- data/motion-prime/elements/draw/label.rb +9 -2
- data/motion-prime/helpers/has_search_bar.rb +10 -1
- data/motion-prime/screens/_base_mixin.rb +1 -1
- data/motion-prime/screens/_sections_mixin.rb +8 -4
- data/motion-prime/sections/__section_with_container_mixin.rb +52 -0
- data/motion-prime/sections/_cell_section_mixin.rb +7 -21
- data/motion-prime/sections/_delegate_mixin.rb +12 -0
- data/motion-prime/sections/_draw_section_mixin.rb +4 -21
- data/motion-prime/sections/base_section.rb +7 -7
- data/motion-prime/sections/form.rb +7 -0
- data/motion-prime/sections/form/base_field_section.rb +9 -0
- data/motion-prime/sections/form/date_field_section.rb +1 -1
- data/motion-prime/sections/form/form_delegate.rb +0 -1
- data/motion-prime/sections/form/password_field_section.rb +1 -1
- data/motion-prime/sections/form/select_field_section.rb +1 -1
- data/motion-prime/sections/form/string_field_section.rb +1 -1
- data/motion-prime/sections/form/submit_field_section.rb +1 -1
- data/motion-prime/sections/form/switch_field_section.rb +1 -1
- data/motion-prime/sections/form/text_field_section.rb +1 -1
- data/motion-prime/sections/tabbed.rb +7 -0
- data/motion-prime/sections/table.rb +20 -7
- data/motion-prime/sections/table/table_delegate.rb +1 -9
- data/motion-prime/styles/base.rb +1 -1
- data/motion-prime/styles/form.rb +7 -7
- data/motion-prime/version.rb +1 -1
- data/motion-prime/views/layout.rb +4 -2
- metadata +6 -14
- data/files/app/screens/help.rb +0 -6
- data/files/app/screens/home.rb +0 -8
- data/files/app/screens/sidebar.rb +0 -14
- data/files/app/sections/home/section.rb +0 -3
- data/files/app/sections/sidebar/action.rb +0 -5
- data/files/app/sections/sidebar/table.rb +0 -20
- data/files/app/styles/home.rb +0 -9
- data/files/resources/fonts/ubuntu.ttf +0 -0
- data/files/resources/images/arrow.png +0 -0
- data/files/resources/images/menu_button.png +0 -0
- data/files/resources/images/menu_button@2x.png +0 -0
- data/motion-prime/styles/sidebar.rb +0 -23
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OGVhYzU1YWVlZDBhZTZlMzhkY2VjYjA0Y2ZiMGM4YjAyZTQyZDIyZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NmFkNjhlMzIyYWRlNzdkYzUxM2VlZGE4ZWZjNDYzYmIwYThhOTZmZQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MTJhOGI3ZTNkMzNlY2E4ZTI5Yzk1ZDNlZTYyNTRiNTM4ZjU4NGY2ZDlhOWRk
|
10
|
+
ZGNlNjlhM2FlMDcxNmQ3YWI2Zjk4ZmE5MzY2OTY0ZjRiOTQ5YTU2ODY3YTY4
|
11
|
+
OGYxZmJlN2E4M2MyMjA4MjllODRmNDYyNTFiMGY2NGIyZTYwNTA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MzczYzhkMjM0ZmJjYmExZTcxZTE0ZTExNzFkNDliNDg4NGFjYWFlNTdiOGVk
|
14
|
+
ODE4MzI1OGMxNmI1MDE1NGU0NjEyODY2YWNjMDQ3Zjg0Mjc3ZmVmNTQ4OWE3
|
15
|
+
YzQ0YmU5YjFiNjg3ODIyYTE0ODI4MTBkMDM2MjQ0NjhjY2Q3MDU=
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
=== 0.8.0
|
2
|
+
* Simpler syntax for using fonts. See prime_bootstrap.
|
3
|
+
* All style things moved from default prime template to bootstrap template.
|
4
|
+
* Removed root :title option support for submit field.
|
5
|
+
* Use field name as label text by default.
|
6
|
+
* Bug fixes.
|
7
|
+
|
1
8
|
=== 0.7.2
|
2
9
|
* Added simpler syntax for rendering sections in screen. E.g. section :my_profile.
|
3
10
|
* Bug fixes.
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# MotionPrime [![Build Status](https://travis-ci.org/droidlabs/motion-prime.png)](https://travis-ci.org/droidlabs/motion-prime) [![Code Climate](https://codeclimate.com/github/droidlabs/motion-prime.png)](https://codeclimate.com/github/droidlabs/motion-prime) [![Roadchange](https://roadchange.com/droidlabs/motion-prime/badge.png)](https://roadchange.com/droidlabs/motion-prime)
|
2
2
|
|
3
|
-
![Prime](https://s3
|
3
|
+
![Prime](https://s3.amazonaws.com/motionprime/logo-1.png)
|
4
4
|
|
5
5
|
MotionPrime is yet another framework written on RubyMotion for creating really fast iOS applications.
|
6
6
|
|
@@ -15,14 +15,13 @@ MotionPrime is yet another framework written on RubyMotion for creating really f
|
|
15
15
|
|
16
16
|
$ gem install motion-prime
|
17
17
|
|
18
|
-
### 2. Create MotionPrime project:
|
18
|
+
### 2. Create empty MotionPrime project:
|
19
19
|
|
20
20
|
$ prime new myapp
|
21
21
|
|
22
|
-
### 3.
|
22
|
+
### 3. Or create bootstrap MotionPrime project:
|
23
23
|
|
24
|
-
$
|
25
|
-
$ rake pod:install
|
24
|
+
$ prime bootstrap myapp
|
26
25
|
|
27
26
|
### 4. Run application
|
28
27
|
|
@@ -64,13 +63,13 @@ MotionPrime is yet another framework written on RubyMotion for creating really f
|
|
64
63
|
|
65
64
|
## Extensions
|
66
65
|
|
67
|
-
* [ECSlidingViewController 2 integration](https://github.com/
|
68
|
-
* [RESideMenu integration](https://github.com/
|
69
|
-
* [Sliding actions support](https://github.com/
|
66
|
+
* [ECSlidingViewController 2 integration](https://github.com/motionprime/prime_sliding_menu) (Sidebar)
|
67
|
+
* [RESideMenu integration](https://github.com/motionprime/prime_reside_menu) (Sidebar)
|
68
|
+
* [Sliding actions support](https://github.com/motionprime/prime_sliding_action)
|
70
69
|
|
71
70
|
## Samples
|
72
71
|
|
73
|
-
* [Simple to-do app](https://github.com/
|
72
|
+
* [Simple to-do app](https://github.com/motionprime/prime_sample_todo)
|
74
73
|
|
75
74
|
## Documentation
|
76
75
|
|
data/ROADMAP.md
CHANGED
@@ -1,15 +1,13 @@
|
|
1
|
-
=== 0.8.
|
2
|
-
* add cell preload for reverse scrolling table.
|
3
|
-
* deprecate root level :title option for submit field
|
1
|
+
=== 0.8.1
|
4
2
|
* rename submit element in submit field to button element
|
5
3
|
* rename date_picker element in date_picker field to input element
|
6
|
-
* add more and better default options for fields
|
7
4
|
* Rename model to data in sections.
|
8
5
|
|
9
6
|
=== 0.9.0
|
10
7
|
* bug: if mp label do not have text and was set as hidden, it should unhide after setting text
|
11
8
|
* bug: size_to_fit works incorrect with relative width.
|
12
|
-
*
|
9
|
+
* bug: bind_keyboard_close breaks bind_guesture
|
10
|
+
* add clone to models to prevent problems when bag_key is overrided
|
13
11
|
* add dsl for push notifications
|
14
12
|
* add some extensions/middleware system, at least for networking.
|
15
13
|
* create "display_network_error" extension.
|
@@ -20,6 +18,7 @@
|
|
20
18
|
* add sections/screens/models generator
|
21
19
|
|
22
20
|
=== 1.1.0
|
21
|
+
* add cell preload for reverse scrolling table.
|
23
22
|
* add computed_options.get(), this will allow to make sure that options is computed.
|
24
23
|
* add testing framework
|
25
24
|
* add DSL for ViewStyles#setValue conditions
|
data/bin/prime
CHANGED
@@ -11,7 +11,8 @@ class App
|
|
11
11
|
|
12
12
|
main do |command, opt|
|
13
13
|
case command.to_sym
|
14
|
-
when :new then
|
14
|
+
when :new then create_base(opt)
|
15
|
+
when :bootstrap then create_bootstrap(opt)
|
15
16
|
else help
|
16
17
|
end
|
17
18
|
0
|
@@ -24,14 +25,22 @@ class App
|
|
24
25
|
info " Creates a new MotionPrime app from a template."
|
25
26
|
end
|
26
27
|
|
27
|
-
def self.
|
28
|
+
def self.create_base(name)
|
29
|
+
create(name, "motion-prime", "git://github.com/droidlabs/motion-prime.git")
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.create_bootstrap(name)
|
33
|
+
create(name, "prime_bootstrap", "git://github.com/motionprime/prime_bootstrap.git")
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.create(name, template_name, repo)
|
28
37
|
return puts "Usage: prime new <appname>" unless name.to_s.length > 0
|
29
38
|
info "Creating new MotionPrime iOS app: #{name}"
|
30
39
|
if false
|
31
|
-
sh "motion create #{name} --template
|
40
|
+
sh "motion create #{name} --template=#{repo}"
|
32
41
|
else
|
33
|
-
clone_template
|
34
|
-
sh "motion create #{name} --template
|
42
|
+
clone_template(template_name, repo)
|
43
|
+
sh "motion create #{name} --template=#{template_name}"
|
35
44
|
end
|
36
45
|
info "Command: bundle instal"
|
37
46
|
sh "cd ./#{name}; bundle install"
|
@@ -45,20 +54,16 @@ class App
|
|
45
54
|
ENV['HOME'].split('/')[0..2].join('/')
|
46
55
|
end
|
47
56
|
|
48
|
-
def self.
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
def self.clone_template
|
53
|
-
path = File.expand_path(File.join(home_path, 'Library/RubyMotion/template', 'motion-prime'))
|
54
|
-
git_clone(path)
|
57
|
+
def self.clone_template(name, repo)
|
58
|
+
path = File.expand_path(File.join(home_path, 'Library/RubyMotion/template', name))
|
59
|
+
git_clone(path, repo)
|
55
60
|
end
|
56
61
|
|
57
|
-
def self.git_clone(path)
|
62
|
+
def self.git_clone(path, repo)
|
58
63
|
if File.exist?(path)
|
59
64
|
system("git --work-tree=#{path} --git-dir=#{path}/.git pull origin master")
|
60
65
|
else
|
61
|
-
system("git clone #{
|
66
|
+
system("git clone #{repo} #{path}")
|
62
67
|
end
|
63
68
|
end
|
64
69
|
|
data/files/Rakefile
CHANGED
data/files/app/app_delegate.rb
CHANGED
@@ -1,17 +1,5 @@
|
|
1
1
|
class AppDelegate < Prime::BaseAppDelegate
|
2
2
|
def on_load(app, options)
|
3
|
-
setup_navigation_styles
|
4
3
|
open_screen :home, sidebar: true
|
5
4
|
end
|
6
|
-
|
7
|
-
def setup_navigation_styles
|
8
|
-
bar_appearance = UINavigationBar.appearance
|
9
|
-
bar_appearance.barTintColor = :app_dark.uicolor
|
10
|
-
|
11
|
-
settings = {
|
12
|
-
UITextAttributeFont => Prime::Config.font.name.uifont(17),
|
13
|
-
UITextAttributeTextColor => :white.uicolor
|
14
|
-
}
|
15
|
-
bar_appearance.setTitleTextAttributes(settings)
|
16
|
-
end
|
17
5
|
end
|
data/files/app/config/base.rb
CHANGED
@@ -1,14 +1,3 @@
|
|
1
1
|
Prime::Config.configure do |config|
|
2
|
-
|
3
|
-
colors.base = 0x3aa9b6
|
4
|
-
colors.dark = 0x41929c
|
5
|
-
end
|
6
|
-
|
7
|
-
config.font.name = "Ubuntu"
|
8
|
-
|
9
|
-
config.api_client do |api|
|
10
|
-
api.base = "http://example.com"
|
11
|
-
api.client_id = ""
|
12
|
-
api.client_secret = ""
|
13
|
-
end
|
2
|
+
|
14
3
|
end
|
File without changes
|
File without changes
|
Binary file
|
data/files/resources/Default.png
CHANGED
Binary file
|
Binary file
|
data/motion-prime/api_client.rb
CHANGED
@@ -59,7 +59,8 @@ class ApiClient
|
|
59
59
|
use_callback = block_given?
|
60
60
|
|
61
61
|
client_method = files.present? ? :"multipart_#{method}" : method
|
62
|
-
|
62
|
+
path = "#{config.api_namespace}#{path}" unless path.starts_with?('http')
|
63
|
+
AFMotion::Client.shared.send client_method, path, data do |response, form_data, progress|
|
63
64
|
if form_data && files.present?
|
64
65
|
files.each do |file_data|
|
65
66
|
form_data.appendPartWithFileData(file_data[:data], name: file_data[:name], fileName:"avatar.png", mimeType: "image/jpeg")
|
data/motion-prime/config/base.rb
CHANGED
@@ -5,9 +5,14 @@ MotionPrime::Config.configure do |config|
|
|
5
5
|
else
|
6
6
|
config.model.store_type = :file
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
|
+
config.fonts do |fonts|
|
10
|
+
fonts.base = :system
|
11
|
+
end
|
12
|
+
|
9
13
|
config.colors do |colors|
|
10
|
-
colors.base =
|
14
|
+
colors.base = 0x1b75bc
|
15
|
+
colors.dark = 0x333333
|
11
16
|
colors.error = 0xef471f
|
12
17
|
end
|
13
18
|
config.api_client do |api|
|
@@ -22,5 +27,5 @@ MotionPrime::Config.configure do |config|
|
|
22
27
|
end
|
23
28
|
config.prime.cell_section.mixins = [Prime::CellSectionMixin]
|
24
29
|
config.logger.level = :info
|
25
|
-
config.logger.dealloc_items = ['screen'
|
30
|
+
config.logger.dealloc_items = ['screen']
|
26
31
|
end
|
@@ -53,6 +53,7 @@ module MotionPrime
|
|
53
53
|
end
|
54
54
|
setup_models
|
55
55
|
setup_colors
|
56
|
+
setup_fonts
|
56
57
|
setup_logger
|
57
58
|
end
|
58
59
|
|
@@ -74,6 +75,23 @@ module MotionPrime
|
|
74
75
|
Symbol.css_colors.merge!(colors)
|
75
76
|
end
|
76
77
|
|
78
|
+
def setup_fonts
|
79
|
+
return unless @base_config
|
80
|
+
colors = @base_config.fonts.to_hash.inject({}) do |res, (font, value)|
|
81
|
+
if [:system, :bold, :italic, :monospace].include?(value)
|
82
|
+
value = Symbol.uifont[value]
|
83
|
+
end
|
84
|
+
unless font == :prefix
|
85
|
+
unless @base_config.fonts.prefix.nil?
|
86
|
+
res[:"#{@base_config.fonts.prefix}_#{font}"] = value
|
87
|
+
end
|
88
|
+
res[:"app_#{font}"] = value
|
89
|
+
end
|
90
|
+
res
|
91
|
+
end
|
92
|
+
Symbol.uifont.merge!(colors)
|
93
|
+
end
|
94
|
+
|
77
95
|
def setup_logger
|
78
96
|
Prime::Logger.level = @base_config.logger.level
|
79
97
|
Prime::Logger.dealloc_items = @base_config.logger.dealloc_items
|
@@ -22,10 +22,6 @@ module MotionPrime
|
|
22
22
|
NSDocumentTypeDocumentAttribute => NSHTMLTextDocumentType,
|
23
23
|
NSCharacterEncodingDocumentAttribute => NSNumber.numberWithInt(NSUTF8StringEncoding)
|
24
24
|
}
|
25
|
-
# DTCoreTextFontDescriptor.setOverrideFontName(Prime::Config.font.light, forFontFamily: 'Calibri', bold: false, italic: false)
|
26
|
-
# DTCoreTextFontDescriptor.setOverrideFontName(Prime::Config.font.bold, forFontFamily: 'Calibri', bold: true, italic: false)
|
27
|
-
# DTCoreTextFontDescriptor.setOverrideFontName(Prime::Config.font.light_italic, forFontFamily: 'Calibri', bold: false, italic: true)
|
28
|
-
# DTCoreTextFontDescriptor.setOverrideFontName(Prime::Config.font.bold_italic, forFontFamily: 'Calibri', bold: true, italic: true)
|
29
25
|
|
30
26
|
text = "#{options[:text]}<style>* { #{styles.join} }</style>"
|
31
27
|
NSAttributedString.alloc.initWithData(text.dataUsingEncoding(NSUTF8StringEncoding), options: html_options, documentAttributes: nil, error: nil)
|
@@ -29,10 +29,10 @@ module MotionPrime
|
|
29
29
|
@view_name = self.class_name_without_kvo.demodulize.underscore.gsub(/(_draw)?_element/, '')
|
30
30
|
end
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
def dealloc
|
33
|
+
Prime.logger.dealloc_message :element, self, self.name
|
34
|
+
super
|
35
|
+
end
|
36
36
|
|
37
37
|
def add_target(target = nil, action = 'on_click:', event = :touch)
|
38
38
|
return false unless self.view
|
@@ -111,53 +111,7 @@ module MotionPrime
|
|
111
111
|
|
112
112
|
@styles = []
|
113
113
|
if is_cell_section
|
114
|
-
|
115
|
-
suffixes = {common: [], specific: []}
|
116
|
-
|
117
|
-
# following example in Prime::TableSection#cell_styles
|
118
|
-
# form element/cell: <base|user>_form_field, <base|user>_form_string_field, user_form_field_email
|
119
|
-
# table element/cell: <base|categories>_table_cell, categories_table_title
|
120
|
-
if section.section_styles
|
121
|
-
section.section_styles.each { |type, values| base_styles[type] += values }
|
122
|
-
end
|
123
|
-
if %w[base table_view_cell].exclude?(@view_name)
|
124
|
-
# form element: _input
|
125
|
-
# table element: _image
|
126
|
-
suffixes[:common] << @view_name.to_sym
|
127
|
-
suffixes[:common] << :"#{@view_name}_with_errors" if has_errors
|
128
|
-
end
|
129
|
-
if name && name.to_s != @view_name
|
130
|
-
# form element: _input
|
131
|
-
# table element: _icon
|
132
|
-
suffixes[:specific] << name.to_sym
|
133
|
-
suffixes[:specific] << :"#{name}_with_errors" if has_errors
|
134
|
-
end
|
135
|
-
# form cell: base_form_field, base_form_string_field
|
136
|
-
# form element: base_form_field_string_field, base_form_string_field_text_field
|
137
|
-
# table cell: base_table_cell
|
138
|
-
# table element: base_table_cell_image
|
139
|
-
common_styles = if suffixes[:common].any?
|
140
|
-
build_styles_chain(base_styles[:common], suffixes[:common])
|
141
|
-
elsif suffixes[:specific].any?
|
142
|
-
build_styles_chain(base_styles[:common], suffixes[:specific])
|
143
|
-
elsif @view_name == 'table_view_cell'
|
144
|
-
base_styles[:common]
|
145
|
-
end
|
146
|
-
@styles += Array.wrap(common_styles)
|
147
|
-
|
148
|
-
# form cell: user_form_field, user_form_string_field, user_form_field_email
|
149
|
-
# form element: user_form_field_text_field, user_form_string_field_text_field, user_form_field_email_text_field
|
150
|
-
# table cell: categories_table_cell, categories_table_title
|
151
|
-
# table element: categories_table_cell_image, categories_table_title_image
|
152
|
-
specific_base_common_suffix_styles = if suffixes[:common].any?
|
153
|
-
build_styles_chain(base_styles[:specific], suffixes[:common])
|
154
|
-
elsif suffixes[:specific].empty? && @view_name == 'table_view_cell'
|
155
|
-
base_styles[:specific]
|
156
|
-
end
|
157
|
-
@styles += Array.wrap(specific_base_common_suffix_styles)
|
158
|
-
# form element: user_form_field_input, user_form_string_field_input, user_form_field_email_input
|
159
|
-
# table element: categories_table_cell_icon, categories_table_title_icon
|
160
|
-
@styles += build_styles_chain(base_styles[:specific], suffixes[:specific])
|
114
|
+
@styles += compute_cell_style_options(style_sources, has_errors)
|
161
115
|
end
|
162
116
|
# don't use present? here, it's slower, while this method should be very fast
|
163
117
|
if section && section.name && section.name != '' && name && name != ''
|
@@ -168,11 +122,70 @@ module MotionPrime
|
|
168
122
|
custom_styles = style_sources.map do |source|
|
169
123
|
normalize_object(source.delete(:styles), section)
|
170
124
|
end.flatten
|
125
|
+
|
126
|
+
# styles got from mixins option
|
127
|
+
mixin_styles = style_sources.map do |source|
|
128
|
+
normalize_object(source.delete(:mixins), section)
|
129
|
+
end.flatten.map{ |m| :"_mixin_#{m}" }
|
130
|
+
|
171
131
|
@styles += custom_styles
|
132
|
+
@styles += mixin_styles
|
172
133
|
# puts @view_class.to_s + @styles.inspect, ''
|
173
134
|
@styles
|
174
135
|
end
|
175
136
|
|
137
|
+
def compute_cell_style_options(style_sources, has_errors)
|
138
|
+
base_styles = {common: [], specific: []}
|
139
|
+
suffixes = {common: [], specific: []}
|
140
|
+
all_styles = []
|
141
|
+
|
142
|
+
# following example in Prime::TableSection#cell_styles
|
143
|
+
# form element/cell: <base|user>_form_field, <base|user>_form_string_field, user_form_field_email
|
144
|
+
# table element/cell: <base|categories>_table_cell, categories_table_title
|
145
|
+
if section.section_styles
|
146
|
+
section.section_styles.each { |type, values| base_styles[type] += values }
|
147
|
+
end
|
148
|
+
if @view_name != 'base' && @view_name != 'table_view_cell'
|
149
|
+
# form element: _input
|
150
|
+
# table element: _image
|
151
|
+
suffixes[:common] << @view_name.to_sym
|
152
|
+
suffixes[:common] << :"#{@view_name}_with_errors" if has_errors
|
153
|
+
end
|
154
|
+
if name && name.to_s != @view_name
|
155
|
+
# form element: _input
|
156
|
+
# table element: _icon
|
157
|
+
suffixes[:specific] << name.to_sym
|
158
|
+
suffixes[:specific] << :"#{name}_with_errors" if has_errors
|
159
|
+
end
|
160
|
+
# form cell: base_form_field, base_form_string_field
|
161
|
+
# form element: base_form_field_string_field, base_form_string_field_text_field
|
162
|
+
# table cell: base_table_cell
|
163
|
+
# table element: base_table_cell_image
|
164
|
+
common_styles = if suffixes[:common].any?
|
165
|
+
build_styles_chain(base_styles[:common], suffixes[:common])
|
166
|
+
elsif suffixes[:specific].any?
|
167
|
+
build_styles_chain(base_styles[:common], suffixes[:specific])
|
168
|
+
elsif @view_name == 'table_view_cell'
|
169
|
+
base_styles[:common]
|
170
|
+
end
|
171
|
+
all_styles += Array.wrap(common_styles)
|
172
|
+
|
173
|
+
# form cell: user_form_field, user_form_string_field, user_form_field_email
|
174
|
+
# form element: user_form_field_text_field, user_form_string_field_text_field, user_form_field_email_text_field
|
175
|
+
# table cell: categories_table_cell, categories_table_title
|
176
|
+
# table element: categories_table_cell_image, categories_table_title_image
|
177
|
+
specific_base_common_suffix_styles = if suffixes[:common].any?
|
178
|
+
build_styles_chain(base_styles[:specific], suffixes[:common])
|
179
|
+
elsif suffixes[:specific].empty? && @view_name == 'table_view_cell'
|
180
|
+
base_styles[:specific]
|
181
|
+
end
|
182
|
+
all_styles += Array.wrap(specific_base_common_suffix_styles)
|
183
|
+
# form element: user_form_field_input, user_form_string_field_input, user_form_field_email_input
|
184
|
+
# table element: categories_table_cell_icon, categories_table_title_icon
|
185
|
+
all_styles += build_styles_chain(base_styles[:specific], suffixes[:specific])
|
186
|
+
all_styles
|
187
|
+
end
|
188
|
+
|
176
189
|
class << self
|
177
190
|
def factory(type, options = {})
|
178
191
|
element_class = class_factory("#{type}_element", true) || self
|