123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- "use strict";
- // Copyright 2012 United States Government, as represented by the Secretary of Defense, Under
- // Secretary of Defense (Personnel & Readiness).
- //
- // 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.
- /// DOM element coordinate conversion functions.
- ///
- /// @module vwf/utility/coordinates
- define( function() {
- var exports = {
- /// Convert a coordinate from an element's content area to its internal coordinate system.
- /// The content box is the area within the element's padding.
- ///
- /// @param {HTMLElement} element
- /// The reference element.
- /// @param {Object} xyContent
- /// An x, y coordinate relative to the element's content box, expressed as:
- /// { x: value, y: value }.
- ///
- /// @returns {Object}
- /// An x, y coordinate relative to the element's internal coordinate system.
- canvasFromContent: function( element, xyContent ) {
- var computedStyle = getComputedStyle( element );
- var contentWidth = element.clientWidth -
- ( parseFloat( computedStyle.getPropertyValue( "padding-left" ) ) || 0 ) -
- ( parseFloat( computedStyle.getPropertyValue( "padding-right" ) ) || 0 );
- var contentHeight = element.clientHeight -
- ( parseFloat( computedStyle.getPropertyValue( "padding-top" ) ) || 0 ) -
- ( parseFloat( computedStyle.getPropertyValue( "padding-bottom" ) ) || 0 );
- return {
- x: ( xyContent && xyContent.x || 0 ) / contentWidth * ( element.width || contentWidth ),
- y: ( xyContent && xyContent.y || 0 ) / contentHeight * ( element.height || contentHeight ),
- };
- },
- /// Convert a coordinate from an element's padding area to its content area. The content box
- /// is the area within the element's padding. The padding box is the area within the
- /// element's border.
- ///
- /// @param {HTMLElement} element
- /// The reference element.
- /// @param {Object} xyPadding
- /// An x, y coordinate relative to the element's padding box, expressed as:
- /// { x: value, y: value }.
- ///
- /// @returns {Object}
- /// An x, y coordinate relative to the element's content box.
- contentFromPadding: function( element, xyPadding ) {
- var computedStyle = getComputedStyle( element );
- return {
- x: ( xyPadding && xyPadding.x || 0 ) - ( parseFloat( computedStyle.getPropertyValue( "padding-left" ) ) || 0 ) + element.scrollLeft,
- y: ( xyPadding && xyPadding.y || 0 ) - ( parseFloat( computedStyle.getPropertyValue( "padding-top" ) ) || 0 ) + element.scrollTop,
- };
- },
- /// Convert a coordinate from an element's border area to its padding area. The padding box
- /// is the area within the element's border. The border box encloses the overall element,
- /// including its content, padding and border.
- ///
- /// @param {HTMLElement} element
- /// The reference element.
- /// @param {Object} xyBorder
- /// An x, y coordinate relative to the element's border box, expressed as:
- /// { x: value, y: value }.
- ///
- /// @returns {Object}
- /// An x, y coordinate relative to the element's padding box.
- paddingFromBorder: function( element, xyBorder ) {
- var computedStyle = getComputedStyle( element );
- return {
- x: ( xyBorder && xyBorder.x || 0 ) - ( parseFloat( computedStyle.getPropertyValue( "border-left-width" ) ) || 0 ),
- y: ( xyBorder && xyBorder.y || 0 ) - ( parseFloat( computedStyle.getPropertyValue( "border-top-width" ) ) || 0 ),
- };
- },
- /// Convert a coordinate from an element's window coordinates to its border area. The border
- /// box encloses the overall element, including its content, padding and border. The window
- /// coordinates are the location of the border box in the browser window.
- ///
- /// @param {HTMLElement} element
- /// The reference element.
- /// @param {Object} xyWindow
- /// An x, y coordinate relative to the element's border box in the browser window,
- /// expressed as: { x: value, y: value }.
- ///
- /// @returns {Object}
- /// An x, y coordinate relative to the element's border box.
- borderFromWindow: function( element, xyWindow ) {
- var bounds = element.getBoundingClientRect(); // border box in window coordinates
- return {
- x: ( xyWindow && xyWindow.x || 0 ) - bounds.left,
- y: ( xyWindow && xyWindow.y || 0 ) - bounds.top,
- };
- },
- /// Convert a coordinate from an element's window coordinates to its content area.
- ///
- /// @param {HTMLElement} element
- /// The reference element.
- /// @param {Object} xyWindow
- /// An x, y coordinate relative to the element's border box in the browser window,
- /// expressed as: { x: value, y: value }.
- ///
- /// @returns {Object}
- /// An x, y coordinate relative to the element's content box.
- contentFromWindow: function( element, xyWindow ) {
- return this.contentFromPadding( element, this.paddingFromBorder( element,
- this.borderFromWindow( element, xyWindow ) ) );
- },
- };
- return exports;
- } );
|