File: range-snap-to-tick-marks-01.html

package info (click to toggle)
thunderbird 1%3A115.16.0esr-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 3,476,252 kB
  • sloc: cpp: 6,972,150; javascript: 5,209,211; ansic: 3,507,222; python: 1,137,609; asm: 432,531; xml: 205,149; java: 175,761; sh: 116,485; makefile: 22,152; perl: 13,971; objc: 12,561; yacc: 4,583; pascal: 2,840; lex: 1,720; ruby: 1,075; exp: 762; sql: 666; awk: 580; php: 436; lisp: 430; sed: 70; csh: 10
file content (59 lines) | stat: -rw-r--r-- 2,303 bytes parent folder | download | duplicates (22)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<!doctype html>
<meta charset=utf-8>
<meta name=viewport content=width=device-width>
<title>Snap to a slider's tick marks by clicking near them</title>
<link rel=help href="https://html.spec.whatwg.org/multipage/rendering.html#the-input-element-as-a-range-control">
<link rel=help href="https://bugzilla.mozilla.org/show_bug.cgi?id=1803118">
<link rel=author href="mailto:zach@zrhoffman.net" title="Zach Hoffman">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-actions.js></script>
<script src=/resources/testdriver-vendor.js></script>
<input type=range list=tickmarks min=-5 max=35>
<datalist id=tickmarks>
  <option value=0></option>
  <option value=3></option>
</datalist>
<script>
  const range = document.querySelector("input[type=range]");
  const step = 1;
  promise_test(async function snapToTickMarks() {
    const assertions = [[-3, "-3"], [-2, "0"], [1, "0"], [2, "3"], [5, "3"], [6, "6"]];
    const rect = range.getBoundingClientRect();
    const padding = 10;
    const left = rect.left + padding;
    const width = rect.width - 2 * padding;
    const actions = new test_driver.Actions();
    const min = parseInt(range.min);
    const max = parseInt(range.max);
    for (const assertion of assertions) {
      const moveTo = (left + width * (assertion[0] - min) / (max - min)) | 0;
      const expected = assertion[1];
      await actions
          .pointerMove(moveTo, rect.top)
          .pointerDown()
          .pointerUp()
          .send();
      assert_equals(range.value, expected);
    }
  });
  promise_test(async function domDoesNotSnap() {
    const startAt = -2;
    range.value = startAt;
    for (let expectedValue = startAt + 1; expectedValue <= 6; expectedValue++) {
      range.stepUp();
      assert_equals(parseInt(range.value), expectedValue);
    }
  });
  promise_test(async function keyboardDoesNotSnap() {
    const kArrowRight = "\uE014";
    range.focus();
    const startAt = -2;
    range.value = startAt;
    for (let expectedValue = startAt + 1; expectedValue <= 6; expectedValue++) {
      await test_driver.send_keys(range, kArrowRight);
      assert_equals(parseInt(range.value), expectedValue);
    }
  });
</script>