Tappe
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> eventDate [in template "71432351086739#20119#43350" at line 9, column 42]
----
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: ${eventDate} [in template "71432351086739#20119#43350" at line 9, column 40]
----
1<#assign Data_Data = getterUtil.getString(Data.getData())>
2
3<#if validator.isNotNull(Data_Data)>
4 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
5
6 <#assign eventDate = dateUtil.getDate(Data_DateObj, "yyyy", locale)>
7</#if>
8
9<div class="item-tappe" data-timeline="${eventDate}" id="tappa-${.vars['reserved-article-id'].data}">
10 <div class="item-tappe__bubble">
11 <div class="item-tappe__dot"></div>
12 <div class="item-tappe__wrapper">
13 <div class="item-tappe__left">
14 <figure class="item-tappe__figure">
15 <#if (Immagine.getData())?? && Immagine.getData() != "">
16 <img class="item-tappe__img" alt="${Immagine.getAttribute("alt")}" data-fileentryid="${Immagine.getAttribute("fileEntryId")}" src="${Immagine.getData()}" />
17 </#if>
18 </figure>
19 <#if validator.isNotNull(Data_Data)>
20 <div class="item-tappe__date text-uppercase">
21 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", Data_Data, locale)>
22 ${dateUtil.getDate(Data_DateObj, "dd MMM yyyy", locale)}
23 </div>
24 </#if>
25
26 </div>
27 <div class="item-tappe__right">
28 <h6 class="item-tappe__title">
29 <#if (Titolo.getData())??>
30 ${Titolo.getData()}
31 </#if>
32 </h6>
33 <#if (Descrizione.getData())??>
34 <#assign desc = Descrizione.getData() />
35 <#assign descLenght = desc?length />
36 <div class="item-tappe__description ellipsed-description" data-article="${.vars['reserved-article-id'].data}">
37 <div class="short">
38 ${stringUtil.shorten(htmlUtil.stripHtml(desc), 140)}
39 </div>
40 <div class="full d-none">
41 ${Descrizione.getData()}
42 </div>
43 </div>
44 <#if descLenght > 140 >
45 <div class="item-tappe__read-more" data-article="${.vars['reserved-article-id'].data}">
46 <div class="read-more">
47 <span class="read-more__label">Più dettagli</span>
48 <i class="icon-angle-down"></i>
49 </div>
50 <div class="read-more-open d-none">
51 <span class="read-more__label">Meno dettagli</span>
52 <i class="icon-angle-up"></i>
53 </div>
54 </div>
55 </#if>
56 </#if>
57 </div>
58 </div>
59 </div>
60</div>
61
62<#if Descrizione.getData() !=''>
63 <script>
64 AUI().use('aui-base', function(A) {
65 A.ready(function() {
66 var tappa = A.one('#tappa-${.vars['reserved-article-id'].data}');
67 var button = tappa.one('.item-tappe__read-more');
68 var description = tappa.one('.item-tappe__description');
69 var descriptionFull = description.one('.full');
70 var descriptionShort = description.one('.short');
71 var buttonRead = button.one('.read-more');
72 var readmore = tappa.one('.read-more');
73 var readmoreOpen = tappa.one('.read-more-open');
74 button.on('click', function(event){
75 buttonRead.toggleClass('open');
76 description.toggleClass('ellipsed-description');
77 descriptionFull.toggleClass('d-none');
78 descriptionShort.toggleClass('d-none');
79 readmore.toggleClass('d-none');
80 readmoreOpen.toggleClass('d-none');
81 });
82 });
83 });
84 </script>
85</#if>
86
87
88
89<style>
90.justify-content-end .item-tappe {
91 display: flex;
92 justify-content: flex-end;
93}
94
95.item-tappe__bubble{
96 width: calc(100% - 45px);
97 position: relative;
98 padding: 30px;
99 border-radius: 30px;
100 background-color: #eee;
101}
102
103.item-tappe__bubble:before {
104 content: "";
105 position: absolute;
106 width: 42px;
107 height: 42px;
108 left: calc(100% - 30px);
109 top: 25px;
110 background: #eee;
111 border-radius: 3px;
112 transform: rotate(45deg);
113 z-index: 1;
114}
115
116.justify-content-end .item-tappe__bubble:before {
117 left: unset;
118 right: calc(100% - 27px);
119}
120
121.item-tappe__dot{
122 position: absolute;
123 height: 32px;
124 width: 32px;
125 left: calc(100% + 30px);
126 background: var(--blue);
127 border: 6px solid #fff;
128 box-shadow: 2px 10px 16px rgba(0,0,0,0.17);
129 border-radius: 100%;
130 z-index: 1;
131}
132
133.justify-content-end .item-tappe__dot {
134 left: unset;
135 right: calc(100% + 28px);
136}
137
138.item-tappe__wrapper {
139 display: flex;
140 z-index: 1;
141 position: relative;
142}
143
144.item-tappe__left {
145 flex: 1 0 auto;
146}
147
148figure {
149 margin: 0 !important;
150}
151
152.item-tappe__figure {
153 display: inline-block;
154 max-width: 160px;
155 width: 100%;
156 height: auto;
157}
158
159.item-tappe__img {
160 width: 100%;
161 height: auto;
162 border-radius: 27px;
163}
164
165.item-tappe__date {
166 text-align: center;
167 padding-top: 14px;
168 color: var(--blue);
169 font-weight: 700;
170 font-size: 18px;
171 line-height: 27px;
172}
173
174.item-tappe__right {
175 padding-left: 30px;
176}
177
178.item-tappe__title {
179 font-weight: 700;
180 font-size: 18px;
181 line-height: 27px;
182 color: var(--dark-gray);
183 padding-bottom: 10px;
184}
185
186.item-tappe__description {
187 padding-left: 16px;
188 position: relative;
189}
190
191.item-tappe__description:after {
192 content: "";
193 position: absolute;
194 background-color: var(--blue);
195 top: 7px;
196 left: 0;
197 width: 13px;
198 height: 5px;
199}
200
201.item-tappe__date {
202 text-align: center;
203 padding-top: 14px;
204 color: var(--blue);
205 font-weight: 700;
206 font-size: 18px;
207 line-height: 27px;
208}
209
210.item-tappe__read-more {
211 text-align: right;
212}
213
214.item-tappe .read-more {
215 display: inline-block;
216 color: var(--blue);
217 cursor: pointer;
218}
219
220.read-more-open{
221 display: inline-block;
222 color: var(--blue);
223 cursor: pointer;
224}
225.item-tappe .read-more__label {
226 font-weight: 700;
227 font-size: 14px;
228 line-height: 21px;
229 padding-right: 5px;
230}
231
232
233
234/*
235.item-tappe .read-more__icon {
236 transform: scale(-1);
237 display: inline-block;
238 font-size: 11px;
239}
240*/
241
242.icon-angle-down {
243 font-size: 1.2em;
244 color: var(--blue);
245 /*transition: transform 0.3s ease; */
246}
247
248.read-more.open .icon-angle-down {
249 transform: rotate(0deg);
250}
251
252.read-more:not(.open) .icon-angle-down {
253 transform: rotate(180deg);
254}
255
256
257
258
259
260
261@media (max-width: 1024px) {
262
263 /* Modifica del layout del wrapper */
264 .item-tappe__wrapper {
265 display: flex;
266 flex-direction: column; /* Cambiato per adattarsi meglio ai dispositivi mobili */
267 z-index: 1;
268 position: relative;
269 }
270
271 /* Gestione dei titoli */
272 .item-tappe__title {
273 font-size: 16px;
274 line-height: 24px;
275 padding-bottom: 8px;
276 }
277
278.item-tappe__figure {
279 display: none;
280 max-width: 160px;
281 width: 100%;
282 height: 0;
283}
284 /* Gestione della descrizione */
285 .item-tappe__description {
286 padding-left: 8px;
287 font-size: 14px;
288 }
289
290 /* Modifica della data */
291 .item-tappe__date {
292 font-size: 16px;
293 }
294
295 /* Modifica dei pulsanti "Read more" */
296 .item-tappe__read-more {
297 text-align: left;
298 }
299
300 .item-tappe__left {
301 flex: 0 1 auto; /* Evita che l'elemento si espanda */
302 height: auto; /* L'altezza si adatta al contenuto */
303 padding-top: 8px; /* Riduce il padding */
304 padding-bottom: 8px; /* Riduce il padding */
305 }
306
307 .read-more__label {
308 font-size: 14px;
309 }
310
311 /* Rimuovi la parte che non serve per i dispositivi mobili */
312 .item-tappe__figure {
313 max-width: 120px;
314 }
315
316 /* Contenitore con flex-end per allineamento */
317 .justify-content-end .item-tappe__bubble:before {
318 left: unset;
319 right: 25px;
320 }
321 .item-tappe__date {
322 text-align: center;
323 padding-top: 0;
324 color: var(--blue);
325 font-weight: 700;
326 font-size: 18px;
327}
328
329
330 /* Modifica del comportamento del dot per il mobile */
331 .justify-content-end .item-tappe__dot {
332 left: unset;
333 right: 25px;
334 }
335
336 /* Modifica della data nel layout mobile */
337 .item-tappe__date {
338 text-align: center;
339 font-size: 16px;
340 }
341}
342
343</style>