X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/cc10d1ddfc652f6bcf3bbf61d5ec2e2861394c03..refs/pull/5280/head:/resources/js/services/util.js diff --git a/resources/js/services/util.js b/resources/js/services/util.js index 59affff88..1264d1058 100644 --- a/resources/js/services/util.js +++ b/resources/js/services/util.js @@ -31,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'}); @@ -81,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