// Copyright (c) 2012 Web Notes Technologies Pvt Ltd (http://erpnext.com) // // MIT License (MIT) // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // wn.provide('wn.ui'); wn.ui.Dialog = wn.ui.FieldGroup.extend({ init: function(opts) { this.display = false; if(!opts.width) opts.width = 480; $.extend(this, opts); this.make(); // init fields if(this.fields) { this.parent = this.body this._super({}); } }, make: function() { if(!$('#dialog-container').length) { $('
').appendTo('body'); } this.wrapper = $('
') .appendTo('#dialog-container').get(0); if(this.width) this.wrapper.style.width = this.width + 'px'; this.make_head(); this.body = $a(this.wrapper, 'div', 'dialog_body'); }, make_head: function() { var me = this; this.appframe = new wn.ui.AppFrame(this.wrapper); this.appframe.set_document_title = false; this.appframe.$titlebar.find('.close').unbind('click').click(function() { if(me.oncancel)me.oncancel(); me.hide(); }); this.set_title(this.title); }, set_title: function(t) { this.appframe.$titlebar.find('.appframe-title').html(t || ''); }, set_postion: function() { this.zindex = 1; if(cur_dialog) { this.zindex = cur_dialog.zindex + 1; } // place it at the center $(this.wrapper).css({ left: (($(window).width() - cint(this.wrapper.style.width))/2) + 'px', top: ($(window).scrollTop() + 60) + 'px', "z-index": this.zindex }) }, show: function() { // already live, do nothing if(this.display) return; // set position this.set_postion() // show it $ds(this.wrapper); // hide background wn.dom.freeze(); this.display = true; cur_dialog = this; // call onshow if(this.onshow)this.onshow(); // focus on first input $(this.wrapper).find(':input:first').focus(); }, hide: function() { // call onhide if(this.onhide) this.onhide(); // hide wn.dom.unfreeze(); $dh(this.wrapper); // flags this.display = false; cur_dialog = null; }, no_cancel: function() { this.appframe.$titlebar.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(); } });