mirror of
https://github.com/servo/servo
synced 2026-05-13 18:37:30 +02:00
70 lines
3.2 KiB
HTML
70 lines
3.2 KiB
HTML
<!DOCTYPE html>
|
|
<meta charset=utf-8>
|
|
<title>dialog element: centered alignment</title>
|
|
<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
|
|
<link rel="help" href="https://html.spec.whatwg.org/#flow-content-3">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<div id="log"></div>
|
|
|
|
<script>
|
|
"use strict";
|
|
|
|
// Be sure to sync with centering-iframe.html
|
|
const dialogWidth = 20;
|
|
const dialogHeight = 10;
|
|
|
|
testDialogCentering("horizontal-tb", "", "", "tall viewport", 40, 100);
|
|
testDialogCentering("horizontal-tb", "", "", "wide viewport", 100, 40);
|
|
testDialogCentering("horizontal-tb", "", "", "square viewport", 100, 100);
|
|
testDialogCentering("horizontal-tb", "", "", "dialog and viewport match", dialogWidth, dialogHeight);
|
|
|
|
testDialogCentering("vertical-rl", "", "", "tall viewport", 40, 100);
|
|
testDialogCentering("vertical-lr", "", "", "tall viewport", 40, 100);
|
|
|
|
testDialogCentering("vertical-rl", "", "horizontal-tb", "tall viewport", 40, 100);
|
|
testDialogCentering("vertical-lr", "", "horizontal-tb", "tall viewport", 40, 100);
|
|
|
|
testDialogCentering("horizontal-tb", "vertical-rl", "", "tall viewport", 40, 100);
|
|
testDialogCentering("vertical-rl", "horizontal-tb", "", "tall viewport", 40, 100);
|
|
|
|
testDialogCentering("horizontal-tb", "vertical-rl", "horizontal-tb", "tall viewport", 40, 100);
|
|
testDialogCentering("vertical-rl", "horizontal-tb", "vertical-rl", "tall viewport", 40, 100);
|
|
|
|
function testDialogCentering(writingMode, containerWritingMode, dialogWritingMode, label, iframeWidth, iframeHeight) {
|
|
const dialogSizesToTest = [["", ""], [dialogWidth.toString()+'px', dialogHeight.toString()+'px']];
|
|
for (const dialogSizes of dialogSizesToTest) {
|
|
const isDefaultSize = dialogSizes[0] == "";
|
|
// This test doesn't make sense if the dialog sizes are default
|
|
if (isDefaultSize && label == "dialog and viewport match") {
|
|
continue;
|
|
}
|
|
|
|
async_test(t => {
|
|
const iframe = document.createElement("iframe");
|
|
iframe.src = `centering-iframe.sub.html?html-writing-mode=${writingMode}&container-writing-mode=${containerWritingMode}&dialog-writing-mode=${dialogWritingMode}&dialog-width=${dialogSizes[0]}&dialog-height=${dialogSizes[1]}`;
|
|
iframe.width = iframeWidth;
|
|
iframe.height = iframeHeight;
|
|
iframe.onload = t.step_func_done(() => {
|
|
const dialog = iframe.contentDocument.querySelector("dialog");
|
|
const dialogRect = dialog.getBoundingClientRect();
|
|
|
|
const expectedLeftOffset = iframeWidth / 2 - dialogRect.width / 2;
|
|
const expectedTopOffset = Math.max(iframeHeight / 2 - dialogRect.height / 2, 0);
|
|
|
|
if (isDefaultSize) {
|
|
assert_approx_equals(dialogRect.left, expectedLeftOffset, 1/60);
|
|
assert_approx_equals(dialogRect.top, expectedTopOffset, 1/60);
|
|
} else {
|
|
assert_equals(dialogRect.left, expectedLeftOffset);
|
|
assert_equals(dialogRect.top, expectedTopOffset);
|
|
}
|
|
});
|
|
document.body.appendChild(iframe);
|
|
}, writingMode + (containerWritingMode ? ` (container ${containerWritingMode})` : "") +
|
|
(dialogWritingMode ? ` (dialog ${dialogWritingMode})` : "") + `: ${label}` + `, default-sizes: ${isDefaultSize}`);
|
|
|
|
}
|
|
}
|
|
</script>
|