123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- <!DOCTYPE html>
- <html>
- <!--
- Copyright 2010 The Closure Library Authors. All Rights Reserved.
- Use of this source code is governed by the Apache License, Version 2.0.
- See the COPYING file for details.
- -->
- <head>
- <title>goog.ui.Popup</title>
- <script src="../base.js"></script>
- <script>
- if (typeof goog == 'undefined') {
- alert('Closure failed to load');
- } else {
- goog.require('goog.events');
- goog.require('goog.events.EventType');
- goog.require('goog.positioning.ClientPosition');
- goog.require('goog.positioning.Corner');
- goog.require('goog.positioning.AnchoredViewportPosition');
- goog.require('goog.ui.Popup');
- }
- </script>
- <link rel="stylesheet" href="css/demo.css">
- <style>
- .popup {
- position:absolute;
- background-color:#e0ecff;
- color:black;
- visibility:hidden;
- width:100px;
- height:100px;
- font-size: 80%;
- border:solid red 1px;
- -moz-outline:0;
- outline:0;
- }
- button {
- border: solid black 1px;
- margin-left: 50%;
- }
- label {
- display: block;
- width: 15em;
- }
- #abs-box {
- border: solid black 2px;
- height: 200px;
- width: 200px;
- }
- </style>
- </head>
- <body>
- <h1>goog.ui.Popup</h1>
- <div id='popup' class='popup' tabindex="0"></div>
- <p>Positioning relative to an anchor element</p>
- <form>
- <strong>Button Corner</strong>
- <label for="button_corner_tl">
- <input type="radio" id="button_corner_tl" name="button_corner" value="tl">Top Left
- </label>
- <label for="button_corner_tr">
- <input type="radio" id="button_corner_tr" name="button_corner" value="tr">Top Right
- </label>
- <label for="button_corner_bl">
- <input type="radio" id="button_corner_bl" name="button_corner" value="bl" checked="checked">Bottom Left
- </label>
- <label for="button_corner_br">
- <input type="radio" id="button_corner_br" name="button_corner" value="br">Bottom Right
- </label>
- <br>
- <strong>Popup Corner</strong>
- <label for="menu_corner_tl">
- <input type="radio" id="menu_corner_tl" name="menu_corner" value="tl" checked/>Top Left
- </label>
- <label for="menu_corner_tr">
- <input type="radio" id="menu_corner_tr" name="menu_corner" value="tr">Top Right
- </label>
- <label for="menu_corner_bl">
- <input type="radio" id="menu_corner_bl" name="menu_corner" value="bl">Bottom Left
- </label>
- <label for="menu_corner_br">
- <input type="radio" id="menu_corner_br" name="menu_corner" value="br">Bottom Right
- </label>
- <br>
- <strong>Margin</strong>
- Top: <input id="margin_top" size=2 value="0">
- Right: <input id="margin_right" size=2 value="0">
- Bottom: <input id="margin_bottom" size=2 value="0">
- Left: <input id="margin_left" size=2 value="0">
- <br>
- <br>
- <br>
- </form>
- <button id="btn" onclick="showPopup()">
- Press me!
- </button>
- <br>
- <br>
- <h3>Iframe to test cross frame dismissal</h3>
- <iframe src="about:blank"></iframe>
- <br>
- <br>
- <hr>
- <h3>Positioning at coordinates</h3>
- <div id="abs-box"></div>
- <script>
- var popupElt = document.getElementById('popup');
- var popup = new goog.ui.Popup(popupElt);
- popup.setHideOnEscape(true);
- popup.setAutoHide(true);
- var showingBecauseOfBox = false;
- goog.events.listen(window, goog.events.EventType.RESIZE, onResize);
- goog.events.listen(document, goog.events.EventType.MOUSEMOVE, onMouseMove);
- // goog.events.listen(absBox, goog.events.EventType.MOUSEOUT,
- // onAbsBoxMouseOut);
- function showPopup() {
- var btn = document.getElementById('btn');
- var buttonCorner = toCorner(
- getCheckedValue(document.forms[0].elements['button_corner']));
- var menuCorner = toCorner(
- getCheckedValue(document.forms[0].elements['menu_corner']));
- var t = parseInt(document.getElementById('margin_top').value);
- var r = parseInt(document.getElementById('margin_right').value);
- var b = parseInt(document.getElementById('margin_bottom').value);
- var l = parseInt(document.getElementById('margin_left').value);
- var margin = new goog.math.Box(t, r, b, l);
- popup.setVisible(false);
- popup.setPinnedCorner(menuCorner);
- popup.setMargin(margin);
- popup.setPosition(new goog.positioning.AnchoredViewportPosition(btn,
- buttonCorner));
- popup.setVisible(true);
- }
- function onResize(e) {
- if (popup && popup.isVisible()) {
- popup.reposition();
- }
- }
- function onMouseMove(e) {
- var absBox = document.getElementById('abs-box');
- var offset = goog.style.getViewportPageOffset(
- goog.dom.getOwnerDocument(absBox));
- var size = goog.style.getSize(absBox);
- var boxPagePosition = goog.style.getPageOffset(absBox);
- var boxClientPosition = new goog.math.Coordinate(
- boxPagePosition.x - offset.x,
- boxPagePosition.y - offset.y);
- if (e.clientX >= boxClientPosition.x &&
- e.clientX < (boxClientPosition.x + size.width) &&
- e.clientY >= boxClientPosition.y &&
- e.clientY < (boxClientPosition.y + size.height)) {
- popup.setPinnedCorner(goog.positioning.Corner.TOP_LEFT);
- popup.setPosition(new goog.positioning.ClientPosition(
- e.clientX, e.clientY));
- popup.setVisible(true);
- showingBecauseOfBox = true;
- } else if (showingBecauseOfBox) {
- popup.setVisible(false);
- showingBecauseOfBox = false;
- }
- }
- function getCheckedValue(radioObj) {
- for (var i = 0; i < radioObj.length; i++) {
- if (radioObj[i].checked) {
- return radioObj[i].value;
- }
- }
- }
- function toCorner(val) {
- switch (val) {
- case "tl":
- return goog.positioning.Corner.TOP_LEFT;
- case "tr":
- return goog.positioning.Corner.TOP_RIGHT;
- case "bl":
- return goog.positioning.Corner.BOTTOM_LEFT;
- case "br":
- return goog.positioning.Corner.BOTTOM_RIGHT;
- }
- }
- </script>
- </body>
- </html>
|