<!DOCTYPE html>
<html>
<head>
<title>Touch Adjustment : Improved targetting for small controls - bug 92293</title>
<script src="../resources/js-test-pre.js"></script>
<script src="resources/touchadjustment.js"></script>

<style>
  body {
    -webkit-margin-start: 20px;
    margin-top: 20px;
  }
  .control-pair {
    margin-bottom: 30px;
  }

  #check {
    border: 1px solid black;
    display: inline-block;
    padding: 5px;
    vertical-align: middle;
  }

  #remove-button {
    border: none;
    background: #999;
    display: inline-block;
    padding: 5px;
    vertical-align: middle;
  }

  #combo-button {
    border: 1px solid #777;
    padding: 5px;
    margin-top: 20px;
  }

  #combo-label {
    border: 1px solid #777;
    height: 1em;
    width: 4em;
  }

  #combo-button,
  #combo-label,
  #drop-down-selector {
    display: inline-block;
    vertical-align: middle;
  }

  #drop-down-selector {
    -webkit-box-sizing: content-box;
    width: 0;
    height: 0;
    border-left: 5px solid transparent;
    border-right: 5px solid transparent;
    border-top: 10px solid #777;
  }
  
</style>

</head>

<body id="mybody">

<div id=sandbox>
    <div class="control-pair">
        <!-- Small checkbox to the left of another control -->
        <div id="check" onclick="onClick();"></div>
        <input id="task" type="text" value="Task 1">
    </div>
    <div class="control-pair">
        <!-- Small remove button to the right of another control -->
        <input id = "item-label" type="text" value = "Option 1">
        <div id = "remove-button" onclick="onClick();"></div>
    </div>
    <div>
        <div id="combo-button">
            <!-- Combo-button controls -->
            <div id = "combo-label" onclick="function() {};"></div>
            <div id = "drop-down-selector" onclick="onClick();"></div>
        </div>
    </div>
</div>

<p id='description'></p>
<div id='console'></div>

<script>
    var touchRadius = 20;
    var touchOffset = 8;

    var element;
    var adjustedNode;

    function onClick()
    {
    }

    function testDirectTouch(id)
    {
        testTouch(id, 'center');
    }

    function testIndirectTouch(id)
    {
        testTouch(id, 'left');
        testTouch(id, 'right');
        testTouch(id, 'top-left');
        testTouch(id, 'top-right');
        testTouch(id, 'bottom-left');
        testTouch(id, 'bottom-right');
        testTouch(id, 'top');
        testTouch(id, 'bottom');
    }

    function testTouch(id, relativePosition)
    {
        var element = document.getElementById(id);
        testTouchPoint(offsetTouchPoint(findAbsoluteBounds(element), relativePosition, touchOffset, touchRadius), element);
    }

    function testDirectTouches()
    {
        debug('Testing small direct hits.');

        testDirectTouch('check');
        testDirectTouch('task');
        testDirectTouch('item-label');
        testDirectTouch('remove-button');
        testDirectTouch('combo-label');
        testDirectTouch('drop-down-selector');
    }

    function testIndirectTouches()
    {
        debug('Testing indirect hits.');

        testIndirectTouch('check');
        testIndirectTouch('remove-button');
        testIndirectTouch('drop-down-selector');
    }

    function runTests()
    {
        if (window.testRunner && window.internals && internals.touchNodeAdjustedToBestClickableNode) {
            description('Tests if small clickable targets adjacent to larger clickable controls are properly targetted with touch adjustment.');
            testDirectTouches();
            testIndirectTouches();
            document.getElementById('sandbox').style.display = 'none';
        }
    }
    runTests();
</script>
<script src="../resources/js-test-post.js"></script>
</body>
</html>
