headless_cms-1.0.3/modules/headless_cms_preview/js/save-preview-persistence.js
modules/headless_cms_preview/js/save-preview-persistence.js
(function (Drupal) {
Drupal.behaviors.previewScrollPosition = {
attach(context) {
const key = location.pathname;
const scrollKey = `preview-persistence:scroll:${key}`;
// Restore scroll position if it exists
const savedScrollPosition = sessionStorage.getItem(scrollKey);
if (savedScrollPosition !== null) {
window.scrollTo(0, parseInt(savedScrollPosition, 10));
// Clear the stored position after restoring
sessionStorage.removeItem(scrollKey);
}
once("handleSavePreviewScrollPosition", "#edit-save-preview", context).forEach(
/**
* @param {HTMLInputElement} element
*/
(element) => {
element.addEventListener("click", () => {
// Save current scroll position
const scrollPosition = window.scrollY;
sessionStorage.setItem(scrollKey, scrollPosition.toString());
});
}
)
}
};
Drupal.behaviors.previewTabs = {
attach(context) {
const key = location.pathname;
const tabKey = `preview-persistence:tabs:${key}`;
once("handleSavePreviewTabs", "#edit-save-preview", context).forEach(
/**
* @param {HTMLInputElement} element
*/
(element) => {
// Save tabs on preview save.
element.addEventListener("click", (e) => {
const activeTabLinks = document.querySelectorAll(".horizontal-tabs-list > .selected > a");
const ids = Array.from(activeTabLinks).map((link) => {
return link.getAttribute("href");
});
sessionStorage.setItem(tabKey, JSON.stringify(ids));
});
}
)
once("restoreTabBarOnSubform", ".paragraphs-subform", context).forEach(
/**
* @param {HTMLElement} element
*/
(element) => {
// Restore tabs if they exist.
const savedTabs = sessionStorage.getItem(tabKey);
if (savedTabs !== null) {
const ids = JSON.parse(savedTabs);
ids.forEach((id) => {
const tab = document.querySelector(`a[href="${id}"]`);
if (tab) {
tab.click();
}
});
// Clear the stored tabs after restoring.
sessionStorage.removeItem(tabKey);
}
}
);
}
}
})(Drupal);
