motion-prime 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +8 -8
  2. data/CHANGELOG.md +8 -0
  3. data/Gemfile +1 -2
  4. data/Gemfile.lock +27 -40
  5. data/README.md +5 -5
  6. data/Rakefile +0 -1
  7. data/bin/{prime.rb → prime} +4 -4
  8. data/files/Gemfile +2 -4
  9. data/files/Rakefile +10 -1
  10. data/files/app/app_delegate.rb +9 -6
  11. data/files/app/config/base.rb +6 -0
  12. data/files/app/screens/application_screen.rb +1 -1
  13. data/files/app/screens/help_screen.rb +2 -1
  14. data/files/app/screens/home_screen.rb +2 -1
  15. data/files/app/styles/sidebar.rb +8 -16
  16. data/files/resources/Default-568h@2x.png +0 -0
  17. data/files/resources/Default.png +0 -0
  18. data/files/resources/Default@2x.png +0 -0
  19. data/files/resources/Icon.png +0 -0
  20. data/{resources → files/resources}/fonts/ubuntu.ttf +0 -0
  21. data/files/resources/images/arrow.png +0 -0
  22. data/lib/motion-prime.rb +0 -1
  23. data/motion-prime/app_delegate.rb +22 -10
  24. data/motion-prime/config/base.rb +3 -0
  25. data/motion-prime/elements/base.rb +6 -4
  26. data/motion-prime/elements/draw/label.rb +4 -1
  27. data/motion-prime/helpers/has_authorization.rb +2 -2
  28. data/motion-prime/screens/_navigation_mixin.rb +55 -61
  29. data/motion-prime/screens/sidebar_container_screen.rb +1 -1
  30. data/motion-prime/sections/base.rb +10 -7
  31. data/motion-prime/sections/form.rb +7 -42
  32. data/motion-prime/sections/form/base_field_section.rb +4 -11
  33. data/motion-prime/sections/form/base_header_section.rb +4 -9
  34. data/motion-prime/sections/table.rb +38 -17
  35. data/motion-prime/sections/table/base_cell_section.rb +26 -0
  36. data/motion-prime/version.rb +1 -1
  37. data/motion-prime/views/styles.rb +18 -11
  38. data/motion-prime/views/view_builder.rb +4 -0
  39. data/motion-prime/views/view_styler.rb +6 -3
  40. data/resources/Icon.png +0 -0
  41. data/travis.sh +2 -1
  42. metadata +12 -9
  43. data/files/resources/images/navigation/bg.png +0 -0
  44. data/files/resources/images/navigation/bg@2x.png +0 -0
  45. data/files/resources/images/navigation/button.png +0 -0
  46. data/files/resources/images/navigation/button@2x.png +0 -0
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NGYzMDBjMjExMDIwYjViMzBkYjJjNGRjMGY2ZWY3YjFhZjljNGE3Nw==
4
+ MDQ1ZmFmOTg1ZWQ4MTliMDI3ZmY4ZmE0NGM5OTA2YjJjZjk4NmIxYQ==
5
5
  data.tar.gz: !binary |-
6
- OWI5ZjA0OThkNzg3NDc5OWFmODBhNWJiNmM2NWFjOTk4YWE3Nzc4Nw==
6
+ ODQzMzg0NGZiYzgxMDM5MTMwZGEzNGM4ODcwOTg5ZGEzNWE1OTEwMA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- ZWJhZDkzYjNmOGEzYjJjN2E2ODQ3M2I2MTc3ZjcwYWExMjM2MDA5MGI5ZjNh
10
- NGRhNzM1YmQ1YTcwMTFkM2Y3NmM5YTFiZDI1NDEzZmFiZDI2NWYzOTYyNjAw
11
- Y2U2MzljNDNiNmNkMTYwOTE0MGFiYjk0ZmExYmQzZWIwODgzMDI=
9
+ ZjkyZGFmYTg3NzQ3ZDM0ZGRmOTg4MThiNTNlMDNjNGEwZDc3YTI5YmRhZGFi
10
+ MGU5ZjQ2MTJiNmIzMzc0YWFmMTg0ZTBhNzY0NzQxMzU3OTFlZDVjNjRkNzA4
11
+ YjVlM2EzNmU0MTkyOWYxM2I2MTg0N2VlYjg2NmE0NzY4NzA1NWQ=
12
12
  data.tar.gz: !binary |-
13
- MzliOWY4M2M4ZmNkYTJmNGQ0OTU5Yzc4ZDQ4YzA3MzU5ZWUwMWM3ZjViOTFl
14
- MjU5NzFlNGM2NzA5MmNmZWVkZTM4OGUwMTU4NzBmNWMwYzAxMGZjMGE5MWUy
15
- N2M0YjQ4ODcxNWJhZWNkZjU3MGJiMTAzOGJjYmZmMWM1MzQ4YjY=
13
+ NzEwYTA3NjRkMTUxZGQ1NGQzMjk2MTQzMWFlYWM2NzkxZmZkNzkxN2E5NTAy
14
+ OTg2MWY1ZmMzMzcwYzhmNzYyODIyZTFhNzczM2ZlZTY1OGQ0ZWUwM2E0MDcy
15
+ ODA2ZTI2MmVkZGRiODljM2NjNmY2MzIzNzRmMTBlNjI1NTFhYjU=
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ === 0.3.1.beta
2
+ * Added universal AppDelegate#open_screen method for opening screens.
3
+ * Old AppDelegate#open_screen method renamed to AppDelegate#open_content_screen
4
+ * Ability to add inherited styles
5
+ * Small refactoring
6
+ * Update project template
7
+
8
+
1
9
  === 0.3.0
2
10
  * Added iOS 7 support
3
11
  * Added command line tools
data/Gemfile CHANGED
@@ -1,7 +1,6 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
- gem 'cocoapods', '~> 0.19.1'
4
- gem 'motion-cocoapods', '~> 1.3.2'
3
+ gem 'motion-cocoapods', '~> 1.4.0'
5
4
  gem 'motion-support', '~> 0.2.4'
6
5
  gem 'sugarcube', '~> 0.20.23'
7
6
  gem 'bubble-wrap', '~> 1.3.0'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- motion-prime (0.3.0)
4
+ motion-prime (0.3.1)
5
5
  bubble-wrap
6
6
  cocoapods
7
7
  methadone
@@ -17,70 +17,57 @@ GEM
17
17
  activesupport (3.2.15)
18
18
  i18n (~> 0.6, >= 0.6.4)
19
19
  multi_json (~> 1.0)
20
- addressable (2.3.5)
21
20
  bubble-wrap (1.3.0)
22
- claide (0.2.0)
23
- cocoapods (0.19.1)
24
- activesupport (~> 3.2.13)
25
- claide (~> 0.2.0)
26
- cocoapods-core (= 0.19.1)
27
- cocoapods-downloader (~> 0.1.0)
21
+ claide (0.4.0)
22
+ cocoapods (0.28.0)
23
+ activesupport (>= 3.2.15, < 4)
24
+ claide (~> 0.4.0)
25
+ cocoapods-core (= 0.28.0)
26
+ cocoapods-downloader (~> 0.2.0)
28
27
  colored (~> 1.2)
29
28
  escape (~> 0.0.4)
30
- faraday (~> 0.8.1)
31
- json (~> 1.7.3)
32
- octokit (~> 1.7)
33
- open4 (~> 1.3.0)
34
- rake (~> 10.0.0)
35
- xcodeproj (~> 0.5.5)
36
- cocoapods-core (0.19.1)
37
- activesupport (~> 3.2.13)
38
- rake (~> 10.0.0)
39
- cocoapods-downloader (0.1.2)
29
+ json_pure (~> 1.8)
30
+ open4 (~> 1.3)
31
+ xcodeproj (~> 0.14.1)
32
+ cocoapods-core (0.28.0)
33
+ activesupport (>= 3.2.15, < 4)
34
+ fuzzy_match (~> 2.0.4)
35
+ json (~> 1.8)
36
+ nap (~> 0.5)
37
+ cocoapods-downloader (0.2.0)
40
38
  colored (1.2)
41
39
  escape (0.0.4)
42
- faraday (0.8.8)
43
- multipart-post (~> 1.2.0)
44
- faraday_middleware (0.9.0)
45
- faraday (>= 0.7.4, < 0.9)
46
- hashie (2.0.5)
40
+ fuzzy_match (2.0.4)
47
41
  i18n (0.6.5)
48
- json (1.7.7)
42
+ json (1.8.1)
43
+ json_pure (1.8.1)
49
44
  methadone (1.3.1)
50
45
  bundler
51
- motion-cocoapods (1.3.7)
52
- cocoapods (>= 0.17.0)
46
+ motion-cocoapods (1.4.0)
47
+ cocoapods (>= 0.26.2)
53
48
  motion-redgreen (0.1.0)
54
49
  motion-require (0.0.7)
55
50
  motion-stump (0.3.0)
56
51
  motion-support (0.2.5)
57
52
  motion-require (>= 0.0.6)
58
53
  multi_json (1.8.2)
59
- multipart-post (1.2.0)
60
54
  nano-store (0.6.3)
61
55
  motion-cocoapods (>= 1.2.1)
62
- netrc (0.7.7)
63
- octokit (1.25.0)
64
- addressable (~> 2.2)
65
- faraday (~> 0.8)
66
- faraday_middleware (~> 0.9)
67
- hashie (~> 2.0)
68
- multi_json (~> 1.3)
69
- netrc (~> 0.7.7)
56
+ nap (0.5.1)
70
57
  open4 (1.3.0)
71
- rake (10.0.4)
58
+ rake (10.1.0)
72
59
  sugarcube (0.20.25)
73
- xcodeproj (0.5.5)
74
- activesupport (~> 3.2.13)
60
+ xcodeproj (0.14.1)
61
+ activesupport (~> 3.0)
75
62
  colored (~> 1.2)
63
+ rake
76
64
 
77
65
  PLATFORMS
78
66
  ruby
79
67
 
80
68
  DEPENDENCIES
81
69
  bubble-wrap (~> 1.3.0)
82
- cocoapods (~> 0.19.1)
83
- motion-cocoapods (~> 1.3.2)
70
+ motion-cocoapods (~> 1.4.0)
84
71
  motion-prime!
85
72
  motion-redgreen
86
73
  motion-stump
data/README.md CHANGED
@@ -9,13 +9,13 @@ The main feature of MotionPrime is one more layer on UI elements: Section.
9
9
 
10
10
  ## Getting Started
11
11
 
12
- ### 1. Create MotionPrime project:
12
+ ### 1. Install MotionPrime:
13
13
 
14
- $ prime new myapp
14
+ $ gem install motion-prime
15
15
 
16
- ### 2. Setup application
16
+ ### 2. Create MotionPrime project:
17
17
 
18
- # edit Rakefile
18
+ $ prime new myapp
19
19
 
20
20
  ### 3. Run application
21
21
 
@@ -27,7 +27,7 @@ The main feature of MotionPrime is one more layer on UI elements: Section.
27
27
  # app/app_delegate.rb
28
28
  class AppDelegate < Prime::BaseAppDelegate
29
29
  def on_load(app, options)
30
- open_root_screen MainScreen.new
30
+ open_screen MainScreen.new
31
31
  end
32
32
  end
33
33
 
data/Rakefile CHANGED
@@ -18,7 +18,6 @@ require 'motion-support'
18
18
  require 'motion-prime'
19
19
  require 'motion-stump'
20
20
  require 'motion-redgreen'
21
- require 'bubble-wrap/reactor'
22
21
 
23
22
  Motion::Project::App.setup do |app|
24
23
  app.name = 'MotionPrime'
@@ -28,12 +28,12 @@ class App
28
28
  return puts "Usage: prime new <appname>" unless name.to_s.length > 0
29
29
  info "Creating new MotionPrime iOS app: #{name}"
30
30
  sh "motion create --template=git@github.com:droidlabs/motion-prime.git #{name}"
31
- sh "cd ./#{name}"
32
31
  info "Command: bundle instal"
33
- sh "bundle install"
32
+ sh "cd ./#{name} & bundle install"
34
33
  info "Command: pod setup"
35
- sh "pod setup"
36
- sh "cd .."
34
+ sh "cd ./#{name} & pod setup"
35
+ info "Command: rake pod:install"
36
+ sh "cd ./#{name} & rake pod:install"
37
37
  end
38
38
 
39
39
  description "Command line tools for MotionPrime"
data/files/Gemfile CHANGED
@@ -1,10 +1,8 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
- gem 'cocoapods', '~> 0.19.1'
4
- gem 'motion-cocoapods', '~> 1.3.2'
3
+ gem 'motion-cocoapods', '~> 1.4.0'
5
4
  gem 'motion-support', '~> 0.2.4'
6
5
  gem 'sugarcube', '~> 0.20.23'
7
6
  gem 'bubble-wrap', '~> 1.3.0'
8
- gem 'nano-store', '~> 0.6.3'
9
7
 
10
- gem 'motion-prime', :path => '../motion-prime'
8
+ gem 'motion-prime', '~> 0.3.1'
data/files/Rakefile CHANGED
@@ -13,6 +13,15 @@ Motion::Project::App.setup do |app|
13
13
  app.name = 'MotionPrimeProject'
14
14
 
15
15
  app.pods do
16
-
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'
17
22
  end
23
+
24
+ app.version = '0.0.1'
25
+ app.icons = %w{Icon.png}
26
+ app.fonts = ['fonts/ubuntu.ttf']
18
27
  end
@@ -1,14 +1,17 @@
1
1
  class AppDelegate < Prime::BaseAppDelegate
2
2
  def on_load(app, options)
3
3
  setup_navigation_styles
4
- open_with_sidebar HomeScreen.new(navigation: true), SidebarScreen.new
4
+ open_screen HomeScreen.new(navigation: true), sidebar: SidebarScreen.new
5
5
  end
6
6
 
7
7
  def setup_navigation_styles
8
- # set navigation bar and button backgrounds
9
- UINavigationBar.appearance.setBackgroundImage "images/navigation/bg.png".uiimage,
10
- forBarMetrics: UIBarMetricsDefault
11
- UIBarButtonItem.appearance.setBackgroundImage "images/navigation/button.png".uiimage,
12
- forState: UIControlStateNormal, barMetrics:UIBarMetricsDefault
8
+ bar_appearance = UINavigationBar.appearance
9
+ bar_appearance.barTintColor = Prime::Config.color.dark.uicolor
10
+
11
+ settings = {
12
+ UITextAttributeFont => MP::Config.font.name.uifont(17),
13
+ UITextAttributeTextColor => :white.uicolor
14
+ }
15
+ bar_appearance.setTitleTextAttributes(settings)
13
16
  end
14
17
  end
@@ -9,5 +9,11 @@ Prime::Config.api do |api|
9
9
  api.client_secret = ""
10
10
  end
11
11
 
12
+ Prime::Config.sidebar do |sidebar|
13
+ sidebar.background_image = "images/sidebar/bg.jpg".uiimage
14
+ end
15
+
16
+ Prime::Config.font.name = "Ubuntu"
17
+
12
18
  # setup model's store
13
19
  Prime::Store.connect
@@ -2,6 +2,6 @@ class ApplicationScreen < Prime::BaseScreen
2
2
  before_load :setup_navigation
3
3
 
4
4
  def setup_navigation
5
- set_navigation_left_button 'menu', action: :show_sidebar
5
+ set_navigation_left_button 'menu', image: 'images/menu_button.png', action: :show_sidebar
6
6
  end
7
7
  end
@@ -1,5 +1,6 @@
1
1
  class HelpScreen < ApplicationScreen
2
+ title 'Help'
3
+
2
4
  def render
3
-
4
5
  end
5
6
  end
@@ -1,5 +1,6 @@
1
1
  class HomeScreen < ApplicationScreen
2
- def render
2
+ title 'Home'
3
3
 
4
+ def render
4
5
  end
5
6
  end
@@ -1,29 +1,21 @@
1
1
  Prime::Styles.define :sidebar do
2
- # navigation layout
3
- # ----------
4
2
  style :screen,
5
- background_color: Prime::Config.color.base,
6
- opaque: true
7
-
3
+ background_color: :clear
8
4
  style :table,
9
- top: 0,
5
+ top: 150,
10
6
  left: 0,
11
7
  width: 320,
12
8
  bottom: 0,
13
- background_color: Prime::Config.color.base,
14
- separator_color: Prime::Config.color.dark,
15
- opaque: true
9
+ background_color: :clear,
10
+ separator_color: :clear
16
11
 
17
12
  style :table_cell,
18
- selection_style: UITableViewCellSelectionStyleNone,
19
- opaque: true
13
+ selection_style: UITableViewCellSelectionStyleNone
20
14
 
21
15
  style :action_title,
22
- background_color: Prime::Config.color.base,
23
16
  text_color: :white,
24
17
  top: 10,
25
18
  width: 320,
26
- opaque: true,
27
19
  font: proc { :system.uifont(20) },
28
20
  size_to_fit: true,
29
21
  left: 20,
@@ -32,7 +24,7 @@ Prime::Styles.define :sidebar do
32
24
  style :action_arrow,
33
25
  width: 9,
34
26
  height: 14,
35
- right: 50,
36
- top: 14,
37
- image: "images/sidebar/icons/arrow.png"
27
+ right: 150,
28
+ top: 17,
29
+ image: "images/sidebar/arrow.png"
38
30
  end
Binary file
Binary file
Binary file
Binary file
File without changes
Binary file
data/lib/motion-prime.rb CHANGED
@@ -4,5 +4,4 @@ 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
- app.fonts = [File.expand_path('../../resources/fonts/ubuntu.ttf', __FILE__)]
8
7
  end
@@ -1,4 +1,3 @@
1
- include EM::Eventable
2
1
  motion_require './helpers/has_authorization'
3
2
  module MotionPrime
4
3
  class BaseAppDelegate
@@ -20,6 +19,17 @@ module MotionPrime
20
19
  self.app_delegate.window
21
20
  end
22
21
 
22
+ def open_screen(screen, options = {})
23
+ if options[:sidebar]
24
+ open_with_sidebar(screen, options.delete(:sidebar), options)
25
+ elsif options[:root]
26
+ open_root_screen(screen)
27
+ else
28
+ open_content_screen(screen)
29
+ end
30
+ end
31
+
32
+ # TODO: move to private methods
23
33
  def open_root_screen(screen)
24
34
  screen.send(:on_screen_load) if screen.respond_to?(:on_screen_load)
25
35
  screen.ensure_wrapper_controller_in_place if screen.respond_to?(:ensure_wrapper_controller_in_place)
@@ -32,7 +42,8 @@ module MotionPrime
32
42
  screen
33
43
  end
34
44
 
35
- def open_screen(screen)
45
+ # TODO: move to private methods
46
+ def open_content_screen(screen)
36
47
  if sidebar?
37
48
  sidebar_container.content_controller = screen
38
49
  else
@@ -40,16 +51,17 @@ module MotionPrime
40
51
  end
41
52
  end
42
53
 
43
- def sidebar?
44
- self.window.rootViewController.is_a?(SidebarContainerScreen)
45
- end
46
-
47
- def open_with_sidebar(content, menu, options={})
48
- self.sidebar_container = SidebarContainerScreen.new(menu, content, options)
54
+ # TODO: move to private methods
55
+ def open_with_sidebar(content, sidebar, options={})
56
+ self.sidebar_container = SidebarContainerScreen.new(sidebar, content, options)
49
57
  self.sidebar_container.delegate = self
50
58
  open_root_screen(sidebar_container)
51
59
  end
52
60
 
61
+ def sidebar?
62
+ self.window.rootViewController.is_a?(SidebarContainerScreen)
63
+ end
64
+
53
65
  def show_sidebar
54
66
  sidebar_container.show_sidebar
55
67
  end
@@ -64,10 +76,10 @@ module MotionPrime
64
76
  end
65
77
  end
66
78
 
67
- def update_current_user
79
+ def reset_current_user
68
80
  user_was = @current_user
69
81
  @current_user = nil
70
- NSNotificationCenter.defaultCenter.postNotificationName(:current_user_updated, object: user_was)
82
+ NSNotificationCenter.defaultCenter.postNotificationName(:on_current_user_reset, object: user_was)
71
83
  end
72
84
  end
73
85
  end
@@ -11,6 +11,9 @@ MotionPrime::Config.color do |color|
11
11
  color.base = 0x424242
12
12
  color.error = 0xef471f
13
13
  end
14
+ MotionPrime::Config.sidebar do |sidebar|
15
+ sidebar.background_image = "images/sidebar/background.png".uiimage
16
+ end
14
17
  MotionPrime::Config.api do |api|
15
18
  api.base = "http://example.com"
16
19
  api.client_id = ""
@@ -65,8 +65,8 @@ module MotionPrime
65
65
  suffixes = {common: [@view_name.to_sym, name.try(:to_sym)].compact, specific: []}
66
66
 
67
67
  if section
68
- field_section = section.respond_to?(:section_styles)
69
- if field_section
68
+ cell_section = section.is_a?(BaseCellSection)
69
+ if cell_section
70
70
  section.section_styles.each { |type, values| base_styles[type] += values }
71
71
  end
72
72
  if section.respond_to?(:observing_errors?) && observing_errors? && has_errors?
@@ -76,11 +76,13 @@ module MotionPrime
76
76
 
77
77
  # common + specific base - common suffixes
78
78
  @styles += build_styles_chain(base_styles[:common], suffixes[:common])
79
- @styles << :"#{section.name}_#{name}" if section
79
+ @styles << [section.name, name].compact.join('_').to_sym if section
80
80
  @styles += build_styles_chain(base_styles[:specific], suffixes[:common])
81
81
  # specific base - specific suffixes
82
82
  @styles += build_styles_chain(base_styles[:specific], suffixes[:specific])
83
- @styles << :"#{section.form.name}_field_#{section.name}_#{name}" if field_section
83
+ if cell_section && section.table.present?
84
+ @styles << [section.table.name, section.cell_type, section.name, name].compact.join('_').to_sym
85
+ end
84
86
  # custom style (from options or block options)
85
87
  custom_styles = style_sources.map do |source|
86
88
  normalize_object(source.delete(:styles), section)
@@ -45,7 +45,10 @@ module MotionPrime
45
45
 
46
46
  def size_to_fit_if_needed
47
47
  if computed_options[:size_to_fit]
48
- @computed_options[:height] = content_height
48
+ @computed_options[:width] = content_width
49
+ if computed_options[:width]
50
+ @computed_options[:height] = content_height
51
+ end
49
52
  reset_computed_values
50
53
  end
51
54
  end
@@ -3,8 +3,8 @@ module MotionPrime
3
3
  def current_user
4
4
  App.delegate.current_user
5
5
  end
6
- def update_current_user
7
- App.delegate.update_current_user
6
+ def reset_current_user
7
+ App.delegate.reset_current_user
8
8
  end
9
9
  def user_signed_in?
10
10
  current_user.present?
@@ -4,42 +4,36 @@ module MotionPrime
4
4
  UIApplication.sharedApplication.delegate
5
5
  end
6
6
 
7
+ def show_sidebar
8
+ app_delegate.show_sidebar
9
+ end
10
+
11
+ def hide_sidebar
12
+ app_delegate.hide_sidebar
13
+ end
14
+
7
15
  def open_screen(screen, args = {})
8
- # Apply properties to instance
9
16
  if args[:modal] || has_navigation?
10
17
  screen = setup_screen_for_open(screen, args)
11
18
  screen.send(:on_screen_load) if screen.respond_to?(:on_screen_load)
19
+ args[:animated] = args.has_key?(:animated) ? args[:animated] : true
12
20
  if args[:modal] || !has_navigation?
13
- present_modal_view_controller screen, (args.has_key?(:animated) ? args[:animated] : true)
21
+ open_screen_modal(screen, args)
14
22
  else
15
- push_view_controller screen, args
23
+ open_screen_navigational(screen, args)
16
24
  end
17
25
  else
18
26
  app_delegate.open_screen(screen.main_controller)
19
27
  end
20
28
  end
21
29
 
22
- def open_root_screen(screen)
23
- app_delegate.open_root_screen(screen)
24
- end
25
-
26
- def show_sidebar
27
- app_delegate.show_sidebar
28
- end
29
-
30
- def hide_sidebar
31
- app_delegate.hide_sidebar
32
- end
33
-
34
30
  def close_screen(args = {})
35
- args ||= {}
36
31
  args[:animated] = args.has_key?(:animated) ? args[:animated] : true
37
32
  # Pop current view, maybe with arguments, if in navigation controller
38
33
  if modal?
39
- close_modal_screen args
34
+ close_screen_modal(args)
40
35
  elsif has_navigation?
41
- close_navigation args
42
- send_on_return(args)
36
+ close_screen_navigational(args)
43
37
  end
44
38
  end
45
39
 
@@ -53,10 +47,6 @@ module MotionPrime
53
47
  end
54
48
  end
55
49
 
56
- def push_view_controller(vc, args = {})
57
- navigation_controller.pushViewController(vc, animated: (args.has_key?(:animated) ? args[:animated] : true))
58
- end
59
-
60
50
  def ensure_wrapper_controller_in_place(args = {})
61
51
  # Wrap in a NavigationController?
62
52
  if wrap_in_navigation? && !args[:modal]
@@ -64,54 +54,58 @@ module MotionPrime
64
54
  end
65
55
  end
66
56
 
67
- protected
57
+ private
58
+ def setup_screen_for_open(screen, args = {})
59
+ # Instantiate screen if given a class
60
+ screen = screen.new if screen.respond_to?(:new)
68
61
 
69
- def setup_screen_for_open(screen, args = {})
70
- # Instantiate screen if given a class
71
- screen = screen.new if screen.respond_to?(:new)
62
+ # Set parent, title & modal properties
63
+ screen.parent_screen = self if screen.respond_to?("parent_screen=")
64
+ screen.title = args[:title] if args[:title] && screen.respond_to?("title=")
65
+ screen.modal = args[:modal] if args[:modal] && screen.respond_to?("modal=")
72
66
 
73
- # Set parent, title & modal properties
74
- screen.parent_screen = self if screen.respond_to?("parent_screen=")
75
- screen.title = args[:title] if args[:title] && screen.respond_to?("title=")
76
- screen.modal = args[:modal] if args[:modal] && screen.respond_to?("modal=")
67
+ # Return modified screen instance
68
+ screen
69
+ end
77
70
 
78
- # Return modified screen instance
79
- screen
80
- end
71
+ def open_screen_modal(screen, args)
72
+ self.presentModalViewController(screen.main_controller, animated: args[:animated])
73
+ end
81
74
 
82
- def present_modal_view_controller(screen, animated)
83
- self.presentModalViewController(screen.main_controller, animated: animated)
84
- end
75
+ def open_screen_navigational(screen, args = {})
76
+ navigation_controller.pushViewController(screen, animated: args[:animated])
77
+ end
85
78
 
86
- def close_modal_screen(args = {})
87
- parent_screen.dismissViewControllerAnimated(args[:animated], completion: lambda {
88
- send_on_return(args)
89
- })
90
- end
79
+ def close_screen_modal(args = {})
80
+ parent_screen.dismissViewControllerAnimated(args[:animated], completion: lambda {
81
+ send_on_return(args)
82
+ })
83
+ end
91
84
 
92
- def close_navigation(args = {})
93
- if args[:to_screen] && args[:to_screen].is_a?(UIViewController)
94
- self.parent_screen = args[:to_screen]
95
- self.navigation_controller.popToViewController(args[:to_screen], animated: args[:animated])
96
- else
97
- self.navigation_controller.popViewControllerAnimated(args[:animated])
85
+ def close_screen_navigational(args = {})
86
+ if args[:to_screen] && args[:to_screen].is_a?(UIViewController)
87
+ self.parent_screen = args[:to_screen]
88
+ self.navigation_controller.popToViewController(args[:to_screen], animated: args[:animated])
89
+ else
90
+ self.navigation_controller.popViewControllerAnimated(args[:animated])
91
+ end
92
+ send_on_return(args)
98
93
  end
99
- end
100
94
 
101
- def has_navigation?
102
- !navigation_controller.nil?
103
- end
95
+ def has_navigation?
96
+ !navigation_controller.nil?
97
+ end
104
98
 
105
- def navigation_controller
106
- @navigation_controller ||= self.navigationController
107
- end
99
+ def navigation_controller
100
+ @navigation_controller ||= self.navigationController
101
+ end
108
102
 
109
- def navigation_controller=(val)
110
- @navigation_controller = val
111
- end
103
+ def navigation_controller=(val)
104
+ @navigation_controller = val
105
+ end
112
106
 
113
- def add_navigation_controller
114
- self.navigation_controller = NavigationController.alloc.initWithRootViewController(self)
115
- end
107
+ def add_navigation_controller
108
+ self.navigation_controller = NavigationController.alloc.initWithRootViewController(self)
109
+ end
116
110
  end
117
111
  end
@@ -4,7 +4,7 @@ module MotionPrime
4
4
 
5
5
  def self.new(menu, content, options={})
6
6
  screen = self.alloc.initWithContentViewController(nil, menuViewController: nil)
7
- screen.backgroundImage = "images/sidebar/background.png".uiimage
7
+ screen.backgroundImage = MotionPrime::Config.sidebar.background_image
8
8
 
9
9
  full_width = UIScreen.mainScreen.bounds.size.width
10
10
 
@@ -18,7 +18,7 @@ module MotionPrime
18
18
  include MotionPrime::HasAuthorization
19
19
  include MotionPrime::HasNormalizer
20
20
 
21
- attr_accessor :screen, :model, :name, :options, :elements
21
+ attr_accessor :screen, :model, :name, :options, :elements, :section_styles
22
22
  class_attribute :elements_options, :container_options, :keyboard_close_bindings
23
23
  define_callbacks :render
24
24
 
@@ -30,6 +30,14 @@ module MotionPrime
30
30
  load_section
31
31
  end
32
32
 
33
+ def style_options
34
+ @style_options ||= if section_styles.present?
35
+ Styles.for(section_styles.values.flatten)
36
+ else
37
+ {}
38
+ end
39
+ end
40
+
33
41
  def container_options
34
42
  @normalized_container_options or begin
35
43
  # priority: class; from styles; passed directly
@@ -37,16 +45,11 @@ module MotionPrime
37
45
  passed_container_options = options.delete(:container) || {}
38
46
  raw_container_options.merge!(passed_container_options)
39
47
  @normalized_container_options = normalize_options(raw_container_options)
40
-
41
48
  style_container_options = style_options.delete(:container) || {}
42
49
  @normalized_container_options.merge!(style_container_options.except(*passed_container_options.keys))
43
50
  end
44
51
  end
45
52
 
46
- def style_options
47
- {}
48
- end
49
-
50
53
  def default_name
51
54
  self.class_name_without_kvo.demodulize.underscore.gsub(/\_section$/, '')
52
55
  end
@@ -80,7 +83,7 @@ module MotionPrime
80
83
  index = opts.delete(:at)
81
84
  options = build_options_for_element(opts)
82
85
  options[:name] ||= key
83
- options[:type] ||= :label
86
+ options[:type] ||= options[:text] ? :label : :view
84
87
  element = MotionPrime::BaseElement.factory(options.delete(:type), options)
85
88
  if index
86
89
  self.elements = Hash[self.elements.to_a.insert index, [key, element]]
@@ -2,8 +2,6 @@ motion_require './table.rb'
2
2
  motion_require '../helpers/has_style_chain_builder'
3
3
  module MotionPrime
4
4
  class FormSection < TableSection
5
- include HasStyleChainBuilder
6
-
7
5
  # MotionPrime::FormSection is container for Field Sections.
8
6
  # Forms are located inside Screen and can contain multiple Field Sections.
9
7
  # On render, each field will be added to parent screen.
@@ -41,48 +39,15 @@ module MotionPrime
41
39
  end
42
40
  end
43
41
 
44
- def form_styles
45
- base_styles = [:base_form]
46
- base_styles << :base_form_with_sections unless flat_data?
47
- item_styles = [name.to_sym]
48
- {common: base_styles, specific: item_styles}
49
- end
50
-
51
- def field_styles(field)
52
- suffixes = [:field]
53
- if field.is_a?(BaseFieldSection)
54
- suffixes << field.class_name_without_kvo.demodulize.underscore.gsub(/\_section$/, '')
55
- end
56
-
57
- styles = {
58
- common: build_styles_chain(form_styles[:common], suffixes),
59
- specific: build_styles_chain(form_styles[:specific], suffixes)
60
- }
61
-
62
- if field.respond_to?(:container_styles) && field.container_styles.present?
63
- styles[:specific] += Array.wrap(field.container_styles)
64
- end
65
- styles
66
- end
67
-
68
- def header_styles(header)
69
- suffixes = [:header, :"#{header.name}_header"]
70
- styles = {
71
- common: build_styles_chain(form_styles[:common], suffixes),
72
- specific: build_styles_chain(form_styles[:specific], suffixes)
73
- }
74
-
75
- if header.respond_to?(:container_styles) && header.container_styles.present?
76
- styles[:specific] += Array.wrap(header.container_styles)
77
- end
78
- styles
42
+ def data
43
+ @data ||= table_data
79
44
  end
80
45
 
81
46
  def render_table
82
47
  init_form_fields
83
48
  reset_data_stamps
84
49
  options = {
85
- styles: form_styles.values.flatten,
50
+ styles: table_styles.values.flatten,
86
51
  delegate: self,
87
52
  dataSource: self,
88
53
  style: (UITableViewStyleGrouped unless flat_data?)}
@@ -91,7 +56,7 @@ module MotionPrime
91
56
 
92
57
  def render_cell(index, table)
93
58
  field = rows_for_section(index.section)[index.row]
94
- screen.table_view_cell styles: field_styles(field).values.flatten, reuse_identifier: cell_name(table, index), parent_view: table_view do |cell_view|
59
+ screen.table_view_cell section: field, styles: cell_styles(field).values.flatten, reuse_identifier: cell_name(table, index), parent_view: table_view do |cell_view|
95
60
  field.cell_view = cell_view if field.respond_to?(:cell_view)
96
61
  field.render(to: screen)
97
62
  end
@@ -233,7 +198,7 @@ module MotionPrime
233
198
 
234
199
  def load_field(field)
235
200
  klass = "MotionPrime::#{field[:type].classify}FieldSection".constantize
236
- klass.new(field.merge(form: self))
201
+ klass.new(field.merge(table: self))
237
202
  end
238
203
 
239
204
  def render_field?(name, options)
@@ -249,7 +214,7 @@ module MotionPrime
249
214
 
250
215
  def render_header(section)
251
216
  return unless options = self.class.section_header_options.try(:[], section)
252
- self.section_headers[section] ||= BaseHeaderSection.new(options.merge(form: self))
217
+ self.section_headers[section] ||= BaseHeaderSection.new(options.merge(table: self))
253
218
  end
254
219
 
255
220
  def header_for_section(section)
@@ -259,7 +224,7 @@ module MotionPrime
259
224
 
260
225
  def tableView(table, viewForHeaderInSection: section)
261
226
  return unless header = header_for_section(section)
262
- wrapper = MotionPrime::BaseElement.factory(:view, styles: header_styles(header).values.flatten, parent_view: table_view)
227
+ wrapper = MotionPrime::BaseElement.factory(:view, styles: cell_styles(header).values.flatten, parent_view: table_view)
263
228
  wrapper.render(to: screen) do |cell_view|
264
229
  header.cell_view = cell_view if header.respond_to?(:cell_view)
265
230
  header.render(to: screen)
@@ -1,26 +1,19 @@
1
+ motion_require '../table/base_cell_section'
1
2
  module MotionPrime
2
- class BaseFieldSection < BaseSection
3
+ class BaseFieldSection < BaseCellSection
3
4
  include CellSection
4
5
  include BW::KVO
5
- attr_accessor :form
6
6
 
7
+ attr_reader :form
7
8
  after_render :on_section_render
8
9
 
9
10
  def initialize(options = {})
10
- @form = options.delete(:form)
11
+ @form = options[:table]
11
12
  @errors_observer_options = normalize_options(options.delete(:observe_errors).clone, self) if options[:observe_errors]
12
13
  super
13
14
  observe_model_errors
14
15
  end
15
16
 
16
- def style_options
17
- @style_options ||= Styles.for(section_styles.values.flatten)
18
- end
19
-
20
- def section_styles
21
- form.try(:field_styles, self)
22
- end
23
-
24
17
  def render_element?(element_name)
25
18
  case element_name.to_sym
26
19
  when :error_message
@@ -1,23 +1,18 @@
1
+ motion_require '../table/base_cell_section'
1
2
  module MotionPrime
2
- class BaseHeaderSection < BaseSection
3
+ class BaseHeaderSection < BaseCellSection
3
4
  include CellSection
4
5
  DEFAULT_HEADER_HEIGHT = 20
5
6
 
6
7
  element :title, text: proc { @options[:title] }
7
8
 
8
- attr_accessor :form
9
-
10
9
  def initialize(options = {})
11
- @form = options[:form]
10
+ @cell_type = :header
12
11
  super
13
12
  end
14
13
 
15
- def style_options
16
- @style_options ||= Styles.for(section_styles.values.flatten)
17
- end
18
-
19
14
  def section_styles
20
- form.header_styles(self)
15
+ table.cell_styles(self)
21
16
  end
22
17
 
23
18
  def container_height
@@ -2,6 +2,7 @@ motion_require './table/refresh_mixin'
2
2
  module MotionPrime
3
3
  class TableSection < BaseSection
4
4
  include TableSectionRefreshMixin
5
+ include HasStyleChainBuilder
5
6
  include HasSearchBar
6
7
 
7
8
  attr_accessor :table_element, :did_appear
@@ -12,7 +13,11 @@ module MotionPrime
12
13
  end
13
14
 
14
15
  def data
15
- @data ||= table_data
16
+ @data ||= table_data.tap { |cells| set_cells_table(cells) }
17
+ end
18
+
19
+ def set_cells_table(cells)
20
+ cells.each { |cell| cell.table = self if cell.respond_to?(:table=) }
16
21
  end
17
22
 
18
23
  def data_stamp_for(id)
@@ -46,15 +51,41 @@ module MotionPrime
46
51
  end
47
52
 
48
53
  def table_styles
49
- styles = [:base_table, name.to_sym]
50
- styles += @styles if @styles.present?
54
+ type = self.is_a?(FormSection) ? :base_form : :base_table
55
+
56
+ base_styles = [type]
57
+ base_styles << :"#{type}_with_sections" unless flat_data?
58
+ item_styles = [name.to_sym]
59
+ item_styles << @styles if @styles.present?
60
+ {common: base_styles, specific: item_styles}
61
+ end
62
+
63
+ def cell_styles(cell)
64
+ # type: cell/field/header
65
+ type = cell.respond_to?(:cell_type) ? cell.cell_type : 'cell'
66
+
67
+ suffixes = [type]
68
+ if cell.is_a?(BaseFieldSection)
69
+ suffixes << cell.default_name
70
+ elsif cell.respond_to?(:cell_name)
71
+ suffixes << cell.cell_name
72
+ end
73
+
74
+ styles = {
75
+ common: build_styles_chain(table_styles[:common], suffixes),
76
+ specific: build_styles_chain(table_styles[:specific], suffixes)
77
+ }
78
+
79
+ if cell.respond_to?(:container_styles) && cell.container_styles.present?
80
+ styles[:specific] += Array.wrap(cell.container_styles)
81
+ end
51
82
  styles
52
83
  end
53
84
 
54
85
  def render_table
55
86
  reset_data_stamps
56
87
  options = {
57
- styles: table_styles,
88
+ styles: table_styles.values.flatten,
58
89
  delegate: self,
59
90
  data_source: self,
60
91
  style: (UITableViewStyleGrouped unless flat_data?)
@@ -90,29 +121,19 @@ module MotionPrime
90
121
  rows_for_section(index.section)[index.row]
91
122
  end
92
123
 
124
+
93
125
  def render_cell(index, table)
94
126
  item = row_by_index(index)
95
127
 
96
- # define default styles for cell
97
- styles = [:"#{name}_cell"]
98
- Array.wrap(@styles).each do |table_style|
99
- styles << :"#{table_style}_cell"
100
- end
101
- if item.respond_to?(:container_styles) && item.container_styles.present?
102
- styles += Array.wrap(item.container_styles)
103
- end
104
- if item.respond_to?(:name) && item.name.present?
105
- styles += [item.name.to_sym]
106
- end
107
128
  # DrawSection allows as to draw inside the cell view, so we can setup
108
129
  # to use cell view as container
109
130
  if item.is_a?(MotionPrime::DrawSection)
110
131
  item.render(to: screen, as: :cell,
111
- styles: [:base_table_cell] + styles,
132
+ styles: cell_styles(item).values.flatten,
112
133
  reuse_identifier: cell_name(table, index)
113
134
  )
114
135
  else
115
- screen.table_view_cell styles: [:base_table_cell] + styles, reuse_identifier: cell_name(table, index), parent_view: table_view do
136
+ screen.table_view_cell section: item, styles: cell_styles(item).values.flatten, reuse_identifier: cell_name(table, index), parent_view: table_view do
116
137
  item.render(to: screen)
117
138
  end
118
139
  end
@@ -0,0 +1,26 @@
1
+ module MotionPrime
2
+ class BaseCellSection < BaseSection
3
+ attr_accessor :table, :cell_type
4
+
5
+ def initialize(options = {})
6
+ @table ||= options[:table]
7
+ super
8
+ end
9
+
10
+ def section_styles
11
+ @table.try(:cell_styles, self) || {}
12
+ end
13
+
14
+ def cell_type
15
+ @cell_type ||= begin
16
+ self.is_a?(BaseFieldSection) ? :field : :cell
17
+ end
18
+ end
19
+
20
+ def cell_name
21
+ return name unless table
22
+ table_name = table.name.gsub('_table', '')
23
+ name.gsub("#{table_name}_", '')
24
+ end
25
+ end
26
+ end
@@ -1,3 +1,3 @@
1
1
  module MotionPrime
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -7,21 +7,28 @@ module MotionPrime
7
7
  @namespace = namespace
8
8
  end
9
9
 
10
- def style(*args)
10
+ def style(*args, &block)
11
11
  names = Array.wrap(args)
12
12
  options = names.pop if args.last.is_a?(Hash)
13
13
 
14
- raise "No style rules specified for `#{names.join(', ')}`. Namespace: `#{@namespace}`" unless options
15
- names.each do |name|
16
- name = "#{@namespace}_#{name}".to_sym if @namespace
17
-
18
- @@repo[name] ||= {}
19
- if parent = options.delete(:parent)
20
- namespace = options.delete(:parent_namspace) || @namespace
21
- parent ="#{namespace}_#{parent}".to_sym if namespace
22
- @@repo[name].deep_merge! self.class.for(parent)
14
+ if block_given?
15
+ raise "Only style names are available for nested styles, received: `#{args.inspect}`. Namespace: `#{@namespace}`" if options.present?
16
+ names.each do |name|
17
+ puts namespace = [@namespace, name].compact.join('_')
18
+ self.class.new(namespace).instance_eval(&block)
19
+ end
20
+ else
21
+ raise "No style rules specified for `#{names.join(', ')}`. Namespace: `#{@namespace}`" unless options
22
+ parent = options.delete(:parent)
23
+ namespace = options.delete(:parent_namspace) || @namespace
24
+ parent ="#{namespace}_#{parent}".to_sym if namespace
25
+
26
+ names.each do |name|
27
+ name = "#{@namespace}_#{name}".to_sym if @namespace
28
+ @@repo[name] ||= {}
29
+ @@repo[name].deep_merge!(self.class.for(parent)) if parent
30
+ @@repo[name].deep_merge! options
23
31
  end
24
- @@repo[name].deep_merge! options
25
32
  end
26
33
  end
27
34
 
@@ -37,6 +37,10 @@ module MotionPrime
37
37
  text: options.delete(:text),
38
38
  line_spacing: options.delete(:line_spacing)
39
39
  }
40
+ [:text_alignment].each do |key|# add keys which must follow after attributed text here
41
+ value = options.delete(key)
42
+ options[key] = value unless value.nil?
43
+ end
40
44
  end
41
45
  klass.alloc.initWithFrame CGRectZero
42
46
  },
@@ -169,19 +169,22 @@ module MotionPrime
169
169
  attributes[NSParagraphStyleAttributeName] = paragrahStyle
170
170
  end
171
171
 
172
-
173
172
  attributedString = NSAttributedString.alloc.initWithString(value[:text], attributes: attributes)
174
173
  if underline_range = value[:underline]
175
174
  attributedString = NSMutableAttributedString.alloc.initWithAttributedString(attributedString)
176
175
  attributedString.addAttributes({NSUnderlineStyleAttributeName => NSUnderlineStyleSingle}, range: underline_range)
177
176
  end
178
-
179
177
  if view.is_a?(UIButton)
180
178
  view.setAttributedTitle attributedString, forState: UIControlStateNormal
181
179
  else
182
180
  view.attributedText = attributedString
183
181
  end
184
-
182
+ elsif key == 'gradient'
183
+ gradient = CAGradientLayer.layer
184
+ gradient.frame = CGRectMake(value[:frame_x].to_f, value[:frame_y].to_f, value[:frame_width].to_f, value[:frame_height].to_f)
185
+ gradient.colors = value[:colors].map(&:uicolor).map(&:cgcolor)
186
+ gradient.locations = value[:locations] if value[:locations]
187
+ view.layer.insertSublayer(gradient, atIndex: 0)
185
188
  elsif value.is_a?(Hash)
186
189
  self.class.new(view.send(key.camelize(:lower).to_sym), nil, value).apply
187
190
  else
Binary file
data/travis.sh CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  sudo gem install bundler
4
4
  sudo bundle install
5
- sudo pod install
5
+ sudo pod setup
6
+ sudo bundle exec rake pod:install
6
7
  sudo bundle exec rake clean &&
7
8
  sudo bundle exec rake spec &&
8
9
  sudo bundle exec rake clean &&
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-prime
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Iskander Haziev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-26 00:00:00.000000000 Z
11
+ date: 2013-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -168,7 +168,7 @@ description: RubyMotion apps development framework
168
168
  email:
169
169
  - gvalmon@gmail.com
170
170
  executables:
171
- - prime.rb
171
+ - prime
172
172
  extensions: []
173
173
  extra_rdoc_files: []
174
174
  files:
@@ -180,7 +180,7 @@ files:
180
180
  - README.md
181
181
  - Rakefile
182
182
  - app/app_delegate.rb
183
- - bin/prime.rb
183
+ - bin/prime
184
184
  - doc/FAQ.md
185
185
  - doc/SECTION.md
186
186
  - doc/STYLE.md
@@ -196,10 +196,12 @@ files:
196
196
  - files/app/sections/sidebar/action.rb
197
197
  - files/app/sections/sidebar/table.rb
198
198
  - files/app/styles/sidebar.rb
199
- - files/resources/images/navigation/bg.png
200
- - files/resources/images/navigation/bg@2x.png
201
- - files/resources/images/navigation/button.png
202
- - files/resources/images/navigation/button@2x.png
199
+ - files/resources/Default-568h@2x.png
200
+ - files/resources/Default.png
201
+ - files/resources/Default@2x.png
202
+ - files/resources/Icon.png
203
+ - files/resources/fonts/ubuntu.ttf
204
+ - files/resources/images/arrow.png
203
205
  - lib/motion-prime.rb
204
206
  - motion-prime.gemspec
205
207
  - motion-prime/api_client.rb
@@ -261,6 +263,7 @@ files:
261
263
  - motion-prime/sections/form/text_with_button_field_section.rb
262
264
  - motion-prime/sections/tabbed.rb
263
265
  - motion-prime/sections/table.rb
266
+ - motion-prime/sections/table/base_cell_section.rb
264
267
  - motion-prime/sections/table/refresh_mixin.rb
265
268
  - motion-prime/styles/base.rb
266
269
  - motion-prime/styles/form.rb
@@ -280,7 +283,7 @@ files:
280
283
  - motion-prime/views/view_builder.rb
281
284
  - motion-prime/views/view_styler.rb
282
285
  - resources/Default-568h@2x.png
283
- - resources/fonts/ubuntu.ttf
286
+ - resources/Icon.png
284
287
  - spec/config/store_spec.rb
285
288
  - spec/delegate/base_delegate_spec.rb
286
289
  - spec/helpers/base_delegate.rb