| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>Touch Adjustment : Improved targetting for small controls - bug 92293</title> |
| <script src="../fast/js/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="../fast/js/resources/js-test-post.js"></script> |
| </body> |
| </html> |