diff options
Diffstat (limited to 'app/assets/javascripts/lib/utils/dom_utils.js')
-rw-r--r-- | app/assets/javascripts/lib/utils/dom_utils.js | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/app/assets/javascripts/lib/utils/dom_utils.js b/app/assets/javascripts/lib/utils/dom_utils.js index d9b0e8c4476..7bba7ba2f45 100644 --- a/app/assets/javascripts/lib/utils/dom_utils.js +++ b/app/assets/javascripts/lib/utils/dom_utils.js @@ -47,3 +47,25 @@ export const parseBooleanDataAttributes = ({ dataset }, names) => return acc; }, {}); + +/** + * Returns whether or not the provided element is currently visible. + * This function operates identically to jQuery's `:visible` pseudo-selector. + * Documentation for this selector: https://api.jquery.com/visible-selector/ + * Implementation of this selector: https://github.com/jquery/jquery/blob/d0ce00cdfa680f1f0c38460bc51ea14079ae8b07/src/css/hiddenVisibleSelectors.js#L8 + * @param {HTMLElement} element The element to test + * @returns {Boolean} `true` if the element is currently visible, otherwise false + */ +export const isElementVisible = element => + Boolean(element.offsetWidth || element.offsetHeight || element.getClientRects().length); + +/** + * The opposite of `isElementVisible`. + * Returns whether or not the provided element is currently hidden. + * This function operates identically to jQuery's `:hidden` pseudo-selector. + * Documentation for this selector: https://api.jquery.com/hidden-selector/ + * Implementation of this selector: https://github.com/jquery/jquery/blob/d0ce00cdfa680f1f0c38460bc51ea14079ae8b07/src/css/hiddenVisibleSelectors.js#L6 + * @param {HTMLElement} element The element to test + * @returns {Boolean} `true` if the element is currently hidden, otherwise false + */ +export const isElementHidden = element => !isElementVisible(element); |