{"version":3,"file":"render.mjs","sources":["src/common.mjs","src/render.mjs"],"sourcesContent":["// Common Utilities Class\nclass Accordion {\n\tconstructor(el) {\n\t\tthis.animationSettings = {\n\t\t\texpand: {\n\t\t\t\tduration: 225,\n\t\t\t\teasing: 'ease-out',\n\t\t\t},\n\t\t\tshrink: {\n\t\t\t\tduration: 195,\n\t\t\t\teasing: 'ease-in',\n\t\t\t},\n\t\t};\n\n\t\t// Store the
element\n\t\tthis.el = el;\n\t\t// Store the element\n\t\tthis.summary = el.querySelector('summary');\n\t\t// Store the
element\n\t\tthis.content = el.querySelectorAll('[data-class=\"accordion-content\"]');\n\t\t// Hack to fix accordions not working in compilation\n\t\tthis.content.forEach((content) => content.classList.add('accordion-content'));\n\n\t\t// Store the animation object (so we can cancel it if needed)\n\t\tthis.animation = null;\n\t\t// Store if the element is closing\n\t\tthis.isClosing = false;\n\t\t// Store if the element is expanding\n\t\tthis.isExpanding = false;\n\t\t// Detect user clicks on the summary element\n\t\tthis.summary.addEventListener('click', (e) => this.onClick(e));\n\t}\n\n\t/**\n\t * Click Handler for the accordion summary\n\t * @param {Event} e\n\t * @param {Object} parentObj HTML element\n\t * @param {Object} sectionLayoutData\n\t */\n\tonClick(e) {\n\t\t// Stop default behaviour from the browser\n\t\te.preventDefault();\n\t\t// Add an overflow on the
to avoid content overflowing\n\t\tthis.el.style.overflow = 'hidden';\n\t\t// Check if the element is being closed or is already closed\n\t\tif (this.isClosing || !this.el.open) {\n\t\t\tthis.open();\n\t\t\t// Check if the element is being openned or is already open\n\t\t} else if (this.isExpanding || this.el.open) {\n\t\t\tthis.shrink();\n\t\t}\n\t}\n\n\t/**\n\t * Close the accordion\n\t */\n\tshrink() {\n\t\t// Set the element as \"being closed\"\n\t\tthis.isClosing = true;\n\n\t\t// Store the current height of the element\n\t\tconst startHeight = `${this.el.offsetHeight}px`;\n\t\t// Calculate the height of the summary\n\t\tconst endHeight = `${this.summary.offsetHeight}px`;\n\n\t\t// If there is already an animation running\n\t\tif (this.animation) {\n\t\t\t// Cancel the current animation\n\t\t\tthis.animation.cancel();\n\t\t}\n\n\t\t// Start a WAAPI animation\n\t\tthis.animation = this.el.animate(\n\t\t\t{\n\t\t\t\t// Set the keyframes from the startHeight to endHeight\n\t\t\t\theight: [startHeight, endHeight],\n\t\t\t},\n\t\t\tthis.animationSettings.shrink\n\t\t);\n\n\t\t// When the animation is complete, call onAnimationFinish()\n\t\tthis.animation.onfinish = () => this.onAnimationFinish(false);\n\t\t// If the animation is cancelled, isClosing variable is set to false\n\t\tthis.animation.oncancel = () => (this.isClosing = false);\n\t}\n\n\t/**\n\t * Open the details element\n\t */\n\topen() {\n\t\t// Apply a fixed height on the element\n\t\tthis.el.style.height = `${this.el.offsetHeight}px`;\n\t\t// Force the [open] attribute on the details element\n\t\tthis.el.open = true;\n\t\t// Wait for the next frame to call the expand function\n\t\twindow.requestAnimationFrame(() => this.expand());\n\t}\n\n\t/**\n\t * Animation handler for the opening of the details element\n\t */\n\texpand() {\n\t\tconst content = this.summary.nextElementSibling;\n\t\t// Set the element as \"being expanding\"\n\t\tthis.isExpanding = true;\n\t\t// Get the current fixed height of the element\n\t\tconst startHeight = `${this.el.offsetHeight}px`;\n\n\t\t//Bug for compilation - can't find content height of nested accordions\n\t\tconst titleHeight = this.summary\n\t\t\t? this.summary.offsetHeight\n\t\t\t: this.el.querySelector('summary').offsetHeight;\n\t\tconst contentHeight = content\n\t\t\t? content.offsetHeight\n\t\t\t: this.el.querySelector('.accordion-content').offsetHeight;\n\n\t\t// Calculate the open height of the element (summary height + content height)\n\t\tconst endHeight = `${titleHeight + contentHeight}px`;\n\n\t\t// If there is already an animation running\n\t\tif (this.animation) {\n\t\t\t// Cancel the current animation\n\t\t\tthis.animation.cancel();\n\t\t}\n\n\t\t// Start a WAAPI animation\n\t\tthis.animation = this.el.animate(\n\t\t\t{\n\t\t\t\t// Set the keyframes from the startHeight to endHeight\n\t\t\t\theight: [startHeight, endHeight],\n\t\t\t},\n\t\t\tthis.animationSettings.expand\n\t\t);\n\t\t// When the animation is complete, call onAnimationFinish()\n\t\tthis.animation.onfinish = () => this.onAnimationFinish(true);\n\t\t// If the animation is cancelled, isExpanding variable is set to false\n\t\tthis.animation.oncancel = () => (this.isExpanding = false);\n\t}\n\n\t/**\n\t * Finish the animation, reset the class properties and remove the fixed height\n\t * @param {Boolean} open\n\t */\n\tonAnimationFinish(open) {\n\t\t// Set the open attribute based on the parameter\n\t\tthis.el.open = open;\n\t\t// Clear the stored animation\n\t\tthis.animation = null;\n\t\t// Reset isClosing & isExpanding\n\t\tthis.isClosing = false;\n\t\tthis.isExpanding = false;\n\t\t// Remove the overflow hidden and the fixed height\n\t\tthis.el.style.height = this.el.style.overflow = '';\n\t}\n}\n\nexport default class {\n\tconstructor(objCommonContext) {\n\t\tthis.sectionLayoutData = objCommonContext.sectionLayoutData;\n\t\tthis.renderMode = objCommonContext.renderMode || false;\n\t\tthis.HTML = objCommonContext.DOMNode || false;\n\t\tthis.customSettingsData = objCommonContext.sectionLayoutData.customSettingsData;\n\t\tthis.context = objCommonContext.context;\n\n\t\t// Node.js uses a different HTML element constructor, so that's why this function exists.\n\t\tthis.createElement = (element) => {\n\t\t\treturn this.HTML ? new this.HTML(element, {}, '') : document.createElement(element);\n\t\t};\n\t}\n\n\t/**\n\t * Add the classes to the parent element to set size and theme\n\t * @param {HTMLElement} element\n\t */\n\taddClassesToParent(element) {\n\t\t// climb the DOM tree to find the parent .accordion\n\t\tconst elAccordion = element.closest('.accordion');\n\t\tlet arAccordionTitles = elAccordion.querySelectorAll('.accordion-title');\n\n\t\t// set the theme using a boolean or string. old versions of the component used a boolean, new versions use a string\n\t\tif (typeof this.customSettingsData.theme == 'boolean') {\n\t\t\tswitch (this.customSettingsData.theme) {\n\t\t\t\tcase false:\n\t\t\t\t\tarAccordionTitles.forEach((elAccordionTitle) => {\n\t\t\t\t\t\telAccordionTitle.classList.add('dark');\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase true:\n\t\t\t\tdefault:\n\t\t\t\t\tarAccordionTitles.forEach((elAccordionTitle) => {\n\t\t\t\t\t\telAccordionTitle.classList.add('light');\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} else if (typeof this.customSettingsData.theme == 'string') {\n\t\t\tarAccordionTitles.forEach((elAccordionTitle) => {\n\t\t\t\telAccordionTitle.classList.add(this.customSettingsData.theme);\n\t\t\t});\n\t\t}\n\n\t\t// set the size\n\t\tif (typeof this.customSettingsData.size == 'boolean') {\n\t\t\tswitch (this.customSettingsData.size) {\n\t\t\t\tcase false:\n\t\t\t\t\tarAccordionTitles.forEach((elAccordionTitle) => {\n\t\t\t\t\t\telAccordionTitle.classList.add('large');\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase true:\n\t\t\t\tdefault:\n\t\t\t\t\tarAccordionTitles.forEach((elAccordionTitle) => {\n\t\t\t\t\t\telAccordionTitle.classList.add('small');\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} else if (typeof this.customSettingsData.size == 'string') {\n\t\t\tarAccordionTitles.forEach((elAccordionTitle) => {\n\t\t\t\telAccordionTitle.classList.add(this.customSettingsData.size);\n\t\t\t});\n\t\t}\n\n\t\t// show/hide the expand/collapse button\n\t\telAccordion.classList.add(\n\t\t\tthis.customSettingsData.expandBtn ? 'show-expand-btn' : 'hide-expand-btn'\n\t\t);\n\t}\n\n\t/**\n\t * Shape the sectionLayoutData and build the HTML for the component\n\t * @param {HTMLElement} parentObj\n\t */\n\tshapeData(parentObj) {\n\t\tconst objSection = this.customSettingsData.nls.sectionData;\n\n\t\ttry {\n\t\t\tconst self = this;\n\n\t\t\t// create the parent element\n\t\t\tconst elRoot = self.createElement('div');\n\t\t\telRoot.classList.add('accordion');\n\t\t\tparentObj.appendChild(elRoot);\n\t\t\t// self.sectionLayoutData.components represents the component groups\n\t\t\tif ('edit' === self.renderMode && self.sectionLayoutData.components.length < 1) {\n\t\t\t\ttry {\n\t\t\t\t\tvar n = SCSRenderAPI.addComponentToPageModel({\n\t\t\t\t\t\ttype: 'scs-componentgroup',\n\t\t\t\t\t\tid: 'scs-componentgroup',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tcomponents: [],\n\t\t\t\t\t\t\tgrid: '',\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tself.sectionLayoutData.components.push(n);\n\t\t\t\t} catch (er) {\n\t\t\t\t\tself.oceError(er);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Add the component group to the section layout\n\t\t\t * @param {String} componentGroup ID of the component group\n\t\t\t * @param {HTMLElement} section\n\t\t\t * @param {HTMLElement} headElement\n\t\t\t */\n\t\t\tfunction addComponentToSection(componentGroup, section, headElement) {\n\t\t\t\t// Create the li and button\n\t\t\t\tconst elDetails = self.createElement('details');\n\t\t\t\tif (section.anchorId) {\n\t\t\t\t\tif (section.anchorId.startsWith('#')) {\n\t\t\t\t\t\tsection.anchorId = section.anchorId.substring(1);\n\t\t\t\t\t}\n\t\t\t\t\telDetails.setAttribute('id', section.anchorId);\n\t\t\t\t}\n\t\t\t\tsection.open && elDetails.setAttribute('open', section.open);\n\t\t\t\tconst elSummary = self.createElement('summary');\n\t\t\t\tconst elSummaryText = self.createElement('span');\n\t\t\t\telSummaryText.textContent = section.title;\n\t\t\t\telSummaryText.classList.add('accordion-title-text');\n\t\t\t\telSummary.appendChild(elSummaryText);\n\n\t\t\t\tconst elMoreText = self.createElement('span');\n\t\t\t\telMoreText.textContent = self.customSettingsData.nls.moreText;\n\t\t\t\telMoreText.classList.add('more-text');\n\t\t\t\telSummary.appendChild(elMoreText);\n\t\t\t\tconst elLessText = self.createElement('span');\n\t\t\t\telLessText.classList.add('less-text');\n\t\t\t\telLessText.textContent = self.customSettingsData.nls.lessText;\n\n\t\t\t\telSummary.appendChild(elLessText);\n\t\t\t\telSummary.classList.add('accordion-title');\n\t\t\t\telDetails.appendChild(elSummary);\n\n\t\t\t\t// Create the div\n\t\t\t\tconst elContentDiv = self.createElement('div');\n\t\t\t\telContentDiv.setAttribute('data-class', 'accordion-content');\n\t\t\t\tconst elInnerContentDiv = self.createElement('div');\n\t\t\t\telInnerContentDiv.setAttribute('id', componentGroup);\n\t\t\t\telContentDiv.appendChild(elInnerContentDiv);\n\t\t\t\t// if edit mode add edit-mode class\n\t\t\t\tif (self.renderMode === 'edit') {\n\t\t\t\t\telContentDiv.classList.add('edit-mode');\n\t\t\t\t}\n\t\t\t\telDetails.appendChild(elContentDiv);\n\n\t\t\t\t// Append the list item to the unordered list\n\t\t\t\theadElement.appendChild(elDetails);\n\t\t\t}\n\n\t\t\t// we need a details element for each section\n\t\t\tif (objSection) {\n\t\t\t\taddComponentToSection(self.sectionLayoutData.components[0], objSection, elRoot);\n\t\t\t}\n\t\t\t// set the theme and size\n\t\t\tself.addClassesToParent(elRoot);\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t}\n\t}\n\n\t/**\n\t * Instantiate the accordion classes. Add our click handlers on the expand/collapse button\n\t * @param {HTMLElement} parentObj\n\t */\n\taddListeners(parentObj) {\n\t\tparentObj.querySelectorAll('details').forEach((el) => {\n\t\t\t// this has all sorts of cool animation stuff for the native html details element\n\t\t\tif (el?.parentElement?.parentElement === parentObj) {\n\t\t\t\tnew Accordion(el);\n\t\t\t}\n\t\t});\n\t}\n}\n","/* globals SCSRenderAPI */\nimport CommonUtils from './common.mjs'\n\nexport default class {\n constructor(params) {\n // store the args\n this.sectionLayoutData = params.sectionLayoutData || {};\n this.renderMode = params.renderMode || SCSRenderAPI.getRenderMode();\n // store the path to the /assets folder\n this.assetsPath =\n import.meta.url.replace('/render.mjs', '');\n // load up the component's CSS\n SCSRenderAPI.importCSS(this.assetsPath + '/styles/layout.css');\n }\n\n // This is called in the non-compiled site.\n render = (parentObj) => {\n // prep some variables\n const objCommonContext = {\n customSettingsData: this.sectionLayoutData.customSettingsData,\n parentObj: parentObj,\n sectionLayoutData: this.sectionLayoutData,\n renderMode: this.renderMode,\n }\n // get our shared code\n this.shared = new CommonUtils(objCommonContext);\n // shape the data into something the component can use\n this.shared.shapeData(parentObj)\n // add the event listeners\n this.shared.addListeners(parentObj)\n }\n\n // This is called in the compiled site.\n hydrate = (parentObj) => {\n // prep some variables\n const objCommonContext = {\n customSettingsData: this.sectionLayoutData.customSettingsData,\n parentObj: parentObj,\n sectionLayoutData: this.sectionLayoutData,\n }\n // get our shared code\n this.shared = new CommonUtils(objCommonContext);\n // the html already exists from the compiler, so we don't need to create it\n\n // add the event listeners\n this.shared.addListeners(parentObj)\n }\n\n createComponentDiv(componentId) {\n const componentDiv = document.createElement('div')\n componentDiv.id = componentId\n return componentDiv\n }\n\n // dynamic API for adding additional components through \"load more\" when used in a Content List\n addComponent(parentObj, component) {\n // create the component div and add it to the parent object\n parentObj.append(this.createComponentDiv(component))\n }\n}"],"names":["Accordion","constructor","el","this","animationSettings","expand","duration","easing","shrink","summary","querySelector","content","querySelectorAll","forEach","classList","add","animation","isClosing","isExpanding","addEventListener","e","onClick","preventDefault","style","overflow","open","concat","offsetHeight","cancel","animate","height","startHeight","endHeight","onfinish","onAnimationFinish","oncancel","window","requestAnimationFrame","nextElementSibling","titleHeight","contentHeight","CommonUtils","objCommonContext","sectionLayoutData","renderMode","HTML","DOMNode","customSettingsData","context","createElement","element","document","addClassesToParent","closest","arAccordionTitles","elAccordion","theme","elAccordionTitle","size","expandBtn","shapeData","parentObj","objSection","nls","sectionData","self","elRoot","appendChild","components","length","n","SCSRenderAPI","addComponentToPageModel","type","id","data","grid","push","er","oceError","componentGroup","section","headElement","elDetails","anchorId","startsWith","substring","setAttribute","elSummary","elSummaryText","textContent","title","elMoreText","moreText","elLessText","lessText","elContentDiv","elInnerContentDiv","addComponentToSection","console","error","addListeners","_el$parentElement","parentElement","render","params","shared","_defineProperty","getRenderMode","assetsPath","import","meta","url","replace","importCSS","createComponentDiv","componentId","componentDiv","addComponent","component","append"],"mappings":"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"}