ProMotion-XLForm 0.0.10 → 0.0.11
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 +4 -4
- data/README.md +58 -29
- data/lib/ProMotion-XLForm.rb +1 -5
- data/lib/ProMotion/XLForm/cells/xl_form_image_selector_cell.rb +16 -7
- data/lib/ProMotion/XLForm/xl_form_cell_builder.rb +6 -0
- data/lib/ProMotion/XLForm/xl_form_helper.rb +2 -0
- data/lib/ProMotion/XLForm/xl_form_patch.rb +15 -10
- data/lib/ProMotion/XLForm/xl_form_screen.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4953d1198db5beb180fb0a772c4ed0f4974ffff
|
4
|
+
data.tar.gz: 15c71318fed226e75954bf103ab07671142fbc17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b19ad4e1ba5c0017ac3955ebae76adf3f733c87289b2a1b59a4aaf948886e95635cb6e0092510d1962f6cd71811f1e27cc61e54b5a2460ad61a5c7287a158486
|
7
|
+
data.tar.gz: 8fe4483864350bf7a1866bb099710475d763e6ee10e41de5e82d72e75555fbc132a220a1feaabd67e3e4fafe48ec5293855c009b8202e804399783b9412a8537
|
data/README.md
CHANGED
@@ -26,36 +26,40 @@ To create a form, create a new `PM::XLFormScreen` and implement `form_data`.
|
|
26
26
|
```ruby
|
27
27
|
class TestFormScreen < PM::XLFormScreen
|
28
28
|
def form_data
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
29
|
+
genders = [
|
30
|
+
{ id: :male, name: 'Male' },
|
31
|
+
{ id: :female, name: 'Female' },
|
32
|
+
{ id: :other, name: 'Other' },
|
33
|
+
]
|
34
|
+
|
35
|
+
[
|
36
|
+
{
|
37
|
+
title: 'Account information',
|
38
|
+
cells: [
|
39
|
+
{
|
40
|
+
title: 'Email',
|
41
|
+
name: :email,
|
42
|
+
type: :email,
|
43
|
+
placeholder: 'Enter your email',
|
44
|
+
required: true
|
45
|
+
},
|
46
|
+
{
|
47
|
+
title: 'Name',
|
48
|
+
name: :name,
|
49
|
+
type: :text,
|
50
|
+
value: 'Default value'
|
51
|
+
},
|
52
|
+
{
|
53
|
+
title: 'Gender',
|
54
|
+
name: :gender,
|
55
|
+
type: :selector_push,
|
56
|
+
options: Hash[genders.map do |gender|
|
57
|
+
[gender[:id], gender[:name]]
|
58
|
+
end]
|
54
59
|
}
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
]
|
60
|
+
]
|
61
|
+
}
|
62
|
+
]
|
59
63
|
end
|
60
64
|
end
|
61
65
|
```
|
@@ -121,6 +125,31 @@ class TestFormScreen < PM::XLFormScreen
|
|
121
125
|
end
|
122
126
|
```
|
123
127
|
|
128
|
+
If you don't want the default navigation controller buttons, you could add something like
|
129
|
+
|
130
|
+
```ruby
|
131
|
+
|
132
|
+
form_options on_save: :my_save_method
|
133
|
+
|
134
|
+
def form_data
|
135
|
+
[
|
136
|
+
{
|
137
|
+
title: 'Save',
|
138
|
+
name: :save,
|
139
|
+
type: :button,
|
140
|
+
on_click: -> (cell) {
|
141
|
+
on_save(nil)
|
142
|
+
}
|
143
|
+
}
|
144
|
+
]
|
145
|
+
end
|
146
|
+
|
147
|
+
def my_save_method(values)
|
148
|
+
mp values
|
149
|
+
end
|
150
|
+
|
151
|
+
```
|
152
|
+
|
124
153
|
### Getting values
|
125
154
|
|
126
155
|
You can get the values of your form with `values`. You can call `dismiss_keyboard` before before calling `values` to ensure you capture the input from the currently focused form element.
|
data/lib/ProMotion-XLForm.rb
CHANGED
@@ -17,21 +17,17 @@ Motion::Project::App.setup do |app|
|
|
17
17
|
app.files << File.join(lib_dir_path, "ProMotion/XLForm/xl_form_helper.rb")
|
18
18
|
app.files << File.join(lib_dir_path, "ProMotion/XLForm/xl_form_cell_builder.rb")
|
19
19
|
app.files << File.join(lib_dir_path, "ProMotion/XLForm/xl_form_section_builder.rb")
|
20
|
-
|
21
20
|
app.files << File.join(lib_dir_path, "ProMotion/XLForm/cells/xl_form_cell.rb")
|
22
21
|
app.files << File.join(lib_dir_path, "ProMotion/XLForm/cells/xl_form_image_selector_cell.rb")
|
23
22
|
app.files << File.join(lib_dir_path, "ProMotion/XLForm/cells/xl_form_color_selector_cell.rb")
|
24
|
-
|
25
23
|
app.files << File.join(lib_dir_path, "ProMotion/XLForm/value_transformer.rb")
|
26
|
-
|
27
24
|
app.files << File.join(lib_dir_path, "ProMotion/XLForm/validators/validator.rb")
|
28
25
|
app.files << File.join(lib_dir_path, "ProMotion/XLForm/validators/url_validator.rb")
|
29
26
|
app.files << File.join(lib_dir_path, "ProMotion/XLForm/validators/regex_validator.rb")
|
30
|
-
|
31
27
|
app.files << File.join(lib_dir_path, "ProMotion/XLForm/ui_alert_controller.rb")
|
32
28
|
|
33
29
|
app.pods do
|
34
|
-
pod 'XLForm',
|
30
|
+
pod 'XLForm', :head
|
35
31
|
pod 'RSColorPicker'
|
36
32
|
end
|
37
33
|
end
|
@@ -1,10 +1,14 @@
|
|
1
1
|
module ProMotion
|
2
2
|
class XLFormImageSelectorCell < XLFormCell
|
3
3
|
|
4
|
+
def self.formDescriptorCellHeightForRowDescriptor(_)
|
5
|
+
100
|
6
|
+
end
|
7
|
+
|
4
8
|
def setup(data_cell, screen)
|
5
9
|
super
|
6
10
|
|
7
|
-
size = (data_cell[:height] || 100) - 20
|
11
|
+
size = (data_cell[:height] || 100) - 20
|
8
12
|
|
9
13
|
@imageview = UIImageView.alloc.initWithFrame([[0, 0], [size, size]])
|
10
14
|
self.accessoryView = @imageview
|
@@ -12,6 +16,7 @@ module ProMotion
|
|
12
16
|
self.selectionStyle = UITableViewCellSelectionStyleNone
|
13
17
|
self.backgroundColor = UIColor.whiteColor
|
14
18
|
self.separatorInset = UIEdgeInsetsZero
|
19
|
+
self.editingAccessoryView = self.accessoryView
|
15
20
|
end
|
16
21
|
|
17
22
|
def update
|
@@ -45,7 +50,9 @@ module ProMotion
|
|
45
50
|
end
|
46
51
|
|
47
52
|
present = -> {
|
48
|
-
|
53
|
+
Dispatch::Queue.main.async do
|
54
|
+
self.formViewController.presentViewController(alert, animated: true, completion: nil)
|
55
|
+
end
|
49
56
|
}
|
50
57
|
if self.formViewController.presentedViewController
|
51
58
|
self.formViewController.dismissViewControllerAnimated(true, completion: present)
|
@@ -116,10 +123,12 @@ module ProMotion
|
|
116
123
|
|
117
124
|
if UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad
|
118
125
|
@popover_controller = UIPopoverController.alloc.initWithContentViewController(@image_picker)
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
126
|
+
Dispatch::Queue.main.async do
|
127
|
+
@popover_controller.presentPopoverFromRect(self.contentView.frame,
|
128
|
+
inView: self.formViewController.view,
|
129
|
+
permittedArrowDirections: UIPopoverArrowDirectionAny,
|
130
|
+
animated: true)
|
131
|
+
end
|
123
132
|
else
|
124
133
|
self.formViewController.presentViewController(@image_picker,
|
125
134
|
animated: true,
|
@@ -136,7 +145,7 @@ module ProMotion
|
|
136
145
|
else
|
137
146
|
imageToUse = originalImage
|
138
147
|
end
|
139
|
-
|
148
|
+
|
140
149
|
self.value = imageToUse
|
141
150
|
@imageview.image = imageToUse
|
142
151
|
|
@@ -68,6 +68,12 @@ module ProMotion
|
|
68
68
|
cell_class = XLFormColorSelectorCell if cell_class.nil?
|
69
69
|
end
|
70
70
|
|
71
|
+
# image accessory
|
72
|
+
if cell_data[:image] && !cell_data[:image].is_a?(Hash)
|
73
|
+
accessory_image = cell_data[:image].is_a?(UIImage) ? cell_data[:image] : UIImage.imageNamed(cell_data[:image])
|
74
|
+
cell.cellConfigAtConfigure.setObject(accessory_image, forKey: "image")
|
75
|
+
end
|
76
|
+
|
71
77
|
cell.cellClass = cell_class if cell_class
|
72
78
|
|
73
79
|
# subcells
|
@@ -60,17 +60,17 @@ class XLFormRowDescriptor
|
|
60
60
|
end
|
61
61
|
|
62
62
|
if self.cell && self.cell.respond_to?(:setup)
|
63
|
-
self.cell.setup(cell_data, form_controller)
|
63
|
+
self.cell.setup(cell_data, form_controller)
|
64
64
|
end
|
65
65
|
self.configureCellAtCreationTime
|
66
66
|
end
|
67
|
-
|
68
|
-
self.cell
|
67
|
+
|
68
|
+
self.cell
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
72
|
class XLFormSectionDescriptor
|
73
|
-
attr_accessor :section_data
|
73
|
+
attr_accessor :section_data
|
74
74
|
|
75
75
|
def self.section(section_data)
|
76
76
|
title = section_data[:title]
|
@@ -81,21 +81,26 @@ class XLFormSectionDescriptor
|
|
81
81
|
|
82
82
|
section = XLFormSectionDescriptor.formSectionWithTitle(title, sectionOptions: options, sectionInsertMode: insert_mode)
|
83
83
|
section.section_data = section_data
|
84
|
-
|
84
|
+
|
85
85
|
section
|
86
86
|
end
|
87
87
|
|
88
88
|
def options=(value)
|
89
|
-
@
|
89
|
+
@section_options = self.class.parse_section_options(value)
|
90
90
|
end
|
91
91
|
|
92
|
-
|
93
|
-
|
94
|
-
|
92
|
+
# Since `sectionOptions` is a property on the Objective-C class and not a
|
93
|
+
# Ruby method we can't use `super` to fallback when overriding the method.
|
94
|
+
# To achieve the same thing we create an alias and use that instead.
|
95
|
+
alias :originalSectionOptions :sectionOptions
|
95
96
|
|
97
|
+
# This property/method is used in the Objective-C initializer and is called
|
98
|
+
# before we ever have a chance to set @section_options so we need to be able
|
99
|
+
# to fallback to the original.
|
96
100
|
def sectionOptions
|
97
|
-
|
101
|
+
@section_options || originalSectionOptions
|
98
102
|
end
|
103
|
+
alias_method :options, :sectionOptions
|
99
104
|
|
100
105
|
def self.parse_section_options(options)
|
101
106
|
return section_options(:none) if options.nil?
|
@@ -188,7 +188,7 @@ module ProMotion
|
|
188
188
|
def enabled?
|
189
189
|
!self.form.isDisabled
|
190
190
|
end
|
191
|
-
|
191
|
+
|
192
192
|
# dismiss keyboard
|
193
193
|
def dismiss_keyboard
|
194
194
|
self.view.endEditing true
|
@@ -283,7 +283,7 @@ module ProMotion
|
|
283
283
|
cell_class = cell.class
|
284
284
|
if cell_class.respond_to?(:formDescriptorCellHeightForRowDescriptor)
|
285
285
|
return cell_class.formDescriptorCellHeightForRowDescriptor(row)
|
286
|
-
elsif row.respond_to?(:cell_data) && row.cell_data[:height]
|
286
|
+
elsif row.respond_to?(:cell_data) && row.cell_data && row.cell_data[:height]
|
287
287
|
return row.cell_data[:height]
|
288
288
|
end
|
289
289
|
self.tableView.rowHeight
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ProMotion-XLForm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Michotte
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ProMotion
|