RedAlert 1.2 → 1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -0
- data/lib/project/action_sheet_provider.rb +13 -1
- data/lib/project/alert_constants.rb +9 -1
- data/lib/project/alert_controller_provider.rb +28 -0
- data/lib/project/field_templates.rb +3 -3
- data/lib/project/red_alert.rb +11 -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: 02b0f4505dfe14f9f67e9c99070dff3b86ca4a5c
|
4
|
+
data.tar.gz: bf71b9ea2ca435a52add2bf6f55a5072c7a22f1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af89a90bf422ae0cc3fb8047477b6e296b8f23328add78bae48d4053b51fdbf8395db3845e9ef32d351e2f656d0021fb35b338bd5309931ba6d087cf4b9b18f1
|
7
|
+
data.tar.gz: 9250c0b48d2d9cf6d5c36b1b988e2299e78ad52d19e0b9e6b5f6557150872dc43fcc32b67f83358e6383615592d3423eb862ceccc904952223238de7d6b8320c
|
data/README.md
CHANGED
@@ -99,6 +99,20 @@ You can even use the `make_button` helper to create custom buttons to add:
|
|
99
99
|
rmq.app.alert(title: "Actions!", message: "Actions created with `make_button` helper.", actions: button_list)
|
100
100
|
```
|
101
101
|
|
102
|
+
|
103
|
+
If you want to present your alert in :sheet style and you are on iPad, you have to provide the `:source` for the popover (either a UIView or a UIBarButtonItem)
|
104
|
+
```ruby
|
105
|
+
rmq.append(UIButton, :my_button).on(:tap) do |sender|
|
106
|
+
rmq.app.alert(title: "Actions!", message: "Alert from a Popover.", actions: [:ok, :cancel], style:sheet, source: sender)
|
107
|
+
end
|
108
|
+
```
|
109
|
+
|
110
|
+
*iOS 8+ options*
|
111
|
+
These options work only on iOS 8+
|
112
|
+
* `:modal` will prevent the popover to be close by tapping outside the popover
|
113
|
+
* `:arrow_direction` will force the direction of the popover arrow. Valid values are `:up`, `:down`, `:left`, `:right` or `:any`
|
114
|
+
|
115
|
+
|
102
116
|
## Available Templates
|
103
117
|
|
104
118
|
Button templates are provided [HERE](https://github.com/GantMan/RedAlert/blob/master/lib/project/button_templates.rb)
|
@@ -143,6 +157,8 @@ Because capabilities of iOS 7 & 8 alert-components are different, just a few edg
|
|
143
157
|
|
144
158
|
**Ability to add textfields to alerts (Like Username/Password) by [Derek Greenberg](https://github.com/GantMan/RedAlert/pull/10) and notable work by [Jon Silverman](https://github.com/GantMan/RedAlert/pull/9)**
|
145
159
|
|
160
|
+
**iPad and popover support by [Benjamin Michotte](https://github.com/GantMan/RedAlert/pull/17)**
|
161
|
+
|
146
162
|
Feel free to read up on UIAlertController to see what all is wrapped up in this gem.
|
147
163
|
* [Hayageek](http://hayageek.com/uialertcontroller-example-ios/)
|
148
164
|
* [NSHipster](http://nshipster.com/uialertcontroller/)
|
@@ -10,6 +10,8 @@ module RubyMotionQuery
|
|
10
10
|
@actions = actions
|
11
11
|
@opts = opts
|
12
12
|
|
13
|
+
raise ArgumentError.new "Please provide a :source view to use :sheet on iPad" if rmq.device.ipad? and !@opts[:source]
|
14
|
+
|
13
15
|
# grab the first cancel action
|
14
16
|
cancel_action = actions.find { |action| action.cancel? }
|
15
17
|
|
@@ -43,7 +45,17 @@ module RubyMotionQuery
|
|
43
45
|
def show
|
44
46
|
# when we show, the view controller will disappear because a different _UIAlertOverlayWindow window will take its place
|
45
47
|
@view_controller = rmq.view_controller
|
46
|
-
|
48
|
+
|
49
|
+
if rmq.device.ipad?
|
50
|
+
source = @opts[:source]
|
51
|
+
if source.is_a?(UIBarButtonItem)
|
52
|
+
@action_sheet.showFromBarButtonItem(source, animated: true)
|
53
|
+
else
|
54
|
+
@action_sheet.showFromRect(source.frame, inView: @view_controller.view, animated: true)
|
55
|
+
end
|
56
|
+
else
|
57
|
+
@action_sheet.showInView(@view_controller.view)
|
58
|
+
end
|
47
59
|
end
|
48
60
|
|
49
61
|
private
|
@@ -12,5 +12,13 @@ module RubyMotionQuery
|
|
12
12
|
destructive: UIAlertActionStyleDestructive
|
13
13
|
}
|
14
14
|
|
15
|
+
ALERT_POPOVER_ARROW_DIRECTION = {
|
16
|
+
up: UIPopoverArrowDirectionUp,
|
17
|
+
down: UIPopoverArrowDirectionDown,
|
18
|
+
left: UIPopoverArrowDirectionLeft,
|
19
|
+
right: UIPopoverArrowDirectionRight,
|
20
|
+
any: UIPopoverArrowDirectionAny
|
21
|
+
}
|
22
|
+
|
15
23
|
end
|
16
|
-
end
|
24
|
+
end
|
@@ -47,6 +47,34 @@ module RubyMotionQuery
|
|
47
47
|
@alert_controller.addAction action
|
48
48
|
end
|
49
49
|
|
50
|
+
# popover
|
51
|
+
if @opts[:style] == :sheet and rmq.device.ipad?
|
52
|
+
raise ArgumentError.new "Please provide a :source view to use :sheet on iPad" unless @opts[:source]
|
53
|
+
source = @opts[:source]
|
54
|
+
@alert_controller.setModalPresentationStyle(UIModalPresentationPopover)
|
55
|
+
if @opts[:modal]
|
56
|
+
@alert_controller.setModalInPopover(true)
|
57
|
+
end
|
58
|
+
if source.is_a?(UIBarButtonItem)
|
59
|
+
@alert_controller.popoverPresentationController.barButtonItem = source
|
60
|
+
else
|
61
|
+
@alert_controller.popoverPresentationController.sourceView = source
|
62
|
+
end
|
63
|
+
@alert_controller.popoverPresentationController.sourceRect = source.bounds
|
64
|
+
|
65
|
+
if @opts[:arrow_direction]
|
66
|
+
directions = @opts[:arrow_direction]
|
67
|
+
unless directions.is_a?(Array)
|
68
|
+
directions = [directions]
|
69
|
+
end
|
70
|
+
arrow_direction = 0
|
71
|
+
directions.each do |direction|
|
72
|
+
arrow_direction |= RubyMotionQuery::AlertConstants::ALERT_POPOVER_ARROW_DIRECTION[direction]
|
73
|
+
end
|
74
|
+
@alert_controller.popoverPresentationController.permittedArrowDirections = arrow_direction
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
50
78
|
self
|
51
79
|
end
|
52
80
|
|
@@ -6,7 +6,7 @@ module RubyMotionQuery
|
|
6
6
|
# 2 - Add the test
|
7
7
|
# 3 - Add symbol to the README.md list
|
8
8
|
|
9
|
-
def self.add_template_fieldset(template)
|
9
|
+
def self.add_template_fieldset(template, opts={})
|
10
10
|
|
11
11
|
login = NSLocalizedString("Login", nil)
|
12
12
|
password = NSLocalizedString("Password", nil)
|
@@ -19,13 +19,13 @@ module RubyMotionQuery
|
|
19
19
|
fieldset[:alert_view_style] = UIAlertViewStylePlainTextInput
|
20
20
|
fieldset[:fields] =
|
21
21
|
[
|
22
|
-
rmq.app.make_field(:text, keyboard_type: :default, secure_text_entry: false, placeholder: '')
|
22
|
+
rmq.app.make_field(:text, keyboard_type: :default, secure_text_entry: false, placeholder: opts.fetch(:placeholder,''))
|
23
23
|
]
|
24
24
|
when :secure
|
25
25
|
fieldset[:alert_view_style] = UIAlertViewStyleSecureTextInput
|
26
26
|
fieldset[:fields] =
|
27
27
|
[
|
28
|
-
rmq.app.make_field(:text, keyboard_type: :default, secure_text_entry: true, placeholder: '')
|
28
|
+
rmq.app.make_field(:text, keyboard_type: :default, secure_text_entry: true, placeholder: opts.fetch(:placeholder,''))
|
29
29
|
]
|
30
30
|
when :login
|
31
31
|
fieldset[:alert_view_style] = UIAlertViewStyleLoginAndPasswordInput
|
data/lib/project/red_alert.rb
CHANGED
@@ -19,8 +19,17 @@ module RubyMotionQuery
|
|
19
19
|
# ------------------------------------
|
20
20
|
opts = {message: opts} if opts.is_a? String
|
21
21
|
opts = {style: :alert, animated: true, show_now: true}.merge(opts)
|
22
|
-
|
22
|
+
# Ability to make no message
|
23
|
+
opts[:message] = if opts.has_key?(:message)
|
24
|
+
opts[:message].nil? ? nil : opts[:message].to_s
|
25
|
+
else
|
26
|
+
NSLocalizedString("Alert!", nil)
|
27
|
+
end
|
28
|
+
|
23
29
|
opts[:style] = VALID_STYLES.include?(opts[:style]) ? opts[:style] : :alert
|
30
|
+
if opts[:style] == :sheet and rmq.device.ipad? and opts[:source].nil?
|
31
|
+
raise ArgumentError.new "Please provide a :source view to use :sheet on iPad"
|
32
|
+
end
|
24
33
|
opts[:fields] = opts[:style] == :custom && opts[:fields] ? opts[:fields] : {text: {placeholder: ''}}
|
25
34
|
api = rmq.device.ios_at_least?(8) ? :modern : :deprecated
|
26
35
|
api = :deprecated if rmq.device.ios_at_least?(8) && opts[:api] == :deprecated
|
@@ -47,7 +56,7 @@ module RubyMotionQuery
|
|
47
56
|
fieldset = {alert_view_style: UIAlertViewStyleDefault, fields: []}
|
48
57
|
|
49
58
|
if TEMPLATE_FIELD_STYLES.include?(opts[:style])
|
50
|
-
fieldset = add_template_fieldset(opts[:style])
|
59
|
+
fieldset = add_template_fieldset(opts[:style], opts)
|
51
60
|
elsif opts[:style] == :custom
|
52
61
|
fieldset = custom_fieldset(opts[:api], opts[:fields])
|
53
62
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: RedAlert
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gant Laborde
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby_motion_query
|