| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <title>mpadded</title> |
| <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#adjust-space-around-content-mpadded"> |
| <meta name="assert" content="Verify metrics of mpadded element with voffset and lspace"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script> |
| setup({ explicit_done: true }); |
| window.addEventListener("load", runTests); |
| |
| function runTests() { |
| const contentWidth = 10; |
| const contentDepth = 15; |
| const contentHeight = 20; |
| const epsilon = 1; |
| |
| test(function() { |
| Array.from(document.getElementsByClassName("shrink-wrap")).forEach(container => { |
| assert_approx_equals(container.getBoundingClientRect().width, contentWidth, epsilon); |
| }); |
| }, "lspace/voffset shifts don't affect mpadded preferred width"); |
| |
| function GetShifts(mpadded) { |
| let mpadded_box = mpadded.getBoundingClientRect(); |
| let mspace_box = mpadded.firstElementChild.getBoundingClientRect(); |
| return { lspace: mspace_box.left - mpadded_box.left, |
| voffset: mpadded_box.top - mspace_box.top }; |
| } |
| |
| let mpaddeds = document.getElementById("static_tests").getElementsByTagName("mpadded"); |
| test(function() { |
| let baseline = document.getElementById("baseline").getBoundingClientRect().bottom; |
| Array.from(mpaddeds).forEach(e => { |
| let mpadded = e.getBoundingClientRect(); |
| assert_approx_equals(mpadded.width, contentWidth, epsilon); |
| assert_approx_equals(baseline - mpadded.top, contentHeight, epsilon); |
| assert_approx_equals(mpadded.bottom - baseline, contentDepth, epsilon); |
| |
| }); |
| }, "lspace/voffset shifts don't affect mpadded size"); |
| |
| |
| test(function() { |
| let shifts = GetShifts(mpaddeds[0]); |
| assert_approx_equals(shifts.lspace, 5, epsilon, "positive lspace"); |
| assert_approx_equals(shifts.voffset, 0, epsilon); |
| |
| shifts = GetShifts(mpaddeds[1]); |
| assert_approx_equals(shifts.lspace, 0, epsilon, "negative lspace is clmaped to zero"); |
| assert_approx_equals(shifts.voffset, 0, epsilon); |
| |
| shifts = GetShifts(mpaddeds[2]); |
| assert_approx_equals(shifts.lspace, 0, epsilon, "positive lspace percentage"); |
| assert_approx_equals(shifts.voffset, 0, epsilon); |
| |
| shifts = GetShifts(mpaddeds[3]); |
| assert_approx_equals(shifts.lspace, 0, epsilon, "negative lspace percentage"); |
| assert_approx_equals(shifts.voffset, 0, epsilon); |
| |
| shifts = GetShifts(mpaddeds[4]); |
| assert_approx_equals(shifts.lspace, 0, epsilon); |
| assert_approx_equals(shifts.voffset, 10, epsilon, "positive voffset"); |
| |
| shifts = GetShifts(mpaddeds[5]); |
| assert_approx_equals(shifts.lspace, 0, epsilon); |
| assert_approx_equals(shifts.voffset, -10, epsilon, "negative voffset"); |
| |
| shifts = GetShifts(mpaddeds[6]); |
| assert_approx_equals(shifts.lspace, 0, epsilon); |
| assert_approx_equals(shifts.voffset, 0, epsilon, "positive voffset percentage"); |
| |
| shifts = GetShifts(mpaddeds[7]); |
| assert_approx_equals(shifts.lspace, 0, epsilon); |
| assert_approx_equals(shifts.voffset, 0, epsilon, "negative voffset percentage"); |
| |
| shifts = GetShifts(mpaddeds[8]); |
| assert_approx_equals(shifts.lspace, 5, epsilon); |
| assert_approx_equals(shifts.voffset, 10, epsilon); |
| |
| shifts = GetShifts(mpaddeds[9]); |
| assert_approx_equals(shifts.lspace, 5, epsilon); |
| assert_approx_equals(shifts.voffset, -10, epsilon); |
| }, "content is shifted by the specified lspace/voffset"); |
| |
| mpaddeds = document.getElementById("static_tests_rtl").getElementsByTagName("mpadded"); |
| test(function() { |
| let shifts = GetShifts(mpaddeds[0]); |
| assert_approx_equals(shifts.lspace, -5, epsilon, "positive lspace"); |
| assert_approx_equals(shifts.voffset, 0, epsilon); |
| |
| shifts = GetShifts(mpaddeds[1]); |
| assert_approx_equals(shifts.lspace, 0, epsilon, "negative lspace is clmaped to zero"); |
| assert_approx_equals(shifts.voffset, 0, epsilon); |
| |
| shifts = GetShifts(mpaddeds[2]); |
| assert_approx_equals(shifts.lspace, 0, epsilon); |
| assert_approx_equals(shifts.voffset, 10, epsilon, "positive voffset"); |
| |
| shifts = GetShifts(mpaddeds[3]); |
| assert_approx_equals(shifts.lspace, 0, epsilon); |
| assert_approx_equals(shifts.voffset, -10, epsilon, "negative voffset"); |
| |
| shifts = GetShifts(mpaddeds[4]); |
| assert_approx_equals(shifts.lspace, -5, epsilon); |
| assert_approx_equals(shifts.voffset, 10, epsilon); |
| |
| shifts = GetShifts(mpaddeds[5]); |
| assert_approx_equals(shifts.lspace, -5, epsilon); |
| assert_approx_equals(shifts.voffset, -10, epsilon); |
| }, "content is shifted by the specified lspace/voffset (RTL)"); |
| |
| mpaddeds = document.getElementById("dynamic_tests").getElementsByTagName("mpadded"); |
| test(function() { |
| mpaddeds[0].setAttribute("lspace", "5px") |
| let shifts = GetShifts(mpaddeds[0]); |
| assert_approx_equals(shifts.lspace, 5, epsilon, "attach lspace"); |
| assert_approx_equals(shifts.voffset, 0, epsilon); |
| |
| mpaddeds[1].setAttribute("voffset", "10px") |
| shifts = GetShifts(mpaddeds[1]); |
| assert_approx_equals(shifts.lspace, 0, epsilon); |
| assert_approx_equals(shifts.voffset, 10, epsilon, "attach voffset"); |
| |
| mpaddeds[2].removeAttribute("lspace") |
| shifts = GetShifts(mpaddeds[2]); |
| assert_approx_equals(shifts.lspace, 0, epsilon, "remove lspace"); |
| assert_approx_equals(shifts.voffset, 10, epsilon); |
| |
| mpaddeds[3].removeAttribute("voffset") |
| shifts = GetShifts(mpaddeds[3]); |
| assert_approx_equals(shifts.lspace, 5, epsilon); |
| assert_approx_equals(shifts.voffset, 0, epsilon, "remove voffset"); |
| |
| mpaddeds[4].setAttribute("lspace", "15px") |
| shifts = GetShifts(mpaddeds[4]); |
| assert_approx_equals(shifts.lspace, 15, epsilon, "modify lspace"); |
| assert_approx_equals(shifts.voffset, 10, epsilon); |
| |
| mpaddeds[5].setAttribute("voffset", "-10px") |
| shifts = GetShifts(mpaddeds[5]); |
| assert_approx_equals(shifts.lspace, 5, epsilon); |
| assert_approx_equals(shifts.voffset, -10, epsilon, "modify voffset"); |
| }, "dynamic changes of lspace/voffset"); |
| |
| done(); |
| } |
| </script> |
| <style> |
| div.shrink-wrap { |
| background: yellow; |
| display: inline-block; |
| margin-top: 5px; |
| padding-top: 5px; |
| } |
| </style> |
| </head> |
| <body> |
| <div id="log"></div> |
| <div id="static_tests"> |
| <span id="baseline" style="display: inline-block; width: 30px; height: 5px; background: blue"></span> |
| <math> |
| <mpadded lspace="5px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded lspace="-5px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded lspace="5%" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded lspace="-5%" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded voffset="10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded voffset="-10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded voffset="10%" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded voffset="-10%" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded lspace="5px" voffset="10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded lspace="5px" voffset="-10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| </math> |
| </div> |
| <div id="static_tests_rtl"> |
| <math dir="rtl"> |
| <mpadded lspace="5px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded lspace="-5px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded voffset="10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded voffset="-10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded lspace="5px" voffset="10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded lspace="5px" voffset="-10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| </math> |
| </div> |
| <div id="dynamic_tests"> |
| <math> |
| <mpadded style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded lspace="5px" voffset="10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded lspace="5px" voffset="10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded lspace="5px" voffset="10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| <mpadded lspace="5px" voffset="10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| </math> |
| </div> |
| <div> |
| <div class="shrink-wrap"> |
| <math> |
| <mpadded lspace="5px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| </math> |
| </div> |
| <div class="shrink-wrap"> |
| <math> |
| <mpadded lspace="-5px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| </math> |
| </div> |
| <div class="shrink-wrap"> |
| <math> |
| <mpadded voffset="10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| </math> |
| </div> |
| <div class="shrink-wrap"> |
| <math> |
| <mpadded voffset="-10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| </math> |
| </div> |
| <div class="shrink-wrap"> |
| <math> |
| <mpadded lspace="5px" voffset="10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| </math> |
| </div> |
| <div class="shrink-wrap"> |
| <math> |
| <mpadded lspace="5px" voffset="-10px" style="background: black"><mspace width="10px" depth="15px" height="20px" style="background: green; opacity: .5"/></mpadded> |
| </math> |
| </div> |
| </div> |
| </body> |
| </html> |