The following has evaluated to null or missing:
==> formField.getValue().getString(locale) [in template "blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" at line 56, column 49]
----
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: #assign Bildnachweis = formField.getV... [in template "blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" in function "getCopyrightText" at line 56, column 25]
---- 1<#import "/blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" as common> 2 3<#assign layoutService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") /> 4<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 5<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 6<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") /> 7<#assign namespace = randomNamespace /> 8<#assign journalArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) /> 9 10<#assign 11parentLayoutPlid = layout.getParentPlid() 12parentLayout = layoutLocalService.fetchLayout(parentLayoutPlid)!"" 13parentAssetPublisherId = "" 14/> 15<#if validator.isNotNull(parentLayout)> 16 <#if parentLayout.isTypePortlet()> 17 <#assign parentLayoutTypePortlet = parentLayout.getLayoutType() /> 18 <#assign parentPortlets = parentLayoutTypePortlet.getExplicitlyAddedPortlets() /> 19 <#list parentPortlets as parentPortlet> 20 <#if parentPortlet.getRootPortletId() == "com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet"> 21 <#assign parentAssetPublisherId = parentPortlet.getPortletId() /> 22 23 <#break /> 24 </#if> 25 </#list> 26 </#if> 27</#if> 28 29<#assign topBgColorClass = "on-" + TopBgColor.getData() + "-bg" /> 30 31<article class="article" itemscope itemtype="https://schema.org/Article"> 32 <#if Slider?? && Slider.NeuerSlider?? && (Slider.NeuerSlider.Image.getData()?has_content || Slider.NeuerSlider.Youtube.getData()?has_content)> 33 <div class="slider-hero" id="slider_${namespace}"> 34 <div class="slides-list"> 35 <#list Slider.NeuerSlider.getSiblings() as curSlide> 36 37 <#if curSlide.AltTextImage?? && curSlide.AltTextImage.getData()?has_content> 38 <#assign AltText = curSlide.AltTextImage.data /> 39 </#if> 40 41 <#assign AltText = common.getAltText(curSlide.Image.data, AltText) /> 42 43 <#assign Copyright = "" /> 44 <#assign CopyrightMobile = "" /> 45 <#if (common.getCopyrightText(curSlide.Image.data)!"") != ""> 46 <#assign Copyright = common.getCopyrightTag("",curSlide.Image.data) /> 47 </#if> 48 49 50 51 <#assign hasMobileImageClass= "" /> 52 <#assign ImageMobileFocusClass= "image-focus-mobile-center" /> 53 <#if curSlide.ImageMobile?? && curSlide.ImageMobile.getData()?has_content> 54 <#assign hasMobileImageClass= "image-with-mobile-alternative" /> 55 <#if (common.getCopyrightText(curSlide.ImageMobile.data)!"") != ""> 56 <#assign CopyrightMobile = common.getCopyrightTag("",curSlide.ImageMobile.data,"","mobile") /> 57 </#if> 58 <#if curSlide.ImageMobile.ImageMobileFocus?? && curSlide.ImageMobile.ImageMobileFocus.getData()?has_content> 59 <#assign ImageMobileFocusClass= "image-focus-mobile-" + curSlide.ImageMobile.ImageMobileFocus.getData() /> 60 </#if> 61 </#if> 62 63 <#assign ImageDesktopFocusClass= "image-focus-desktop-center fooo" /> 64 <#if curSlide.Image.ImageDesktopFocus?? && curSlide.Image.ImageDesktopFocus.getData()?has_content> 65 <#assign ImageDesktopFocusClass= "image-focus-desktop-" + curSlide.Image.ImageDesktopFocus.getData()/> 66 </#if> 67 68 69 <div class="slide"> 70 <div class="slide-content"> 71 <#if (curSlide.Youtube?? && curSlide.Youtube.getData()?has_content) && (curSlide.Image?? && curSlide.Image?has_content)> 72 <#assign videoId = curSlide.Youtube.getData()/> 73 74 <#if videoId?starts_with("http")> 75 <#assign videoId = videoId?split("/")[3]> 76 </#if> 77 78 <div class="slide-content-video image-with-caption ${hasMobileImageClass} ${ImageDesktopFocusClass} ${ImageMobileFocusClass}"> 79 <a href="https://www.youtube-nocookie.com/${videoId}" target="_blank" 80 class="video-link"> 81 <img src="${common.getScaledImageURL(curSlide.Image.getData(), "bg-image-medium")}" 82 data-src="${common.getScaledImageURL(curSlide.Image.getData(), "bg-image-medium")}" 83 class="slide__image image--desktop" alt="${AltText}" loading="lazy"/> 84 <#if curSlide.ImageMobile?? && curSlide.ImageMobile.getData()?has_content> 85 <img src="${common.getScaledImageURL(curSlide.ImageMobile.getData(), "bg-image-medium")}" 86 data-src="${common.getScaledImageURL(curSlide.ImageMobile.getData(), "bg-image-medium")}" 87 class="slide__image image--mobile" alt="${AltText}" loading="lazy"/> 88 ${CopyrightMobile} 89 </#if> 90 </a> 91 ${Copyright} 92 </div> 93 <#else> 94 <div class="slide-content-image image-with-caption ${hasMobileImageClass} ${ImageDesktopFocusClass} ${ImageMobileFocusClass}"> 95 <img src="${common.getScaledImageURL(curSlide.Image.getData(), "bg-image-medium")}" 96 data-src="${common.getScaledImageURL(curSlide.Image.getData(), "bg-image-medium")}" 97 class="slide__image image--desktop" alt="${AltText}" loading="lazy" /> 98 <#if curSlide.ImageMobile?? && curSlide.ImageMobile.getData()?has_content> 99 <img src="${common.getScaledImageURL(curSlide.ImageMobile.getData(), "bg-image-medium")}" 100 data-src="${common.getScaledImageURL(curSlide.ImageMobile.getData(), "bg-image-medium")}" 101 class="slide__image image--mobile" alt="${AltText}" loading="lazy"/> 102 </#if> 103 ${Copyright} 104 </div> 105 </#if> 106 </div> 107 </div> 108 </#list> 109 </div> 110 </div> 111 </#if> 112 113 <section class="article-area article-area--${topBgColorClass}"> 114 <div class="container"> 115 <div class="row justify-content-center"> 116 <div class="col-sm-8"> 117 <nav id="breadcrumbs"> 118 <#assign preferencesMap = {"portletSetupPortletDecoratorId": "decorate-yellow-bg", "displayStyle": "ddmTemplate_BREADCRUMB-BLAUES-GUT","showPortletBreadcrumb":"true"} /> 119 120 <@liferay.breadcrumbs default_preferences = freeMarkerPortletPreferences.getPreferences(preferencesMap) /> 121 </nav> 122 </div> 123 </div> 124 <div class="row justify-content-center"> 125 <div class="col-sm-8"> 126 <h1 class="article-headline" itemprop="name">${HeadlineArticle.getData()}</h1> 127 </div> 128 </div> 129 <div class="row justify-content-center"> 130 <div class="col-sm-8"> 131 <#assign assetCategories = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.resourcePrimKey) /> 132 <#if assetCategories?? && assetCategories?size gt 0> 133 <ul class="tags"> 134 <#list assetCategories as assetCategory> 135 <#assign 136 categoryURL = portletURLFactory.create(renderRequest, parentAssetPublisherId, parentLayoutPlid, "RENDER_PHASE") 137 href = categoryURL.toString() 138 href = httpUtil.setParameter(href, "_" + parentAssetPublisherId + "_categoryId", assetCategory.getCategoryId()?string) 139 href = httpUtil.setParameter(href, "_" + parentAssetPublisherId + "_resetCur", "true") 140 /> 141 142 <li class="tag"> 143 <a href="${href}" class="no-icon">${assetCategory.getTitle(locale)}</a> 144 </li> 145 </#list> 146 </ul> 147 </#if> 148 </div> 149 </div> 150 <#if Intro?? && Intro.data?has_content> 151 <div class="row justify-content-center"> 152 <div class="col-md-8"> 153 <p class="bold">${Intro.getData()}</p> 154 </div> 155 </div> 156 </#if> 157 158 <div class="row justify-content-center"> 159 <div class="col-md-8"> 160 <div class="button-area"> 161 <button class="share-social-link btn btn-text"> 162 <span class="icon-bg icon-bg--share"></span> <span class="link-title"> <span 163 class="hide-accessible">Seite </span>Teilen </span> 164 </button> 165 <button class="btn btn-text" onclick="window.print();"> 166 <span class="icon-bg icon-bg--print"></span> <span class="link-title"> <span 167 class="hide-accessible">Seite </span>Drucken </span> 168 </button> 169 </div> 170 </div> 171 </div> 172 </div> 173 174 </section> 175 176 177 <#if WaveTop?? && WaveTopColor??> 178 <section class="article-wave-area" data-source="${WaveTop.getData()}"> 179 <section class="waves"> 180 <div class="wave wave--${WaveTop.getData()}-${WaveTopColor.getData()} v-mirrored"></div> 181 </section> 182 </section> 183 </#if> 184 185 186 187 188 189 <#if Text?? && Text.data?has_content> 190 <section class="article-text container"> 191 <div class="row justify-content-center"> 192 <div class="col-md-8"> 193 ${Text.getData()} 194 </div> 195 </div> 196 </section> 197 </#if> 198 199 <#if ImageLarge?? && ImageLarge.data?has_content> 200 201 <#assign CopyrightImageLarge= "" /> 202 <#assign CopyrightImageLargeMobile= "" /> 203 204 <#assign hasMobileImageLargeClass= "" /> 205 <#if ImageLargeMobile?? && ImageLargeMobile.getData()?has_content> 206 <#assign hasMobileImageLargeClass= "image-with-mobile-alternative" /> 207 <#if (common.getCopyrightText(ImageLargeMobile.data)!"") != ""> 208 <#assign CopyrightMobile = common.getCopyrightTag("",ImageLargeMobile.data,"","mobile") /> 209 </#if> 210 </#if> 211 212 <#if (common.getCopyrightText(ImageLarge.data)!"") != ""> 213 <#assign CopyrightImageLarge = common.getCopyrightTag("",ImageLarge.data) /> 214 </#if> 215 216 <section class="article-image-large"> 217 <section class="image-large image-with-caption ${hasMobileImageLargeClass}" id="image-large_${namespace}"> 218 <div class="image-inner"> 219 <span itemprop="image" content="${portal.getPortalURL(themeDisplay) + common.getScaledImageURL(ImageLarge.getData(), "bg-image-medium")}" /> 220 <img 221 src="${common.getScaledImageURL(ImageLarge.getData(), "bg-image-medium")}" 222 alt="${common.getAltText(ImageLarge.data)}" class="image image--desktop" loading="lazy"/> 223 <#if ImageLargeMobile?? && ImageLargeMobile.getData()?has_content> 224 <img src="${common.getScaledImageURL(ImageLarge.getData(), "bg-image-medium")}" 225 alt="${common.getAltText(ImageLarge.data)}" class="image image--mobile" loading="lazy"/> 226 ${CopyrightImageLargeMobile} 227 </#if> 228 ${CopyrightImageLarge} 229 </div> 230 </section> 231 <#if ImageCaption?? && ImageCaption.data?has_content> 232 <div class="container"> 233 <div class="row justify-content-center"> 234 <div class="col-md-8"> 235 <div class="article__image-large-caption">${ImageCaption.getData()}</div> 236 </div> 237 </div> 238 </div> 239 </#if> 240 </section> 241 </#if> 242 243 <#if TextBottom?? && TextBottom.data?has_content> 244 <section class="article-text container"> 245 <div class="row justify-content-center"> 246 <div class="col-md-8"> 247 ${TextBottom.getData()} 248 </div> 249 </div> 250 </section> 251 </#if> 252 253</article> 254 255<#if Slider?? && Slider.NeuerSlider?? && (Slider.NeuerSlider.Image.getData()?has_content || Slider.NeuerSlider.Youtube.getData()?has_content)> 256 <script> 257 window.addEventListener("load", function () { 258 function ${namespace}_updateInfo(info) { 259 for (var i = 0; i < info.navItems.length; i++) { 260 info.navItems[i].setAttribute('aria-label', 'Folie ' + (i + 1)); 261 } 262 263 info.navItems[info.navCurrentIndex].setAttribute('aria-label', 'Folie ' + (info.navCurrentIndex + 1) + ' (aktuell)'); 264 265 info.controlsContainer.setAttribute('aria-label', 'Navigationselemente'); 266 info.prevButton.setAttribute('aria-label', 'zur vorhergehenden Folie springen'); 267 info.nextButton.setAttribute('aria-label', 'zur nächsten Folie springen'); 268 info.navContainer.setAttribute('aria-label', 'Auswahl der Folien') 269 } 270 271 var slider = tns({ 272 container: '#slider_${namespace} .slides-list', 273 items: 1, 274 slideBy: 'page', 275 center: true, 276 controlsPosition: 'bottom', 277 navPosition: 'bottom', 278 touch: true, 279 mouseDrag: false, 280 freezable: true, 281 speed: 600, 282 lazyload: true, 283 arrowKeys: true, 284 lazyloadSelector: '.slide__image', 285 controlsText: ['<span class="icon-bg icon-bg--arrow1-left"></span>', '<span class="icon-bg icon-bg--arrow1-right"></span>'], 286 autoplay: true, 287 autoplayHoverPause: true, 288 autoplayPosition: 'bottom', 289 autoplayTimeout: 3000, 290 autoplayText: ["▶", "❚❚"], 291 onInit: function (info) { 292 ${namespace}_updateInfo(info); 293 294 var btn = document.querySelector('#slider_${namespace} button[data-action="stop"]'); 295 var nav = document.querySelector('#slider_${namespace} .tns-nav'); 296 297 if (btn && nav) { 298 var wrapper = document.createElement('div'); 299 wrapper.classList.add('nav-wrapper'); 300 301 nav.parentNode.insertBefore(wrapper, nav); 302 303 wrapper.appendChild(nav); 304 wrapper.appendChild(btn); 305 } 306 } 307 }); 308 slider.events.on('indexChanged', function (info) { 309 ${namespace}_updateInfo(info); 310 }); 311 }); 312 </script> 313</#if> The following has evaluated to null or missing:
==> formField.getValue().getString(locale) [in template "blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" at line 22, column 43]
----
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: #assign altTag = formField.getValue()... [in template "blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" in function "getAltText" at line 22, column 25]
---- 1<#import "/blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" as common> 2 3<#assign namespace = randomNamespace /> 4<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 5<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") /> 6 7<#function getDownloadLink content> 8 <#assign 9 dlAppService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService") 10 dlUrlHelperUtil = serviceLocator.findService("com.liferay.document.library.util.DLURLHelper") 11 json = jsonFactoryUtil.createJSONObject(content) 12 fileEntryGroupId = json.getLong("groupId") 13 fileEntryUuid = json.getString("uuid") 14 fileEntry = dlAppService.getFileEntryByUuidAndGroupId(fileEntryUuid, fileEntryGroupId) 15 > 16 <#return httpUtil.removeParameter(dlUrlHelperUtil.getDownloadURL(fileEntry, fileEntry.getLatestFileVersion(), themeDisplay, "", false, true), "download") /> 17</#function> 18 19 20<#if entries?has_content> 21 <#assign 22 parentLayoutPlid = layout.getParentPlid() 23 parentLayout = layoutLocalService.fetchLayout(parentLayoutPlid)!"" 24 parentAssetPublisherId = "" 25 /> 26 <#if validator.isNotNull(parentLayout)> 27 <#if parentLayout.isTypePortlet()> 28 <#assign parentLayoutTypePortlet = parentLayout.getLayoutType() /> 29 <#assign parentPortlets = parentLayoutTypePortlet.getExplicitlyAddedPortlets() /> 30 <#list parentPortlets as parentPortlet> 31 <#if parentPortlet.getRootPortletId() == "com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet"> 32 <#assign parentAssetPublisherId = parentPortlet.getPortletId() /> 33 34 <#break /> 35 </#if> 36 </#list> 37 </#if> 38 </#if> 39 40<#-- <#list entries as entry>--> 41<#-- <#assign assetRenderer = entry.getAssetRenderer() />--> 42 43<#-- <#if assetRenderer.getClassName()=="com.liferay.journal.model.JournalArticle">--> 44<#-- <pre>--> 45<#-- ${assetRenderer.getArticle().getContent()}--> 46<#-- </pre>--> 47<#-- </#if>--> 48<#-- </#list>--> 49 50<#-- <div style="background-color: red;height: 50px;color:white;">--> 51<#-- ###########################################--> 52<#-- </div>--> 53 54 <section class="slider-related" id="slider_${namespace}"> 55 <h2 class="headline">Das könnte Sie auch interessieren</h2> 56 57 <div class="slides-wrapper"> 58 59 <div class="slides-list"> 60 61 <#list entries as curEntry> 62 63 64 <#assign docXml = saxReaderUtil.read(curEntry.getAssetRenderer().getArticle().getContent()) /> 65 <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, curEntry) /> 66 <#assign renderer= curEntry.getAssetRenderer()/> 67 68 <#if assetLinkBehavior != "showFullContent"> 69 <#assign viewURL = renderer.getURLViewInContext(renderRequest, renderResponse, viewURL) /> 70 </#if> 71 72 73 74 <#assign 75 linkTarget = "" 76 linkHref= viewURL 77 headline = docXml.valueOf("//dynamic-element[@name='HeadlineArticle']/dynamic-content/text()") 78 imgUrlExisting = docXml.valueOf("//dynamic-element[@name='ExistingSlider']//dynamic-element[@name='Image']/dynamic-content/text()") 79 imgUrlNew = docXml.valueOf("//dynamic-element[@name='NeuerSlider']//dynamic-element[@name='Image']/dynamic-content/text()") 80 imgLarge = docXml.valueOf("//dynamic-element[@name='ImageLarge']/dynamic-content/text()") 81 imgUrl = "" 82 altText = "" 83 Copyright = "" 84 /> 85 86 <#if imgUrlNew!=""> 87 <#assign 88 imgUrl = getDownloadLink(imgUrlNew) + "&imageThumbnail=1" 89 altText = common.getAltText(imgUrlNew) 90 Copyright = common.getCopyrightTag("",imgUrlNew) 91 /> 92 93 <#elseif imgUrlExisting!=""> 94 <#assign 95 imgUrl = getDownloadLink(imgUrlExisting) + "&imageThumbnail=1" 96 altText = common.getAltText(imgUrlExisting) 97 Copyright = common.getCopyrightTag("",imgUrlExisting) 98 /> 99 <#elseif imgLarge!=""> 100 <#assign 101 imgUrl = getDownloadLink(imgLarge) + "&imageThumbnail=1" 102 altText = common.getAltText(imgLarge) 103 Copyright = common.getCopyrightTag("",imgLarge) 104 /> 105 </#if> 106 107 <div class="slide" role="group" aria-label="Folie ${curEntry?index + 1} von ${entries?size}"> 108 <div class="slide-content"> 109 <div class="slide-content-image image-with-caption"> 110 <a href="${linkHref}" ${linkTarget}> 111 <#if imgUrl!=""> 112 <img src="${imgUrl}" data-src="${imgUrl}" class="slide__image" alt="${altText}" loading="lazy" /> 113 <#else> 114 <img src="/o/blaues-gut-theme/images/no-image_blaues-gut.png" data-src="/o/blaues-gut-theme/images/logo_bg_mobile.svg" 115 class="slide__image no-image" alt=""/> 116 </#if> 117 </a> 118 ${Copyright} 119 </div> 120 121 <#assign assetCategories = assetCategoryLocalService.getAssetEntryAssetCategories(curEntry.entryId) /> 122 <#if assetCategories?? && assetCategories?size gt 0> 123 <ul class="tags"> 124 <#list assetCategories as assetCategory> 125 <#assign 126 categoryURL = portletURLFactory.create(renderRequest, parentAssetPublisherId, parentLayoutPlid, "RENDER_PHASE") 127 href = categoryURL.toString() 128 href = httpUtil.setParameter(href, "_" + parentAssetPublisherId + "_categoryId", assetCategory.getCategoryId()?string) 129 href = httpUtil.setParameter(href, "_" + parentAssetPublisherId + "_resetCur", "true") 130 /> 131 132 133 <li class="tag"> 134 <a href="${href}">${assetCategory.getTitle(locale)}</a> 135 </li> 136 </#list> 137 </ul> 138 </#if> 139 <h3 class="title"><a href="${linkHref}" ${linkTarget}>${headline}</a></h3> 140 </div> 141 </div> 142 </#list> 143 </div> 144 </div> 145 </section> 146 147 <script> 148 window.addEventListener("load", function () { 149 function ${namespace}_updateInfo(info) { 150 if (info.navItems) { 151 for (var i = 0; i < info.navItems.length; i++) { 152 info.navItems[i].setAttribute('aria-label', 'Folie ' + (i + 1)); 153 } 154 155 info.navItems[info.navCurrentIndex].setAttribute('aria-label', 'Folie ' + (info.navCurrentIndex + 1) + ' (aktuell)'); 156 } 157 158 if (info.controlsContainer) { 159 info.controlsContainer.setAttribute('aria-label', 'Navigationselemente'); 160 } 161 if (info.prevButton) { 162 info.prevButton.setAttribute('aria-label', 'zur vorhergehenden Folie springen'); 163 } 164 if (info.nextButton) { 165 info.nextButton.setAttribute('aria-label', 'zur nächsten Folie springen'); 166 } 167 if (info.navContainer) { 168 info.navContainer.setAttribute('aria-label', 'Auswahl der Folien') 169 } 170 } 171 172 var slider = tns({ 173 container: '#slider_${namespace} .slides-list', 174 items: 1.5, 175 slideBy: 'page', 176 lazyload: true, 177 lazyloadSelector: '.slide__image', 178 loop: false, 179 controls: false, 180 nav: false, 181 controlsPosition: 'bottom', 182 navPosition: 'bottom', 183 touch: true, 184 mouseDrag: true, 185 freezable: true, 186 speed: 600, 187 arrowKeys: true, 188 edgePadding: 16, 189 fixedWidth: 300, 190 // viewportMax: 1600, 191 controlsText: ['<span class="icon-bg icon-bg--arrow2-left"></span>', '<span class="icon-bg icon-bg--arrow2-right"></span>'], 192 responsive: { 193 768: { 194 items: 1.5, 195 edgePadding: 0, 196 gutter: 0 197 }, 198 900: { 199 items: 3, 200 edgePadding: 0 201 }, 202 1280: { 203 items: 4, 204 controls: true 205 }, 206 1600: { 207 controls: true, 208 items: 5 209 } 210 }, 211 onInit: function (info) { 212 ${namespace}_updateInfo(info); 213 } 214 }); 215 slider.events.on('indexChanged', function(info) { 216 ${namespace}_updateInfo(info); 217 }); 218 }); 219 </script> 220</#if> 