185 lines
3.0 KiB
JavaScript
185 lines
3.0 KiB
JavaScript
|
|
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);
|
|
}
|
|
});
|
|
|