97 lines
No EOL
2.5 KiB
JavaScript
97 lines
No EOL
2.5 KiB
JavaScript
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
|
|
// MIT License. See license.txt
|
|
|
|
wn.provide('wn.ui');
|
|
|
|
var cur_dialog;
|
|
|
|
wn.ui.open_dialogs = [];
|
|
wn.ui.Dialog = wn.ui.FieldGroup.extend({
|
|
_intro:' usage:\n\
|
|
\n\
|
|
var dialog = new wn.ui.Dialog({\n\
|
|
title: "Dialog Title",\n\
|
|
fields: [\n\
|
|
{fieldname:"field1", fieldtype:"Data", reqd:1, label: "Test 1"},\n\
|
|
{fieldname:"field2", fieldtype:"Link", reqd:1, label: "Test 1", options:"Some DocType"},\n\
|
|
{fieldname:"mybutton", fieldtype:"Button", reqd:1, label: "Submit"},\n\
|
|
]\n\
|
|
})\n\
|
|
dialog.get_input("mybutton").click(function() { /* do something; */ dialog.hide(); });\n\
|
|
dialog.show()',
|
|
init: function(opts) {
|
|
this.display = false;
|
|
this.is_dialog = true;
|
|
if(!opts.width) opts.width = 480;
|
|
|
|
$.extend(this, opts);
|
|
this._super();
|
|
this.make();
|
|
},
|
|
make: function() {
|
|
this.$wrapper = wn.get_modal("", "");
|
|
this.wrapper = this.$wrapper.find('.modal-dialog').get(0);
|
|
this.make_head();
|
|
this.body = this.$wrapper.find(".modal-body").get(0);
|
|
|
|
// make fields (if any)
|
|
this._super();
|
|
|
|
var me = this;
|
|
this.$wrapper
|
|
.on("hide.bs.modal", function() {
|
|
me.display = false;
|
|
if(wn.ui.open_dialogs[wn.ui.open_dialogs.length-1]===me) {
|
|
wn.ui.open_dialogs.pop();
|
|
if(wn.ui.open_dialogs.length)
|
|
cur_dialog = wn.ui.open_dialogs[wn.ui.open_dialogs.length-1];
|
|
else
|
|
cur_dialog = null;
|
|
}
|
|
me.onhide && me.onhide();
|
|
})
|
|
.on("shown.bs.modal", function() {
|
|
// focus on first input
|
|
me.display = true;
|
|
cur_dialog = me;
|
|
wn.ui.open_dialogs.push(me);
|
|
var first = me.$wrapper.find(':input:first');
|
|
if(first.length && first.attr("data-fieldtype")!="Date") {
|
|
try {
|
|
first.get(0).focus();
|
|
} catch(e) {
|
|
console.log("Dialog: unable to focus on first input: " + e);
|
|
}
|
|
}
|
|
me.onshow && me.onshow();
|
|
})
|
|
|
|
|
|
},
|
|
make_head: function() {
|
|
var me = this;
|
|
//this.appframe = new wn.ui.AppFrame(this.wrapper);
|
|
//this.appframe.set_document_title = false;
|
|
this.set_title(this.title);
|
|
},
|
|
set_title: function(t) {
|
|
this.$wrapper.find(".modal-title").html(t);
|
|
},
|
|
show: function() {
|
|
// show it
|
|
this.$wrapper.modal("show");
|
|
},
|
|
hide: function(from_event) {
|
|
this.$wrapper.modal("hide");
|
|
},
|
|
no_cancel: function() {
|
|
this.$wrapper.find('.close').toggle(false);
|
|
}
|
|
});
|
|
|
|
// close open dialogs on ESC
|
|
$(document).bind('keydown', function(e) {
|
|
if(cur_dialog && !cur_dialog.no_cancel_flag && e.which==27) {
|
|
cur_dialog.hide();
|
|
}
|
|
}); |