1
// Storage for our current jqXHR object.
2
horizon.modals._request = null;
4
horizon.modals.success = function (data, textStatus, jqXHR) {
5
$('body').append(data);
6
$('.modal span.help-block').hide();
7
$('.modal:last').modal();
9
horizon.datatables.validate_button();
11
// TODO(tres): Find some better way to deal with grouped form fields.
12
var volumeField = $("#id_volume");
14
var volumeContainer = volumeField.parent().parent();
15
var deviceContainer = $("#id_device_name").parent().parent();
16
var deleteOnTermContainer = $("#id_delete_on_terminate").parent().parent();
18
function toggle_fields(show) {
20
volumeContainer.removeClass("hide");
21
deviceContainer.removeClass("hide");
22
deleteOnTermContainer.removeClass("hide");
24
volumeContainer.addClass("hide");
25
deviceContainer.addClass("hide");
26
deleteOnTermContainer.addClass("hide");
30
if(volumeField.find("option").length == 1) {
33
var disclosureElement = $("<div />").addClass("volume_boot_disclosure").text("Boot From Volume");
35
volumeContainer.before(disclosureElement);
37
disclosureElement.click(function() {
38
if(volumeContainer.hasClass("hide")) {
39
disclosureElement.addClass("on");
42
disclosureElement.removeClass("on");
1
52
horizon.addInitFunction(function() {
2
$(document).on('click', '.modal:not(.static_page) .cancel', function (evt) {
53
$(document).on('click', '.modal .cancel', function (evt) {
3
54
$(this).closest('.modal').modal('hide');
58
$(document).on('submit', '.modal form', function (evt) {
60
$button = $form.find(".modal-footer .btn-primary");
61
if ($form.attr("enctype") === "multipart/form-data") {
62
// AJAX-upload for files is not currently supported.
67
// Prevent duplicate form POSTs
68
$button.prop("disabled", true);
72
url: $form.attr('action'),
73
data: $form.serialize(),
74
complete: function () {
75
$button.prop("disabled", false);
77
success: function (data, textStatus, jqXHR) {
78
// TODO(gabriel): This isn't a long-term solution for AJAX redirects.
79
// https://blueprints.launchpad.net/horizon/+spec/global-ajax-communication
80
var header = jqXHR.getResponseHeader("X-Horizon-Location");
82
location.href = header;
84
$form.closest(".modal").modal("hide");
85
horizon.modals.success(data, textStatus, jqXHR);
87
error: function(jqXHR, status, errorThrown) {
88
$form.closest(".modal").modal("hide");
89
horizon.alert("error", "There was an error submitting the form. Please try again.");
7
94
// Handle all modal hidden event to remove them as default
12
$('.ajax-modal').click(function (evt) {
99
$(document).on('show', '.modal', function(evt) {
100
var scrollShift = $('body').scrollTop();
101
var topVal = $(this).css('top');
102
$(this).css('top', scrollShift + parseInt(topVal, 10));
105
$('.ajax-modal').live('click', function (evt) {
13
106
var $this = $(this);
14
$.ajax($this.attr('href'), {
15
error: function(jqXHR, status, errorThrown){
108
// If there's an existing modal request open, cancel it out.
109
if (horizon.modals._request && typeof(horizon.modals._request.abort) !== undefined) {
110
horizon.modals._request.abort();
113
horizon.modals._request = $.ajax($this.attr('href'), {
114
complete: function () {
115
// Clear the global storage;
116
horizon.modals._request = null;
118
error: function(jqXHR, status, errorThrown) {
16
119
if (jqXHR.status === 401){
17
var redir_url = jqXHR.getResponseHeader("REDIRECT_URL");
120
var redir_url = jqXHR.getResponseHeader("X-Horizon-Location");
19
122
location.href = redir_url;
21
124
location.reload(true);
128
// Generic error handler. Really generic.
129
horizon.alert("error", "An error occurred. Please try again.");
25
success: function (data, status, jqXHR) {
26
$('body').append(data);
27
$('.modal span.help-block').hide();
28
$('.modal:last').modal();
30
horizon.datatables.validate_button();
32
// TODO(tres): Find some better way to deal with grouped form fields.
33
var volumeField = $("#id_volume");
35
var volumeContainer = volumeField.parent().parent();
36
var deviceContainer = $("#id_device_name").parent().parent();
37
var deleteOnTermContainer = $("#id_delete_on_terminate").parent().parent();
39
function toggle_fields(show) {
41
volumeContainer.removeClass("hide");
42
deviceContainer.removeClass("hide");
43
deleteOnTermContainer.removeClass("hide");
45
volumeContainer.addClass("hide");
46
deviceContainer.addClass("hide");
47
deleteOnTermContainer.addClass("hide");
51
if(volumeField.find("option").length == 1) {
54
var disclosureElement = $("<div />").addClass("volume_boot_disclosure").text("Boot From Volume");
56
volumeContainer.before(disclosureElement);
58
disclosureElement.click(function() {
59
if(volumeContainer.hasClass("hide")) {
60
disclosureElement.addClass("on");
63
disclosureElement.removeClass("on");
132
success: horizon.modals.success
73
134
evt.preventDefault();