]> BookStack Code Mirror - bookstack/blobdiff - resources/js/services/util.js
respective book and chapter structure added.
[bookstack] / resources / js / services / util.js
index e6d93d61bd9620f1c28c555511342ef647713af5..1264d105860e11ae68e9f7d53cbbfd02ea878837 100644 (file)
@@ -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