Move parseFontFaceDescriptor to CSSPropertyParser.cpp
[chromium-blink-merge.git] / third_party / WebKit / LayoutTests / touchadjustment / resources / touchadjustment.js
blob726a23034532e8cb543efad11305c7496dd0defd
1 /* function for finding the absolute bounds of a node (both inline and block) */
2 function findAbsoluteBounds(node)
4     var bounds = node.getBoundingClientRect();
5     return {
6         left: bounds.left,
7         top: bounds.top,
8         width: bounds.right - bounds.left,
9         height: bounds.bottom - bounds.top
10     };
13 function nodeToString(node)
15     if (node === undefined)
16         return 'undefined';
17     if (node === null)
18         return 'null';
19     if (!node.nodeName)
20         return 'not a node';
21     if (node.nodeType == 3)
22         return "'"+node.nodeValue+"'";
23     return node.nodeName + (node.id ? ('#' + node.id) : '');
26 function boundsToString(bounds)
28     return "("+bounds.left+","+bounds.top+")x("+bounds.width+","+bounds.height+")";
31 function pointToString(point)
33     return "("+point.x+","+point.y+")";
37 function shouldBeNode(adjustedNode, targetNode) {
38     if (typeof targetNode == "string") {
39         var adjustedNodeString = nodeToString(adjustedNode);
40         if (targetNode == adjustedNodeString) {
41             testPassed("adjusted node was " + targetNode + ".");
42         }
43         else {
44             testFailed("adjusted node should be " + targetNode  + ". Was " + adjustedNodeString + ".");
45         }
46         return;
47     }
48     if (targetNode == adjustedNode) {
49         testPassed("adjusted node was " + nodeToString(targetNode) + ".");
50     }
51     else {
52         testFailed("adjusted node should be " + nodeToString(targetNode)  + ". Was " + nodeToString(adjustedNode) + ".");
53     }
56 function shouldBeWithin(adjustedPoint, targetArea) {
57     if (adjustedPoint.x >= targetArea.left && adjustedPoint.y >= targetArea.top
58         && adjustedPoint.x <= (targetArea.left + targetArea.width)
59         && adjustedPoint.y <= (targetArea.top + targetArea.height)) {
60         testPassed("adjusted point was within " + boundsToString(targetArea));
61     } else {
62         testFailed("adjusted node should be within " + boundsToString(targetArea)  + ". Was " + pointToString(adjustedPoint));
63     }
66 function shadowHost(node)
68     for (; node != null; node = node.parentNode) {
69         if (node.host)
70             return node.host;
71     }
72     return node;
75 function testTouchPoint(touchpoint, targetNode, allowTextNodes, disallowShadowDOM)
77     var adjustedNode = internals.touchNodeAdjustedToBestClickableNode(touchpoint.left, touchpoint.top, touchpoint.width, touchpoint.height, document);
78     if (!allowTextNodes && adjustedNode && adjustedNode.nodeType == 3)
79         adjustedNode = adjustedNode.parentNode;
80     if (disallowShadowDOM && adjustedNode && adjustedNode.nodeType == 1) {
81         while (shadowHost(adjustedNode))
82             adjustedNode = shadowHost(adjustedNode);
83     }
84     shouldBeNode(adjustedNode, targetNode);
87 function testTouchPointContextMenu(touchpoint, targetNode, allowTextNodes)
89     var adjustedNode = internals.touchNodeAdjustedToBestContextMenuNode(touchpoint.left, touchpoint.top, touchpoint.width, touchpoint.height, document);
90     if (!allowTextNodes && adjustedNode && adjustedNode.nodeType == 3)
91         adjustedNode = adjustedNode.parentNode;
92     shouldBeNode(adjustedNode, targetNode);
95 function adjustTouchPoint(touchpoint)
97     var adjustedPoint = internals.touchPositionAdjustedToBestClickableNode(touchpoint.left, touchpoint.top, touchpoint.width, touchpoint.height, document);
98     return adjustedPoint;
101 function adjustTouchPointContextMenu(touchpoint)
103     var adjustedPoint = internals.touchPositionAdjustedToBestContextMenuNode(touchpoint.left, touchpoint.top, touchpoint.width, touchpoint.height, document);
104     return adjustedPoint;
107 function touchPoint(x, y, radiusX, radiusY)
109     if (!radiusY)
110         radiusY = radiusX;
112     return {
113         left: x - radiusX,
114         top: y - radiusY,
115         width: radiusX * 2,
116         height: radiusY * 2,
117         get x() { return this.left + this.width/2; },
118         get y() { return this.top + this.height/2; }
119     };
122 function offsetTouchPoint(bounds, relativePosition, touchOffset, touchRadiusX, touchRadiusY)
124     if (!touchRadiusY)
125         touchRadiusY = touchRadiusX;
127     // Start with the center of the touch at the top-left of the bounds.
128     var touchpoint = touchPoint(bounds.left, bounds.top, touchRadiusX, touchRadiusY);
130     // Adjust the touch point as requested.
131     switch (relativePosition) {
132     case 'center':
133         touchpoint.left += bounds.width / 2;
134         touchpoint.top += bounds.height / 2;
135         break;
136     case 'left':
137         touchpoint.left -= touchOffset;
138         touchpoint.top += bounds.height / 2;
139         break;
140     case 'right':
141         touchpoint.left += bounds.width + touchOffset;
142         touchpoint.top +=  bounds.height / 2;
143         break;
144     case 'top-left':
145         touchpoint.left -= touchOffset;
146         touchpoint.top -= touchOffset;
147         break;
148     case 'top-right':
149         touchpoint.left += bounds.width + touchOffset;
150         touchpoint.top -= touchOffset;
151         break;
152     case 'bottom-left':
153         touchpoint.left -= touchOffset;
154         touchpoint.top += bounds.height + touchOffset;
155         break;
156     case 'bottom-right':
157         touchpoint.left += bounds.width + touchOffset;
158         touchpoint.top += bounds.height + touchOffset;
159         break;
160     case 'top':
161         touchpoint.left += bounds.width / 2;
162         touchpoint.top -= touchOffset;
163         break;
164     case 'bottom':
165         touchpoint.left += bounds.width / 2;
166         touchpoint.top += bounds.height + touchOffset;
167     }
169     return touchpoint;