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>