1 // ========================================================================== 2 // Project: The M-Project - Mobile HTML5 Application Framework 3 // Copyright: (c) 2010 M-Way Solutions GmbH. All rights reserved. 4 // Creator: Dominik 5 // Date: 23.11.2010 6 // License: Dual licensed under the MIT or GPL Version 2 licenses. 7 // http://github.com/mwaylabs/The-M-Project/blob/master/MIT-LICENSE 8 // http://github.com/mwaylabs/The-M-Project/blob/master/GPL-LICENSE 9 // ========================================================================== 10 11 /** 12 * @classx 13 * 14 * This is the prototype of any dialog view. It is responsible for showing and later 15 * hiding a dialog. 16 * 17 * @extends M.View 18 */ 19 M.DialogView = M.View.extend( 20 /** @scope M.DialogView.prototype */ { 21 22 /** 23 * The type of this object. 24 * 25 * @type String 26 */ 27 type: 'M.DialogView', 28 29 /** 30 * Contains the ids of the button's within a dialog. They are used to later register a click 31 * event to all of these views. 32 * 33 * @type Array 34 */ 35 buttonIds: [], 36 37 /** 38 * The dialog's callback, split in target / action. It is called once the dialog's closing 39 * transition did finish. 40 * 41 * @type Object 42 */ 43 callback: {}, 44 45 /** 46 * This method controls the process of bringing a dialog to the screen. 47 * 48 * @private 49 */ 50 show: function() { 51 52 /* register the onHide event for this dialog */ 53 $('#' + this.id).live('pagehide', this.bindToCaller(this, this.dialogDidHide)); 54 55 /* call the dialog's render() */ 56 this.render(); 57 58 /* theme it */ 59 this.theme(); 60 61 /* register the buttons at the event dispatcher */ 62 for(var i in this.buttonIds) { 63 M.Application.eventDispatcher.registerEvents(this.buttonIds[i], 'click'); 64 } 65 66 /* finally show the dialog on the screen */ 67 M.Controller.switchToPage(this, this.transition, NO, NO); 68 69 }, 70 71 /** 72 * This method triggers the styling of the dialog and its sub views. 73 * 74 * @private 75 */ 76 theme: function() { 77 $('#' + this.id).page(); 78 }, 79 80 /** 81 * This method creates an alert dialog based on the given customizing parameters and 82 * initiates its displaying on the screen. 83 * 84 * @param {Object} obj The customizing parameters of the alert dialog view. 85 */ 86 alert: function(obj) { 87 M.AlertDialogView.design(obj).show(); 88 }, 89 90 /** 91 * This method creates an confirm dialog based on the given customizing parameters and 92 * initiates its displaying on the screen. 93 * 94 * @param {Object} obj The customizing parameters of the confirm dialog view. 95 */ 96 confirm: function(obj) { 97 M.ConfirmDialogView.design(obj).show(); 98 }, 99 100 /** 101 * This method creates an actionSheet dialog based on the given customizing parameters and 102 * initiates its displaying on the screen. 103 * 104 * @param {Object} obj The customizing parameters of the actionSheet dialog view. 105 */ 106 actionSheet: function(obj) { 107 M.ActionSheetDialogView.design(obj).show(); 108 }, 109 110 /** 111 * This method is automatically called right before the dialog will be closed. It is 112 * used to store the dialogs specified callbacks, if specified. 113 * 114 * @private 115 * @param {String} id The id of the dialog. 116 */ 117 dialogWillClose: function(id) { 118 var button = M.ViewManager.getViewById(id); 119 if(this[button.role] && this[button.role].target && this[button.role].action) { 120 this.callback.target = this[button.role].target; 121 this.callback.action = this[button.role].action; 122 } else if (this.buttons && this.buttons[button.role] && this.buttons[button.role].target && this.buttons[button.role].action) { 123 this.callback.target = this.buttons[button.role].target; 124 this.callback.action = this.buttons[button.role].action; 125 } 126 }, 127 128 /** 129 * This method is automatically called right after the dialog was closed. It is used to 130 * call the dialog's specified callback and to destroy it by calling M.Object's destroy 131 * method. 132 * 133 * @private 134 */ 135 dialogDidHide: function() { 136 if(this) { 137 if(this.callback && this.callback.target && this.callback.action) { 138 this.callback.target[this.callback.action](); 139 } 140 this.destroy(); 141 } 142 } 143 144 });