Merge branch 'MDL-43687' of https://github.com/mkassaei/moodle
[moodle.git] / lib / yui / src / notification / js / confirm.js
1 /**
2  * A dialogue type designed to display a confirmation to the user.
3  *
4  * @module moodle-core-notification
5  * @submodule moodle-core-notification-confirm
6  */
8 var CONFIRM_NAME = 'Moodle confirmation dialogue',
9     CONFIRM;
11 /**
12  * Extends core Dialogue to show the confirmation dialogue.
13  *
14  * @param {Object} config Object literal specifying the dialogue configuration properties.
15  * @constructor
16  * @class M.core.confirm
17  * @extends M.core.dialogue
18  */
19 CONFIRM = function(config) {
20     CONFIRM.superclass.constructor.apply(this, [config]);
21 };
22 Y.extend(CONFIRM, M.core.dialogue, {
23     _enterKeypress : null,
24     _escKeypress : null,
25     initializer : function() {
26         this.publish('complete');
27         this.publish('complete-yes');
28         this.publish('complete-no');
29         var yes = Y.Node.create('<input type="button" id="id_yuiconfirmyes-' + this.get('COUNT') + '" value="'+this.get(CONFIRMYES)+'" />'),
30             no = Y.Node.create('<input type="button" id="id_yuiconfirmno-' + this.get('COUNT') + '" value="'+this.get(CONFIRMNO)+'" />'),
31             content = Y.Node.create('<div class="confirmation-dialogue"></div>')
32                         .append(Y.Node.create('<div class="confirmation-message">'+this.get(QUESTION)+'</div>'))
33                         .append(Y.Node.create('<div class="confirmation-buttons"></div>')
34                             .append(yes)
35                             .append(no));
36         this.get(BASE).addClass('moodle-dialogue-confirm');
37         this.setStdModContent(Y.WidgetStdMod.BODY, content, Y.WidgetStdMod.REPLACE);
38         this.setStdModContent(Y.WidgetStdMod.HEADER,
39                 '<h1 id="moodle-dialogue-'+this.get('COUNT')+'-header-text">' + this.get(TITLE) + '</h1>', Y.WidgetStdMod.REPLACE);
40         this._enterKeypress = Y.on('key', this.submit, window, 'down:13', this, true);
41         this._escKeypress = Y.on('key', this.submit, window, 'down:27', this, false);
42         yes.on('click', this.submit, this, true);
43         no.on('click', this.submit, this, false);
44     },
45     submit : function(e, outcome) {
46         this._enterKeypress.detach();
47         this._escKeypress.detach();
48         this.fire('complete', outcome);
49         if (outcome) {
50             this.fire('complete-yes');
51         } else {
52             this.fire('complete-no');
53         }
54         this.hide();
55         this.destroy();
56     }
57 }, {
58     NAME : CONFIRM_NAME,
59     CSS_PREFIX : DIALOGUE_PREFIX,
60     ATTRS : {
62         /**
63          * The button text to use to accept the confirmation.
64          *
65          * @attribute yesLabel
66          * @type String
67          * @default 'Yes'
68          */
69         yesLabel : {
70             validator : Y.Lang.isString,
71             value : 'Yes'
72         },
74         /**
75          * The button text to use to reject the confirmation.
76          *
77          * @attribute noLabel
78          * @type String
79          * @default 'No'
80          */
81         noLabel : {
82             validator : Y.Lang.isString,
83             value : 'No'
84         },
86         /**
87          * The title of the dialogue.
88          *
89          * @attribute title
90          * @type String
91          * @default 'Confirm'
92          */
93         title : {
94             validator : Y.Lang.isString,
95             value : 'Confirm'
96         },
98         /**
99          * The question posed by the dialogue.
100          *
101          * @attribute question
102          * @type String
103          * @default 'Are you sure?'
104          */
105         question : {
106             validator : Y.Lang.isString,
107             value : 'Are you sure?'
108         }
109     }
110 });
111 Y.augment(CONFIRM, Y.EventTarget);
113 M.core.confirm = CONFIRM;