<!doctype html>
<html>
  <head>
    <title>maction toggle</title>
    <script type="text/javascript">
      function click(id, bubble, preventDefault)
      {
        var event = new MouseEvent('click', {bubbles: bubble, cancelable: true});
        if (preventDefault)
          event.preventDefault();
        document.getElementById(id).dispatchEvent(event);
      }
      function test()
      {
        // selection=1 ; ([1] 2 3 4)
        // After three clicks, selection=4: (1 2 3 [4])
        click('m1'); click('m1'); click('m1');

        // selection=2 ; (1 [2] 3 4)
        // After one click, selection=3: (1 2 [3] 4)
        click('m2');

        // selection=4 ; (1 2 3 [4])
        // After one click, selection=1: ([1] 2 3 4)
        click('m3');

        // Other edge cases
        for (var i = 1; i <= 13; i++)
          click('e'+i);

        // Nested maction elements, bubble = false ; ([([1] 2 3)] 4 5)
        // After one click on the inner maction: ([(1 [2] 3)] 4 5)
        click('m4', false);

        // Nested maction elements, bubble = true ; ([([1] 2 3)] 4 5)
        // After one click on the inner maction: ([(1 [2] 3)] 4 5)
        // Bubbling sends the event to outer maction handlers, but default handling is done only once.
        click('m5', true);

        // Prevent default ; ([1] 2 3)
        // After one click on the inner maction: ([1] 2 3)
        click('m6', false, true);
      }
    </script>
  </head>
  <body onload="test()">

    <!-- This test verifies the effect of mouse clicks on <maction actiontype="toggle"> elements. -->

    <!-- selection="1" (default) ; three clicks -->
    <math>
      <maction actiontype="toggle" id="m1">
        <mn>1</mn>
        <mn>2</mn>
        <mn>3</mn>
        <mn>4</mn>
      </maction>
    </math>

    <!-- selection="2" ; one click -->
    <math>
      <maction actiontype="toggle" selection="2" id="m2">
        <mn>1</mn>
        <mn>2</mn>
        <mn>3</mn>
        <mn>4</mn>
      </maction>
    </math>

    <!-- selection="4" (last child) ; one click -->
    <math>
      <maction actiontype="toggle" selection="4" id="m3">
        <mn>1</mn>
        <mn>2</mn>
        <mn>3</mn>
        <mn>4</mn>
      </maction>
    </math>

    <!-- Other edge cases -->
    <math>
      <maction actiontype="toggle" id="e1">
      </maction>
    </math>
    <math>
      <maction actiontype="toggle" id="e2">
        <mn>1</mn>
      </maction>
    </math>
    <math>
      <maction actiontype="toggle" selection="-10" id="e3">
        <mn>1</mn>
        <mn>2</mn>
        <mn>3</mn>
      </maction>
    </math>
    <math>
      <maction actiontype="toggle" selection="-1" id="e4">
        <mn>1</mn>
        <mn>2</mn>
        <mn>3</mn>
      </maction>
    </math>
    <math>
      <maction actiontype="toggle" selection="0" id="e5">
        <mn>1</mn>
        <mn>2</mn>
        <mn>3</mn>
      </maction>
    </math>
    <math>
      <maction actiontype="toggle" selection="4" id="e6">
        <mn>1</mn>
        <mn>2</mn>
        <mn>3</mn>
      </maction>
    </math>
    <math>
      <maction actiontype="toggle" selection="10" id="e7">
        <mn>1</mn>
        <mn>2</mn>
        <mn>3</mn>
      </maction>
    </math>
    <math>
      <maction actiontype="toggle" selection="&#x20;&#x9;&#xD;&#xA;2&#x20;&#x9;&#xD;&#xA;" id="e8">
        <mn>1</mn>
        <mn>2</mn>
        <mn>3</mn>
      </maction>
    </math>
    <math>
      <maction actiontype="toggle" selection="TWO" id="e9">
        <mn>1</mn>
        <mn>2</mn>
        <mn>3</mn>
      </maction>
    </math>
    <math>
      <!-- These values are limits for 32 bits signed integers.
           The maction element will convert them to 1 and 3 respectively. -->
      <maction actiontype="toggle" selection="-65536" id="e10">
        <mn>1</mn>
        <mn>2</mn>
        <mn>3</mn>
      </maction>
      <maction actiontype="toggle" selection="65535" id="e11">
        <mn>1</mn>
        <mn>2</mn>
        <mn>3</mn>
      </maction>
      <!-- These values are -1 and +1 for 32 or 64 bits signed integers.
           The maction element will convert both of them to 1. -->
      <maction actiontype="toggle" selection="-18446744073709551617" id="e12">
        <mn>1</mn>
        <mn>2</mn>
        <mn>3</mn>
      </maction>
      <maction actiontype="toggle" selection="18446744073709551617" id="e13">
        <mn>1</mn>
        <mn>2</mn>
        <mn>3</mn>
      </maction>
    </math>

    <!-- Nested <maction> elements ; bubble = false -->
    <math>
      <maction actiontype="toggle">
        <maction actiontype="toggle" id="m4">
          <mn>1</mn>
          <mn>2</mn>
          <mn>3</mn>
        </maction>
        <mn>4</mn>
        <mn>5</mn>
      </maction>
    </math>

    <!-- Nested <maction> elements ; bubble = true -->
    <math>
      <maction actiontype="toggle">
        <maction actiontype="toggle" id="m5">
          <mn>1</mn>
          <mn>2</mn>
          <mn>3</mn>
        </maction>
        <mn>4</mn>
        <mn>5</mn>
      </maction>
    </math>

    <!-- Prevent default -->
    <math>
      <maction actiontype="toggle" id="m6">
        <mn>1</mn>
        <mn>2</mn>
        <mn>3</mn>
      </maction>
    </math>


  </body>
</html>
