| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <html> | 2 <html> |
| 3 <head> | 3 <head> |
| 4 <style> | 4 <style> |
| 5 /* Remove margin, border, and padding to allow comparing dialog's position with
that of plain span elements. */ |
| 6 body { |
| 7 margin: 0; |
| 8 } |
| 9 |
| 10 dialog { |
| 11 border: 0; |
| 12 padding: 0; |
| 13 } |
| 14 |
| 5 .filler { | 15 .filler { |
| 6 height: 20000px; | 16 height: 20000px; |
| 7 } | 17 } |
| 8 | 18 |
| 9 dialog { | |
| 10 /* Remove border and padding to allow comparing dialog's position with that
of plain span elements. */ | |
| 11 border: 0; | |
| 12 padding: 0; | |
| 13 } | |
| 14 </style> | 19 </style> |
| 15 <script src="../../js/resources/js-test-pre.js"></script> | 20 <script src="../../js/resources/js-test-pre.js"></script> |
| 16 <script> | 21 <script> |
| 17 if (window.internals) | 22 if (window.internals) |
| 18 internals.settings.setDialogElementEnabled(true); | 23 internals.settings.setDialogElementEnabled(true); |
| 19 | 24 |
| 20 function checkTopOfViewport(dialog) { | 25 function checkTopOfViewport(dialog) { |
| 21 shouldBe('dialog.getBoundingClientRect().top', '0'); | 26 shouldBe('dialog.getBoundingClientRect().top', '0'); |
| 22 } | 27 } |
| 23 | 28 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 36 checker(); | 41 checker(); |
| 37 dialog.close(); | 42 dialog.close(); |
| 38 } | 43 } |
| 39 </script> | 44 </script> |
| 40 </head> | 45 </head> |
| 41 <body> | 46 <body> |
| 42 <dialog id="mydialog">It is my dialog.</dialog> | 47 <dialog id="mydialog">It is my dialog.</dialog> |
| 43 <div class="filler" id="fillerDiv"></div> | 48 <div class="filler" id="fillerDiv"></div> |
| 44 </body> | 49 </body> |
| 45 <script> | 50 <script> |
| 46 description("Tests default positioning of non-anchored dialogs."); | 51 description("Tests positioning of non-anchored dialogs."); |
| 47 | 52 |
| 48 dialog = document.getElementById('mydialog'); | 53 dialog = document.getElementById('mydialog'); |
| 49 | 54 |
| 50 debug('Dialog should be centered in the viewport.'); | 55 debug('Dialog should be centered in the viewport.'); |
| 51 showAndTestDialog(dialog, function() { checkCentered(dialog) }); | 56 showAndTestDialog(dialog, function() { checkCentered(dialog) }); |
| 52 | 57 |
| 53 debug('<br>Dialog should be recentered if show() is called after close().'); | 58 debug('<br>Dialog should be recentered if show() is called after close().'); |
| 54 window.scroll(0, 500); | 59 window.scroll(0, 500); |
| 55 dialog.show(); | 60 dialog.show(); |
| 56 checkCentered(dialog); | 61 checkCentered(dialog); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 | 135 |
| 131 debug("<br>Dialog is recentered if show() is called after removing 'open'"); | 136 debug("<br>Dialog is recentered if show() is called after removing 'open'"); |
| 132 dialog.removeAttribute('open'); | 137 dialog.removeAttribute('open'); |
| 133 window.scroll(0, 1000); | 138 window.scroll(0, 1000); |
| 134 dialog.show(); | 139 dialog.show(); |
| 135 checkCentered(dialog); | 140 checkCentered(dialog); |
| 136 dialog.close(); | 141 dialog.close(); |
| 137 window.scroll(0, 500); | 142 window.scroll(0, 500); |
| 138 | 143 |
| 139 debug("<br>Dialog should not be centered if show() was called when an ancestor h
ad display 'none'."); | 144 debug("<br>Dialog should not be centered if show() was called when an ancestor h
ad display 'none'."); |
| 140 var plainSpan = document.createElement('span'); | |
| 141 plainSpan.style.position = 'absolute'; | |
| 142 relativeContainer.appendChild(plainSpan); | |
| 143 expectedTop = plainSpan.getBoundingClientRect().top; | |
| 144 absoluteContainer.style.display = 'none'; | 145 absoluteContainer.style.display = 'none'; |
| 145 dialog.show(); | 146 dialog.show(); |
| 146 absoluteContainer.style.display = 'block'; | 147 absoluteContainer.style.display = 'block'; |
| 148 // Since dialog's containing block is the ICB, it's statically positioned after
<body>. |
| 149 expectedTop = document.body.getBoundingClientRect().bottom; |
| 147 shouldBe('dialog.getBoundingClientRect().top', 'expectedTop'); | 150 shouldBe('dialog.getBoundingClientRect().top', 'expectedTop'); |
| 148 dialog.close(); | 151 dialog.close(); |
| 149 | 152 |
| 150 debug("<br>Test that setting 'top' on dialog results in the same position as for
a plain, absolutely positioned span."); | 153 debug("<br>Test that setting 'top' on dialog results in the same position as for
a plain, absolutely positioned span."); |
| 154 var plainSpan = document.createElement('span'); |
| 155 plainSpan.style.position = 'absolute'; |
| 156 document.body.appendChild(plainSpan); |
| 151 plainSpan.style.top = '50px'; | 157 plainSpan.style.top = '50px'; |
| 152 dialog.style.top = '50px'; | 158 dialog.style.top = '50px'; |
| 153 showAndTestDialog(dialog, function() { shouldBe('dialog.offsetTop', 'plainSpan.o
ffsetTop'); }); | 159 expectedTop = plainSpan.getBoundingClientRect().top; |
| 160 showAndTestDialog(dialog, function() { shouldBe('dialog.getBoundingClientRect().
top', 'expectedTop'); }); |
| 154 | 161 |
| 155 debug("<br>Test that setting 'bottom' on dialog results in the same position as
for a plain, absolutely positioned span."); | 162 debug("<br>Test that setting 'bottom' on dialog results in the same position as
for a plain, absolutely positioned span."); |
| 156 dialog.style.top = 'auto'; | 163 dialog.style.top = 'auto'; |
| 157 plainSpan.style.top = 'auto'; | 164 plainSpan.style.top = 'auto'; |
| 158 dialog.style.bottom = '50px'; | 165 dialog.style.bottom = '50px'; |
| 159 plainSpan.style.bottom = '50px'; | 166 plainSpan.style.bottom = '50px'; |
| 160 showAndTestDialog(dialog, function() { shouldBe('dialog.offsetBottom', 'plainSpa
n.offsetBottom'); }); | 167 showAndTestDialog(dialog, function() { shouldBe('dialog.getBoundingClientRect().
bottom', 'plainSpan.getBoundingClientRect().bottom'); }); |
| 161 | 168 |
| 162 debug('<br>Test that fixed positioning for dialog has same behavior as for a pla
in span.'); | 169 debug('<br>Test that fixed positioning for dialog has same behavior as for a pla
in span.'); |
| 163 plainSpan.style.position = 'fixed'; | 170 plainSpan.style.position = 'fixed'; |
| 164 plainSpan.style.top = '50px'; | 171 plainSpan.style.top = '50px'; |
| 165 dialog.style.position = 'fixed'; | 172 dialog.style.position = 'fixed'; |
| 166 dialog.style.top = '50px'; | 173 dialog.style.top = '50px'; |
| 167 showAndTestDialog(dialog, function() { shouldBe('dialog.offsetTop', 'plainSpan.o
ffsetTop'); }); | 174 showAndTestDialog(dialog, function() { shouldBe('dialog.getBoundingClientRect().
top', 'plainSpan.getBoundingClientRect().top'); }); |
| 168 | 175 |
| 169 debug('<br>Test that static position for a non-modal dialog has the same behavio
r as for a plain span.'); | 176 debug('<br>Test that static position for a non-modal dialog has the same behavio
r as for a plain span.'); |
| 170 // Just test non-modal since modal is covered by other tests (for modal, static
computes to absolute) | 177 plainSpan.parentNode.removeChild(plainSpan); |
| 178 relativeContainer.appendChild(plainSpan); |
| 171 plainSpan.style.position = 'static'; | 179 plainSpan.style.position = 'static'; |
| 172 var expectedTop = plainSpan.offsetTop; | 180 expectedTop = plainSpan.getBoundingClientRect().top; |
| 173 plainSpan.parentNode.removeChild(plainSpan); | 181 plainSpan.parentNode.removeChild(plainSpan); |
| 174 dialog.style.position = 'static'; | 182 dialog.style.position = 'static'; |
| 183 // Just test non-modal since modal is covered by other tests (for modal, static
computes to absolute) |
| 175 dialog.show(); | 184 dialog.show(); |
| 176 shouldBe('dialog.offsetTop', 'expectedTop'); | 185 shouldBe('dialog.getBoundingClientRect().top', 'expectedTop'); |
| 177 dialog.close(); | 186 dialog.close(); |
| 178 | 187 |
| 179 debug('<br>Test that relative position for a non-modal dialog has the same behav
ior as for a plain span.'); | 188 debug('<br>Test that relative position for a non-modal dialog has the same behav
ior as for a plain span.'); |
| 180 // Just test non-modal since modal is covered by other tests (for modal, relativ
e computes to absolute) | |
| 181 relativeContainer.appendChild(plainSpan); | 189 relativeContainer.appendChild(plainSpan); |
| 182 plainSpan.style.position = 'relative'; | 190 plainSpan.style.position = 'relative'; |
| 183 plainSpan.style.top = '50px'; | 191 plainSpan.style.top = '50px'; |
| 184 expectedTop = plainSpan.offsetTop; | 192 expectedTop = plainSpan.getBoundingClientRect().top; |
| 185 plainSpan.parentNode.removeChild(plainSpan); | 193 plainSpan.parentNode.removeChild(plainSpan); |
| 186 dialog.style.position = 'relative'; | 194 dialog.style.position = 'relative'; |
| 187 dialog.style.top = '50px'; | 195 dialog.style.top = '50px'; |
| 196 // Just test non-modal since modal is covered by other tests (for modal, relativ
e computes to absolute) |
| 188 dialog.show(); | 197 dialog.show(); |
| 189 shouldBe('dialog.offsetTop', 'expectedTop'); | 198 shouldBe('dialog.getBoundingClientRect().top', 'expectedTop'); |
| 190 dialog.close(); | 199 dialog.close(); |
| 191 </script> | 200 </script> |
| 192 <script src="../../js/resources/js-test-post.js"></script> | 201 <script src="../../js/resources/js-test-post.js"></script> |
| 193 </body> | 202 </body> |
| 194 </html> | 203 </html> |
| OLD | NEW |