Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(786)

Unified Diff: chrome/browser/resources/shared/js/cr/ui/position_util.js

Issue 11962043: Move webui resources from chrome\browser\resources\shared to ui\webui\resources. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/shared/js/cr/ui/position_util.js
===================================================================
--- chrome/browser/resources/shared/js/cr/ui/position_util.js (revision 177292)
+++ chrome/browser/resources/shared/js/cr/ui/position_util.js (working copy)
@@ -1,243 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/**
- * @fileoverview This file provides utility functions for position popups.
- */
-
-cr.define('cr.ui', function() {
-
- /**
- * Type def for rects as returned by getBoundingClientRect.
- * @typedef { {left: number, top: number, width: number, height: number,
- * right: number, bottom: number}}
- */
- var Rect;
-
- /**
- * Enum for defining how to anchor a popup to an anchor element.
- * @enum {number}
- */
- var AnchorType = {
- /**
- * The popup's right edge is aligned with the left edge of the anchor.
- * The popup's top edge is aligned with the top edge of the anchor.
- */
- BEFORE: 1, // p: right, a: left, p: top, a: top
-
- /**
- * The popop's left edge is aligned with the right edge of the anchor.
- * The popup's top edge is aligned with the top edge of the anchor.
- */
- AFTER: 2, // p: left a: right, p: top, a: top
-
- /**
- * The popop's bottom edge is aligned with the top edge of the anchor.
- * The popup's left edge is aligned with the left edge of the anchor.
- */
- ABOVE: 3, // p: bottom, a: top, p: left, a: left
-
- /**
- * The popop's top edge is aligned with the bottom edge of the anchor.
- * The popup's left edge is aligned with the left edge of the anchor.
- */
- BELOW: 4 // p: top, a: bottom, p: left, a: left
- };
-
- /**
- * Helper function for positionPopupAroundElement and positionPopupAroundRect.
- * @param {!Rect} anchorRect The rect for the anchor.
- * @param {!HTMLElement} popupElement The element used for the popup.
- * @param {AnchorType} type The type of anchoring to do.
- * @param {boolean} invertLeftRight Whether to invert the right/left
- * alignment.
- */
- function positionPopupAroundRect(anchorRect, popupElement, type,
- invertLeftRight) {
- var popupRect = popupElement.getBoundingClientRect();
- var availRect;
- var ownerDoc = popupElement.ownerDocument;
- var cs = ownerDoc.defaultView.getComputedStyle(popupElement);
- var docElement = ownerDoc.documentElement;
-
- if (cs.position == 'fixed') {
- // For 'fixed' positioned popups, the available rectangle should be based
- // on the viewport rather than the document.
- availRect = {
- height: docElement.clientHeight,
- width: docElement.clientWidth,
- top: 0,
- bottom: docElement.clientHeight,
- left: 0,
- right: docElement.clientWidth
- };
- } else {
- availRect = popupElement.offsetParent.getBoundingClientRect();
- }
-
- if (cs.direction == 'rtl')
- invertLeftRight = !invertLeftRight;
-
- // Flip BEFORE, AFTER based on alignment.
- if (invertLeftRight) {
- if (type == AnchorType.BEFORE)
- type = AnchorType.AFTER;
- else if (type == AnchorType.AFTER)
- type = AnchorType.BEFORE;
- }
-
- // Flip type based on available size
- switch (type) {
- case AnchorType.BELOW:
- if (anchorRect.bottom + popupRect.height > availRect.height &&
- popupRect.height <= anchorRect.top) {
- type = AnchorType.ABOVE;
- }
- break;
- case AnchorType.ABOVE:
- if (popupRect.height > anchorRect.top &&
- anchorRect.bottom + popupRect.height <= availRect.height) {
- type = AnchorType.BELOW;
- }
- break;
- case AnchorType.AFTER:
- if (anchorRect.right + popupRect.width > availRect.width &&
- popupRect.width <= anchorRect.left) {
- type = AnchorType.BEFORE;
- }
- break;
- case AnchorType.BEFORE:
- if (popupRect.width > anchorRect.left &&
- anchorRect.right + popupRect.width <= availRect.width) {
- type = AnchorType.AFTER;
- }
- break;
- }
- // flipping done
-
- var style = popupElement.style;
- // Reset all directions.
- style.left = style.right = style.top = style.bottom = 'auto';
-
- // Primary direction
- switch (type) {
- case AnchorType.BELOW:
- if (anchorRect.bottom + popupRect.height <= availRect.height)
- style.top = anchorRect.bottom + 'px';
- else
- style.bottom = '0';
- break;
- case AnchorType.ABOVE:
- if (availRect.height - anchorRect.top >= 0)
- style.bottom = availRect.height - anchorRect.top + 'px';
- else
- style.top = '0';
- break;
- case AnchorType.AFTER:
- if (anchorRect.right + popupRect.width <= availRect.width)
- style.left = anchorRect.right + 'px';
- else
- style.right = '0';
- break;
- case AnchorType.BEFORE:
- if (availRect.width - anchorRect.left >= 0)
- style.right = availRect.width - anchorRect.left + 'px';
- else
- style.left = '0';
- break;
- }
-
- // Secondary direction
- switch (type) {
- case AnchorType.BELOW:
- case AnchorType.ABOVE:
- if (invertLeftRight) {
- // align right edges
- if (anchorRect.right - popupRect.width >= 0) {
- style.right = availRect.width - anchorRect.right + 'px';
-
- // align left edges
- } else if (anchorRect.left + popupRect.width <= availRect.width) {
- style.left = anchorRect.left + 'px';
-
- // not enough room on either side
- } else {
- style.right = '0';
- }
- } else {
- // align left edges
- if (anchorRect.left + popupRect.width <= availRect.width) {
- style.left = anchorRect.left + 'px';
-
- // align right edges
- } else if (anchorRect.right - popupRect.width >= 0) {
- style.right = availRect.width - anchorRect.right + 'px';
-
- // not enough room on either side
- } else {
- style.left = '0';
- }
- }
- break;
-
- case AnchorType.AFTER:
- case AnchorType.BEFORE:
- // align top edges
- if (anchorRect.top + popupRect.height <= availRect.height) {
- style.top = anchorRect.top + 'px';
-
- // align bottom edges
- } else if (anchorRect.bottom - popupRect.height >= 0) {
- style.bottom = availRect.height - anchorRect.bottom + 'px';
-
- // not enough room on either side
- } else {
- style.top = '0';
- }
- break;
- }
- }
-
- /**
- * Positions a popup element relative to an anchor element. The popup element
- * should have position set to absolute and it should be a child of the body
- * element.
- * @param {!HTMLElement} anchorElement The element that the popup is anchored
- * to.
- * @param {!HTMLElement} popupElement The popup element we are positioning.
- * @param {AnchorType} type The type of anchoring we want.
- * @param {boolean} invertLeftRight Whether to invert the right/left
- * alignment.
- */
- function positionPopupAroundElement(anchorElement, popupElement, type,
- invertLeftRight) {
- var anchorRect = anchorElement.getBoundingClientRect();
- positionPopupAroundRect(anchorRect, popupElement, type, invertLeftRight);
- }
-
- /**
- * Positions a popup around a point.
- * @param {number} x The client x position.
- * @param {number} y The client y position.
- * @param {!HTMLElement} popupElement The popup element we are positioning.
- */
- function positionPopupAtPoint(x, y, popupElement) {
- var rect = {
- left: x,
- top: y,
- width: 0,
- height: 0,
- right: x,
- bottom: y
- };
- positionPopupAroundRect(rect, popupElement, AnchorType.BELOW);
- }
-
- // Export
- return {
- AnchorType: AnchorType,
- positionPopupAroundElement: positionPopupAroundElement,
- positionPopupAtPoint: positionPopupAtPoint
- };
-});
« no previous file with comments | « chrome/browser/resources/shared/js/cr/ui/overlay.js ('k') | chrome/browser/resources/shared/js/cr/ui/position_util_test.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698