Packages
drab
0.5.5
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.6.0-pre.1
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
Remote controlled frontend framework for Phoenix.
Current section
Files
Jump to
Current section
Files
priv/templates/drab/drab.modal.js
const MODAL = "#_drab_modal";
const MODAL_FORM = "#_drab_modal form";
const MODAL_BUTTON_OK = "#_drab_modal_button_ok";
const MODAL_BUTTON_CANCEL = "#_drab_modal_button_cancel";
const MODAL_BUTTONS = ".drab-modal-button";
Drab.on_connect(function (resp, drab) {
function modal_button_clicked(message, button_clicked) {
var vals = {};
var i = 0;
$(MODAL + " form :input").map(function () {
var key = $(this).attr("name") || $(this).attr("id") || "__undefined_" + i++;
vals[key] = $(this).val();
});
var query_output = [message.sender, {
button_clicked: button_clicked,
params: vals
}];
drab.channel.push("modal", { ok: query_output });
$(MODAL).modal('hide');
}
drab.channel.on("modal", function (message) {
var $modal = $(MODAL);
$(MODAL_FORM).on("submit", function () {
$(MODAL).data("clicked", true); // prevents double send
modal_button_clicked(message, "ok");
return false; // prevent submit
});
$(MODAL_BUTTONS).on("click", function () {
$(MODAL).data("clicked", true);
modal_button_clicked(message, $(this).attr("name"));
});
$modal.on("hidden.bs.modal", function () {
clearTimeout(drab.modal_timeout_function);
if (!$(MODAL).data("clicked")) {
// if it is not an OK button (prevent double send)
modal_button_clicked(message, "cancel");
}
});
// set the timeout on a modal
// TODO: cancel this event after closing before the timeout
if (message.timeout) {
if (drab.modal_timeout_function) {
clearTimeout(drab.modal_timeout_function);
}
drab.modal_timeout_function = setTimeout(function () {
$(MODAL).data("clicked", true); // prevents double send
modal_button_clicked(message, "cancel");
}, message.timeout);
}
// set focus on the form
$modal.on("shown.bs.modal", function () {
$(MODAL_FORM + " :input").first().focus();
});
$modal.modal();
});
});