Hi,
I am working with Timothy Ricks’ CMS List Sync template but I am stuck making it work:
Console says both CMS items (link block + corresponding rich-text) get their combo class ‘.is-active’ on click but the rich-text won’t change accordingly.
<script>
// CMS LIST SYNC POWER-UP
window.addEventListener("DOMContentLoaded", (event) => {
// attribute value checker
function attr(defaultVal, attrVal) {
const defaultValType = typeof defaultVal;
if (typeof attrVal !== "string" || attrVal.trim() === "") return defaultVal;
if (attrVal === "true" && defaultValType === "boolean") return true;
if (attrVal === "false" && defaultValType === "boolean") return false;
if (isNaN(attrVal) && defaultValType === "string") return attrVal;
if (!isNaN(attrVal) && defaultValType === "number") return +attrVal;
return defaultVal;
}
// cms list sync component
$("[tr-listsync-element='component']").each(function (index) {
let componentEl = $(this),
cmsListEl = componentEl.find("[tr-listsync-element='list']"),
cmsItemEl = cmsListEl.children(),
prevButtonEl = componentEl.find("[tr-listsync-element='button-prev']"),
nextButtonEl = componentEl.find("[tr-listsync-element='button-next']");
let onLoadSetting = attr(false, componentEl.attr("tr-listsync-onload")),
activeIndexSetting = attr(0, componentEl.attr("tr-listsync-activeindex")),
activeClassSetting = attr("is-active", componentEl.attr("tr-listsync-activeclass"));
function addActive(trigger) {
cmsItemEl.removeClass(activeClassSetting);
let itemIndex = trigger.index();
cmsListEl.each(function () {
$(this).children().eq(itemIndex).addClass(activeClassSetting);
});
}
if (onLoadSetting) addActive(cmsItemEl.eq(activeIndexSetting));
cmsListEl.each(function () {
let childrenItemEl = $(this).children(),
clickSetting = attr(true, $(this).attr("tr-listsync-click")),
hoverInSetting = attr(false, $(this).attr("tr-listsync-hoverin")),
hoverOutSetting = attr(false, $(this).attr("tr-listsync-hoverout"));
if (clickSetting) {
childrenItemEl.on("click", function () {
addActive($(this));
});
}
if (hoverInSetting) {
childrenItemEl.on("mouseenter", function () {
addActive($(this));
});
}
if (hoverOutSetting) {
childrenItemEl.on("mouseleave", function () {
cmsItemEl.removeClass(activeClassSetting);
});
}
});
prevButtonEl.on("click", function () {
cmsListEl.each(function (index) {
let childrenItemEl = $(this).children();
let currentItemEl = childrenItemEl.filter("." + activeClassSetting).removeClass(activeClassSetting);
let prevItemEl = currentItemEl.prev();
if (prevItemEl.length === 0) prevItemEl = childrenItemEl.last();
prevItemEl.addClass(activeClassSetting);
});
});
nextButtonEl.on("click", function () {
cmsListEl.each(function (index) {
let childrenItemEl = $(this).children();
let currentItemEl = childrenItemEl.filter("." + activeClassSetting).removeClass(activeClassSetting);
let nextItemEl = currentItemEl.next();
if (nextItemEl.length === 0) nextItemEl = childrenItemEl.first();
nextItemEl.addClass(activeClassSetting);
});
});
});
});
</script>
In my opinion I have properly added the custom attributes in Webflow for the component (section) and the CMS lists.
It is this section here:
Something simple must be happening here but I am stuck going in circles here for hours. Would someone be so kind to take a look? Thank you!
Best regards
Ronny