Merge pull request #32404 from mathieumahe/master

Extract the confirm call in its own, overridable method in rails_ujs
This commit is contained in:
Guillermo Iguaran 2018-04-02 10:50:10 -05:00 committed by GitHub
commit 91f4e335b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 39 additions and 1 deletions

View File

@ -1,3 +1,11 @@
* Extract the `confirm` call in its own, overridable method in `rails_ujs`.
Example :
Rails.confirm = function(message, element) {
return (my_bootstrap_modal_confirm(message));
}
*Mathieu Mahé*
* Enable select tag helper to mark `prompt` option as `selected` and/or `disabled` for `required`
field. Example:

View File

@ -5,6 +5,10 @@
Rails.handleConfirm = (e) ->
stopEverything(e) unless allowAction(this)
# Default confirm dialog, may be overridden with custom confirm dialog in Rails.confirm
Rails.confirm = (message, element) ->
confirm(message)
# For 'data-confirm' attribute:
# - Fires `confirm` event
# - Shows the confirmation dialog
@ -20,7 +24,7 @@ allowAction = (element) ->
answer = false
if fire(element, 'confirm')
try answer = confirm(message)
try answer = Rails.confirm(message, element)
callback = fire(element, 'confirm:complete', [answer])
answer and callback

View File

@ -314,3 +314,29 @@ asyncTest('clicking on the children of a disabled button should not trigger a co
start()
}, 50)
})
asyncTest('clicking on a link with data-confirm attribute with custom confirm handler. Confirm yes.', 7, function() {
var message, element
// redefine confirm function so we can make sure it's not called
window.confirm = function(msg) {
ok(false, 'confirm dialog should not be called')
}
// custom auto-confirm:
Rails.confirm = function(msg, elem) { message = msg; element = elem; return true }
$('a[data-confirm]')
.bindNative('confirm:complete', function(e, data) {
App.assertCallbackInvoked('confirm:complete')
ok(data == true, 'confirm:complete passes in confirm answer (true)')
})
.bindNative('ajax:success', function(e, data, status, xhr) {
App.assertCallbackInvoked('ajax:success')
App.assertRequestPath(data, '/echo')
App.assertGetRequest(data)
equal(message, 'Are you absolutely sure?')
equal(element, $('a[data-confirm]').get(0))
start()
})
.triggerNative('click')
})