Article

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>