An error occurred while processing the template.
The following has evaluated to null or missing: ==> image_snapshot [in template "20097#20123#145718" at line 167, column 76] ---- 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: ${image_snapshot.getData()} [in template "20097#20123#145718" at line 167, column 74] ----
1<#-- Retrieve the published date meta data field of the web content -->
2<#assign displaydate = .vars['reserved-article-display-date'].data>
3<#-- Save the original page locale for later -->
4<#assign originalLocale = .locale>
5
6<#-- Set the page locale to the portals default locale -->
7<#setting locale = localeUtil.getDefault()>
8
9<#-- Parse the date to a date object -->
10<#assign displaydate = displaydate?datetime("EEE, d MMM yyyy HH:mm:ss Z")>
11
12<#-- Set the page locale back to the original page locale -->
13<#--#assign locale = ''-->
14<#assign dateFormat = "dd MM yyyy" />
15<#assign publishDate=dateUtil.getDate(displaydate,dateFormat,locale)/>
16
17
18
19
20<!--publish view Count-->
21<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
22<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService" )>
23<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService" )>
24<#assign getterUtil = staticUtil["com.liferay.portal.kernel.util.GetterUtil"] />
25<#assign currentArticle = JournalArticleLocalService.getArticle(getterUtil.getLong(groupId),.vars['reserved-article-id'].data)>
26<#assign currentArticleResourcePrimKey = currentArticle.getResourcePrimKey()>
27<#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey)/>
28<#assign viewCount = currentArticleAssetEntry.viewCount/>
29
30
31
32
33<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
34<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
35<#assign journalArticle = JournalArticleLocalService.getArticle(getterUtil.getLong(groupId),.vars['reserved-article-id'].data) />
36<#assign categories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) />
37
38
39
40
41<div class="display-content">
42 <div class="container">
43 <#if .vars['reserved-article-small-image-url'].getData() != "">
44 <div class="main-image">
45 <img class="" src="${.vars['reserved-article-small-image-url'].getData()}" alt="" />
46 </div>
47 </#if>
48
49
50 <div class="breadcrumb-wrapper hidden-in-print-mode">
51 <@liferay.breadcrumbs />
52 </div>
53
54 <h6 class="sub-title">${lead.getData()}</h6>
55
56 <h4 class="title">${.vars['reserved-article-title'].data}</h4>
57
58 <div class="details">
59 <div class="date">
60 <svg>
61 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#calendar-minus"></use>
62 </svg>
63 <span class="js-date" data-date="${publishDate} ?? DD MM YYYY ?? DD MMMM YYYY" >${publishDate}</span>
64 </div>
65 <div class="code">
66 <svg>
67 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#bill"></use>
68 </svg>
69 <span>کد خبر : ${.vars['reserved-article-id'].getData()}</span>
70 </div>
71 <div class="visitors">
72 <svg>
73 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#eye"></use>
74 </svg>
75 <span>تعداد بازدید : ${viewCount}</span>
76 </div>
77 </div>
78
79 <div class="article-content">
80 ${content.getData()}
81 </div>
82
83
84 <#if other_images?? && other_images.getSiblings()?has_content && other_images.getSiblings()[0].getData() != "" >
85
86 <#assign
87 theme_display = themeDisplay
88 css_folder = theme_display.getPathThemeCss()
89 javascript_folder = theme_display.getPathThemeJavaScript()
90 />
91
92 <div class="gallery-wr">
93
94 <link type="text/css" rel="stylesheet" href="${css_folder}/lightgallery/css/lightgallery.css" />
95
96 <!-- lightgallery plugins -->
97 <link type="text/css" rel="stylesheet" href="${css_folder}/lightgallery/css/lg-zoom.css" />
98 <link type="text/css" rel="stylesheet" href="${css_folder}/lightgallery/css/lg-thumbnail.css" />
99 <script src="${javascript_folder}/lightgallery/lightgallery.umd.js"></script>
100 <!-- Or use the minified version -->
101 <script src="${javascript_folder}/lightgallery/lightgallery.min.js"></script>
102
103 <!-- lightgallery plugins -->
104 <script src="${javascript_folder}/lightgallery/plugins/thumbnail/lg-thumbnail.umd.js"></script>
105 <script src="${javascript_folder}/lightgallery/plugins/zoom/lg-zoom.umd.js"></script>
106
107
108 <div id="animated-thumbnails" class="list-gallery">
109 <#if other_images.getSiblings()?has_content>
110 <#list other_images.getSiblings() as cur_other_images>
111
112 <a href="${cur_other_images.getData()}" data-aos="flip-left">
113 <img src="${cur_other_images.getData()}" />
114 </a>
115 </#list>
116 </#if>
117 </div>
118
119 <script>
120
121 lightGallery(document.getElementById("animated-thumbnails"), {
122 athumbnail: true,
123 animateThumb: !1,
124 pager: !1,
125 plugins: [lgZoom, lgThumbnail],
126 hash: !1,
127 zoomFromOrigin: !1,
128 toggleThumb: !0,
129 allowMediaOverlap: !0,
130 container: ".guilan-theme .display-content .gallery-wr",
131 });
132
133 </script>
134
135 <style>
136 .rtl .lg-outer {
137 text-align: right;
138 }
139 .lg-outer .lg-thumb-item {
140 float: right !important;
141 }
142 .lg-thumb-item img {
143 margin: 0 !important;
144 border-radius: 0 !important;
145 }
146 .lg-container {
147 font-family: inherit;
148 }
149
150 .gallery-wr .lg-backdrop , .gallery-wr .lg-outer {
151 position: fixed !important;
152 }
153 .gallery-wr .lg-backdrop {
154 z-index: 1040 !important;
155 }
156 .gallery-wr .lg-outer {
157 z-index: 1050 !important;
158 }
159 </style>
160
161 </div>
162 </#if>
163
164
165 <#if video?? && video.getData()!="">
166 <div class="m-auto py-3 hidden-in-print-mode" style="clear: both;max-width:50em">
167 <video style="width: 100%; border-radius : 10px" poster="${image_snapshot.getData()}" controls preload="none">
168 <source src="${video.getData()}" type="video/mp4">
169 Your browser does not support the video tag.
170 </video>
171 </div>
172 </#if>
173 <#if audio?? && audio.getData()!="">
174 <div class="m-auto py-3 hidden-in-print-mode" style="clear: both;max-width:50em">
175 <audio style="width: 100%; border-radius : 10px" controls>
176 <source src="${audio.getData()}">
177 Your browser does not support the audio element.
178 </audio>
179 </div>
180 </#if>
181 <#if files?? && files.getData()!="">
182 <a class="sp-link-nextSibling btn btn-info hidden-in-print-mode my-3" href="${files.getData()}" download>
183 <i class="icon-download"></i>
184 ${languageUtil.format(locale, "download-x", "فایل", false)}
185 </a>
186 </#if>
187
188 <hr />
189
190 <#if categories?has_content>
191 <div class="categories">
192 <div class="title">
193 <svg>
194 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#calendar-minus"></use>
195 </svg>
196 <span>دسته بندی :</span>
197 </div>
198 <div class="items">
199 <#list categories as category>
200 <div>
201 <svg>
202 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#hashtag"></use>
203 </svg>
204 <span>${category.getName()}</span>
205 </div>
206 </#list>
207 </div>
208 </div>
209 </#if>
210
211 <div class="share">
212 <div class="title">
213 <svg>
214 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#share"></use>
215 </svg>
216 <span>اشتراک گذاری</span>
217 </div>
218
219 <ul class="d-flex p-0">
220 <li>
221 <div onclick="window.print();">
222 <svg>
223 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#receipt"></use>
224 </svg>
225 <span>چاپ کردن</span>
226 </div>
227 </li>
228 <li>
229 <a onclick="window.location.replace('https://ble.ir/university_of_guilan')">
230
231 <img src="https://guilan.ac.ir/documents/20123/0/bale-icon.png">
232
233 </a>
234 </li>
235 <li>
236 <a onclick="window.location.replace('http://sapp.ir/guilan.ac.ir')">
237
238 <img src="https://guilan.ac.ir/documents/20123/0/soroush-icon.png">
239
240 </a>
241 </li>
242 <li>
243 <a onclick="window.location.replace('https://eitaa.com/university_of_guilan')">
244
245 <img src="https://guilan.ac.ir/documents/20123/0/Eitaa-icon.png">
246
247 </a>
248 </li>
249 </ul>
250
251 <div class="short-link" onclick="myFunction()" onmouseout="outFunc()">
252 <div class="input-wr">
253 <div class="icon">
254 <svg>
255 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#copy-success"></use>
256 </svg>
257 </div>
258 <input type="text" value="" />
259 </div>
260 <div class="message">
261 <span>کپی در حافظه موقت</span>
262 </div>
263 </div>
264
265 <script>
266 window.shortURL = encodeURI(document.querySelector("#ShortURL-top input").value);
267 document.querySelector(".short-link input").value = decodeURI(shortURL);
268
269 function copyToClipboard(text) {
270 var textArea = document.createElement("textarea");
271 textArea.style.position = "fixed";
272 textArea.style.top = 0;
273 textArea.style.left = 0;
274 textArea.style.width = "2em";
275 textArea.style.height = "2em";
276 textArea.style.padding = 0;
277 textArea.style.border = "none";
278 textArea.style.outline = "none";
279 textArea.style.boxShadow = "none";
280 textArea.style.background = "transparent";
281 textArea.value = text;
282 document.body.appendChild(textArea);
283 textArea.focus();
284 textArea.select();
285 document.execCommand("copy");
286 document.body.removeChild(textArea);
287 }
288 function myFunction() {
289 copyToClipboard(shortURL);
290 var tooltip = document.querySelector(".short-link .message span");
291 tooltip.classList.add("success");
292 tooltip.innerHTML = "در حافظه موقت کپی شد";
293 }
294 function outFunc() {
295 setTimeout(() => {
296 var tooltip = document.querySelector(".short-link .message span");
297 tooltip.classList.remove("success");
298 tooltip.innerHTML = "کپی در حافظه موقت";
299 }, 300);
300 }
301 </script>
302
303 </div>
304 </div>
305</div>
306
307<style>
308.display-content {
309 padding: 4.5em 0 2em 0;
310 font-size: 15px;
311 overflow: hidden;
312}
313
314.display-content .container > .title {
315 font-weight: 600;
316 font-size: 2em;
317 line-height: 1.7em;
318 color: #000000;
319 margin-bottom: 0;
320}
321
322.display-content .container > .sub-title {
323 font-weight: 400;
324 font-size: 1.312em;
325 color: #114088;
326 margin-bottom: 0.81em;
327}
328
329.display-content .container .breadcrumb-wrapper {
330 margin-bottom: 2.375em;
331}
332
333.display-content .container .breadcrumb-wrapper .demo {
334 font-weight: 400;
335 font-size: 0.93em;
336 color: #7e8aab;
337}
338
339.display-content .container .main-image {
340 z-index: 1;
341 position: relative;
342 float: left;
343 max-width: 45%;
344 position: relative;
345 margin: 0em 3em 3em 0;
346}
347
348html.ltr .display-content .container .main-image {
349 float: right;
350 margin: 0em 0 3em 3em;
351}
352
353.display-content .container .main-image::before, .display-content .container .main-image::after {
354 /*content: "";*/
355 position: absolute;
356 left: 3em;
357 right: 3.75em;
358 height: 5em;
359 background: #ff8134;
360 opacity: 0.1;
361 border-radius: 12px;
362 top: -1.125em;
363}
364
365.display-content .container .main-image::after {
366 left: 3.75em;
367 right: 3em;
368 bottom: -1.125em;
369 top: unset;
370 background: #119932;
371}
372
373.display-content .container .main-image img {
374 filter: drop-shadow(0px 14px 44px rgba(0, 0, 0, 0.05));
375 border-radius: 6px;
376 max-width: 100%;
377}
378
379.display-content .container .details {
380 display: flex;
381 column-gap: 2.4em;
382 margin: 1.375em 0;
383 flex-wrap: wrap;
384 row-gap: 1em;
385}
386
387.display-content .container .details div {
388 display: flex;
389 align-items: center;
390 column-gap: 0.437em;
391}
392
393.display-content .container .details div svg {
394 width: 1.25em;
395 height: 1.25em;
396}
397
398.display-content .container .details div svg use {
399 stroke: #0391CC !important;
400}
401
402.display-content .container .details div span {
403 font-weight: 400;
404 font-size: 1em;
405 color: #0391CC;
406}
407
408.display-content .container .article-content {
409 font-weight: 400;
410 font-size: 1.05em;
411 line-height: 3em;
412 color: #626E94;
413}
414
415.display-content .container .gallery-wr {
416 padding: 2.5em 0;
417 font-size: 0.88em;
418}
419
420.display-content .container .gallery-wr .list-gallery {
421 display: flex;
422 flex-wrap: wrap;
423 justify-content: center;
424 row-gap: 1.25em;
425 column-gap: 1.25em;
426}
427
428.display-content .container .gallery-wr .list-gallery a {
429 position: relative;
430 overflow: hidden;
431}
432
433.display-content .container .gallery-wr .list-gallery a:hover::before {
434 opacity: 1;
435 transform: scale(1);
436}
437
438.display-content .container .gallery-wr .list-gallery a::before {
439 content: "";
440 width: 100%;
441 height: 100%;
442 background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFuSURBVHgB7ZiLbYMwEIYPqQN0BEbIBmWDskHZoOoEZYOoE5Rs0G7QDRjB2eR6Fo5kJWfjp2Sk+yQrCob/PpmHDQCCIAg+OlcHIs708wZ+Ll3XzRBBrVwdrHCfFSIJzFWu458gnCu1v7ttXxDPB7XXu20DtR5ycIzE3qlMqTPFjHCIsKolzciqEsLfTHC2NJdpauULuwpAIq6sosK+QiVkqwjvFcyRLSH8aaTH2MIpsmafE7VV14bSxEhjhZs2CUZkYPYZm5C1hGzpM9N/bkb2hhlFLdYzfb3pewFBEMqgH2cBN90ILXCoxxozcXDT+NDExIGtTc0UOuO2EDmVEMCwxY+egBRub9bRwsoEH2Z5+SCMR1rAYyOvSEHfJXQB+rEvjYm+zFwgETp2oUywMm//08EDv+ZXkfVI518Shis1PQkM1rZfOr0/EAFuj8l3JruHHDDzo50nd83J9Y3wQm0CPwvEo8/IM5TPFQRBIP4BZJehxxvkyUsAAAAASUVORK5CYII=')
443 no-repeat center, rgba(26, 27, 29, 0.82);
444 background-size: 2.7em 2.7em;
445 position: absolute;
446 opacity: 0;
447 transform: scale(0.9);
448 transition: all ease-in-out 0.3s;
449}
450
451.display-content .container .gallery-wr .list-gallery a img {
452 margin: 0 !important;
453 border-radius: 0 !important;
454 max-width: 100%;
455 width: 100%;
456 height: 11.5em;
457 width: 11.5em;
458 object-fit: cover;
459}
460
461.display-content .container hr {
462 background: rgba(115, 129, 141, 0.01);
463 margin: 1.5em 0;
464}
465
466.display-content .container .categories,
467.display-content .container .share {
468 display: flex;
469 justify-content: space-between;
470 flex-wrap: wrap;
471 padding: 1.5em 0;
472 column-gap: 1.75em;
473 row-gap: 1.5em;
474}
475
476.display-content .container .categories > .title,
477.display-content .container .share > .title {
478 display: flex;
479 column-gap: 0.5em;
480 align-items: center;
481}
482
483.display-content .container .categories > .title svg,
484.display-content .container .share > .title svg {
485 width: 1.5em;
486 height: 1.5em;
487 stroke: #1a1b1d;
488}
489
490.display-content .container .categories > .title span,
491.display-content .container .share > .title span {
492 font-weight: 400;
493 font-size: 0.93em;
494 color: #1a1b1d;
495}
496
497.display-content .container .categories .items {
498 display: flex;
499}
500
501.display-content .container .categories .items > div {
502 display: flex;
503 align-items: center;
504 column-gap: 0.375em;
505}
506
507.display-content .container .categories .items > div svg {
508 width: 1.125em;
509 height: 1.125em;
510 stroke: #7e8aab;
511}
512
513.display-content .container .categories .items > div span {
514 font-weight: 400;
515 font-size: 1em;
516 color: #7e8aab;
517}
518
519.display-content .container .categories .items > div + div::before {
520 content: "-";
521 margin: 0 0.875em;
522 color: #bfc4d5;
523 font-weight: bold;
524 display: flex;
525 align-items: center;
526}
527
528.display-content .container .share .short-link {
529 position: relative;
530 cursor: pointer;
531 width: fit-content;
532}
533
534.display-content .container .share .short-link::before {
535 content: "";
536 width: 100%;
537 height: 100%;
538 position: absolute;
539 z-index: 1;
540}
541
542.display-content .container .share .short-link:hover .message {
543 transform: translate3d(0, 100%, 0);
544 opacity: 1;
545}
546
547.display-content .container .share .short-link .message {
548 transition: all ease-in-out 0.2s;
549 position: absolute;
550 width: 100%;
551 bottom: 0;
552 padding-top: 0.3em;
553 opacity: 0;
554 pointer-events: none;
555 z-index: -1;
556}
557
558.display-content .container .share .short-link .message span {
559 display: flex;
560 justify-content: center;
561 align-items: center;
562 border-radius: 0.312em;
563 color: #fff;
564 font-size: 0.8em;
565 height: 2.5em;
566 background: #285eff;
567}
568
569.display-content .container .share .short-link .message span.success {
570 background: #29c450;
571}
572
573.display-content .container .share .short-link .input-wr {
574 background: #ffffff;
575 border: 0.3px solid #bdc5dd;
576 border-radius: 0.312em;
577 overflow: hidden;
578 display: flex;
579 width: 11.5em;
580 height: 2.812em;
581 position: relative;
582}
583
584.display-content .container .share .short-link .input-wr .icon {
585 background: #285eff;
586 width: 2.25em;
587 display: flex;
588 align-items: center;
589 justify-content: center;
590 flex-shrink: 0;
591}
592
593.display-content .container .share .short-link .input-wr .icon svg {
594 fill: #fafbfc;
595 width: 1.188em;
596 height: 1.188em;
597}
598
599.display-content .container .share .short-link .input-wr input {
600 direction: ltr;
601 cursor: pointer;
602 border: 0;
603 outline: 0;
604 box-shadow: 0;
605 width: 100%;
606 padding-left: 1em;
607 font-weight: 400;
608 font-size: 0.75em;
609 color: #7e8aab;
610}
611
612.display-content .container .share ul {
613 list-style: none;
614 margin: 0 auto 0 0;
615 display: flex;
616 column-gap: 1em;
617 align-items: center;
618 background-color: #a1d6eca3;
619 border-radius: 5px !important;
620 padding-left: 5px !important;
621}
622
623html.ltr .display-content .container .share ul {
624 margin: 0 0 0 auto;
625}
626
627.display-content .container .share ul li {
628 cursor: pointer;
629}
630
631.display-content .container .share ul li svg {
632 width: 1.5em;
633 height: 1.5em;
634}
635
636.display-content .container .share ul li span {
637 font-weight: 500;
638 font-size: 0.75em;
639 color: #7e8aab;
640}
641
642@media only screen and (max-width: 991px) {
643 .display-content {
644 font-size: 14px;
645 }
646 .display-content .container {
647 display: flex;
648 flex-direction: column;
649 }
650 .display-content .container > * {
651 order: 5;
652 }
653 .display-content .container > .breadcrumb-wrapper,
654 .display-content .container > .sub-title,
655 .display-content .container > .title,
656 .display-content .container > .details {
657 order: 1;
658 }
659 .display-content .container .main-image {
660 margin-left: 0;
661 margin-right: 0;
662 order: 4;
663 max-width: unset;
664 width: fit-content;
665 margin: 3em auto 3em auto !important;
666 }
667}
668
669@media only screen and (max-width: 767px) {
670 .display-content {
671 font-size: 13px;
672 }
673 .display-content .container .head {
674 padding-top: 4em;
675 }
676 .display-content .container .head::before {
677 background-position: -2.5em 1.5em;
678 }
679 .display-content .container .head .title {
680 font-size: 1.5em !important;
681 }
682}
683
684@media only screen and (max-width: 575px) {
685 .display-content {
686 font-size: 12px;
687 }
688 .display-content .container .article-content {
689 font-size: 1.2em;
690 }
691 .display-content .container .categories {
692 font-size: 1.2em;
693 }
694 .display-content .container .share {
695 font-size: 1.3em;
696 flex-direction: column;
697 }
698 .display-content .container .share ul {
699 margin: 0 !important;
700 justify-content: flex-start;
701 width: 12.5em;
702 }
703}
704
705@media print {
706 .zahra-nav,
707 .la-news-po-2,
708 .footer,
709 .share ,
710 .hidden-in-print-mode {
711 display: none !important;
712 }
713}
714
715/* breadcrumb */
716
717.breadcrumb-wrapper .portlet {
718 margin-bottom:0;
719 margin: auto;
720}
721
722.breadcrumb-wrapper .portlet .portlet-header{
723 display:none;
724}
725
726.breadcrumb-wrapper .portlet .portlet-content {
727 padding-left:0;
728 padding-bottom:0;
729}
730html.rtl .breadcrumb-wrapper .portlet .portlet-content {
731 padding-right:0;
732}
733
734.breadcrumb-wrapper .portlet .breadcrumb {
735 background:none;
736 margin-bottom:0;
737 padding:0;
738 font-size:inherit;
739}
740.breadcrumb-wrapper .portlet .breadcrumb .breadcrumb-item+.breadcrumb-item::before {
741 background-image: none;
742 content: '/';
743 top: unset;
744 margin-top: unset;
745 color: #7e8aab;
746
747}
748
749.breadcrumb-wrapper .portlet .breadcrumb li {
750 font-size: 1em;
751}
752
753.breadcrumb-wrapper .portlet .breadcrumb li {
754 font-size: 1em;
755}
756
757.breadcrumb-wrapper .portlet .breadcrumb li a {
758 text-decoration:none;
759 color: #7e8aab;
760 font-weight: 400;
761 font-size: 0.93em;
762}
763
764.breadcrumb-wrapper .portlet .breadcrumb li span.active {
765 color: #7e8aab;
766 font-weight: 400;
767 font-size: 0.93em;
768
769 white-space: nowrap;
770 max-width: 300px;
771 overflow: hidden;
772 text-overflow: ellipsis;
773}
774
775/* breadcrumb */
776
777
778</style>