(function($) {
function showThrobber(element) {
$(element).after("");
$(element).attr('disabled', 'disabled');
}
function hideThrobber(element) {
$(element).nextAll('.throbber').remove();
$(element).removeAttr('disabled');
}
var ujsDialogElement = null; // the element that opened the dialog
var ujsSubmitElement = null; // the element that submitted a form
// called from dialog button value
function ujsSubmitDialogForm() {
$('.ui-dialog:visible form').first().submit();
}
// called from dialog button value
function ujsDialogClose() {
$('.ui-dialog-content:visible').dialog('destroy')
.addClass('ujs-dialog-hidden');
}
function ujsDialogOpen() {
if ($(this).parent().height() > $(window).height()) {
$(this).height($(window).height() * 0.8);
$(this).parent().css('top',
($(window).height() - $(this).parent().height()) / 2
);
$(this).css('overflow-y', 'auto');
}
var x = $(this).find('.ujs-dialog-x');
if (x.length) {
$(this).parent().append(x); // to keep it fixed to the dialog
// don't let the dialog be resized - the resize functionality
// clashes with the X close functionality
$(this).dialog('option', 'resizable', false);
}
}
function ujsDialogClick(event) {
ujsDialogElement = $(this);
var dialogID = $(this).data('dialog-id');
var dialogElement = $('#' + dialogID);
if (dialogID == 'next') dialogElement = $(this).next();
if ($(this).data('close-x')) {
dialogElement.prepend('');
}
var url = $(this).data('dialog-url');
var dialogOptions = $(this).data('dialog-options');
var open = dialogOptions['open'];
dialogOptions = $.extend(dialogOptions, {
'close': function() {
$(this).dialog('destroy').addClass('ujs-dialog-hidden');
if (url) $(this).remove();
},
'open': function() {
ujsDialogOpen.call(this);
if (open) {
var openFunc = eval(open);
openFunc.call(this);
}
}
});
if (dialogOptions.buttons) {
$.each(dialogOptions.buttons, function(index, element) {
if (element == 'submit') {
dialogOptions.buttons[index] = ujsSubmitDialogForm;
}
else if (element.click == 'submit') {
dialogOptions.buttons[index].click = ujsSubmitDialogForm;
}
else if (element == 'close') {
dialogOptions.buttons[index] = ujsDialogClose;
}
else if (element.click == 'close') {
dialogOptions.buttons[index].click = ujsDialogClose;
}
});
}
if (url) {
$(this).trigger('jqr.beforedialogopen');
$(document.body).append('
');
$(document.body).append('
');
if (dialogElement.length == 0) {
$('body').append("
");
dialogElement = $('#' + dialogID);
if ($(this).data('close-x')) {
dialogElement.prepend('');
}
}
dialogElement.load(url, function() {
$('.ui-widget-overlay').remove();
$('#remote-dialog-throbber').remove();
$(this).dialog(dialogOptions);
$(dialogElement).trigger('jqr.load');
});
}
else {
dialogElement.dialog(dialogOptions);
}
event.stopPropagation();
return false;
}
function ujsDialogCloseClick() {
ujsDialogClose();
return false;
}
function ujsSubmitClick(event) {
ujsSubmitElement = event.target;
}
function ujsButtonClick(event) {
var element = $(this);
element.uniqueId(); // to store for later
element.data('confirm', null); // we've already fired it
if ($.rails.allowAction(element)) {
// largely copied from rails_jquery.js
var href = element.data('url');
var method = element.data('method');
var csrf_token = $('meta[name=csrf-token]').attr('content');
var csrf_param = $('meta[name=csrf-param]').attr('content');
var form = $('');
var metadata_input =
'';
if (csrf_param !== undefined && csrf_token !== undefined) {
metadata_input += '';
}
form.hide().append(metadata_input).appendTo('body');
$(form).data(element.data()); // copy to form
$(form).data('remote', true);
$(form).addClass('ujs-ajax');
$(form).data('real-element', element.attr('id'));
form.submit();
}
event.preventDefault();
return false;
}
function ujsAjaxBeforeSend() {
var element = $(this);
if (element.data('real-element')) {
element = $('#' + element.data('real-element'));
}
if (element.is('form') &&
$(ujsSubmitElement).parents('form').index(element) >= 0)
element = ujsSubmitElement;
showThrobber(element);
}
function ujsAjaxSuccess(evt, data, status, xhr) {
var element = $(this);
if (element.data('real-element')) {
element = $('#' + element.data('real-element'));
}
var disableElement = element;
if (element.is('form') &&
$(ujsSubmitElement).parents('form').index(element) >= 0)
disableElement = ujsSubmitElement;
hideThrobber(disableElement);
var targetElement = element;
// if this was sent from a dialog, close the dialog and look at the
// element that opened it for update/append/delete callbacks.
if ($('.ui-dialog:visible').length) {
if (element.data('use-dialog-opener'))
targetElement = ujsDialogElement;
if (element.data('close-dialog'))
ujsDialogClose();
}
if (element.data('callback')) {
var callback = eval(element.data('callback'));
callback.call(targetElement, data);
}
else if (data && data.trim().charAt(0) != '<' && data != 'success') {
alert(data);
return;
}
var selector = element.data('selector');
var target = null;
if (selector) {
if (selector[0] == '#') target = $(selector);
else target = $(targetElement).parents(selector);
switch (element.data('result-method')) {
case 'update':
target = $(data).replaceAll(target);
target.trigger('jqr.load');
break;
case 'append':
target.append(data);
target.trigger('jqr.load');
break;
case 'delete':
target.fadeOut(500, function() {$(this).remove()});
break;
}
target.effect('highlight');
}
return false;
}
function ujsAjaxError(evt, xhr, status, error) {
alert(error || 'An error occurred.');
hideThrobber(this);
}
function ujsConfirmClick() {
var div = $('