var Popup = require ('./popup'); /** * Class to show message dialogs with buttons. */ var Dialog = new Class (); module.exports = Dialog; var Button = { OK : 1 << 1 ,ACCEPT : 1 << 2 ,CANCEL : 1 << 3 ,RETRY : 1 << 4 ,YES : 1 << 5 ,NO : 1 << 6 }; var labels = [{ response: Button.NO ,label: 'No' },{ response: Button.CANCEL ,label: 'Cancel' },{ response: Button.RETRY ,label: 'Retry' },{ response: Button.ACCEPT ,label: 'Accept' },{ response: Button.OK ,label: 'Ok' },{ response: Button.YES ,label: 'Yes' }]; Button.CANCEL_ACCEPT = Button.CANCEL | Button.ACCEPT; Button.ACCEPT_RETRY = Button.ACCEPT | Button.RETRY; Button.YES_NO = Button.YES | Button.NO; Dialog.extend ({ Button: Button }); Dialog.implement ({ Extends: Popup ,Tag: 'htk-dialog' ,Properties: { /** * The message displayed to the user. */ message: { type: String ,set: function (x) { this._message = x; } ,get: function () { return this._message; } } /** * The dialog icon. */ ,icon: { type: String ,set: function (x) { this._icon = x; } ,get: function () { return this._icon; } } /** * The dialog buttons. */ ,buttons: { enumType: Button ,set: function (x) { this._buttons = x; } ,get: function () { return this._buttons; } } } ,_modal: true ,_icon: 'info' ,_buttons: Button.ACCEPT ,initialize: function (props) { this.parent (props); this.on ('closed', this._onClosed, this); } ,open: function () { this.parent (); // Dialog body var root = this.createElement ('div'); root.className = 'htk-dialog'; var body = this.createElement ('div'); root.appendChild (body); if (this._icon) { var icon = new Htk.Icon ({ doc: this.doc, icon: this._icon }); body.appendChild (icon.node); } var p = this.createElement ('p'); body.appendChild (p); if (this._message) p.appendChild (this.createTextNode (this._message)); var clear = this.createElement ('div'); clear.style.clear = 'both'; body.appendChild (clear); // Button bar var buttonBar = this._buttonBar = this.createElement ('div'); buttonBar.className = 'button-bar'; root.appendChild (buttonBar); var i = labels.length; while (i--) if (this._buttons & labels[i].response) this.createButton (_(labels[i].label), labels[i].response); var clear = this.createElement ('div'); clear.style.clear = 'both'; root.appendChild (clear); this.childNode = root; } ,createButton: function (label, response) { var button = this.createElement ('button'); button.className = 'thin'; button.appendChild (this.createTextNode (label)); button.addEventListener ('click', this._onButtonClick.bind (this, response)); this._buttonBar.appendChild (button); } ,_onButtonClick: function (response) { this.hide (); this.signalEmit ('response', response); } ,_onClosed: function () { this.signalEmit ('response', null); } });