diff options
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/ui/dimensionpickerrenderer.js')
-rw-r--r-- | contexts/data/lib/closure-library/closure/goog/ui/dimensionpickerrenderer.js | 395 |
1 files changed, 0 insertions, 395 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/ui/dimensionpickerrenderer.js b/contexts/data/lib/closure-library/closure/goog/ui/dimensionpickerrenderer.js deleted file mode 100644 index 32d6980..0000000 --- a/contexts/data/lib/closure-library/closure/goog/ui/dimensionpickerrenderer.js +++ /dev/null @@ -1,395 +0,0 @@ -// Copyright 2008 The Closure Library Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS-IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/** - * @fileoverview The default renderer for a goog.dom.DimensionPicker. A - * dimension picker allows the user to visually select a row and column count. - * It looks like a palette but in order to minimize DOM load it is rendered. - * using CSS background tiling instead of as a grid of nodes. - * - * @author robbyw@google.com (Robby Walker) - * @author abefettig@google.com (Abe Fettig) - */ - -goog.provide('goog.ui.DimensionPickerRenderer'); - -goog.require('goog.dom'); -goog.require('goog.dom.TagName'); -goog.require('goog.i18n.bidi'); -goog.require('goog.style'); -goog.require('goog.ui.ControlRenderer'); -goog.require('goog.userAgent'); - - - -/** - * Default renderer for {@link goog.ui.DimensionPicker}s. Renders the - * palette as two divs, one with the un-highlighted background, and one with the - * highlighted background. - * - * @constructor - * @extends {goog.ui.ControlRenderer} - */ -goog.ui.DimensionPickerRenderer = function() { - goog.ui.ControlRenderer.call(this); -}; -goog.inherits(goog.ui.DimensionPickerRenderer, goog.ui.ControlRenderer); -goog.addSingletonGetter(goog.ui.DimensionPickerRenderer); - - -/** - * Default CSS class to be applied to the root element of components rendered - * by this renderer. - * @type {string} - */ -goog.ui.DimensionPickerRenderer.CSS_CLASS = - goog.getCssName('goog-dimension-picker'); - - -/** - * Return the underlying div for the given outer element. - * @param {Element} element The root element. - * @return {Element} The underlying div. - * @private - */ -goog.ui.DimensionPickerRenderer.prototype.getUnderlyingDiv_ = function( - element) { - return element.firstChild.childNodes[1]; -}; - - -/** - * Return the highlight div for the given outer element. - * @param {Element} element The root element. - * @return {Element} The highlight div. - * @private - */ -goog.ui.DimensionPickerRenderer.prototype.getHighlightDiv_ = function( - element) { - return /** @type {Element} */ element.firstChild.lastChild; -}; - - -/** - * Return the status message div for the given outer element. - * @param {Element} element The root element. - * @return {Element} The status message div. - * @private - */ -goog.ui.DimensionPickerRenderer.prototype.getStatusDiv_ = function( - element) { - return /** @type {Element} */ (element.lastChild); -}; - - -/** - * Return the invisible mouse catching div for the given outer element. - * @param {Element} element The root element. - * @return {Element} The invisible mouse catching div. - * @private - */ -goog.ui.DimensionPickerRenderer.prototype.getMouseCatcher_ = function( - element) { - return /** @type {Element} */ element.firstChild.firstChild; -}; - - -/** - * Overrides {@link goog.ui.ControlRenderer#canDecorate} to allow decorating - * empty DIVs only. - * @param {Element} element The element to check. - * @return {boolean} Whether if the element is an empty div. - * @override - */ -goog.ui.DimensionPickerRenderer.prototype.canDecorate = function( - element) { - return element.tagName == goog.dom.TagName.DIV && !element.firstChild; -}; - - -/** - * Overrides {@link goog.ui.ControlRenderer#decorate} to decorate empty DIVs. - * @param {goog.ui.Control} control goog.ui.DimensionPicker to decorate. - * @param {Element} element The element to decorate. - * @return {Element} The decorated element. - * @override - */ -goog.ui.DimensionPickerRenderer.prototype.decorate = function(control, - element) { - var palette = /** @type {goog.ui.DimensionPicker} */ (control); - goog.ui.DimensionPickerRenderer.superClass_.decorate.call(this, - palette, element); - - this.addElementContents_(palette, element); - this.updateSize(palette, element); - - return element; -}; - - -/** - * Scales various elements in order to update the palette's size. - * @param {goog.ui.DimensionPicker} palette The palette object. - * @param {Element} element The element to set the style of. - */ -goog.ui.DimensionPickerRenderer.prototype.updateSize = - function(palette, element) { - var size = palette.getSize(); - - element.style.width = size.width + 'em'; - - var underlyingDiv = this.getUnderlyingDiv_(element); - underlyingDiv.style.width = size.width + 'em'; - underlyingDiv.style.height = size.height + 'em'; - - if (palette.isRightToLeft()) { - this.adjustParentDirection_(palette, element); - } -}; - - -/** - * Adds the appropriate content elements to the given outer DIV. - * @param {goog.ui.DimensionPicker} palette The palette object. - * @param {Element} element The element to decorate. - * @private - */ -goog.ui.DimensionPickerRenderer.prototype.addElementContents_ = function( - palette, element) { - // First we create a single div containing three stacked divs. The bottom div - // catches mouse events. We can't use document level mouse move detection as - // we could lose events to iframes. This is especially important in Firefox 2 - // in which TrogEdit creates iframes. The middle div uses a css tiled - // background image to represent deselected tiles. The top div uses a - // different css tiled background image to represent selected tiles. - var mouseCatcherDiv = palette.getDomHelper().createDom(goog.dom.TagName.DIV, - goog.getCssName(this.getCssClass(), 'mousecatcher')); - var unhighlightedDiv = palette.getDomHelper().createDom(goog.dom.TagName.DIV, - { - 'class': goog.getCssName(this.getCssClass(), 'unhighlighted'), - 'style': 'width:100%;height:100%' - }); - var highlightedDiv = palette.getDomHelper().createDom(goog.dom.TagName.DIV, - goog.getCssName(this.getCssClass(), 'highlighted')); - element.appendChild( - palette.getDomHelper().createDom(goog.dom.TagName.DIV, - {'style': 'width:100%;height:100%'}, - mouseCatcherDiv, unhighlightedDiv, highlightedDiv)); - - // Lastly we add a div to store the text version of the current state. - element.appendChild(palette.getDomHelper().createDom(goog.dom.TagName.DIV, - goog.getCssName(this.getCssClass(), 'status'), - goog.i18n.bidi.enforceLtrInText('0 x 0'))); -}; - - -/** - * Creates a div and adds the appropriate contents to it. - * @param {goog.ui.Control} control Picker to render - * @return {Element} Root element for the palette. - * @override - */ -goog.ui.DimensionPickerRenderer.prototype.createDom = function(control) { - var palette = /** @type {goog.ui.DimensionPicker} */ (control); - var classNames = this.getClassNames(palette); - var element = palette.getDomHelper().createDom(goog.dom.TagName.DIV, { - 'class' : classNames ? classNames.join(' ') : '' - }); - this.addElementContents_(palette, element); - this.updateSize(palette, element); - return element; -}; - - -/** - * Initializes the control's DOM when the control enters the document. Called - * from {@link goog.ui.Control#enterDocument}. - * @param {goog.ui.Control} control Palette whose DOM is to be - * initialized as it enters the document. - * @override - */ -goog.ui.DimensionPickerRenderer.prototype.initializeDom = function( - control) { - var palette = /** @type {goog.ui.DimensionPicker} */ (control); - goog.ui.DimensionPickerRenderer.superClass_.initializeDom.call(this, palette); - this.positionMouseCatcher(palette); -}; - - -/** - * Get the element to listen for mouse move events on. - * @param {goog.ui.DimensionPicker} palette The palette to listen on. - * @return {Element} The element to listen for mouse move events on. - */ -goog.ui.DimensionPickerRenderer.prototype.getMouseMoveElement = function( - palette) { - return /** @type {Element} */ (palette.getElement().firstChild); -}; - - -/** - * Returns the x offset in to the grid for the given mouse x position. - * @param {goog.ui.DimensionPicker} palette The table size palette. - * @param {number} x The mouse event x position. - * @return {number} The x offset in to the grid. - */ -goog.ui.DimensionPickerRenderer.prototype.getGridOffsetX = function( - palette, x) { - // TODO(robbyw): Don't rely on magic 18 - measure each palette's em size. - return Math.min(palette.maxColumns, Math.ceil(x / 18)); -}; - - -/** - * Returns the y offset in to the grid for the given mouse y position. - * @param {goog.ui.DimensionPicker} palette The table size palette. - * @param {number} y The mouse event y position. - * @return {number} The y offset in to the grid. - */ -goog.ui.DimensionPickerRenderer.prototype.getGridOffsetY = function( - palette, y) { - return Math.min(palette.maxRows, Math.ceil(y / 18)); -}; - - -/** - * Sets the highlighted size. - * @param {goog.ui.DimensionPicker} palette The table size palette. - * @param {number} columns The number of columns to highlight. - * @param {number} rows The number of rows to highlight. - */ -goog.ui.DimensionPickerRenderer.prototype.setHighlightedSize = function( - palette, columns, rows) { - var element = palette.getElement(); - - // Style the highlight div. - var style = this.getHighlightDiv_(element).style; - style.width = columns + 'em'; - style.height = rows + 'em'; - - // Explicitly set style.right so the element grows to the left when increase - // in width. - if (palette.isRightToLeft()) { - style.right = '0'; - } - - // Update the size text. - goog.dom.setTextContent(this.getStatusDiv_(element), - goog.i18n.bidi.enforceLtrInText(columns + ' x ' + rows)); -}; - - -/** - * Position the mouse catcher such that it receives mouse events past the - * selectedsize up to the maximum size. Takes care to not introduce scrollbars. - * Should be called on enter document and when the window changes size. - * @param {goog.ui.DimensionPicker} palette The table size palette. - */ -goog.ui.DimensionPickerRenderer.prototype.positionMouseCatcher = function( - palette) { - var mouseCatcher = this.getMouseCatcher_(palette.getElement()); - var doc = goog.dom.getOwnerDocument(mouseCatcher); - var body = doc.body; - - var position = goog.style.getRelativePosition(mouseCatcher, body); - - // Hide the mouse catcher so it doesn't affect the body's scroll size. - mouseCatcher.style.display = 'none'; - - // Compute the maximum size the catcher can be without introducing scrolling. - var xAvailableEm = (palette.isRightToLeft() && position.x > 0) ? - Math.floor(position.x / 18) : - Math.floor((body.scrollWidth - position.x) / 18); - - // Computing available height is more complicated - we need to check the - // window's inner height. - var height; - if (goog.userAgent.IE) { - // Offset 20px to make up for scrollbar size. - height = goog.style.getClientViewportElement(body).scrollHeight - 20; - } else { - var win = goog.dom.getWindow(doc); - // Offset 20px to make up for scrollbar size. - height = Math.max(win.innerHeight, body.scrollHeight) - 20; - } - var yAvailableEm = Math.floor((height - position.y) / 18); - - // Resize and display the mouse catcher. - mouseCatcher.style.width = Math.min(palette.maxColumns, xAvailableEm) + 'em'; - mouseCatcher.style.height = Math.min(palette.maxRows, yAvailableEm) + 'em'; - mouseCatcher.style.display = ''; - - // Explicitly set style.right so the mouse catcher is positioned on the left - // side instead of right. - if (palette.isRightToLeft()) { - mouseCatcher.style.right = '0'; - } -}; - - -/** - * Returns the CSS class to be applied to the root element of components - * rendered using this renderer. - * @return {string} Renderer-specific CSS class. - * @override - */ -goog.ui.DimensionPickerRenderer.prototype.getCssClass = function() { - return goog.ui.DimensionPickerRenderer.CSS_CLASS; -}; - - -/** - * This function adjusts the positioning from 'left' and 'top' to 'right' and - * 'top' as appropriate for RTL control. This is so when the dimensionpicker - * grow in width, the containing element grow to the left instead of right. - * This won't be necessary if goog.ui.SubMenu rendering code would position RTL - * control with 'right' and 'top'. - * @private - * - * @param {goog.ui.DimensionPicker} palette The palette object. - * @param {Element} element The palette's element. - */ -goog.ui.DimensionPickerRenderer.prototype.adjustParentDirection_ = - function(palette, element) { - var parent = palette.getParent(); - if (parent) { - var parentElement = parent.getElement(); - - // Anchors the containing element to the right so it grows to the left - // when it increase in width. - var right = goog.style.getStyle(parentElement, 'right'); - if (right == '') { - var parentPos = goog.style.getPosition(parentElement); - var parentSize = goog.style.getSize(parentElement); - if (parentSize.width != 0 && parentPos.x != 0) { - var visibleRect = goog.style.getBounds( - goog.style.getClientViewportElement()); - var visibleWidth = visibleRect.width; - right = visibleWidth - parentPos.x - parentSize.width; - goog.style.setStyle(parentElement, 'right', right + 'px'); - } - } - - // When a table is inserted, the containing elemet's position is - // recalculated the next time it shows, set left back to '' to prevent - // extra white space on the left. - var left = goog.style.getStyle(parentElement, 'left'); - if (left != '') { - goog.style.setStyle(parentElement, 'left', ''); - } - } else { - goog.style.setStyle(element, 'right', '0px'); - } -}; - |