An error occurred while processing the template.
The following has evaluated to null or missing: ==> articleWrapper [in template "10154#10192#175344557" at line 11, column 28] ---- 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: ${articleWrapper.getArticleType().get... [in template "10154#10192#175344557" at line 11, column 26] ----
1<link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css" />
2
3<#assign swipers = []>
4<#assign imageIndex = 0>
5<#assign isSignedIn = themeDisplay.isSignedIn()>
6
7<#if request.getAttribute("REDIRECTED_ARTICLE_PARAMS")?has_content && request.getAttribute("REDIRECTED_ARTICLE_PARAMS")?contains("X4OeKZbUgDJCqjFSUukdG6bE7roP5A6P")>
8 <#assign isSignedIn = true>
9</#if>
10
11<div class="article-type-${articleWrapper.getArticleType().getId()}" style="background-image: unset">
12<div class="forum-section-container forum-article-header">
13 <div class="forum-background-image-container" >
14 <div class="forum-background-image"
15 <#if articleWrapper.getArticleType().getId() != 3>
16 style="background-image: url(${articleWrapper.getArticleImage().getImage().getPreviewUrl()});"
17 </#if>
18 ></div>
19 </div>
20
21 <#if isSignedIn && articleWrapper.getArticleType().getId() != 2>
22 <div class="mdc-touch-target-wrapper">
23 <button style="width: 64px; height: 64px;" class="mdc-fab mdc-fab--mini mdc-fab--touch forum-drawer-button">
24 <div class="mdc-fab__ripple"></div>
25 <div class="mdc-fab__focus-ring"></div>
26 <span class="material-icons mdc-fab__icon">apps</span>
27 <div class="mdc-fab__touch"></div>
28 </button>
29 </div>
30 </#if>
31 <div class="forum-section-container__inner article-type-${articleWrapper.getArticleType().getId()}">
32 <div class="forum-article-topper">
33 <div class="forum-article-type">
34 ${languageUtil.get(locale, "t." + articleWrapper.getArticleType().getId())}
35 </div>
36 <div class="forum-article-state" style="display: none">
37 <span class="material-icons">
38 star
39 </span>
40 <span>Saved</span>
41 </div>
42 </div>
43
44
45 <div class="forum-article-information">
46
47
48 <#if articleWrapper.getArticleType().getId() == 3>
49 <div class="forum-article-icon">
50 <span class="material-icons">
51 forum
52 </span>
53 </div>
54 </#if>
55
56 <div class="forum-article-information__body">
57 <div class="forum-article-dates">${articleWrapper.getPublicationDate().getDisplay()} // ${languageUtil.get(locale, "ui.min.read")?replace("XX", articleWrapper.getReadMinutes())}</div>
58 <div class="forum-article-title">${articleWrapper.getTitle()}</div>
59
60 <div class="forum-article-authors">
61 <#list articleWrapper.getAuthorList() as author>
62 <div class="forum-article-author">
63
64 <div class="forum-avatar-icon-container">
65 <a style="text-decoration: none; color: #1A1A1C;" title="${author.getFirstName()} ${author.getLastName()}" href="/authors/-/about/${author.getPath()}">
66 <div class="forum-avatar-icon" style="background-image: url(${author.getImageUrl()})"></div>
67 </a>
68 </div>
69 <a style="text-decoration: none; color: #1A1A1C;" title="${author.getFirstName()} ${author.getLastName()}" href="/authors/-/about/${author.getPath()}">
70 <div class="forum-avatar-name-container">
71
72 <div class="forum-avatar-name">
73 ${author.getFirstName()} ${author.getLastName()}
74 </div>
75
76 <div class="forum-avatar-social">
77 <#if author.getFacebookUrl()?has_content>
78 <div>
79 <a href="${author.getFacebookUrl()}" target="_blank" rel="noopener,noreferrer">
80 <svg class="forum-avatar-social-icon">
81 <use xlink:href="/o/iti-forum-implantologicum-theme/images/iti-footer-icons.svg#facebook"></use>
82 </svg>
83 </a>
84 </div>
85 </#if>
86 <#if author.getInstagramUrl()?has_content>
87 <div>
88 <a href="${author.getInstagramUrl()}" target="_blank" rel="noopener,noreferrer">
89 <svg class="forum-avatar-social-icon">
90 <use xlink:href="/o/iti-forum-implantologicum-theme/images/iti-footer-icons.svg#instagram"></use>
91 </svg>
92 </a>
93 </div>
94 </#if>
95
96 <#if author.getLinkedinUrl()?has_content>
97 <div>
98 <a href="${author.getLinkedinUrl()}" target="_blank" rel="noopener,noreferrer">
99 <svg class="forum-avatar-social-icon">
100 <use xlink:href="/o/iti-forum-implantologicum-theme/images/iti-footer-icons.svg#linkedin"></use>
101 </svg>
102 </a>
103 </div>
104 </#if>
105 <#if author.getTwitterUrl()?has_content>
106 <div>
107 <a href="${author.getTwitterUrl()}" target="_blank" rel="noopener,noreferrer">
108 <svg class="forum-avatar-social-icon">
109 <use xlink:href="/o/iti-forum-implantologicum-theme/images/iti-footer-icons.svg#twitter"></use>
110 </svg>
111 </a>
112 </div>
113 </#if>
114 </div>
115 </a>
116 </div>
117
118 </div>
119 </#list>
120
121 </div>
122
123
124
125 <div class="forum-article-endnote">
126
127
128 <#if articleWrapper.getDoi()?has_content>
129 <div class="forum-article-doi">DOI: <a style="color: #a11761; text-decoration: none" href="https://doi.org/${articleWrapper.getDoi()}">${articleWrapper.getDoi()}</a></div>
130 </#if>
131 <#if articleWrapper.getArticleType().getId() == 1>
132 <div class="forum-article-export">
133 <#if isSignedIn>
134 <a href="/o/iti-forum-implantologicum/articles/${articleWrapper.getId()}/endnote?languageId=en_US"
135 style="color: #a11761; text-decoration: none; display: flex; align-items: center;"
136 >
137 <span class="material-icons">
138 cloud_download
139 </span>
140 <span>Endnote Export</span>
141 </a>
142 </#if>
143 </div>
144 </#if>
145 </div>
146 <#if articleWrapper.getKeywordList()?size gt 0>
147 <div class="forum-article-tags" style="border-top: 1px solid #b3aba8; padding-top: 0.5em; margin-top: 0.5em;">
148 <#list articleWrapper.getKeywordList() as keyword>
149 <span>${keyword}</span>
150 </#list>
151 </div>
152 </#if>
153 </div>
154 </div>
155 </div>
156</div>
157
158
159<#assign chapters = articleWrapper.getChapterList() />
160
161<#list chapters as chapter>
162
163 <#assign prev = chapter?index - 1 />
164 <#assign next = chapter?index + 1 />
165
166 <#assign chapterTypeId = chapter.getChapterType().getId() />
167
168 <#if !isSignedIn && chapter?index gt 1>
169 <#break>
170 </#if>
171
172 <!-- Login -->
173 <#if !isSignedIn && chapter?index gt 0>
174 <div class="forum-section-container__inner" style="position: relative;">
175 <div class="forum-article__login">
176 <div class="forum-article__login-inner">
177 <form
178 action="${loginUrl}"
179 autocomplete="on"
180 method="post"
181 name="loginForm"
182 >
183
184 <div class="forum-article__login-title">Login</div>
185 <div class="forum-article__login-byline">Log in with your ITI account</div>
186 <div>
187 <label
188 class="mdc-text-field mdc-text-field--outlined"
189 >
190 <span class="mdc-notched-outline">
191 <span class="mdc-notched-outline__leading"></span>
192 <span class="mdc-notched-outline__notch">
193 <span
194 class="mdc-floating-label"
195 id="login-label-id"
196 >Email</span
197 >
198 </span>
199 <span class="mdc-notched-outline__trailing"></span>
200 </span>
201 <input
202 id="${nameSpace}login"
203 name="${nameSpace}login"
204 type="email"
205 autocomplete="current-email"
206 class="mdc-text-field__input"
207 aria-labelledby="login-label-id"
208 required
209
210 />
211 </label>
212 </div>
213
214
215 <div>
216 <label class="mdc-text-field mdc-text-field--outlined">
217 <span class="mdc-notched-outline">
218 <span class="mdc-notched-outline__leading"></span>
219 <span class="mdc-notched-outline__notch">
220 <span class="mdc-floating-label" id="password-label-id">Password</span>
221 </span>
222 <span class="mdc-notched-outline__trailing"></span>
223 </span>
224 <input
225 id="${nameSpace}password"
226 name="${nameSpace}password"
227 type="password"
228 class="mdc-text-field__input"
229 autocomplete="current-password"
230 aria-labelledby="password-label-id"
231 required
232 milength="8"
233
234 />
235 </label>
236
237 <div>
238
239 <input type="hidden" id="${nameSpace}redirect"
240 name="${nameSpace}redirect" value="${redirectUrl}" />
241 </div>
242 </div>
243
244
245 <div>
246 <button class="mdc-button mdc-button--raised" type="submit">
247 <span class="mdc-button__ripple"></span>
248 <span class="mdc-button__focus-ring"></span>
249 <span class="mdc-button__label" style="text-transform: none; font-weight: 600;">Sign in</span>
250 </button>
251 </div>
252
253 <div>
254 <button class="mdc-button" type="button" onclick="window.location.href='https://www.iti.org/registration#forum';">
255 <span class="mdc-button__ripple"></span>
256 <span class="mdc-button__focus-ring"></span>
257 <span class="mdc-button__label" style="text-transform: none; font-weight: 600;">Create a free account</span>
258 </button>
259 </div>
260 </form>
261 </div>
262 </div>
263 </div>
264 </#if>
265
266 <!-- Start chapter -->
267 <div class="forum-article-chapter__wrapper <#if !isSignedIn && chapter?index gt 0>forum-article-chapter__wrapper-blur</#if>">
268
269 <!-- Chapter header -->
270<div class="forum-section-container forum-article-chapter__header forum-article-chapter__header-${chapterTypeId}">
271 <div id="cp${chapter?index}" class="forum-article-anchor" ></div>
272 <div class="forum-section-container__inner">
273 <div>${chapter.getTitle()} </div>
274 <div style="display: flex">
275 <#if chapter?index gt 0 && isSignedIn>
276 <button class="mdc-icon-button material-icons" onclick="document.smoothScrollTo('#cp${prev}')">
277 <div class="mdc-icon-button__ripple"></div>
278 <span class="mdc-icon-button__focus-ring"></span>
279 skip_previous
280 </button>
281 </#if>
282 <#if chapter?index lt chapters?size - 1 && isSignedIn>
283 <button class="mdc-icon-button material-icons" onclick="document.smoothScrollTo('#cp${next}')">
284 <div class="mdc-icon-button__ripple"></div>
285 <span class="mdc-icon-button__focus-ring"></span>
286 skip_next
287 </button>
288 </#if>
289 </div>
290 </div>
291</div>
292
293
294<#if chapterTypeId == 3>
295<div class="forum-section-container forum-article-chapter__type-${chapterTypeId}">
296 <div class="forum-section-container__inner">
297</#if>
298
299<#list chapter.getParagraphList()as paragraph>
300
301<#assign images = paragraph.getImageList() />
302<#assign type = paragraph.getParagraphType().getName() />
303<#assign typeId = paragraph.getParagraphType().getId() />
304<#assign paragraphId = paragraph.getId() />
305
306<#if chapterTypeId == 3>
307 <div class="forum-article-paragraph__body">
308 <div>${paragraph.getTitle()}</div>
309 <div>${paragraph.getText()}</div>
310 </div>
311<#else>
312 <#if images?size gt 1>
313 <#assign typeId = 99 />
314 </#if>
315<div class="forum-section-container forum-article-chapter__paragraph
316 forum-article-chapter__type-${chapter.getChapterType().getId()} forum-article-paragraph__type-${typeId}">
317 <div class="forum-section-container__inner">
318 <div class="forum-article-paragraph__body">
319 <#if paragraph.getTitle()?has_content>
320 <div class="forum-article-paragraph__body-title">${paragraph.getTitle()}</div>
321 </#if>
322 <div class="forum-article-paragraph__body-text">${paragraph.getText(true)}</div>
323 </div>
324
325 <#if images?size gt 0>
326 <div class="forum-article-paragraph__gallery <#if images?size == 1>forum-article-paragraph__gallery-single</#if>">
327
328 <div class="forum-article-paragraph__images">
329
330 <div id="scroll">
331 <span id="anchor"></span>
332 </div>
333 <#if images?size gt 1>
334 <div class="previous-image" style="display: none">
335 <span class="material-icons" style="font-size: 3em; margin-left: -10px;">navigate_before</span>
336 </div>
337 <div class="next-image" style="display: none" >
338 <span class="material-icons" style="font-size: 3em; margin-left: -10px;">navigate_next</span>
339 </div>
340 </#if>
341 <div class="forum-article-paragraph__images-wrapper" style="transition: all 1s;" data-paragraph="${paragraphId}">
342 <#list images as image>
343 <div class="forum-article-image-container" data-group="${paragraphId}" data-image="${image.getId()}" data-width="0"
344 <#if image?index == 0>
345 style="opacity: 1"
346 </#if>
347 >
348
349
350 <div class="forum-article-image__image" style="position: relative;" >
351 <span class="material-icons"
352 data-action="gallery"
353 data-url=""
354 data-id="${imageIndex}"
355 data-color=""
356 data-target=""
357 style="background-color: #61616196;"
358 >open_in_full</span>
359 <div class="forum-article-image__src">
360
361 <img src="${image.getInlineURL()}">
362 <#assign imageIndex = imageIndex + 1>
363 </div>
364
365 </div>
366
367 </div>
368 </#list>
369 </div>
370
371 </div>
372 <div class="forum-article-paragraph__images-caption" data-paragraph="${paragraphId}">
373 <#list images as image>
374 <div class="image-caption" data-group="${paragraphId}" data-image="${image.getId()}"
375 <#if image?index == 0>
376 style="display: block"
377 </#if>
378 >
379 ${image.getCaption()}: ${image.getDescription()}
380 </div>
381 </#list>
382 </div>
383 <div class="forum-article-paragraph__images-group forum-article-paragraph__images-nav" style="background-color: transparent; color: #2f2f2f; text-align: center; padding: 0.5em;">
384 <#if images?size gt 1>
385 <#list images as image>
386 <span class="forum-article-caption-item" style="padding: 5px; font-weight: 600; cursor: pointer; display: inline-block;
387 <#if image?index == 0>border-bottom: 2px solid #a11761;</#if>
388 "
389 data-group="${paragraphId}" data-image="${image.getId()}"
390 >${image.getCaption()}</span>
391 </#list>
392 </#if>
393 </div>
394 </div>
395 </#if>
396 </div>
397</div>
398</#if>
399
400</#list>
401
402<#if chapterTypeId == 3>
403 </div>
404</div>
405</#if>
406
407 <!-- End chapter -->
408 </div>
409
410
411</#list>
412
413
414</div>
415
416<!-- Swiper JS -->
417<script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>
418
419<!-- Initialize Swiper -->
420<!--
421<script>
422 let swiper = null;
423 <#list swipers as swiper>
424 swiper = new Swiper(".swiper-${swiper}", {
425
426 scrollbar: {
427 el: ".swiper-scrollbar",
428 hide: true,
429 },
430 navigation: {
431 nextEl: ".swiper-button-next",
432 prevEl: ".swiper-button-prev",
433 },
434 });
435 </#list>
436</script>
437-->
438
439<script>
440
441 document.title = '${articleWrapper.getTitle()?js_string}';
442
443 document.addEventListener("forumloaded", function(e) {
444 document.lazyRemoteComponent(
445 'ContentPanel.1.0.32',
446 '#drawer_app',
447 {
448 data : {
449 articleId: ${articleWrapper.getId()} ,
450 languageId: '${articleWrapper.getLanguageId()}',
451 userId: ${themeDisplay.getUserId()} ,
452 userName: '${themeDisplay.getUser().getFirstName()} ${themeDisplay.getUser().getLastName()}' ,
453 userEmail: '${themeDisplay.getUser().getEmailAddress()}',
454 items: [
455 <#list chapters as chapter>
456 '${chapter.getTitle()?js_string}',
457 </#list>
458 ]
459 }
460 },
461 true
462 );
463 document.resizeVideo(".forum-article-paragraph__type-5 .forum-article-paragraph__body .ql-video");
464 });
465
466 window.addEventListener("resize", (event) => {
467
468 document.resizeVideo(".forum-article-paragraph__type-5 .forum-article-paragraph__body .ql-video");
469 });
470
471 function _w(width, selector) {
472 [].slice.call(document.querySelectorAll(selector)).forEach(function (ele){
473 ele.style.width = width + "px";
474 ele.dataset.width = width;
475 });
476 }
477
478
479 function _s(ele, dataset) {
480
481 let wrapper = ele.parentNode;
482
483 if(wrapper) {
484
485 let _width = 0;
486
487 if(wrapper.dataset.maxWidth) {
488
489 _rest = (wrapper.dataset.maxWidth - dataset.width) / 2;
490 _width = dataset.left - _rest;
491 /*
492 let m = wrapper.dataset.width - width;
493 if(m < wrapper.dataset.maxWidth) {
494 _width = wrapper.dataset.width - wrapper.dataset.maxWidth;
495 }
496 */
497 }
498
499 let s = _width > 0 ? "-" + (_width) + "px" : "0px";
500 wrapper.style.marginLeft = s;
501 }
502
503 }
504
505 function _clickImage(paragraph, image, caption) {
506 [].slice.call(document.querySelectorAll(".image-caption")).forEach(function (ele){
507
508 if(ele.dataset.group == paragraph) {
509 ele.style.display = ele.dataset.image == image ? "block" : "none";
510 }
511
512 });
513
514 [].slice.call(document.querySelectorAll(".forum-article-image-container")).forEach(function (ele){
515
516 if(ele.dataset.group == paragraph) {
517 if(ele.dataset.image == image) {
518 ele.style.opacity = "1";
519 _s(ele, ele.dataset);
520 } else {
521 ele.style.opacity = ".4";
522 }
523
524 }
525
526 });
527
528 if(caption) {
529
530 [].slice.call(caption.parentNode.querySelectorAll(".forum-article-caption-item")).forEach(function (ele){
531 ele.style.borderBottom = "unset";
532 });
533
534 caption.style.borderBottom = "2px solid #a11761";
535 }
536 }
537
538
539 Promise.all(Array.from(document.images).filter(img => !img.complete).map(img => new Promise(resolve => { img.onload = img.onerror = resolve; }))).then(() => {
540 initGalleries();
541 });
542
543
544 function initGalleries() {
545 // Mini galleries caption
546 [].slice
547 .call(document.querySelectorAll(".forum-article-image-container"))
548 .forEach(function (ele) {
549 ele.addEventListener("click", (event) => {
550 if (ele.dataset.group && ele.dataset.image) {
551 _clickImage(ele.dataset.group, ele.dataset.image)
552 }
553
554 });
555 });
556
557 [].slice
558 .call(document.querySelectorAll(".forum-article-caption-item"))
559 .forEach(function (ele) {
560 ele.addEventListener("click", (event) => {
561 if (ele.dataset.group && ele.dataset.image) {
562 _clickImage(ele.dataset.group, ele.dataset.image, ele)
563 }
564
565 });
566 });
567
568
569 // Mini galleries
570 [].slice
571 .call(document.querySelectorAll(".forum-article-paragraph__images-wrapper"))
572 .forEach(function (ele) {
573 let w = 0;
574 let c = 0;
575 let m = 0;
576
577 if(ele.parentNode) {
578 m = ele.parentNode.getBoundingClientRect().width;
579 }
580 ele.setAttribute('data-max-width', m);
581
582 [].slice.call(ele.children).forEach(
583 function (cld){
584 let rect = cld.getBoundingClientRect();
585 cld.setAttribute('data-left', w);
586 cld.setAttribute('data-width', rect.width);
587 w += rect.width;
588 c++;
589 });
590
591 if(ele.dataset.paragraph) {
592 let s = '[data-paragraph="' + ele.dataset.paragraph + '"]';
593 if(c > 1) { _w(w, s) };
594 }
595 });
596 }
597
598</script>
599
600<!-- Gallery -->
601
602<style>
603#lg-download-1 {
604 display: none;
605}
606.lg-counter {
607 display: none;
608}
609.lg-backdrop {
610 background-color: #1a1a1c;
611}
612.lg-sub-html {
613 background-color: #1a1a1c;
614}
615
616.lg-outer .lg-thumb-item.active, .lg-outer .lg-thumb-item:hover {
617 border-color: #49afad;
618}
619
620
621
622</style>
623
624
625<div id="lightgallery" style="height: 0px; overflow: hidden">
626<#list chapters as chapter>
627<#list chapter.getParagraphList()as paragraph>
628<#assign images = paragraph.getImageList() />
629<#list images as image>
630 <a href="${image.getLargeURL()}" >
631 <img alt="${image.getCaption()}: ${image.getDescription()}" src="${image.getInlineURL()}" />
632 </a>
633</#list>
634</#list>
635</#list>
636</div>
637
638
639
640<script type="text/javascript">
641 document.galleryPlugin = lightGallery(document.getElementById('lightgallery'), {
642 plugins: [lgZoom, lgThumbnail],
643 licenseKey: 'CF14DEF9-8CC94134-BDB1313C-19B27941',
644 speed: 500,
645 mobileSettings: { controls: false, showCloseIcon: true, download: false }
646 });
647</script>