ProMotion 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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