Project Support Opportunities - Magellan of Idaho
For Community Partners
Project Support Opportunities
Manage your membership
-
Article #3
Lorem ipsum dolor sit amet consectetur. Arcu tortor amet sit nibh.
-
Article #2
Lorem ipsum dolor sit amet consectetur. Arcu tortor amet sit nibh.
-
Article Card Title #1
Lorem ipsum dolor sit amet consectetur. Arcu tortor amet sit nibh.
-
Article #6
Virhe tapahtui prosessoidessa esitysmallia. The following has evaluated to null or missing: ==> section.AccordionGroup [in template "20097#20123#" at line 117, column 32] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #list section.AccordionGroup.getSibli... [in template "20097#20123#" at line 117, column 25] ---- 1<#-- 2Web content templates are used to lay out the fields defined in a web 3content structure. 4Please use the left panel to quickly add commonly used variables. 5Autocomplete is also available and can be invoked by typing "${". 6--> 7 8<#assign 9articleId = .vars['reserved-article-id'].data 10 11/> 12 13 14 15<#macro ctaSection ctaData> 16 <#if ctaData?has_content && ctaData.get("classPK")?has_content> 17 <div id="cta-section" class="l3-cta"> 18 <#assign 19 ctaClassPK = ctaData.get("classPK") 20 article = publicSiteGlobalTemplateHelper.getArticleByResourcePrimKey(ctaClassPK) 21 /> 22 <@liferay_journal["journal-article"] 23 articleId=article.getArticleId() 24 groupId=article.getGroupId() 25 /> 26 </div> 27 </#if> 28</#macro> 29<#macro accordionSection items> 30 <#if (items?size gt 0)> 31 <section id="faq-section" class="faq"> 32 33 <#list items![] as item> 34 <#if item.Title.getData()?has_content> 35 <div class="panel magellan-accordion panel-panel" role="tablist"> 36 <button class="panel-header panel-header-link collapse-icon collapse-icon-middle collapsed btn btn-unstyled" 37 type="button" aria-expanded="false" role="tab"> 38 <span class="panel-title">${item.Title.getData()}</span> 39 <span class="collapse-icon-closed"> 40 <@clay.icon symbol="angle-down" /> 41 </span> 42 <span class="collapse-icon-open"> 43 <@clay.icon symbol="angle-up" /> 44 </span> 45 </button> 46 <div class="panel-collapse collapse" role="tabpanel"> 47 <div class="panel-body" tabindex="0">${item.Content.getData()}</div> 48 </div> 49 </div> 50 </#if> 51 </#list> 52 </section> 53 </#if> 54</#macro> 55<#assign 56shouldRenderTableOfContent = getterUtil.getBoolean(ShowTableOfContent.getData()) 57/> 58<article class="l3-article container-fluid"> 59 <div class="row"> 60 <div class="col-md-9 article-content" id="main"> 61 <#list SectionSeparator.getSiblings() as section> 62 <#if section?index gt 0> 63 <hr/> 64 </#if> 65 <#assign showTableOfContentMobile = (shouldRenderTableOfContent && section?index == 1) /> 66 <#if showTableOfContentMobile> 67 <div class="d-lg-none table-of-content-mobile mb-5"> 68 <div class="panel magellan-accordion panel-panel" role="tablist"> 69 <button class="panel-header panel-header-link collapse-icon collapse-icon-middle collapsed btn btn-unstyled" 70 type="button" aria-expanded="false" role="tab"> 71 <span class="panel-title"> 72 <@liferay.language key="what-is-on-this-page" /> 73 </span> 74 <span class="collapse-icon-closed"> 75 <@clay.icon symbol="angle-down" /> 76 </span> 77 <span class="collapse-icon-open"> 78 <@clay.icon symbol="angle-up" /> 79 </span> 80 </button> 81 <div class="panel-collapse collapse" role="tabpanel"> 82 <ul class="list-unstyled"> 83 <#list SectionSeparator.getSiblings() as section> 84 <#if section.SectionMenuTitle.getData()?has_content || section.SectionTitle.getData()?has_content> 85 <li> 86 <a class="table-of-content-item" href="#section-${section?index}"> 87 <#if section.SectionMenuTitle?? && section.SectionMenuTitle.getData()?has_content> 88 ${section.SectionMenuTitle.getData()} 89 <#else> 90 ${section.SectionTitle.getData()} 91 </#if> 92 </a> 93 </li> 94 </#if> 95 </#list> 96 </ul> 97 </div> 98 </div> 99 </div> 100 </#if> 101 102 <section class="${(section?index == 0) ? then('overview','paragraph section'+section?index) }" > 103 <div class="section-content"> 104 105 <#if section.SectionTitle.getData()?has_content> 106 <#if section?index == 0> 107 <h2 id="section-${section?index}">${section.SectionTitle.getData()}</h2> 108 <#else> 109 <h3 id="section-${section?index}">${section.SectionTitle.getData()}</h3> 110 </#if> 111 </#if> 112 113 <#if section.SectionTextContent.getData()?has_content> 114 <div class="section-text-content">${section.SectionTextContent.getData()}</div> 115 </#if> 116 117 <#list section.AccordionGroup.getSiblings() as accord> 118 <div class="section-accordion"> 119 <@accordionSection 120 items=accord.Accordion.getSiblings() 121 /> 122 </div> 123 </#list> 124 125 <#if section.CTAContent.getData()?has_content> 126 <div class="section-cta"> 127 <@ctaSection 128 ctaData=jsonFactoryUtil.createJSONObject(section.CTAContent.getData()) 129 /> 130 </div> 131 </#if> 132 133 </div> 134 </section> 135 </#list> 136 </div> 137 <#if shouldRenderTableOfContent> 138 <div class="d-none d-lg-block col-md-3" id="sticky-sidebar"> 139 <div class="sticky-top-"> 140 <div class="position-fixed table-of-content "> 141 <span><@liferay.language key="what-is-on-this-page" /></span> 142 <ul class="list-unstyled nav flex-column flex-nowrap overflow-auto"> 143 <#list SectionSeparator.getSiblings() as section> 144 <#if section.SectionMenuTitle.getData()?has_content || section.SectionTitle.getData()?has_content> 145 <li> 146 <a class="table-of-content-item" href="#section-${section?index}"> 147 <#if section.SectionMenuTitle?? && section.SectionMenuTitle.getData()?has_content> 148 ${section.SectionMenuTitle.getData()} 149 <#else> 150 ${section.SectionTitle.getData()} 151 </#if> 152 </a> 153 </li> 154 </#if> 155 </#list> 156 </ul> 157 </div> 158 </div> 159 </div> 160 </#if> 161 </div> 162</article> 163 164<script> 165 (function () { 166 function setTableOfContentItemActive(itemId) { 167 console.log(itemId); 168 const selector = Liferay.Util.isPhone() || Liferay.Util.isTablet() 169 ? '.table-of-content-mobile .table-of-content-item' 170 : '.table-of-content .table-of-content-item'; 171 const tableOfContentItems = document.querySelectorAll(selector); 172 173 if (!tableOfContentItems) { 174 return; 175 } 176 177 tableOfContentItems.forEach(function (item) { 178 item.classList.remove('active'); 179 180 }); 181 const activeItem = document.querySelector(selector + '[href="' + itemId + '"]'); 182 activeItem.classList.add('active'); 183 184 } 185 186 const tableOfContentItems = document.querySelectorAll('.table-of-content-item'); 187 tableOfContentItems.forEach(function (item, index) { 188 if (index === 0) { 189 setTableOfContentItemActive(item.getAttribute('href')); 190 } 191 item.addEventListener('click', function (event) { 192 event.preventDefault(); 193 event.stopPropagation(); 194 const scrollTargetId = item.getAttribute('href'); 195 const scrollTarget = document.getElementById(scrollTargetId.replace('#', '')); 196 const offsetNavbarRem = getComputedStyle(document.getElementById('content')).getPropertyValue('--navbar-height'); 197 const offsetHeaderRem = getComputedStyle(document.getElementById('content')).getPropertyValue('--header-height'); 198 const documentFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize); 199 const offsetNavbar = offsetNavbarRem.trim().replace('rem', '') * documentFontSize; 200 const offsetHeader = offsetHeaderRem.trim().replace('rem', '') * documentFontSize; 201 const y = scrollTarget.offsetTop; 202 window.scroll({ 203 top: y, 204 behavior: 'smooth' 205 }); 206 207 setTableOfContentItemActive(scrollTargetId); 208 return false; 209 }) 210 }); 211 const faqItems = document.querySelectorAll('.l3-article .magellan-accordion > .panel-header'); 212 faqItems.forEach(function (item) { 213 item.addEventListener('click', function (event) { 214 item.classList.toggle('collapsed'); 215 item.parentElement.querySelector('.panel-collapse').classList.toggle('collapse'); 216 }); 217 }); 218 219 HTMLElement.prototype.oldScrollIntoView = HTMLElement.prototype.scrollIntoView; 220 HTMLElement.prototype.scrollIntoView = function () { 221 if (this.id !== "p_p_id_${themeDisplay.portletDisplay.id}_") { 222 HTMLElement.prototype.oldScrollIntoView(); 223 } 224 }; 225 226 var sections = document.querySelectorAll('.l3-article .article-content > section'); 227 sections.forEach(function (item) { 228 var content = item.querySelector('.section-content'); 229 if(content) { 230 if(content.innerHTML.trim().length == 0) { 231 item.previousElementSibling.remove(); 232 content.remove(); 233 } 234 } 235 }); 236 237 })(); 238 239</script>
-
Article #5
Virhe tapahtui prosessoidessa esitysmallia. The following has evaluated to null or missing: ==> section.AccordionGroup [in template "20097#20123#" at line 117, column 32] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #list section.AccordionGroup.getSibli... [in template "20097#20123#" at line 117, column 25] ---- 1<#-- 2Web content templates are used to lay out the fields defined in a web 3content structure. 4Please use the left panel to quickly add commonly used variables. 5Autocomplete is also available and can be invoked by typing "${". 6--> 7 8<#assign 9articleId = .vars['reserved-article-id'].data 10 11/> 12 13 14 15<#macro ctaSection ctaData> 16 <#if ctaData?has_content && ctaData.get("classPK")?has_content> 17 <div id="cta-section" class="l3-cta"> 18 <#assign 19 ctaClassPK = ctaData.get("classPK") 20 article = publicSiteGlobalTemplateHelper.getArticleByResourcePrimKey(ctaClassPK) 21 /> 22 <@liferay_journal["journal-article"] 23 articleId=article.getArticleId() 24 groupId=article.getGroupId() 25 /> 26 </div> 27 </#if> 28</#macro> 29<#macro accordionSection items> 30 <#if (items?size gt 0)> 31 <section id="faq-section" class="faq"> 32 33 <#list items![] as item> 34 <#if item.Title.getData()?has_content> 35 <div class="panel magellan-accordion panel-panel" role="tablist"> 36 <button class="panel-header panel-header-link collapse-icon collapse-icon-middle collapsed btn btn-unstyled" 37 type="button" aria-expanded="false" role="tab"> 38 <span class="panel-title">${item.Title.getData()}</span> 39 <span class="collapse-icon-closed"> 40 <@clay.icon symbol="angle-down" /> 41 </span> 42 <span class="collapse-icon-open"> 43 <@clay.icon symbol="angle-up" /> 44 </span> 45 </button> 46 <div class="panel-collapse collapse" role="tabpanel"> 47 <div class="panel-body" tabindex="0">${item.Content.getData()}</div> 48 </div> 49 </div> 50 </#if> 51 </#list> 52 </section> 53 </#if> 54</#macro> 55<#assign 56shouldRenderTableOfContent = getterUtil.getBoolean(ShowTableOfContent.getData()) 57/> 58<article class="l3-article container-fluid"> 59 <div class="row"> 60 <div class="col-md-9 article-content" id="main"> 61 <#list SectionSeparator.getSiblings() as section> 62 <#if section?index gt 0> 63 <hr/> 64 </#if> 65 <#assign showTableOfContentMobile = (shouldRenderTableOfContent && section?index == 1) /> 66 <#if showTableOfContentMobile> 67 <div class="d-lg-none table-of-content-mobile mb-5"> 68 <div class="panel magellan-accordion panel-panel" role="tablist"> 69 <button class="panel-header panel-header-link collapse-icon collapse-icon-middle collapsed btn btn-unstyled" 70 type="button" aria-expanded="false" role="tab"> 71 <span class="panel-title"> 72 <@liferay.language key="what-is-on-this-page" /> 73 </span> 74 <span class="collapse-icon-closed"> 75 <@clay.icon symbol="angle-down" /> 76 </span> 77 <span class="collapse-icon-open"> 78 <@clay.icon symbol="angle-up" /> 79 </span> 80 </button> 81 <div class="panel-collapse collapse" role="tabpanel"> 82 <ul class="list-unstyled"> 83 <#list SectionSeparator.getSiblings() as section> 84 <#if section.SectionMenuTitle.getData()?has_content || section.SectionTitle.getData()?has_content> 85 <li> 86 <a class="table-of-content-item" href="#section-${section?index}"> 87 <#if section.SectionMenuTitle?? && section.SectionMenuTitle.getData()?has_content> 88 ${section.SectionMenuTitle.getData()} 89 <#else> 90 ${section.SectionTitle.getData()} 91 </#if> 92 </a> 93 </li> 94 </#if> 95 </#list> 96 </ul> 97 </div> 98 </div> 99 </div> 100 </#if> 101 102 <section class="${(section?index == 0) ? then('overview','paragraph section'+section?index) }" > 103 <div class="section-content"> 104 105 <#if section.SectionTitle.getData()?has_content> 106 <#if section?index == 0> 107 <h2 id="section-${section?index}">${section.SectionTitle.getData()}</h2> 108 <#else> 109 <h3 id="section-${section?index}">${section.SectionTitle.getData()}</h3> 110 </#if> 111 </#if> 112 113 <#if section.SectionTextContent.getData()?has_content> 114 <div class="section-text-content">${section.SectionTextContent.getData()}</div> 115 </#if> 116 117 <#list section.AccordionGroup.getSiblings() as accord> 118 <div class="section-accordion"> 119 <@accordionSection 120 items=accord.Accordion.getSiblings() 121 /> 122 </div> 123 </#list> 124 125 <#if section.CTAContent.getData()?has_content> 126 <div class="section-cta"> 127 <@ctaSection 128 ctaData=jsonFactoryUtil.createJSONObject(section.CTAContent.getData()) 129 /> 130 </div> 131 </#if> 132 133 </div> 134 </section> 135 </#list> 136 </div> 137 <#if shouldRenderTableOfContent> 138 <div class="d-none d-lg-block col-md-3" id="sticky-sidebar"> 139 <div class="sticky-top-"> 140 <div class="position-fixed table-of-content "> 141 <span><@liferay.language key="what-is-on-this-page" /></span> 142 <ul class="list-unstyled nav flex-column flex-nowrap overflow-auto"> 143 <#list SectionSeparator.getSiblings() as section> 144 <#if section.SectionMenuTitle.getData()?has_content || section.SectionTitle.getData()?has_content> 145 <li> 146 <a class="table-of-content-item" href="#section-${section?index}"> 147 <#if section.SectionMenuTitle?? && section.SectionMenuTitle.getData()?has_content> 148 ${section.SectionMenuTitle.getData()} 149 <#else> 150 ${section.SectionTitle.getData()} 151 </#if> 152 </a> 153 </li> 154 </#if> 155 </#list> 156 </ul> 157 </div> 158 </div> 159 </div> 160 </#if> 161 </div> 162</article> 163 164<script> 165 (function () { 166 function setTableOfContentItemActive(itemId) { 167 console.log(itemId); 168 const selector = Liferay.Util.isPhone() || Liferay.Util.isTablet() 169 ? '.table-of-content-mobile .table-of-content-item' 170 : '.table-of-content .table-of-content-item'; 171 const tableOfContentItems = document.querySelectorAll(selector); 172 173 if (!tableOfContentItems) { 174 return; 175 } 176 177 tableOfContentItems.forEach(function (item) { 178 item.classList.remove('active'); 179 180 }); 181 const activeItem = document.querySelector(selector + '[href="' + itemId + '"]'); 182 activeItem.classList.add('active'); 183 184 } 185 186 const tableOfContentItems = document.querySelectorAll('.table-of-content-item'); 187 tableOfContentItems.forEach(function (item, index) { 188 if (index === 0) { 189 setTableOfContentItemActive(item.getAttribute('href')); 190 } 191 item.addEventListener('click', function (event) { 192 event.preventDefault(); 193 event.stopPropagation(); 194 const scrollTargetId = item.getAttribute('href'); 195 const scrollTarget = document.getElementById(scrollTargetId.replace('#', '')); 196 const offsetNavbarRem = getComputedStyle(document.getElementById('content')).getPropertyValue('--navbar-height'); 197 const offsetHeaderRem = getComputedStyle(document.getElementById('content')).getPropertyValue('--header-height'); 198 const documentFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize); 199 const offsetNavbar = offsetNavbarRem.trim().replace('rem', '') * documentFontSize; 200 const offsetHeader = offsetHeaderRem.trim().replace('rem', '') * documentFontSize; 201 const y = scrollTarget.offsetTop; 202 window.scroll({ 203 top: y, 204 behavior: 'smooth' 205 }); 206 207 setTableOfContentItemActive(scrollTargetId); 208 return false; 209 }) 210 }); 211 const faqItems = document.querySelectorAll('.l3-article .magellan-accordion > .panel-header'); 212 faqItems.forEach(function (item) { 213 item.addEventListener('click', function (event) { 214 item.classList.toggle('collapsed'); 215 item.parentElement.querySelector('.panel-collapse').classList.toggle('collapse'); 216 }); 217 }); 218 219 HTMLElement.prototype.oldScrollIntoView = HTMLElement.prototype.scrollIntoView; 220 HTMLElement.prototype.scrollIntoView = function () { 221 if (this.id !== "p_p_id_${themeDisplay.portletDisplay.id}_") { 222 HTMLElement.prototype.oldScrollIntoView(); 223 } 224 }; 225 226 var sections = document.querySelectorAll('.l3-article .article-content > section'); 227 sections.forEach(function (item) { 228 var content = item.querySelector('.section-content'); 229 if(content) { 230 if(content.innerHTML.trim().length == 0) { 231 item.previousElementSibling.remove(); 232 content.remove(); 233 } 234 } 235 }); 236 237 })(); 238 239</script>
-
Article #4
Search our network of counselors and specialists for in-person or virtual care.
Ways to find what you need
-
Article #9
Virhe tapahtui prosessoidessa esitysmallia. The following has evaluated to null or missing: ==> section.AccordionGroup [in template "20097#20123#" at line 117, column 32] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #list section.AccordionGroup.getSibli... [in template "20097#20123#" at line 117, column 25] ---- 1<#-- 2Web content templates are used to lay out the fields defined in a web 3content structure. 4Please use the left panel to quickly add commonly used variables. 5Autocomplete is also available and can be invoked by typing "${". 6--> 7 8<#assign 9articleId = .vars['reserved-article-id'].data 10 11/> 12 13 14 15<#macro ctaSection ctaData> 16 <#if ctaData?has_content && ctaData.get("classPK")?has_content> 17 <div id="cta-section" class="l3-cta"> 18 <#assign 19 ctaClassPK = ctaData.get("classPK") 20 article = publicSiteGlobalTemplateHelper.getArticleByResourcePrimKey(ctaClassPK) 21 /> 22 <@liferay_journal["journal-article"] 23 articleId=article.getArticleId() 24 groupId=article.getGroupId() 25 /> 26 </div> 27 </#if> 28</#macro> 29<#macro accordionSection items> 30 <#if (items?size gt 0)> 31 <section id="faq-section" class="faq"> 32 33 <#list items![] as item> 34 <#if item.Title.getData()?has_content> 35 <div class="panel magellan-accordion panel-panel" role="tablist"> 36 <button class="panel-header panel-header-link collapse-icon collapse-icon-middle collapsed btn btn-unstyled" 37 type="button" aria-expanded="false" role="tab"> 38 <span class="panel-title">${item.Title.getData()}</span> 39 <span class="collapse-icon-closed"> 40 <@clay.icon symbol="angle-down" /> 41 </span> 42 <span class="collapse-icon-open"> 43 <@clay.icon symbol="angle-up" /> 44 </span> 45 </button> 46 <div class="panel-collapse collapse" role="tabpanel"> 47 <div class="panel-body" tabindex="0">${item.Content.getData()}</div> 48 </div> 49 </div> 50 </#if> 51 </#list> 52 </section> 53 </#if> 54</#macro> 55<#assign 56shouldRenderTableOfContent = getterUtil.getBoolean(ShowTableOfContent.getData()) 57/> 58<article class="l3-article container-fluid"> 59 <div class="row"> 60 <div class="col-md-9 article-content" id="main"> 61 <#list SectionSeparator.getSiblings() as section> 62 <#if section?index gt 0> 63 <hr/> 64 </#if> 65 <#assign showTableOfContentMobile = (shouldRenderTableOfContent && section?index == 1) /> 66 <#if showTableOfContentMobile> 67 <div class="d-lg-none table-of-content-mobile mb-5"> 68 <div class="panel magellan-accordion panel-panel" role="tablist"> 69 <button class="panel-header panel-header-link collapse-icon collapse-icon-middle collapsed btn btn-unstyled" 70 type="button" aria-expanded="false" role="tab"> 71 <span class="panel-title"> 72 <@liferay.language key="what-is-on-this-page" /> 73 </span> 74 <span class="collapse-icon-closed"> 75 <@clay.icon symbol="angle-down" /> 76 </span> 77 <span class="collapse-icon-open"> 78 <@clay.icon symbol="angle-up" /> 79 </span> 80 </button> 81 <div class="panel-collapse collapse" role="tabpanel"> 82 <ul class="list-unstyled"> 83 <#list SectionSeparator.getSiblings() as section> 84 <#if section.SectionMenuTitle.getData()?has_content || section.SectionTitle.getData()?has_content> 85 <li> 86 <a class="table-of-content-item" href="#section-${section?index}"> 87 <#if section.SectionMenuTitle?? && section.SectionMenuTitle.getData()?has_content> 88 ${section.SectionMenuTitle.getData()} 89 <#else> 90 ${section.SectionTitle.getData()} 91 </#if> 92 </a> 93 </li> 94 </#if> 95 </#list> 96 </ul> 97 </div> 98 </div> 99 </div> 100 </#if> 101 102 <section class="${(section?index == 0) ? then('overview','paragraph section'+section?index) }" > 103 <div class="section-content"> 104 105 <#if section.SectionTitle.getData()?has_content> 106 <#if section?index == 0> 107 <h2 id="section-${section?index}">${section.SectionTitle.getData()}</h2> 108 <#else> 109 <h3 id="section-${section?index}">${section.SectionTitle.getData()}</h3> 110 </#if> 111 </#if> 112 113 <#if section.SectionTextContent.getData()?has_content> 114 <div class="section-text-content">${section.SectionTextContent.getData()}</div> 115 </#if> 116 117 <#list section.AccordionGroup.getSiblings() as accord> 118 <div class="section-accordion"> 119 <@accordionSection 120 items=accord.Accordion.getSiblings() 121 /> 122 </div> 123 </#list> 124 125 <#if section.CTAContent.getData()?has_content> 126 <div class="section-cta"> 127 <@ctaSection 128 ctaData=jsonFactoryUtil.createJSONObject(section.CTAContent.getData()) 129 /> 130 </div> 131 </#if> 132 133 </div> 134 </section> 135 </#list> 136 </div> 137 <#if shouldRenderTableOfContent> 138 <div class="d-none d-lg-block col-md-3" id="sticky-sidebar"> 139 <div class="sticky-top-"> 140 <div class="position-fixed table-of-content "> 141 <span><@liferay.language key="what-is-on-this-page" /></span> 142 <ul class="list-unstyled nav flex-column flex-nowrap overflow-auto"> 143 <#list SectionSeparator.getSiblings() as section> 144 <#if section.SectionMenuTitle.getData()?has_content || section.SectionTitle.getData()?has_content> 145 <li> 146 <a class="table-of-content-item" href="#section-${section?index}"> 147 <#if section.SectionMenuTitle?? && section.SectionMenuTitle.getData()?has_content> 148 ${section.SectionMenuTitle.getData()} 149 <#else> 150 ${section.SectionTitle.getData()} 151 </#if> 152 </a> 153 </li> 154 </#if> 155 </#list> 156 </ul> 157 </div> 158 </div> 159 </div> 160 </#if> 161 </div> 162</article> 163 164<script> 165 (function () { 166 function setTableOfContentItemActive(itemId) { 167 console.log(itemId); 168 const selector = Liferay.Util.isPhone() || Liferay.Util.isTablet() 169 ? '.table-of-content-mobile .table-of-content-item' 170 : '.table-of-content .table-of-content-item'; 171 const tableOfContentItems = document.querySelectorAll(selector); 172 173 if (!tableOfContentItems) { 174 return; 175 } 176 177 tableOfContentItems.forEach(function (item) { 178 item.classList.remove('active'); 179 180 }); 181 const activeItem = document.querySelector(selector + '[href="' + itemId + '"]'); 182 activeItem.classList.add('active'); 183 184 } 185 186 const tableOfContentItems = document.querySelectorAll('.table-of-content-item'); 187 tableOfContentItems.forEach(function (item, index) { 188 if (index === 0) { 189 setTableOfContentItemActive(item.getAttribute('href')); 190 } 191 item.addEventListener('click', function (event) { 192 event.preventDefault(); 193 event.stopPropagation(); 194 const scrollTargetId = item.getAttribute('href'); 195 const scrollTarget = document.getElementById(scrollTargetId.replace('#', '')); 196 const offsetNavbarRem = getComputedStyle(document.getElementById('content')).getPropertyValue('--navbar-height'); 197 const offsetHeaderRem = getComputedStyle(document.getElementById('content')).getPropertyValue('--header-height'); 198 const documentFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize); 199 const offsetNavbar = offsetNavbarRem.trim().replace('rem', '') * documentFontSize; 200 const offsetHeader = offsetHeaderRem.trim().replace('rem', '') * documentFontSize; 201 const y = scrollTarget.offsetTop; 202 window.scroll({ 203 top: y, 204 behavior: 'smooth' 205 }); 206 207 setTableOfContentItemActive(scrollTargetId); 208 return false; 209 }) 210 }); 211 const faqItems = document.querySelectorAll('.l3-article .magellan-accordion > .panel-header'); 212 faqItems.forEach(function (item) { 213 item.addEventListener('click', function (event) { 214 item.classList.toggle('collapsed'); 215 item.parentElement.querySelector('.panel-collapse').classList.toggle('collapse'); 216 }); 217 }); 218 219 HTMLElement.prototype.oldScrollIntoView = HTMLElement.prototype.scrollIntoView; 220 HTMLElement.prototype.scrollIntoView = function () { 221 if (this.id !== "p_p_id_${themeDisplay.portletDisplay.id}_") { 222 HTMLElement.prototype.oldScrollIntoView(); 223 } 224 }; 225 226 var sections = document.querySelectorAll('.l3-article .article-content > section'); 227 sections.forEach(function (item) { 228 var content = item.querySelector('.section-content'); 229 if(content) { 230 if(content.innerHTML.trim().length == 0) { 231 item.previousElementSibling.remove(); 232 content.remove(); 233 } 234 } 235 }); 236 237 })(); 238 239</script>
-
Article #8
Virhe tapahtui prosessoidessa esitysmallia. The following has evaluated to null or missing: ==> section.AccordionGroup [in template "20097#20123#" at line 117, column 32] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #list section.AccordionGroup.getSibli... [in template "20097#20123#" at line 117, column 25] ---- 1<#-- 2Web content templates are used to lay out the fields defined in a web 3content structure. 4Please use the left panel to quickly add commonly used variables. 5Autocomplete is also available and can be invoked by typing "${". 6--> 7 8<#assign 9articleId = .vars['reserved-article-id'].data 10 11/> 12 13 14 15<#macro ctaSection ctaData> 16 <#if ctaData?has_content && ctaData.get("classPK")?has_content> 17 <div id="cta-section" class="l3-cta"> 18 <#assign 19 ctaClassPK = ctaData.get("classPK") 20 article = publicSiteGlobalTemplateHelper.getArticleByResourcePrimKey(ctaClassPK) 21 /> 22 <@liferay_journal["journal-article"] 23 articleId=article.getArticleId() 24 groupId=article.getGroupId() 25 /> 26 </div> 27 </#if> 28</#macro> 29<#macro accordionSection items> 30 <#if (items?size gt 0)> 31 <section id="faq-section" class="faq"> 32 33 <#list items![] as item> 34 <#if item.Title.getData()?has_content> 35 <div class="panel magellan-accordion panel-panel" role="tablist"> 36 <button class="panel-header panel-header-link collapse-icon collapse-icon-middle collapsed btn btn-unstyled" 37 type="button" aria-expanded="false" role="tab"> 38 <span class="panel-title">${item.Title.getData()}</span> 39 <span class="collapse-icon-closed"> 40 <@clay.icon symbol="angle-down" /> 41 </span> 42 <span class="collapse-icon-open"> 43 <@clay.icon symbol="angle-up" /> 44 </span> 45 </button> 46 <div class="panel-collapse collapse" role="tabpanel"> 47 <div class="panel-body" tabindex="0">${item.Content.getData()}</div> 48 </div> 49 </div> 50 </#if> 51 </#list> 52 </section> 53 </#if> 54</#macro> 55<#assign 56shouldRenderTableOfContent = getterUtil.getBoolean(ShowTableOfContent.getData()) 57/> 58<article class="l3-article container-fluid"> 59 <div class="row"> 60 <div class="col-md-9 article-content" id="main"> 61 <#list SectionSeparator.getSiblings() as section> 62 <#if section?index gt 0> 63 <hr/> 64 </#if> 65 <#assign showTableOfContentMobile = (shouldRenderTableOfContent && section?index == 1) /> 66 <#if showTableOfContentMobile> 67 <div class="d-lg-none table-of-content-mobile mb-5"> 68 <div class="panel magellan-accordion panel-panel" role="tablist"> 69 <button class="panel-header panel-header-link collapse-icon collapse-icon-middle collapsed btn btn-unstyled" 70 type="button" aria-expanded="false" role="tab"> 71 <span class="panel-title"> 72 <@liferay.language key="what-is-on-this-page" /> 73 </span> 74 <span class="collapse-icon-closed"> 75 <@clay.icon symbol="angle-down" /> 76 </span> 77 <span class="collapse-icon-open"> 78 <@clay.icon symbol="angle-up" /> 79 </span> 80 </button> 81 <div class="panel-collapse collapse" role="tabpanel"> 82 <ul class="list-unstyled"> 83 <#list SectionSeparator.getSiblings() as section> 84 <#if section.SectionMenuTitle.getData()?has_content || section.SectionTitle.getData()?has_content> 85 <li> 86 <a class="table-of-content-item" href="#section-${section?index}"> 87 <#if section.SectionMenuTitle?? && section.SectionMenuTitle.getData()?has_content> 88 ${section.SectionMenuTitle.getData()} 89 <#else> 90 ${section.SectionTitle.getData()} 91 </#if> 92 </a> 93 </li> 94 </#if> 95 </#list> 96 </ul> 97 </div> 98 </div> 99 </div> 100 </#if> 101 102 <section class="${(section?index == 0) ? then('overview','paragraph section'+section?index) }" > 103 <div class="section-content"> 104 105 <#if section.SectionTitle.getData()?has_content> 106 <#if section?index == 0> 107 <h2 id="section-${section?index}">${section.SectionTitle.getData()}</h2> 108 <#else> 109 <h3 id="section-${section?index}">${section.SectionTitle.getData()}</h3> 110 </#if> 111 </#if> 112 113 <#if section.SectionTextContent.getData()?has_content> 114 <div class="section-text-content">${section.SectionTextContent.getData()}</div> 115 </#if> 116 117 <#list section.AccordionGroup.getSiblings() as accord> 118 <div class="section-accordion"> 119 <@accordionSection 120 items=accord.Accordion.getSiblings() 121 /> 122 </div> 123 </#list> 124 125 <#if section.CTAContent.getData()?has_content> 126 <div class="section-cta"> 127 <@ctaSection 128 ctaData=jsonFactoryUtil.createJSONObject(section.CTAContent.getData()) 129 /> 130 </div> 131 </#if> 132 133 </div> 134 </section> 135 </#list> 136 </div> 137 <#if shouldRenderTableOfContent> 138 <div class="d-none d-lg-block col-md-3" id="sticky-sidebar"> 139 <div class="sticky-top-"> 140 <div class="position-fixed table-of-content "> 141 <span><@liferay.language key="what-is-on-this-page" /></span> 142 <ul class="list-unstyled nav flex-column flex-nowrap overflow-auto"> 143 <#list SectionSeparator.getSiblings() as section> 144 <#if section.SectionMenuTitle.getData()?has_content || section.SectionTitle.getData()?has_content> 145 <li> 146 <a class="table-of-content-item" href="#section-${section?index}"> 147 <#if section.SectionMenuTitle?? && section.SectionMenuTitle.getData()?has_content> 148 ${section.SectionMenuTitle.getData()} 149 <#else> 150 ${section.SectionTitle.getData()} 151 </#if> 152 </a> 153 </li> 154 </#if> 155 </#list> 156 </ul> 157 </div> 158 </div> 159 </div> 160 </#if> 161 </div> 162</article> 163 164<script> 165 (function () { 166 function setTableOfContentItemActive(itemId) { 167 console.log(itemId); 168 const selector = Liferay.Util.isPhone() || Liferay.Util.isTablet() 169 ? '.table-of-content-mobile .table-of-content-item' 170 : '.table-of-content .table-of-content-item'; 171 const tableOfContentItems = document.querySelectorAll(selector); 172 173 if (!tableOfContentItems) { 174 return; 175 } 176 177 tableOfContentItems.forEach(function (item) { 178 item.classList.remove('active'); 179 180 }); 181 const activeItem = document.querySelector(selector + '[href="' + itemId + '"]'); 182 activeItem.classList.add('active'); 183 184 } 185 186 const tableOfContentItems = document.querySelectorAll('.table-of-content-item'); 187 tableOfContentItems.forEach(function (item, index) { 188 if (index === 0) { 189 setTableOfContentItemActive(item.getAttribute('href')); 190 } 191 item.addEventListener('click', function (event) { 192 event.preventDefault(); 193 event.stopPropagation(); 194 const scrollTargetId = item.getAttribute('href'); 195 const scrollTarget = document.getElementById(scrollTargetId.replace('#', '')); 196 const offsetNavbarRem = getComputedStyle(document.getElementById('content')).getPropertyValue('--navbar-height'); 197 const offsetHeaderRem = getComputedStyle(document.getElementById('content')).getPropertyValue('--header-height'); 198 const documentFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize); 199 const offsetNavbar = offsetNavbarRem.trim().replace('rem', '') * documentFontSize; 200 const offsetHeader = offsetHeaderRem.trim().replace('rem', '') * documentFontSize; 201 const y = scrollTarget.offsetTop; 202 window.scroll({ 203 top: y, 204 behavior: 'smooth' 205 }); 206 207 setTableOfContentItemActive(scrollTargetId); 208 return false; 209 }) 210 }); 211 const faqItems = document.querySelectorAll('.l3-article .magellan-accordion > .panel-header'); 212 faqItems.forEach(function (item) { 213 item.addEventListener('click', function (event) { 214 item.classList.toggle('collapsed'); 215 item.parentElement.querySelector('.panel-collapse').classList.toggle('collapse'); 216 }); 217 }); 218 219 HTMLElement.prototype.oldScrollIntoView = HTMLElement.prototype.scrollIntoView; 220 HTMLElement.prototype.scrollIntoView = function () { 221 if (this.id !== "p_p_id_${themeDisplay.portletDisplay.id}_") { 222 HTMLElement.prototype.oldScrollIntoView(); 223 } 224 }; 225 226 var sections = document.querySelectorAll('.l3-article .article-content > section'); 227 sections.forEach(function (item) { 228 var content = item.querySelector('.section-content'); 229 if(content) { 230 if(content.innerHTML.trim().length == 0) { 231 item.previousElementSibling.remove(); 232 content.remove(); 233 } 234 } 235 }); 236 237 })(); 238 239</script>
-
Article #7
Virhe tapahtui prosessoidessa esitysmallia. The following has evaluated to null or missing: ==> section.AccordionGroup [in template "20097#20123#" at line 117, column 32] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #list section.AccordionGroup.getSibli... [in template "20097#20123#" at line 117, column 25] ---- 1<#-- 2Web content templates are used to lay out the fields defined in a web 3content structure. 4Please use the left panel to quickly add commonly used variables. 5Autocomplete is also available and can be invoked by typing "${". 6--> 7 8<#assign 9articleId = .vars['reserved-article-id'].data 10 11/> 12 13 14 15<#macro ctaSection ctaData> 16 <#if ctaData?has_content && ctaData.get("classPK")?has_content> 17 <div id="cta-section" class="l3-cta"> 18 <#assign 19 ctaClassPK = ctaData.get("classPK") 20 article = publicSiteGlobalTemplateHelper.getArticleByResourcePrimKey(ctaClassPK) 21 /> 22 <@liferay_journal["journal-article"] 23 articleId=article.getArticleId() 24 groupId=article.getGroupId() 25 /> 26 </div> 27 </#if> 28</#macro> 29<#macro accordionSection items> 30 <#if (items?size gt 0)> 31 <section id="faq-section" class="faq"> 32 33 <#list items![] as item> 34 <#if item.Title.getData()?has_content> 35 <div class="panel magellan-accordion panel-panel" role="tablist"> 36 <button class="panel-header panel-header-link collapse-icon collapse-icon-middle collapsed btn btn-unstyled" 37 type="button" aria-expanded="false" role="tab"> 38 <span class="panel-title">${item.Title.getData()}</span> 39 <span class="collapse-icon-closed"> 40 <@clay.icon symbol="angle-down" /> 41 </span> 42 <span class="collapse-icon-open"> 43 <@clay.icon symbol="angle-up" /> 44 </span> 45 </button> 46 <div class="panel-collapse collapse" role="tabpanel"> 47 <div class="panel-body" tabindex="0">${item.Content.getData()}</div> 48 </div> 49 </div> 50 </#if> 51 </#list> 52 </section> 53 </#if> 54</#macro> 55<#assign 56shouldRenderTableOfContent = getterUtil.getBoolean(ShowTableOfContent.getData()) 57/> 58<article class="l3-article container-fluid"> 59 <div class="row"> 60 <div class="col-md-9 article-content" id="main"> 61 <#list SectionSeparator.getSiblings() as section> 62 <#if section?index gt 0> 63 <hr/> 64 </#if> 65 <#assign showTableOfContentMobile = (shouldRenderTableOfContent && section?index == 1) /> 66 <#if showTableOfContentMobile> 67 <div class="d-lg-none table-of-content-mobile mb-5"> 68 <div class="panel magellan-accordion panel-panel" role="tablist"> 69 <button class="panel-header panel-header-link collapse-icon collapse-icon-middle collapsed btn btn-unstyled" 70 type="button" aria-expanded="false" role="tab"> 71 <span class="panel-title"> 72 <@liferay.language key="what-is-on-this-page" /> 73 </span> 74 <span class="collapse-icon-closed"> 75 <@clay.icon symbol="angle-down" /> 76 </span> 77 <span class="collapse-icon-open"> 78 <@clay.icon symbol="angle-up" /> 79 </span> 80 </button> 81 <div class="panel-collapse collapse" role="tabpanel"> 82 <ul class="list-unstyled"> 83 <#list SectionSeparator.getSiblings() as section> 84 <#if section.SectionMenuTitle.getData()?has_content || section.SectionTitle.getData()?has_content> 85 <li> 86 <a class="table-of-content-item" href="#section-${section?index}"> 87 <#if section.SectionMenuTitle?? && section.SectionMenuTitle.getData()?has_content> 88 ${section.SectionMenuTitle.getData()} 89 <#else> 90 ${section.SectionTitle.getData()} 91 </#if> 92 </a> 93 </li> 94 </#if> 95 </#list> 96 </ul> 97 </div> 98 </div> 99 </div> 100 </#if> 101 102 <section class="${(section?index == 0) ? then('overview','paragraph section'+section?index) }" > 103 <div class="section-content"> 104 105 <#if section.SectionTitle.getData()?has_content> 106 <#if section?index == 0> 107 <h2 id="section-${section?index}">${section.SectionTitle.getData()}</h2> 108 <#else> 109 <h3 id="section-${section?index}">${section.SectionTitle.getData()}</h3> 110 </#if> 111 </#if> 112 113 <#if section.SectionTextContent.getData()?has_content> 114 <div class="section-text-content">${section.SectionTextContent.getData()}</div> 115 </#if> 116 117 <#list section.AccordionGroup.getSiblings() as accord> 118 <div class="section-accordion"> 119 <@accordionSection 120 items=accord.Accordion.getSiblings() 121 /> 122 </div> 123 </#list> 124 125 <#if section.CTAContent.getData()?has_content> 126 <div class="section-cta"> 127 <@ctaSection 128 ctaData=jsonFactoryUtil.createJSONObject(section.CTAContent.getData()) 129 /> 130 </div> 131 </#if> 132 133 </div> 134 </section> 135 </#list> 136 </div> 137 <#if shouldRenderTableOfContent> 138 <div class="d-none d-lg-block col-md-3" id="sticky-sidebar"> 139 <div class="sticky-top-"> 140 <div class="position-fixed table-of-content "> 141 <span><@liferay.language key="what-is-on-this-page" /></span> 142 <ul class="list-unstyled nav flex-column flex-nowrap overflow-auto"> 143 <#list SectionSeparator.getSiblings() as section> 144 <#if section.SectionMenuTitle.getData()?has_content || section.SectionTitle.getData()?has_content> 145 <li> 146 <a class="table-of-content-item" href="#section-${section?index}"> 147 <#if section.SectionMenuTitle?? && section.SectionMenuTitle.getData()?has_content> 148 ${section.SectionMenuTitle.getData()} 149 <#else> 150 ${section.SectionTitle.getData()} 151 </#if> 152 </a> 153 </li> 154 </#if> 155 </#list> 156 </ul> 157 </div> 158 </div> 159 </div> 160 </#if> 161 </div> 162</article> 163 164<script> 165 (function () { 166 function setTableOfContentItemActive(itemId) { 167 console.log(itemId); 168 const selector = Liferay.Util.isPhone() || Liferay.Util.isTablet() 169 ? '.table-of-content-mobile .table-of-content-item' 170 : '.table-of-content .table-of-content-item'; 171 const tableOfContentItems = document.querySelectorAll(selector); 172 173 if (!tableOfContentItems) { 174 return; 175 } 176 177 tableOfContentItems.forEach(function (item) { 178 item.classList.remove('active'); 179 180 }); 181 const activeItem = document.querySelector(selector + '[href="' + itemId + '"]'); 182 activeItem.classList.add('active'); 183 184 } 185 186 const tableOfContentItems = document.querySelectorAll('.table-of-content-item'); 187 tableOfContentItems.forEach(function (item, index) { 188 if (index === 0) { 189 setTableOfContentItemActive(item.getAttribute('href')); 190 } 191 item.addEventListener('click', function (event) { 192 event.preventDefault(); 193 event.stopPropagation(); 194 const scrollTargetId = item.getAttribute('href'); 195 const scrollTarget = document.getElementById(scrollTargetId.replace('#', '')); 196 const offsetNavbarRem = getComputedStyle(document.getElementById('content')).getPropertyValue('--navbar-height'); 197 const offsetHeaderRem = getComputedStyle(document.getElementById('content')).getPropertyValue('--header-height'); 198 const documentFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize); 199 const offsetNavbar = offsetNavbarRem.trim().replace('rem', '') * documentFontSize; 200 const offsetHeader = offsetHeaderRem.trim().replace('rem', '') * documentFontSize; 201 const y = scrollTarget.offsetTop; 202 window.scroll({ 203 top: y, 204 behavior: 'smooth' 205 }); 206 207 setTableOfContentItemActive(scrollTargetId); 208 return false; 209 }) 210 }); 211 const faqItems = document.querySelectorAll('.l3-article .magellan-accordion > .panel-header'); 212 faqItems.forEach(function (item) { 213 item.addEventListener('click', function (event) { 214 item.classList.toggle('collapsed'); 215 item.parentElement.querySelector('.panel-collapse').classList.toggle('collapse'); 216 }); 217 }); 218 219 HTMLElement.prototype.oldScrollIntoView = HTMLElement.prototype.scrollIntoView; 220 HTMLElement.prototype.scrollIntoView = function () { 221 if (this.id !== "p_p_id_${themeDisplay.portletDisplay.id}_") { 222 HTMLElement.prototype.oldScrollIntoView(); 223 } 224 }; 225 226 var sections = document.querySelectorAll('.l3-article .article-content > section'); 227 sections.forEach(function (item) { 228 var content = item.querySelector('.section-content'); 229 if(content) { 230 if(content.innerHTML.trim().length == 0) { 231 item.previousElementSibling.remove(); 232 content.remove(); 233 } 234 } 235 }); 236 237 })(); 238 239</script>