X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/38ac3c959bf1282cc46ff4ae7da7f24ad4ea8140..refs/pull/5280/head:/resources/js/services/util.js diff --git a/resources/js/services/util.js b/resources/js/services/util.js index e6d93d61b..1264d1058 100644 --- a/resources/js/services/util.js +++ b/resources/js/services/util.js @@ -1,5 +1,3 @@ -import {elem} from './dom'; - /** * Returns a function, that, as long as it continues to be invoked, will not * be triggered. The function will be called after it stops being called for @@ -33,9 +31,12 @@ export function debounce(func, waitMs, immediate) { export function scrollAndHighlightElement(element) { if (!element) return; - const parentDetails = element.closest('details'); - if (parentDetails && !parentDetails.open) { - parentDetails.open = true; + let parent = element; + while (parent.parentElement) { + parent = parent.parentElement; + if (parent.nodeName === 'DETAILS' && !parent.open) { + parent.open = true; + } } element.scrollIntoView({behavior: 'smooth'}); @@ -83,6 +84,17 @@ export function uniqueId() { return (`${S4() + S4()}-${S4()}-${S4()}-${S4()}-${S4()}${S4()}${S4()}`); } +/** + * Generate a random smaller unique ID. + * + * @returns {string} + */ +export function uniqueIdSmall() { + // eslint-disable-next-line no-bitwise + const S4 = () => (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); + return S4(); +} + /** * Create a promise that resolves after the given time. * @param {int} timeMs