diff --git a/src/utils.js b/src/utils.js index ee22c6088..08107c56e 100755 --- a/src/utils.js +++ b/src/utils.js @@ -88,6 +88,25 @@ } } + function calculateElementHeight (el) { + /* Return the height of the passed in DOM element, + * based on the heights of its children. + */ + return _.reduce( + el.children, + (result, child) => result + child.offsetHeight, 0 + ); + } + + function slideOutWrapup (el) { + /* Wrapup function for slideOut. */ + el.removeAttribute('data-slider-marker'); + el.classList.remove('collapsed'); + el.style.overflow = ""; + el.style.height = ""; + } + + var u = {}; // Translation machinery @@ -186,22 +205,12 @@ }; u.slideOut = function (el, duration=900) { - /* Shows/expands an element by sliding it out of itself. */ - - function calculateEndHeight (el) { - return _.reduce( - el.children, - (result, child) => result + child.offsetHeight, 0 - ); - } - - function wrapup (el) { - el.removeAttribute('data-slider-marker'); - el.classList.remove('collapsed'); - el.style.overflow = ""; - el.style.height = ""; - } - + /* Shows/expands an element by sliding it out of itself + * + * Parameters: + * (HTMLElement) el - The HTML string + * (Number) duration - The duration amount in milliseconds + */ return new Promise((resolve, reject) => { if (_.isNil(el)) { const err = "Undefined or null element passed into slideOut" @@ -214,10 +223,10 @@ el.removeAttribute('data-slider-marker'); window.clearInterval(interval_marker); } - const end_height = calculateEndHeight(el); + const end_height = calculateElementHeight(el); if (window.converse_disable_effects) { // Effects are disabled (for tests) el.style.height = end_height + 'px'; - wrapup(el); + slideOutWrapup(el); resolve(); return; } @@ -234,9 +243,9 @@ // We recalculate the height to work around an apparent // browser bug where browsers don't know the correct // offsetHeight beforehand. - el.style.height = calculateEndHeight(el) + 'px'; + el.style.height = calculateElementHeight(el) + 'px'; window.clearInterval(interval_marker); - wrapup(el); + slideOutWrapup(el); resolve(); } }, interval);