ProMotion 0.3.0 → 0.4.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.
Files changed (36) hide show
  1. data/.gitignore +14 -22
  2. data/.repl_history +0 -0
  3. data/Gemfile.lock +14 -0
  4. data/ProMotion.gemspec +4 -3
  5. data/README.md +252 -25
  6. data/Rakefile +5 -3
  7. data/app/app_delegate.rb +2 -2
  8. data/app/screens/home_screen.rb +14 -3
  9. data/app/screens/test_screen.rb +19 -3
  10. data/lib/ProMotion.rb +0 -8
  11. data/lib/ProMotion/version.rb +1 -1
  12. metadata +32 -31
  13. data/.c9revisions/lib/ProMotion.rb.c9save +0 -1
  14. data/.c9revisions/lib/ProMotion/AppDelegate.rb.c9save +0 -3
  15. data/.c9revisions/lib/ProMotion/classes/Screen.rb.c9save +0 -2
  16. data/lib/ProMotion/AppDelegate.rb +0 -60
  17. data/lib/ProMotion/Console.rb +0 -19
  18. data/lib/ProMotion/ProMotion.rb +0 -3
  19. data/lib/ProMotion/_ext/NavigationController.rb +0 -7
  20. data/lib/ProMotion/_ext/TableViewCell.rb +0 -16
  21. data/lib/ProMotion/_ext/TableViewController.rb +0 -54
  22. data/lib/ProMotion/_ext/ViewController.rb +0 -68
  23. data/lib/ProMotion/_modules/ScreenElements.rb +0 -31
  24. data/lib/ProMotion/_modules/ScreenNavigation.rb +0 -149
  25. data/lib/ProMotion/classes/Element.rb +0 -14
  26. data/lib/ProMotion/classes/Screen.rb +0 -206
  27. data/lib/ProMotion/classes/TableScreen.rb +0 -52
  28. data/lib/ProMotion/helpers/MeasureHelper.rb +0 -18
  29. data/lib/ProMotion/helpers/TabBar.rb +0 -99
  30. data/lib/ProMotion/helpers/ViewHelper.rb +0 -23
  31. data/lib/ProMotion/helpers/motion-table/1st/searchable_table.rb +0 -58
  32. data/lib/ProMotion/helpers/motion-table/1st/sectioned_table.rb +0 -219
  33. data/lib/ProMotion/helpers/motion-table/2nd/grouped_table.rb +0 -12
  34. data/lib/ProMotion/helpers/motion-table/2nd/plain_table.rb +0 -13
  35. data/lib/ProMotion/helpers/motion-table/console.rb +0 -26
  36. data/lib/ProMotion/helpers/system_helper.rb +0 -29
@@ -1,23 +0,0 @@
1
- module ProMotion
2
- module ViewHelper
3
- def set_attributes(element, args = {})
4
- args.each do |k, v|
5
- if v.is_a? Hash
6
- v.each do |k2, v2|
7
- sub_element = element.send("#{k}")
8
- sub_element.send("#{k2}=", v2) if sub_element.respond_to?("#{k2}=")
9
- end
10
- else
11
- element.send("#{k}=", v) if element.respond_to?("#{k}=")
12
- end
13
- end
14
- element
15
- end
16
-
17
- def frame_from_array(array)
18
- return CGRectMake(array[0], array[1], array[2], array[3]) if array.length == 4
19
- Console.log(" - frame_from_array expects an array with four elements.", withColor: Console::RED_COLOR)
20
- CGRectZero
21
- end
22
- end
23
- end
@@ -1,58 +0,0 @@
1
- module ProMotion::MotionTable
2
- module SearchableTable
3
- def makeSearchable(params={})
4
- params[:frame] ||= CGRectMake(0, 0, 320, 44)
5
- params[:contentController] ||= self
6
- params[:delegate] ||= self
7
- params[:searchResultsDataSource] ||= self
8
- params[:searchResultsDelegate] ||= self
9
-
10
- searchBar = UISearchBar.alloc.initWithFrame(params[:frame])
11
- if params[:searchBar] && params[:searchBar][:placeholder]
12
- searchBar.placeholder = params[:searchBar][:placeholder]
13
- end
14
-
15
- @contactsSearchDisplayController = UISearchDisplayController.alloc.initWithSearchBar(searchBar, contentsController: params[:contentController])
16
- @contactsSearchDisplayController.delegate = params[:delegate]
17
- @contactsSearchDisplayController.searchResultsDataSource = params[:searchResultsDataSource]
18
- @contactsSearchDisplayController.searchResultsDelegate = params[:searchResultsDelegate]
19
-
20
- self.tableView.tableHeaderView = searchBar
21
- end
22
-
23
- def searchDisplayController(controller, shouldReloadTableForSearchString:searchString)
24
- @mt_filtered_data = nil
25
- @mt_filtered_data = []
26
-
27
- @mt_table_view_groups.each do |section|
28
- newSection = {}
29
- newSection[:cells] = []
30
-
31
- section[:cells].each do |cell|
32
- if cell[:title].to_s.downcase.strip.include?(searchString.downcase.strip)
33
- newSection[:cells] << cell
34
- end
35
- end
36
-
37
- if newSection[:cells] && newSection[:cells].length > 0
38
- newSection[:title] = section[:title]
39
- @mt_filtered_data << newSection
40
- end
41
- end
42
-
43
- true
44
- end
45
-
46
- def searchDisplayControllerWillEndSearch(controller)
47
- @mt_filtered = false
48
- @mt_filtered_data = nil
49
- self.tableView.setScrollEnabled true
50
- end
51
-
52
- def searchDisplayControllerWillBeginSearch(controller)
53
- @mt_filtered = true
54
- @mt_filtered_data = []
55
- self.tableView.setScrollEnabled false
56
- end
57
- end
58
- end
@@ -1,219 +0,0 @@
1
- module ProMotion::MotionTable
2
- module SectionedTable
3
- # @param [Array] Array of table data
4
- # @returns [UITableView] delegated to self
5
- def createTableViewFromData(data)
6
- setTableViewData data
7
- return tableView
8
- end
9
-
10
- def updateTableViewData(data)
11
- setTableViewData data
12
- self.tableView.reloadData
13
- end
14
-
15
- def setTableViewData(data)
16
- @mt_table_view_groups = data
17
- end
18
-
19
- def numberOfSectionsInTableView(tableView)
20
- if @mt_filtered
21
- return @mt_filtered_data.length if @mt_filtered_data
22
- else
23
- return @mt_table_view_groups.length if @mt_table_view_groups
24
- end
25
- 0
26
- end
27
-
28
- # Number of cells
29
- def tableView(tableView, numberOfRowsInSection:section)
30
- return sectionAtIndex(section)[:cells].length if sectionAtIndex(section) && sectionAtIndex(section)[:cells]
31
- 0
32
- end
33
-
34
- def tableView(tableView, titleForHeaderInSection:section)
35
- return sectionAtIndex(section)[:title] if sectionAtIndex(section) && sectionAtIndex(section)[:title]
36
- end
37
-
38
- # Set table_data_index if you want the right hand index column (jumplist)
39
- def sectionIndexTitlesForTableView(tableView)
40
- if self.respond_to?(:table_data_index)
41
- self.table_data_index
42
- end
43
- end
44
-
45
- def tableView(tableView, cellForRowAtIndexPath:indexPath)
46
- # Aah, magic happens here...
47
-
48
- dataCell = cellAtSectionAndIndex(indexPath.section, indexPath.row)
49
- return UITableViewCell.alloc.init unless dataCell
50
- dataCell[:cellStyle] ||= UITableViewCellStyleDefault
51
- dataCell[:cellIdentifier] ||= "Cell"
52
- cellIdentifier = dataCell[:cellIdentifier]
53
- dataCell[:cellClass] ||= PM::TableViewCell
54
-
55
- tableCell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier)
56
- unless tableCell
57
- tableCell = dataCell[:cellClass].alloc.initWithStyle(dataCell[:cellStyle], reuseIdentifier:cellIdentifier)
58
-
59
- # Add optimizations here
60
- tableCell.layer.masksToBounds = true if dataCell[:masksToBounds]
61
- tableCell.backgroundColor = dataCell[:backgroundColor] if dataCell[:backgroundColor]
62
- tableCell.selectionStyle = dataCell[:selectionStyle] if dataCell[:selectionStyle]
63
- tableCell.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin
64
- end
65
-
66
- if dataCell[:cellClassAttributes]
67
- set_cell_attributes tableCell, dataCell[:cellClassAttributes]
68
- end
69
-
70
- if dataCell[:accessoryView]
71
- tableCell.accessoryView = dataCell[:accessoryView]
72
- tableCell.accessoryView.autoresizingMask = UIViewAutoresizingFlexibleWidth
73
- end
74
-
75
- if dataCell[:accessory] && dataCell[:accessory] == :switch
76
- switchView = UISwitch.alloc.initWithFrame(CGRectZero)
77
- switchView.addTarget(self, action: "accessoryToggledSwitch:", forControlEvents:UIControlEventValueChanged);
78
- switchView.on = true if dataCell[:accessoryDefault]
79
- tableCell.accessoryView = switchView
80
- end
81
-
82
- if dataCell[:subtitle]
83
- tableCell.detailTextLabel.text = dataCell[:subtitle]
84
- tableCell.detailTextLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth
85
- end
86
-
87
- tableCell.selectionStyle = UITableViewCellSelectionStyleNone if dataCell[:no_select]
88
-
89
- if dataCell[:remoteImage]
90
- if tableCell.imageView.respond_to?("setImageWithURL:placeholderImage:")
91
- url = dataCell[:remoteImage][:url]
92
- url = NSURL.URLWithString(url) unless url.is_a?(NSURL)
93
- placeholder = dataCell[:remoteImage][:placeholder]
94
- placeholder = UIImage.imageNamed(placeholder) if placeholder.is_a?(String)
95
-
96
- tableCell.image_size = dataCell[:remoteImage][:size] if dataCell[:remoteImage][:size] && tableCell.respond_to?("image_size=")
97
- tableCell.imageView.setImageWithURL(url, placeholderImage: placeholder)
98
- tableCell.imageView.layer.masksToBounds = true
99
- tableCell.imageView.layer.cornerRadius = dataCell[:remoteImage][:radius]
100
- else
101
- ProMotion::MotionTable::Console.log("ProMotion Warning: to use remoteImage with TableScreen you need to include the CocoaPod 'SDWebImage'.", withColor: MotionTable::Console::RED_COLOR)
102
- end
103
- elsif dataCell[:image]
104
- tableCell.imageView.layer.masksToBounds = true
105
- tableCell.imageView.image = dataCell[:image][:image]
106
- tableCell.imageView.layer.cornerRadius = dataCell[:image][:radius] if dataCell[:image][:radius]
107
- end
108
-
109
- if dataCell[:subViews]
110
- tag_number = 0
111
- dataCell[:subViews].each do |view|
112
- # Remove an existing view at that tag number
113
- tag_number += 1
114
- existing_view = tableCell.viewWithTag(tag_number)
115
- existing_view.removeFromSuperview if existing_view
116
-
117
- # Add the subview if it exists
118
- if view
119
- view.tag = tag_number
120
- tableCell.addSubview view
121
- end
122
- end
123
- end
124
-
125
- if dataCell[:details]
126
- tableCell.addSubview dataCell[:details][:image]
127
- end
128
-
129
- if dataCell[:styles] && dataCell[:styles][:textLabel] && dataCell[:styles][:textLabel][:frame]
130
- ui_label = false
131
- tableCell.contentView.subviews.each do |view|
132
- if view.is_a? UILabel
133
- ui_label = true
134
- view.text = dataCell[:styles][:textLabel][:text]
135
- end
136
- end
137
-
138
- unless ui_label == true
139
- label ||= UILabel.alloc.initWithFrame(CGRectZero)
140
- set_cell_attributes label, dataCell[:styles][:textLabel]
141
- tableCell.contentView.addSubview label
142
- end
143
- # hackery
144
- tableCell.textLabel.textColor = UIColor.clearColor
145
- else
146
- cell_title = dataCell[:title]
147
- cell_title ||= ""
148
- tableCell.textLabel.text = cell_title
149
- end
150
-
151
- return tableCell
152
- end
153
-
154
- def sectionAtIndex(index)
155
- if @mt_filtered
156
- @mt_filtered_data.at(index)
157
- else
158
- @mt_table_view_groups.at(index)
159
- end
160
- end
161
-
162
- def cellAtSectionAndIndex(section, index)
163
- return sectionAtIndex(section)[:cells].at(index) if sectionAtIndex(section) && sectionAtIndex(section)[:cells]
164
- end
165
-
166
- def tableView(tableView, didSelectRowAtIndexPath:indexPath)
167
- cell = cellAtSectionAndIndex(indexPath.section, indexPath.row)
168
- tableView.deselectRowAtIndexPath(indexPath, animated: true);
169
- cell[:arguments] ||= {}
170
- cell[:arguments][:cell] = cell if cell[:arguments].is_a?(Hash)
171
- triggerAction(cell[:action], cell[:arguments]) if cell[:action]
172
- end
173
-
174
- def accessoryToggledSwitch(switch)
175
- tableCell = switch.superview
176
- indexPath = tableCell.superview.indexPathForCell(tableCell)
177
-
178
- dataCell = cellAtSectionAndIndex(indexPath.section, indexPath.row)
179
- dataCell[:arguments] = {} unless dataCell[:arguments]
180
- dataCell[:arguments][:value] = switch.isOn if dataCell[:arguments].is_a? Hash
181
-
182
- triggerAction(dataCell[:accessoryAction], dataCell[:arguments]) if dataCell[:accessoryAction]
183
-
184
- end
185
-
186
- def triggerAction(action, arguments)
187
- if self.respond_to?(action)
188
- expectedArguments = self.method(action).arity
189
- if expectedArguments == 0
190
- self.send(action)
191
- elsif expectedArguments == 1 || expectedArguments == -1
192
- self.send(action, arguments)
193
- else
194
- ProMotion::MotionTable::Console.log("MotionTable warning: #{action} expects #{expectedArguments} arguments. Maximum number of required arguments for an action is 1.", withColor: MotionTable::Console::RED_COLOR)
195
- end
196
- else
197
- ProMotion::MotionTable::Console.log(self, actionNotImplemented: action)
198
- end
199
- end
200
-
201
- def set_cell_attributes(element, args = {})
202
- args.each do |k, v|
203
- if v.is_a? Hash
204
- v.each do
205
- sub_element = element.send("#{k}")
206
- set_cell_attributes(sub_element, v)
207
- end
208
- # v.each do |k2, v2|
209
- # sub_element = element.send("#{k}")
210
- # sub_element.send("#{k2}=", v2) if sub_element.respond_to?("#{k2}=")
211
- # end
212
- else
213
- element.send("#{k}=", v) if element.respond_to?("#{k}=")
214
- end
215
- end
216
- element
217
- end
218
- end
219
- end
@@ -1,12 +0,0 @@
1
- module ProMotion::MotionTable
2
- module GroupedTable
3
- include ::ProMotion::MotionTable::SectionedTable
4
-
5
- def tableView
6
- @tableView ||= UITableView.alloc.initWithFrame(self.view.frame, style:UITableViewStyleGrouped)
7
- @tableView.dataSource = self;
8
- @tableView.delegate = self;
9
- return @tableView
10
- end
11
- end
12
- end
@@ -1,13 +0,0 @@
1
- module ProMotion::MotionTable
2
- module PlainTable
3
- include ::ProMotion::MotionTable::SectionedTable
4
- include ::ProMotion::MotionTable::SearchableTable
5
-
6
- def tableView
7
- @tableView ||= UITableView.alloc.initWithFrame(self.view.frame, style:UITableViewStylePlain)
8
- @tableView.dataSource = self;
9
- @tableView.delegate = self;
10
- return @tableView
11
- end
12
- end
13
- end
@@ -1,26 +0,0 @@
1
- module ProMotion::MotionTable
2
- # @author Silas J Matson
3
- #
4
- # Provides coloring for displaying messages in console when running in the simulator
5
- class Console
6
- NAME = "MotionTable::Console"
7
- DEFAULT_COLOR = [ '', '' ]
8
- RED_COLOR = [ "\e[0;31m", "\e[0m" ] # Must be in double quotes
9
- GREEN_COLOR = [ "\e[0;32m", "\e[0m" ]
10
- PURPLE_COLOR = [ "\e[0;35m", "\e[0m" ]
11
-
12
- class << self
13
- def log(obj, actionNotImplemented:action)
14
- log " actionNotImplemented -- the action :#{action} is not implemented in #{obj.class.to_s}", withColor: RED_COLOR
15
- end
16
-
17
- def log(log, withColor:color)
18
- puts color[0] + NAME + log + color[1]
19
- end
20
-
21
- def log(log)
22
- log(log, withColor: DEFAULT_COLOR)
23
- end
24
- end
25
- end
26
- end
@@ -1,29 +0,0 @@
1
- module ProMotion
2
- module SystemHelper
3
- module_function
4
-
5
- def ios_version
6
- UIDevice.currentDevice.systemVersion
7
- end
8
-
9
- def ios_version_is?(version)
10
- ios_version == version
11
- end
12
-
13
- def ios_version_greater?(version)
14
- ios_version > version
15
- end
16
-
17
- def ios_version_greater_eq?(version)
18
- ios_version >= version
19
- end
20
-
21
- def ios_version_less?(version)
22
- ios_version < version
23
- end
24
-
25
- def ios_version_less_eq?(version)
26
- ios_version <= version
27
- end
28
- end
29
- end