6 module("dialog: events");
8 test("open", function() {
11 var element = $("<div></div>");
13 open: function(ev, ui) {
14 ok(element.data("ui-dialog")._isOpen, "interal _isOpen flag is set");
15 ok(true, "autoOpen: true fires open callback");
16 equal(this, element[0], "context of callback");
17 equal(ev.type, "dialogopen", "event type in callback");
18 deepEqual(ui, {}, "ui hash in callback");
23 element = $("<div></div>");
26 open: function(ev, ui) {
27 ok(true, ".dialog('open') fires open callback");
28 equal(this, element[0], "context of callback");
29 equal(ev.type, "dialogopen", "event type in callback");
30 deepEqual(ui, {}, "ui hash in callback");
32 }).bind("dialogopen", function(ev, ui) {
33 ok(element.data("ui-dialog")._isOpen, "interal _isOpen flag is set");
34 ok(true, "dialog('open') fires open event");
35 equal(this, element[0], "context of event");
36 deepEqual(ui, {}, "ui hash in event");
38 element.dialog("open");
43 test( "focus", function() {
46 element = $("#dialog1").dialog({
49 other = $("#dialog2").dialog({
53 element.one( "dialogopen", function() {
54 ok( true, "open, just once" );
56 element.one( "dialogfocus", function() {
57 ok( true, "focus on open" );
59 other.dialog( "open" );
61 element.one( "dialogfocus", function() {
62 ok( true, "when opening and already open and wasn't on top" );
64 other.dialog( "open" );
65 element.dialog( "open" );
67 element.one( "dialogfocus", function() {
68 ok( true, "when calling moveToTop and wasn't on top" );
70 other.dialog( "moveToTop" );
71 element.dialog( "moveToTop" );
73 element.bind( "dialogfocus", function() {
74 ok( true, "when mousedown anywhere on the dialog and it wasn't on top" );
76 other.dialog( "moveToTop" );
77 element.trigger( "mousedown" );
79 // triggers just once when already on top
80 element.dialog( "open" );
81 element.dialog( "moveToTop" );
82 element.trigger( "mousedown" );
84 element.add( other ).remove();
87 test("dragStart", function() {
91 element = $("<div></div>").dialog({
92 dragStart: function(ev, ui) {
93 ok(true, "dragging fires dragStart callback");
94 equal(this, element[0], "context of callback");
95 equal(ev.type, "dialogdragstart", "event type in callback");
96 ok(ui.position !== undefined, "ui.position in callback");
97 ok(ui.offset !== undefined, "ui.offset in callback");
99 }).bind("dialogdragstart", function(ev, ui) {
100 ok(true, "dragging fires dialogdragstart event");
101 equal(this, element[0], "context of event");
102 ok(ui.position !== undefined, "ui.position in callback");
103 ok(ui.offset !== undefined, "ui.offset in callback");
106 handle = $(".ui-dialog-titlebar", element.dialog("widget"));
107 TestHelpers.dialog.drag(element, handle, 50, 50);
111 test("drag", function() {
115 element = $("<div></div>").dialog({
116 drag: function(ev, ui) {
118 ok(true, "dragging fires drag callback");
119 equal(this, element[0], "context of callback");
120 equal(ev.type, "dialogdrag", "event type in callback");
121 ok(ui.position !== undefined, "ui.position in callback");
122 ok(ui.offset !== undefined, "ui.offset in callback");
127 }).one("dialogdrag", function(ev, ui) {
128 ok(true, "dragging fires dialogdrag event");
129 equal(this, element[0], "context of event");
130 ok(ui.position !== undefined, "ui.position in callback");
131 ok(ui.offset !== undefined, "ui.offset in callback");
134 handle = $(".ui-dialog-titlebar", element.dialog("widget"));
135 TestHelpers.dialog.drag(element, handle, 50, 50);
139 test("dragStop", function() {
143 element = $("<div></div>").dialog({
144 dragStop: function(ev, ui) {
145 ok(true, "dragging fires dragStop callback");
146 equal(this, element[0], "context of callback");
147 equal(ev.type, "dialogdragstop", "event type in callback");
148 ok(ui.position !== undefined, "ui.position in callback");
149 ok(ui.offset !== undefined, "ui.offset in callback");
151 }).bind("dialogdragstop", function(ev, ui) {
152 ok(true, "dragging fires dialogdragstop event");
153 equal(this, element[0], "context of event");
154 ok(ui.position !== undefined, "ui.position in callback");
155 ok(ui.offset !== undefined, "ui.offset in callback");
158 handle = $(".ui-dialog-titlebar", element.dialog("widget"));
159 TestHelpers.dialog.drag(element, handle, 50, 50);
163 test("resizeStart", function() {
167 element = $("<div></div>").dialog({
168 resizeStart: function(ev, ui) {
169 ok(true, "resizing fires resizeStart callback");
170 equal(this, element[0], "context of callback");
171 equal(ev.type, "dialogresizestart", "event type in callback");
172 ok(ui.originalPosition !== undefined, "ui.originalPosition in callback");
173 ok(ui.originalSize !== undefined, "ui.originalSize in callback");
174 ok(ui.position !== undefined, "ui.position in callback");
175 ok(ui.size !== undefined, "ui.size in callback");
177 }).bind("dialogresizestart", function(ev, ui) {
178 ok(true, "resizing fires dialogresizestart event");
179 equal(this, element[0], "context of event");
180 ok(ui.originalPosition !== undefined, "ui.originalPosition in callback");
181 ok(ui.originalSize !== undefined, "ui.originalSize in callback");
182 ok(ui.position !== undefined, "ui.position in callback");
183 ok(ui.size !== undefined, "ui.size in callback");
186 handle = $(".ui-resizable-se", element.dialog("widget"));
187 TestHelpers.dialog.drag(element, handle, 50, 50);
191 test("resize", function() {
195 element = $("<div></div>").dialog({
196 resize: function(ev, ui) {
198 ok(true, "resizing fires resize callback");
199 equal(this, element[0], "context of callback");
200 equal(ev.type, "dialogresize", "event type in callback");
201 ok(ui.originalPosition !== undefined, "ui.originalPosition in callback");
202 ok(ui.originalSize !== undefined, "ui.originalSize in callback");
203 ok(ui.position !== undefined, "ui.position in callback");
204 ok(ui.size !== undefined, "ui.size in callback");
209 }).one("dialogresize", function(ev, ui) {
210 ok(true, "resizing fires dialogresize event");
211 equal(this, element[0], "context of event");
212 ok(ui.originalPosition !== undefined, "ui.originalPosition in callback");
213 ok(ui.originalSize !== undefined, "ui.originalSize in callback");
214 ok(ui.position !== undefined, "ui.position in callback");
215 ok(ui.size !== undefined, "ui.size in callback");
218 handle = $(".ui-resizable-se", element.dialog("widget"));
219 TestHelpers.dialog.drag(element, handle, 50, 50);
223 test("resizeStop", function() {
227 element = $("<div></div>").dialog({
228 resizeStop: function(ev, ui) {
229 ok(true, "resizing fires resizeStop callback");
230 equal(this, element[0], "context of callback");
231 equal(ev.type, "dialogresizestop", "event type in callback");
232 ok(ui.originalPosition !== undefined, "ui.originalPosition in callback");
233 ok(ui.originalSize !== undefined, "ui.originalSize in callback");
234 ok(ui.position !== undefined, "ui.position in callback");
235 ok(ui.size !== undefined, "ui.size in callback");
237 }).bind("dialogresizestop", function(ev, ui) {
238 ok(true, "resizing fires dialogresizestop event");
239 equal(this, element[0], "context of event");
240 ok(ui.originalPosition !== undefined, "ui.originalPosition in callback");
241 ok(ui.originalSize !== undefined, "ui.originalSize in callback");
242 ok(ui.position !== undefined, "ui.position in callback");
243 ok(ui.size !== undefined, "ui.size in callback");
246 handle = $(".ui-resizable-se", element.dialog("widget"));
247 TestHelpers.dialog.drag(element, handle, 50, 50);
251 asyncTest("close", function() {
254 var element = $("<div></div>").dialog({
255 close: function(ev, ui) {
256 ok(true, ".dialog('close') fires close callback");
257 equal(this, element[0], "context of callback");
258 equal(ev.type, "dialogclose", "event type in callback");
259 deepEqual(ui, {}, "ui hash in callback");
261 }).bind("dialogclose", function(ev, ui) {
262 ok(true, ".dialog('close') fires dialogclose event");
263 equal(this, element[0], "context of event");
264 deepEqual(ui, {}, "ui hash in event");
266 element.dialog("close");
269 // Close event with an effect
270 element = $("<div></div>").dialog({
272 close: function(ev, ui) {
273 ok(true, ".dialog('close') fires close callback");
274 equal(this, element[0], "context of callback");
275 equal(ev.type, "dialogclose", "event type in callback");
276 deepEqual(ui, {}, "ui hash in callback");
279 }).bind("dialogclose", function(ev, ui) {
280 ok(true, ".dialog('close') fires dialogclose event");
281 equal(this, element[0], "context of event");
282 deepEqual(ui, {}, "ui hash in event");
284 element.dialog("close");
287 test("beforeClose", function() {
290 var element = $("<div></div>").dialog({
291 beforeClose: function(ev, ui) {
292 ok(true, ".dialog('close') fires beforeClose callback");
293 equal(this, element[0], "context of callback");
294 equal(ev.type, "dialogbeforeclose", "event type in callback");
295 deepEqual(ui, {}, "ui hash in callback");
300 element.dialog("close");
301 ok( element.dialog("widget").is(":visible"), "beforeClose callback should prevent dialog from closing");
304 element = $("<div></div>").dialog();
305 element.dialog("option", "beforeClose", function(ev, ui) {
306 ok(true, ".dialog('close') fires beforeClose callback");
307 equal(this, element[0], "context of callback");
308 equal(ev.type, "dialogbeforeclose", "event type in callback");
309 deepEqual(ui, {}, "ui hash in callback");
312 element.dialog("close");
314 ok( element.dialog("widget").is(":visible"), "beforeClose callback should prevent dialog from closing");
317 element = $("<div></div>").dialog().bind("dialogbeforeclose", function(ev, ui) {
318 ok(true, ".dialog('close') triggers dialogbeforeclose event");
319 equal(this, element[0], "context of event");
320 deepEqual(ui, {}, "ui hash in event");
323 element.dialog("close");
324 ok( element.dialog("widget").is(":visible"), "dialogbeforeclose event should prevent dialog from closing");
329 asyncTest("ensure dialog's container doesn't scroll on resize and focus", function() {
332 var element = $("#dialog1").dialog(),
333 initialScroll = $(window).scrollTop();
334 element.dialog("option", "height", 600);
335 equal($(window).scrollTop(), initialScroll, "scroll hasn't moved after height change");
336 setTimeout( function(){
337 $(".ui-dialog-titlebar-close").simulate("mousedown");
338 equal($(window).scrollTop(), initialScroll, "scroll hasn't moved after focus moved to dialog");
339 element.dialog("destroy");
344 test("#5184: isOpen in dialogclose event is true", function() {
347 var element = $( "<div></div>" ).dialog({
349 ok( !element.dialog("isOpen"), "dialog is not open during close" );
352 ok( element.dialog("isOpen"), "dialog is open after init" );
353 element.dialog( "close" );
354 ok( !element.dialog("isOpen"), "dialog is not open after close" );
358 test("ensure dialog keeps focus when clicking modal overlay", function() {
361 var element = $( "<div></div>" ).dialog({
364 ok( $(":focus").closest(".ui-dialog").length, "focus is in dialog" );
365 $(".ui-widget-overlay").simulate("mousedown");
366 ok( $(":focus").closest(".ui-dialog").length, "focus is still in dialog" );