+ // Flip to show on right.\r
+ if ( spaceBefore > rectWidth )\r
+ left += rectWidth;\r
+ // Align to window left.\r
+ else if ( viewportSize.width > rectWidth )\r
+ left = left - rect.left;\r
+ // Align to window right, never cutting the panel at right.\r
+ else\r
+ left = left - rect.right + viewportSize.width;\r
+ }\r
+ }\r
+ else if ( spaceAfter < rectWidth )\r
+ {\r
+ // Flip to show on left.\r
+ if ( spaceBefore > rectWidth )\r
+ left -= rectWidth;\r
+ // Align to window right.\r
+ else if ( viewportSize.width > rectWidth )\r
+ left = left - rect.right + viewportSize.width;\r
+ // Align to window left, never cutting the panel at left.\r
+ else\r
+ left = left - rect.left;\r
+ }\r
+\r
+\r
+ // Check if the default vertical layout is possible.\r
+ var spaceBelow = viewportSize.height - rect.top,\r
+ spaceAbove = rect.top;\r
+\r
+ if ( spaceBelow < rectHeight )\r
+ {\r
+ // Flip to show above.\r
+ if ( spaceAbove > rectHeight )\r
+ top -= rectHeight;\r
+ // Align to window bottom.\r
+ else if ( viewportSize.height > rectHeight )\r
+ top = top - rect.bottom + viewportSize.height;\r
+ // Align to top, never cutting the panel at top.\r
+ else\r
+ top = top - rect.top;\r
+ }\r