// 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(); } });