{"version":3,"file":"foundation.positionable.js","sources":["../../../../IREP.Web.Content/v7/node_modules/foundation-sites/js/foundation.util.box.js","../../../../IREP.Web.Content/v7/node_modules/foundation-sites/js/foundation.positionable.js"],"sourcesContent":["var Box = {\n ImNotTouchingYou: ImNotTouchingYou,\n OverlapArea: OverlapArea,\n GetDimensions: GetDimensions,\n GetExplicitOffsets: GetExplicitOffsets\n}\n\n/**\n * Compares the dimensions of an element to a container and determines collision events with container.\n * @function\n * @param {jQuery} element - jQuery object to test for collisions.\n * @param {jQuery} parent - jQuery object to use as bounding container.\n * @param {Boolean} lrOnly - set to true to check left and right values only.\n * @param {Boolean} tbOnly - set to true to check top and bottom values only.\n * @default if no parent object passed, detects collisions with `window`.\n * @returns {Boolean} - true if collision free, false if a collision in any direction.\n */\nfunction ImNotTouchingYou(element, parent, lrOnly, tbOnly, ignoreBottom) {\n return OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) === 0;\n}\n\nfunction OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) {\n var eleDims = GetDimensions(element),\n topOver, bottomOver, leftOver, rightOver;\n if (parent) {\n var parDims = GetDimensions(parent);\n\n bottomOver = (parDims.height + parDims.offset.top) - (eleDims.offset.top + eleDims.height);\n topOver = eleDims.offset.top - parDims.offset.top;\n leftOver = eleDims.offset.left - parDims.offset.left;\n rightOver = (parDims.width + parDims.offset.left) - (eleDims.offset.left + eleDims.width);\n }\n else {\n bottomOver = (eleDims.windowDims.height + eleDims.windowDims.offset.top) - (eleDims.offset.top + eleDims.height);\n topOver = eleDims.offset.top - eleDims.windowDims.offset.top;\n leftOver = eleDims.offset.left - eleDims.windowDims.offset.left;\n rightOver = eleDims.windowDims.width - (eleDims.offset.left + eleDims.width);\n }\n\n bottomOver = ignoreBottom ? 0 : Math.min(bottomOver, 0);\n topOver = Math.min(topOver, 0);\n leftOver = Math.min(leftOver, 0);\n rightOver = Math.min(rightOver, 0);\n\n if (lrOnly) {\n return leftOver + rightOver;\n }\n if (tbOnly) {\n return topOver + bottomOver;\n }\n\n // use sum of squares b/c we care about overlap area.\n return Math.sqrt((topOver * topOver) + (bottomOver * bottomOver) + (leftOver * leftOver) + (rightOver * rightOver));\n}\n\n/**\n * Uses native methods to return an object of dimension values.\n * @function\n * @param {jQuery || HTML} element - jQuery object or DOM element for which to get the dimensions. Can be any element other that document or window.\n * @returns {Object} - nested object of integer pixel values\n * TODO - if element is window, return only those values.\n */\nfunction GetDimensions(elem){\n elem = elem.length ? elem[0] : elem;\n\n if (elem === window || elem === document) {\n throw new Error(\"I'm sorry, Dave. I'm afraid I can't do that.\");\n }\n\n var rect = elem.getBoundingClientRect(),\n parRect = elem.parentNode.getBoundingClientRect(),\n winRect = document.body.getBoundingClientRect(),\n winY = window.pageYOffset,\n winX = window.pageXOffset;\n\n return {\n width: rect.width,\n height: rect.height,\n offset: {\n top: rect.top + winY,\n left: rect.left + winX\n },\n parentDims: {\n width: parRect.width,\n height: parRect.height,\n offset: {\n top: parRect.top + winY,\n left: parRect.left + winX\n }\n },\n windowDims: {\n width: winRect.width,\n height: winRect.height,\n offset: {\n top: winY,\n left: winX\n }\n }\n }\n}\n\n/**\n * Returns an object of top and left integer pixel values for dynamically rendered elements,\n * such as: Tooltip, Reveal, and Dropdown. Maintained for backwards compatibility, and where\n * you don't know alignment, but generally from\n * 6.4 forward you should use GetExplicitOffsets, as GetOffsets conflates position and alignment.\n * @function\n * @param {jQuery} element - jQuery object for the element being positioned.\n * @param {jQuery} anchor - jQuery object for the element's anchor point.\n * @param {String} position - a string relating to the desired position of the element, relative to it's anchor\n * @param {Number} vOffset - integer pixel value of desired vertical separation between anchor and element.\n * @param {Number} hOffset - integer pixel value of desired horizontal separation between anchor and element.\n * @param {Boolean} isOverflow - if a collision event is detected, sets to true to default the element to full width - any desired offset.\n * TODO alter/rewrite to work with `em` values as well/instead of pixels\n */\nfunction GetExplicitOffsets(element, anchor, position, alignment, vOffset, hOffset, isOverflow) {\n var $eleDims = GetDimensions(element),\n $anchorDims = anchor ? GetDimensions(anchor) : null;\n\n var topVal, leftVal;\n\n if ($anchorDims !== null) {\n // set position related attribute\n switch (position) {\n case 'top':\n topVal = $anchorDims.offset.top - ($eleDims.height + vOffset);\n break;\n case 'bottom':\n topVal = $anchorDims.offset.top + $anchorDims.height + vOffset;\n break;\n case 'left':\n leftVal = $anchorDims.offset.left - ($eleDims.width + hOffset);\n break;\n case 'right':\n leftVal = $anchorDims.offset.left + $anchorDims.width + hOffset;\n break;\n }\n\n // set alignment related attribute\n switch (position) {\n case 'top':\n case 'bottom':\n switch (alignment) {\n case 'left':\n leftVal = $anchorDims.offset.left + hOffset;\n break;\n case 'right':\n leftVal = $anchorDims.offset.left - $eleDims.width + $anchorDims.width - hOffset;\n break;\n case 'center':\n leftVal = isOverflow ? hOffset : (($anchorDims.offset.left + ($anchorDims.width / 2)) - ($eleDims.width / 2)) + hOffset;\n break;\n }\n break;\n case 'right':\n case 'left':\n switch (alignment) {\n case 'bottom':\n topVal = $anchorDims.offset.top - vOffset + $anchorDims.height - $eleDims.height;\n break;\n case 'top':\n topVal = $anchorDims.offset.top + vOffset\n break;\n case 'center':\n topVal = ($anchorDims.offset.top + vOffset + ($anchorDims.height / 2)) - ($eleDims.height / 2)\n break;\n }\n break;\n }\n }\n\n return {top: topVal, left: leftVal};\n}\n\nexport {Box};\n","import { Box } from './foundation.util.box';\nimport { Plugin } from './foundation.core.plugin';\nimport { rtl as Rtl } from './foundation.core.utils';\n\nconst POSITIONS = ['left', 'right', 'top', 'bottom'];\nconst VERTICAL_ALIGNMENTS = ['top', 'bottom', 'center'];\nconst HORIZONTAL_ALIGNMENTS = ['left', 'right', 'center'];\n\nconst ALIGNMENTS = {\n 'left': VERTICAL_ALIGNMENTS,\n 'right': VERTICAL_ALIGNMENTS,\n 'top': HORIZONTAL_ALIGNMENTS,\n 'bottom': HORIZONTAL_ALIGNMENTS\n}\n\nfunction nextItem(item, array) {\n var currentIdx = array.indexOf(item);\n if(currentIdx === array.length - 1) {\n return array[0];\n } else {\n return array[currentIdx + 1];\n }\n}\n\n\nclass Positionable extends Plugin {\n /**\n * Abstract class encapsulating the tether-like explicit positioning logic\n * including repositioning based on overlap.\n * Expects classes to define defaults for vOffset, hOffset, position,\n * alignment, allowOverlap, and allowBottomOverlap. They can do this by\n * extending the defaults, or (for now recommended due to the way docs are\n * generated) by explicitly declaring them.\n *\n **/\n\n _init() {\n this.triedPositions = {};\n this.position = this.options.position === 'auto' ? this._getDefaultPosition() : this.options.position;\n this.alignment = this.options.alignment === 'auto' ? this._getDefaultAlignment() : this.options.alignment;\n this.originalPosition = this.position;\n this.originalAlignment = this.alignment;\n }\n\n _getDefaultPosition () {\n return 'bottom';\n }\n\n _getDefaultAlignment() {\n switch(this.position) {\n case 'bottom':\n case 'top':\n return Rtl() ? 'right' : 'left';\n case 'left':\n case 'right':\n return 'bottom';\n }\n }\n\n /**\n * Adjusts the positionable possible positions by iterating through alignments\n * and positions.\n * @function\n * @private\n */\n _reposition() {\n if(this._alignmentsExhausted(this.position)) {\n this.position = nextItem(this.position, POSITIONS);\n this.alignment = ALIGNMENTS[this.position][0];\n } else {\n this._realign();\n }\n }\n\n /**\n * Adjusts the dropdown pane possible positions by iterating through alignments\n * on the current position.\n * @function\n * @private\n */\n _realign() {\n this._addTriedPosition(this.position, this.alignment)\n this.alignment = nextItem(this.alignment, ALIGNMENTS[this.position])\n }\n\n _addTriedPosition(position, alignment) {\n this.triedPositions[position] = this.triedPositions[position] || []\n this.triedPositions[position].push(alignment);\n }\n\n _positionsExhausted() {\n var isExhausted = true;\n for(var i = 0; i < POSITIONS.length; i++) {\n isExhausted = isExhausted && this._alignmentsExhausted(POSITIONS[i]);\n }\n return isExhausted;\n }\n\n _alignmentsExhausted(position) {\n return this.triedPositions[position] && this.triedPositions[position].length === ALIGNMENTS[position].length;\n }\n\n\n // When we're trying to center, we don't want to apply offset that's going to\n // take us just off center, so wrap around to return 0 for the appropriate\n // offset in those alignments. TODO: Figure out if we want to make this\n // configurable behavior... it feels more intuitive, especially for tooltips, but\n // it's possible someone might actually want to start from center and then nudge\n // slightly off.\n _getVOffset() {\n return this.options.vOffset;\n }\n\n _getHOffset() {\n return this.options.hOffset;\n }\n\n _setPosition($anchor, $element, $parent) {\n if($anchor.attr('aria-expanded') === 'false'){ return false; }\n\n if (!this.options.allowOverlap) {\n // restore original position & alignment before checking overlap\n this.position = this.originalPosition;\n this.alignment = this.originalAlignment;\n }\n\n $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n\n if(!this.options.allowOverlap) {\n var minOverlap = 100000000;\n // default coordinates to how we start, in case we can't figure out better\n var minCoordinates = {position: this.position, alignment: this.alignment};\n while(!this._positionsExhausted()) {\n let overlap = Box.OverlapArea($element, $parent, false, false, this.options.allowBottomOverlap);\n if(overlap === 0) {\n return;\n }\n\n if(overlap < minOverlap) {\n minOverlap = overlap;\n minCoordinates = {position: this.position, alignment: this.alignment};\n }\n\n this._reposition();\n\n $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n }\n // If we get through the entire loop, there was no non-overlapping\n // position available. Pick the version with least overlap.\n this.position = minCoordinates.position;\n this.alignment = minCoordinates.alignment;\n $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n }\n }\n\n}\n\nPositionable.defaults = {\n /**\n * Position of positionable relative to anchor. Can be left, right, bottom, top, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n position: 'auto',\n /**\n * Alignment of positionable relative to anchor. Can be left, right, bottom, top, center, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow overlap of container/window. If false, dropdown positionable first\n * try to position as defined by data-position and data-alignment, but\n * reposition if it would cause an overflow.\n * @option\n * @type {boolean}\n * @default false\n */\n allowOverlap: false,\n /**\n * Allow overlap of only the bottom of the container. This is the most common\n * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n * screen but not otherwise influence or break out of the container.\n * @option\n * @type {boolean}\n * @default true\n */\n allowBottomOverlap: true,\n /**\n * Number of pixels the positionable should be separated vertically from anchor\n * @option\n * @type {number}\n * @default 0\n */\n vOffset: 0,\n /**\n * Number of pixels the positionable should be separated horizontally from anchor\n * @option\n * @type {number}\n * @default 0\n */\n hOffset: 0,\n}\n\nexport {Positionable};\n"],"names":["Box","ImNotTouchingYou","element","parent","lrOnly","tbOnly","ignoreBottom","OverlapArea","GetDimensions","GetExplicitOffsets","anchor","position","alignment","vOffset","hOffset","isOverflow","topVal","leftVal","$eleDims","$anchorDims","offset","top","height","left","width","topOver","bottomOver","leftOver","rightOver","eleDims","parDims","windowDims","Math","min","sqrt","elem","length","window","document","Error","rect","getBoundingClientRect","parRect","parentNode","winRect","body","winY","pageYOffset","winX","pageXOffset","parentDims","POSITIONS","VERTICAL_ALIGNMENTS","HORIZONTAL_ALIGNMENTS","ALIGNMENTS","right","bottom","nextItem","item","array","currentIdx","indexOf","Positionable","Plugin","_init","this","triedPositions","options","_getDefaultPosition","_getDefaultAlignment","originalPosition","originalAlignment","Rtl","_reposition","_alignmentsExhausted","_realign","_addTriedPosition","push","_positionsExhausted","isExhausted","i","_getVOffset","_getHOffset","_setPosition","$anchor","$element","$parent","attr","allowOverlap","minOverlap","minCoordinates","overlap","allowBottomOverlap","defaults"],"mappings":"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","x_google_ignoreList":[0,1]}