spec/helpers/measurement.js
function getAppliedOverflows ( props, createBooleans ) {
    var status = {};

    // Establish the applied overflow (e.g. overflowX: "scroll")
    status.overflowX = props.overflowX || props.overflow || "visible";
    status.overflowY = props.overflowY || props.overflow || "visible";

    // Create the derived boolean status properties (e.g overflowScrollX: true)
    if ( createBooleans ) {
        $.each( [ "Visible", "Auto", "Scroll", "Hidden" ], function ( index, type ) {
            var lcType = type.toLowerCase();
            status["overflow" + type + "X"] = status.overflowX === lcType;
            status["overflow" + type + "Y"] = status.overflowY === lcType;
        } );
    }

    return status;
}
function getAppliedOverflows ( props, createBooleans ) {
    var status = {};

    // Establish the applied overflow (e.g. overflowX: "scroll")
    status.overflowX = props.overflowX || props.overflow || "visible";
    status.overflowY = props.overflowY || props.overflow || "visible";

    // Create the derived boolean status properties (e.g overflowScrollX: true)
    if ( createBooleans ) {
        $.each( [ "Visible", "Auto", "Scroll", "Hidden" ], function ( index, type ) {
            var lcType = type.toLowerCase();
            status["overflow" + type + "X"] = status.overflowX === lcType;
            status["overflow" + type + "Y"] = status.overflowY === lcType;
        } );
    }

    return status;
}
function getAppliedOverflows ( props , createBooleans ) { var status = { } ; // Establish the applied overflow (e.g. overflowX: "scroll") status . overflowX = props . overflowX || props . overflow || "visible" ; status . overflowY = props . overflowY || props . overflow || "visible" ; // Create the derived boolean status properties (e.g overflowScrollX: true) if ( createBooleans ) { $ . each ( [ "Visible" , "Auto" , "Scroll" , "Hidden" ] , function ( index , type ) { var lcType = type . toLowerCase ( ) ; status [ "overflow" + type + "X" ] = status . overflowX === lcType ; status [ "overflow" + type + "Y" ] = status . overflowY === lcType ; } ) ; } return status ; }
Determines the effective overflow setting of an element, separately for each axis, based on the `overflow`,
`overflowX` and `overflowY` properties of the element which must be passed in as a hash.

Returns a hash of the computed results for overflowX, overflowY. Also adds boolean status properties to the hash
if the createBooleans flag is set. These are properties for mere convenience. They signal if a particular
overflow type applies (e.g. overflowHiddenX = true/false).

ATTN The method does not take the special relation of body and documentElement into account. That is handled by
the more specific getAppliedViewportOverflows() function.

The effective overflow setting is established as follows:

- If a computed value for `overflow(X/Y)` exists, it gets applied to the axis.
- If not, the computed value of the general `overflow` setting gets applied to the axis.
- If there is no computed value at all, the overflow default gets applied to the axis. The default is
"visible" in seemingly every browser out there. Falling back to the default should never be necessary,
though, because there always is a computed value.

@param {Object}        props            hash of element properties (computed values)
@param {string}        props.overflow
@param {string}        props.overflowX
@param {string}        props.overflowY
@param {boolean=false} createBooleans   if true, create the full set of boolean status properties, e.g.
overflowVisibleX (true/false), overflowHiddenY (true/false) etc
@returns {AppliedOverflow}              hash of the computed results: overflowX, overflowY, optional boolean
status properties
Determines the effective overflow setting of an element separately for each axis based on the overflow overflowX and overflowY properties of the element which must be passed in as a hash .