MDL-43885 Javascript: Make the [X] button work like 'No' in relevant dialogues
[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     closeEvents: [],
24     initializer : function() {
25         this.publish('complete');
26         this.publish('complete-yes');
27         this.publish('complete-no');
28         var yes = Y.Node.create('<input type="button" id="id_yuiconfirmyes-' + this.get('COUNT') + '" value="'+this.get(CONFIRMYES)+'" />'),
29             no = Y.Node.create('<input type="button" id="id_yuiconfirmno-' + this.get('COUNT') + '" value="'+this.get(CONFIRMNO)+'" />'),
30             content = Y.Node.create('<div class="confirmation-dialogue"></div>')
31                         .append(Y.Node.create('<div class="confirmation-message">'+this.get(QUESTION)+'</div>'))
32                         .append(Y.Node.create('<div class="confirmation-buttons"></div>')
33                             .append(yes)
34                             .append(no));
35         this.get(BASE).addClass('moodle-dialogue-confirm');
36         this.setStdModContent(Y.WidgetStdMod.BODY, content, Y.WidgetStdMod.REPLACE);
37         this.setStdModContent(Y.WidgetStdMod.HEADER,
38                 '<h1 id="moodle-dialogue-'+this.get('COUNT')+'-header-text">' + this.get(TITLE) + '</h1>', Y.WidgetStdMod.REPLACE);
39         this.after('destroyedChange', function(){this.get(BASE).remove();}, this);
41         this.closeEvents.push(
42             Y.on('key', this.submit, window, 'down:13', this, true),
43             Y.on('key', this.submit, window, 'down:27', this, false),
44             yes.on('click', this.submit, this, true),
45             no.on('click', this.submit, this, false)
46         );
48         var closeButton = this.get('boundingBox').one('.closebutton');
49         if (closeButton) {
50             // The close button should act exactly like the 'No' button.
51             this.closeEvents.push(
52                 closeButton.on('click', this.submit, this)
53             );
54         }
55     },
56     submit : function(e, outcome) {
57         new Y.EventHandle(this.closeEvents).detach();
58         this.fire('complete', outcome);
59         if (outcome) {
60             this.fire('complete-yes');
61         } else {
62             this.fire('complete-no');
63         }
64         this.hide();
65         this.destroy();
66     }
67 }, {
68     NAME : CONFIRM_NAME,
69     CSS_PREFIX : DIALOGUE_PREFIX,
70     ATTRS : {
72         /**
73          * The button text to use to accept the confirmation.
74          *
75          * @attribute yesLabel
76          * @type String
77          * @default 'Yes'
78          */
79         yesLabel : {
80             validator : Y.Lang.isString,
81             value : 'Yes'
82         },
84         /**
85          * The button text to use to reject the confirmation.
86          *
87          * @attribute noLabel
88          * @type String
89          * @default 'No'
90          */
91         noLabel : {
92             validator : Y.Lang.isString,
93             value : 'No'
94         },
96         /**
97          * The title of the dialogue.
98          *
99          * @attribute title
100          * @type String
101          * @default 'Confirm'
102          */
103         title : {
104             validator : Y.Lang.isString,
105             value : 'Confirm'
106         },
108         /**
109          * The question posed by the dialogue.
110          *
111          * @attribute question
112          * @type String
113          * @default 'Are you sure?'
114          */
115         question : {
116             validator : Y.Lang.isString,
117             value : 'Are you sure?'
118         }
119     }
120 });
121 Y.augment(CONFIRM, Y.EventTarget);
123 M.core.confirm = CONFIRM;