Atrás La innovación no se detiene y podría aumentar gracias a la IA

Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> assetRenderer  [in template "10155#10193#NOTICIA" at line 24, column 27]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign journalArticle = assetRendere...  [in template "10155#10193#NOTICIA" at line 24, column 1]
----
1<#assign colorSite = getterUtil.getString(themeDisplay.getThemeSetting("color-site")) /> 
2<script type="text/javascript" src="/documents/6323808/129176989/jquery.captionate.js"></script> 
3<script> 
4function extractYouTubeParameter(url) { 
5    // Expresión regular para YouTube y Shorts 
6    var regExp = /(?:youtube\.com\/(?:shorts\/|watch\?v=)|youtu\.be\/)([^&?#]+)/; 
7    var match = url.match(regExp); 
8 
9    if (match && match[1]) { 
10        // Devuelve el ID del video con cualquier parámetro de consulta adicional 
11        var paramIndex = url.indexOf('?'); 
12        return paramIndex !== -1 ? match[1] + url.substring(paramIndex) : match[1]; 
13    } else { 
14        return null; 
15
16
17</script> 
18<#assign zona = timeZoneUtil.getTimeZone("Europe/Madrid") /> 
19 
20<#assign AssetEntryLocalservice = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
21<#assign journalLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
22<#assign viewURL = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() /> 
23<#assign groupId = getterUtil.getLong(groupId)/> 
24<#assign journalArticle = assetRenderer.getArticle() /> 
25 
26<#-- apliquem les traduccions -->  
27 
28<#switch themeDisplay.getLocale()> 
29<#case "ca_ES"> 
30    <#assign translations = { 
31        "categories", "Categories", 
32        "multimedia", "Multimèdia",  
33        "perfils", "Perfils dels protagonistes",  
34        "info", "Per a més informació",  
35        "noticies", "Notícia publicada per",  
36        "unitat", "Oficina de Comunicació", 
37        "ods", "ODS - Objectius de desenvolupament sostenible", 
38        "odsupf","Els ODS a la UPF" 
39    }/> 
40        <#break> 
41<#case "es_ES"> 
42    <#assign translations = { 
43        "categories", "Categorías", 
44        "multimedia", "Multimedia",  
45        "perfils", "Perfiles de los protagonistas",  
46        "info", "Para más información",  
47        "noticies", "Noticia publicada por",  
48        "unitat", "Oficina de Comunicación", 
49        "ods", "ODS - Objetivos de desarrollo sostenible", 
50        "odsupf","Els ODS a la UPF" 
51    }/> 
52        <#break> 
53<#default> 
54<#assign translations = { 
55        "categories", "Categories", 
56        "multimedia", "Multimedia",  
57        "perfils", "Profiles of the protagonists",  
58        "info", "For more information",  
59        "noticies", "News published by",  
60        "unitat", "Communication Office", 
61        "ods", "SDG - Sustainable Development Goals", 
62        "odsupf","Els ODS a la UPF" 
63    }/> 
64</#switch> 
65 
66<#--<#assign site = groupId />--> 
67<#assign site = groupId /> 
68 
69<#if ( site?is_number) > 
70    <#assign resourcePrimKey =  
71    journalLocalService.getArticle(getterUtil.getLong(site), .vars['reserved-article-id'].data).resourcePrimKey /> 
72    <#assign entry = AssetEntryLocalservice.getEntry("com.liferay.journal.model.JournalArticle", getterUtil.getLong(resourcePrimKey)) /> 
73   <#if entry.getPublishDate()?? > 
74     <#assign fecha_de_creacion = entry.getPublishDate()?string("dd.MM.yyyy")/> 
75   <#else> 
76     <#assign fecha_de_creacion = .now?string("dd.MM.yyyy")/> 
77   </#if> 
78 
79   <#if entry.getModifiedDate()?? > 
80     <#assign fecha_de_modificacion = entry.getModifiedDate()?string("dd.MM.yyyy")/> 
81   <#else> 
82     <#assign fecha_de_modificacion = .now?string("dd.MM.yyyy")/> 
83   </#if> 
84</#if> 
85 
86<#assign cat = "" /> 
87<#assign listaCategorias = entry.getCategories() /> 
88<#list listaCategorias as categoria > 
89    <#if stringUtil.equalsIgnoreCase("OpenCms", categoria.name) > 
90        <#assign cat = categoria.name /> 
91    </#if> 
92</#list> 
93<div class="container noticia-maximized nova"> 
94            <div id="nom_page"> 
95                <h1>${.vars['reserved-article-title'].data}</h1> 
96            </div> 
97            <div class="contingut subtitol"> 
98        <#if .vars['Resum']?? > 
99                    ${.vars['Resum'].getData()} 
100        </#if> 
101            </div> 
102            <div class="data_flex"> 
103        <#if ( fecha_de_creacion?length == 10) > 
104        <div class="data">${fecha_de_creacion}</div> 
105        </#if> 
106         <div class="xarxes-socials"> 
107         <script type="text/javascript"> 
108            var url_link = window.location.href; 
109            var encode_url_link = encodeURIComponent(url_link); 
110            var titular = `${.vars['reserved-article-title'].data}`; 
111            var encode_titular = encodeURIComponent(titular); 
112            function copiar() { 
113                navigator.clipboard.writeText(url_link); 
114
115            function carrega() { 
116                document.querySelectorAll('.ft-btn-rrss--whatsapp').forEach(function(element) { 
117                    element.href = `https://api.whatsapp.com/send?text='%C2%BF`+encode_titular+`%22%20`+encode_url_link+`%3Futm_source%3Dwhatsapp%26utm_medium%3Dsocial%26utm_campaign%3Dbtn-share`; 
118                }); 
119                document.querySelectorAll('.ft-btn-rrss--facebook').forEach(function(element) { 
120                    element.href = `https://www.facebook.com/sharer/sharer.php?u=`+encode_url_link; 
121                    element.setAttribute('data-href', url_link);  
122                }); 
123                document.querySelectorAll('.ft-btn-rrss--twitter').forEach(function(element) { 
124                    element.href = `https://twitter.com/intent/tweet?original_referer=https%3A%2F%2Fupf.edu%2F&ref_src=twsrc%5Etfw%7Ctwcamp%5Ebuttonembed%7Ctwterm%5Eshare%7Ctwgr%5E&text=`+encode_titular+`&url=`+encode_url_link; 
125                }); 
126                document.querySelectorAll('.ft-btn-rrss--email').forEach(function(element) { 
127                    element.href = `mailto:?subject=`+encode_titular+`&body=`+url_link; 
128                }); 
129            }; 
130            if (document.readyState !== "loading") { 
131                carrega(); 
132            }  
133            document.addEventListener("DOMContentLoaded", function(){ 
134                carrega(); 
135            }); 
136        </script> 
137        <div class="ft-mol-rrss-column__items"> 
138            <a href="#" target="_blank" title="WhatsApp" class="ft-btn-rrss ft-btn-rrss--whatsapp" rel="nofollow" data-share-button="whatsapp"> 
139                <span class="fa-stack"><i class="fa-solid fa-circle fa-stack-2x"></i><i class="fa-brands fa-whatsapp fa-stack-1x"></i></span> 
140                <span class="ft-btn-rrss__text"> RRSS WhatsApp</span> 
141            </a> 
142            <a href="#" target="_blank" title="Twitter" class="ft-btn-rrss ft-btn-rrss--twitter" rel="nofollow" data-share-button="twitter"> 
143                <span class="fa-stack"><i class="fa-solid fa-circle fa-stack-2x"></i><i class="fa-brands fa-x-twitter fa-stack-1x "></i></span> 
144                <span class="ft-btn-rrss__text"> RRSS Twitter</span> 
145            </a> 
146            <a href="#" target="_blank" title="Facebook" class="fb-share-button ft-btn-rrss--facebook" rel="nofollow" data-share-button="facebook" data-type="facebook"> 
147                <span class="fa-stack"><i class="fa-solid fa-circle fa-stack-2x"></i><i class="fa-brands fa-facebook-f fa-stack-1x "></i></span> 
148                <span class="ft-btn-rrss__text"> RRSS Facebook</span> 
149            </a> 
150            <a href="#" target="_blank" title="email" class="ft-btn-rrss ft-btn-rrss--email" rel="nofollow" data-share-button="mail"> 
151                 <span class="fa-stack"><i class="fa-solid fa-circle fa-stack-2x"></i><i class="fa-regular fa-envelope fa-stack-1x"></i></span> 
152                <span class="ft-btn-rrss__text"> RRSS email</span> 
153            </a> 
154            <a href="javascript: copiar()" title="Copiar URL" class="ft-btn-nav ft-btn-nav--copy ft-btn-nav--bordered" data-share-button="url"> 
155               <span class="fa-stack"><i class="fa-solid fa-circle fa-stack-2x"></i><i class="fa-regular fa-copy fa-stack-1x"></i></span> 
156                <span class="ft-btn-nav__text">Copiar URL</span> 
157            </a> 
158        </div> 
159            </div> 
160        </div> 
161<div class="row"> 
162    <div class="asset-full-content col-md-8 left"> 
163        <#-- end xarxes socials--> 
164        <div class="content" id="content"> 
165        <#if .vars['separadorimatge']?? > 
166            <#attempt> 
167                <#if ( .vars['separadorimatge'].getChild('url_youtube').getData() != "") > 
168                <!--zona youtube--> 
169                <p id="youtube" class="youtube"> 
170                    <script type="text/javascript"> 
171                        function getYoutube() { 
172                        var id = $(this).parent('p').attr("id"); 
173                        var url = "${.vars['separadorimatge'].getChild('url_youtube').getData()}" 
174                        var parm_youtube = extractYouTubeParameter(url) 
175                        if (parm_youtube.length != 0 ) { 
176                        return '<iframe title="Youtube video player" width="560" height="315" src="https://www.youtube.com/embed/'+ parm_youtube +'" frameborder="0" allowfullscreen></iframe>'; 
177                        } else { 
178                        return ''; 
179
180
181                        document.getElementById("youtube").innerHTML = getYoutube(); 
182                    </script> 
183                </p> 
184                <#elseif (.vars['separadorimatge'].getChild('Imatge_inicial').getData() != "" && .vars['separadorimatge'].getChild('url_youtube').getData() == "" ) > 
185                <p><img alt="Imatge inicial - ${.vars['separadorimatge'].getChild('Imatge_inicial').getChild('peufoto').getData()}" title="${.vars['separadorimatge'].getChild('Imatge_inicial').getChild('peufoto').getData()}" src="${.vars['separadorimatge'].getChild('Imatge_inicial').getData()}" width="100%" /></p> 
186                </#if> 
187            <#recover> 
188            </#attempt> 
189        </#if> 
190        <#if .vars['Noticia']?? > 
191            <div class="content-body">${.vars['Noticia'].getData()}</div> 
192        </#if> 
193        </div> 
194    </div> 
195 
196        <#-- Mostrem les categories que siguin filles de la categoria "Notícies"--> 
197        <#-- Preparació url dels enllaços a les categories--> 
198        <#assign wordCategories = languageUtil.get(locale, "categories-nom-page")> 
199        <#assign wordCategories = wordCategories?lower_case /> 
200        <#assign catUrl = "/web/focus/" + wordCategories + "?p_p_id=122_INSTANCE_4xkc6d8xhKAC&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_r_p_564233524_resetCur=true&p_r_p_564233524_categoryId=" /> 
201        <#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
202    
203<div class="col-md-4" id="right"> 
204        <#if  .vars['Camps_addicionalsb']?? && .vars['Camps_addicionalsb'].getChild('text_dreta')??> 
205            ${.vars['Camps_addicionalsb'].getChild('text_dreta').getData()} 
206        </#if> 
207         <h2 class="audio">${translations["multimedia"]}</h2> 
208          <div class="audio"> 
209                        <div id="media"></div> 
210                    </div> 
211        <#if .vars['Camps_addicionalsb']?? > 
212            <#attempt> 
213                <#assign prota = .vars['Camps_addicionalsb'].getChild('Protagonistes') /> 
214                <#if ( prota.getChild('nomperfil').getData() != "") > 
215                <h2>${translations["perfils"]}:</h2> 
216                <#list prota.getChild('nomperfil').getSiblings() as perfil > 
217                        <div class="names"> 
218                        <div class="nom">  
219                            ${perfil.getData()} 
220                        </div> 
221                        <div class="xarxes"> 
222                        <#list perfil.getChild('urlperfil').getSiblings() as sub_element > 
223                     
224                            <#-- Formatem l'enllaç perquè no el tracti com si fos una subpàgina --> 
225                            <#assign enllac = sub_element.getData() /> 
226                            <#if !enllac?starts_with("http")  >              
227                                <#assign enllac = "http://" + enllac />  
228                            </#if> 
229                     
230                            <a href="${enllac}" title="${enllac}" target="_blank"> 
231                                <#if (enllac?contains("facebook") ) > 
232                                    <img alt="Facebook UPF" height="16" src="//www.upf.edu/documents/213531008/213545108/facebook.png" width="16"> 
233                                <#elseif ( enllac?contains("twitter") ) > 
234                                    <img alt="Twitter UPF" height="16" src="//www.upf.edu/documents/213531008/213545108/twitter.png" width="16"> 
235                                <#elseif ( enllac?contains("instagram") ) > 
236                                    <img alt="Instagram UPF" height="16" src="//www.upf.edu/documents/213531008/213545108/instagram.png" width="16"> 
237                                <#elseif ( enllac?contains("youtube") ) > 
238                                    <img alt="Youtube UPF" height="16" src="//www.upf.edu/documents/213531008/213545108/youtube_new.png" width="16"> 
239                                <#elseif ( enllac?contains("linkedin") ) > 
240                                    <img alt="Linkedin UPF" height="16" src="//www.upf.edu/documents/213531008/213545108/linkedin.png" width="16"> 
241                                <#elseif ( enllac?contains("flickr") ) > 
242                                    <img alt="Flickr UPF" height="16" src="//www.upf.edu/documents/213531008/213545108/flickr.png" width="16"> 
243                                <#elseif ( enllac?contains("vimeo") ) > 
244                                    <img alt="Vimeo UPF" height="16" src="//www.upf.edu/documents/213531008/213545108/vimeo.png" width="16"> 
245                                <#elseif ( enllac?contains("pinterest") ) > 
246                                    <img alt="Pinterest UPF" height="16" src="//www.upf.edu/documents/213531008/213545108/pinterest.png" width="16"> 
247                                <#else> 
248                                <i class="fa-solid fa-link" aria-label="enllacos"></i> 
249                                 
250                                </#if> 
251                            </a> 
252                    </#list> 
253                        </div> 
254                        </div> 
255                </#list> 
256                </#if> 
257            <#recover>    
258            </#attempt> 
259        </#if>     
260        <div class="categories"> 
261            <h2>${translations["categories"]}:</h2> 
262             
263            <#list listaCategorias as categoria > 
264 
265            <#if categoria.getParentCategoryId() != 0 > <#--arreglo CG --> 
266             
267                <#assign assetCategory = "" /> 
268                <#assign assetCategory = assetCategoryLocalService.getCategory(categoria.getParentCategoryId()) />   
269                <#if (assetCategory.getName() == "Notícies") > 
270                    <div class="tipus"><a href="${catUrl}${categoria.getCategoryId()}">${categoria.getTitle(locale)}</a></div> 
271                </#if> 
272                 
273            </#if>   
274             
275            </#list> 
276        </div> 
277 
278     <div class="block_ods"> 
279         <h2>${translations["ods"]}:</h2> 
280                   <#list listaCategorias as categoria > 
281            <#if categoria.getParentCategoryId() != 0 > <#--arreglo CG --> 
282                <#assign assetCategory = "" /> 
283                <#assign assetCategory = assetCategoryLocalService.getCategory(categoria.getParentCategoryId()) />   
284                <#if (assetCategory.getName() == "ODS") > 
285                 
286                    <#if categoria.getTitle(locale)?contains('01.')> 
287                    <div class="ods_01">${categoria.getTitle(locale)}</div> 
288                    <#elseif categoria.getTitle(locale)?contains('02.')> 
289                    <div class="ods_02">${categoria.getTitle(locale)}</div> 
290                     <#elseif categoria.getTitle(locale)?contains('03.')> 
291                    <div class="ods_03">${categoria.getTitle(locale)}</div> 
292                     <#elseif categoria.getTitle(locale)?contains('04.')> 
293                    <div class="ods_04">${categoria.getTitle(locale)}</div> 
294                     <#elseif categoria.getTitle(locale)?contains('05.')> 
295                    <div class="ods_05">${categoria.getTitle(locale)}</div> 
296                     <#elseif categoria.getTitle(locale)?contains('06.')> 
297                    <div class="ods_06">${categoria.getTitle(locale)}</div> 
298                     <#elseif categoria.getTitle(locale)?contains('07.')> 
299                    <div class="ods_07">${categoria.getTitle(locale)}</div> 
300                     <#elseif categoria.getTitle(locale)?contains('08.')> 
301                    <div class="ods_08">${categoria.getTitle(locale)}</div> 
302                     <#elseif categoria.getTitle(locale)?contains('09.')> 
303                    <div class="ods_09">${categoria.getTitle(locale)}</div> 
304                     <#elseif categoria.getTitle(locale)?contains('10.')> 
305                    <div class="ods_10">${categoria.getTitle(locale)}</div> 
306                     <#elseif categoria.getTitle(locale)?contains('11.')> 
307                    <div class="ods_11">${categoria.getTitle(locale)}</div> 
308                     <#elseif categoria.getTitle(locale)?contains('12.')> 
309                    <div class="ods_12">${categoria.getTitle(locale)}</div> 
310                     <#elseif categoria.getTitle(locale)?contains('13.')> 
311                    <div class="ods_13">${categoria.getTitle(locale)}</div> 
312                     <#elseif categoria.getTitle(locale)?contains('14.')> 
313                    <div class="ods_14">${categoria.getTitle(locale)}</div> 
314                     <#elseif categoria.getTitle(locale)?contains('15.')> 
315                    <div class="ods_15">${categoria.getTitle(locale)}</div> 
316                     <#elseif categoria.getTitle(locale)?contains('16.')> 
317                    <div class="ods_16">${categoria.getTitle(locale)}</div> 
318                     <#elseif categoria.getTitle(locale)?contains('17.')> 
319                    <div class="ods_17">${categoria.getTitle(locale)}</div> 
320                    </#if> 
321                </#if> 
322                 
323            </#if>   
324            </#list> 
325            <a href="/web/responsabilitat-social/agenda-2030-ods" target="_blank" class="btn button_ods">${translations["odsupf"]} <i class="fa-solid fa-chevron-right" aria-hidden="true"></i></a> 
326    </div> 
327<h2 class="mark">Contact</h2> 
328<#if .vars['Camps_addicionalsb']?? > 
329    <#attempt> 
330    <#if .vars['Camps_addicionalsb'].getChild('espremsa').getData() == "true"> 
331        <div class="caixa-contacte"> 
332                <p><strong>${translations["noticies"]}:</strong></p> 
333                <p>${translations["unitat"]}</p> 
334                        <ul> 
335                            <li><a href="tel:616107518">616 107 518</a></li> 
336                            <li><a class="correuContacte" href="mailto:[email protected]">[email protected]</a></li> 
337                        </ul> 
338        </div> 
339             
340    </#if> 
341    <#recover> 
342    </#attempt> 
343</#if> 
344 
345    </div>    
346</div> 
347</div> 
348 
349   
350<#-- decidim si pintem la zona youtube o ivoox  --> 
351        <#if .vars['Camps_addicionalsb']?? > 
352            <#attempt> 
353                <#assign multi = .vars['Camps_addicionalsb'].getChild('Multimedia') /> 
354                <#list multi.getChild('youtubelist').getSiblings() as videos > 
355                    <#if ( videos.getChild('urlyoutubelist').getData()?contains("youtu") ) > 
356                        <script type="text/javascript"> 
357                        function getYoutube() { 
358                        var id = $(this).parent('p').attr("id"); 
359                        var url = "${videos.getChild('urlyoutubelist').getData()}" 
360                        var parm_youtube = extractYouTubeParameter(url) 
361                        if (parm_youtube.length != 0) { 
362                                return "<p>${videos.getChild("titolyoutubelist").getData()}</p><iframe title='Youtube video player' width='560' height='315' src='https://www.youtube.com/embed/"+ parm_youtube +"' frameborder='0' allowfullscreen></iframe>"; 
363                        } else { 
364                        return 'error'; 
365
366
367                        document.getElementById("media").innerHTML += getYoutube(); 
368                        </script> 
369                    <#elseif ( videos.getChild('urlyoutubelist').getData()?contains("ivoox") ) > 
370                        <script type="text/javascript"> 
371                                function getIvoox() { 
372                                if (!"${videos.getChild('urlyoutubelist').getData()}".includes("rf_")) {                           
373                                return "<p class='titol'>${videos.getChild("titolyoutubelist").getData()}</p><br /> Error. Use a valid audio URL";                             
374                                } else {             
375                                var Y = "rf_" 
376                                var X = "${videos.getChild('urlyoutubelist').getData()}" 
377                                var Z = X.slice(X.indexOf(Y) + Y.length) 
378                                return "<p class='titol'>${videos.getChild("titolyoutubelist").getData()}</p><iframe title='Youtube video player' width='238' height='48' frameborder='0' allowfullscreen='' scrolling='no' src='https://www.ivoox.com/player_ek_" + Z + "'></iframe>"; 
379
380
381                                document.getElementById("media").innerHTML += getIvoox(); 
382                        </script> 
383                    </#if>                        
384                </#list> 
385            <#recover> 
386            </#attempt> 
387        </#if> 
388<script> 
389 
390    if (!('remove' in Element.prototype)) { 
391        Element.prototype.remove = function() { 
392            if (this.parentNode) { 
393                this.parentNode.removeChild(this); 
394
395        }; 
396
397    // Si tenim els bookmarks posicionats d forma horitzontal, els movem 
398    if($(".taglib-social-bookmarks").length != 0){ 
399        $(".taglib-social-bookmarks").prependTo(".asset-full-content"); 
400        $(".taglib-social-bookmarks").get(0).remove(); 
401
402     
403    ajustaRelatedContentFullSize(); 
404     
405 
406    // Eliminem seccions si no n'hi ha cap 
407    if ($(".categories div").length == 0){ 
408        $(".categories").remove(); 
409
410    if ($(".block_ods div").length == 0){ 
411        $(".block_ods").remove(); 
412
413    if($('#media').is(':empty')) { 
414    $("h2.audio").hide(); 
415
416   
417   $('#content img[title]').captionate(); // imatges amb class caption mostraran la descripció 
418   
419    function ajustaRelatedContentFullSize(){ 
420        if ($(".list-group.sidebar-list-group").length!= 0){ 
421                $(".asset-links").appendTo("#right").insertAfter('.categories'); 
422                $(".asset-links").css("padding-left","0px !important");          
423        }else{ 
424            setTimeout(function(){ajustaRelatedContentFullSize();},100); 
425
426
427         
428/*Treure el títol de la pàgina 7.2*/ 
429 
430document.querySelector(".upf__titol-pagina")?.remove() 
431</script> 
432 
433<script type="application/ld+json"> 
434
435   "@context": "https://schema.org", 
436   "@type": "NewsArticle", 
437   "mainEntityOfPage":"${viewURL}", 
438   "url":"${viewURL}", 
439   <#if .vars['reserved-article-title']?? >"headline":"${.vars['reserved-article-title'].data}",</#if> 
440   "datePublished": "${journalArticle.getCreateDate()?datetime?iso_utc}", 
441  "dateModified":"${journalArticle.getModifiedDate()?datetime?iso_utc}", 
442   <#if .vars['Resum']?? >"description":"${.vars['Resum'].getData()}",</#if> 
443   "publisher":{ 
444      "@type":"Organization", 
445      "name":"Universitat Pompeu Fabra (UPF)", 
446      "logo":{ 
447         "@type":"ImageObject", 
448         "url":"https://www.upf.edu/o/upf-2016-theme/images/upf/logo.png" 
449
450   }, 
451   
452  <#if .vars['separadorimatge'].getChild('Imatge_inicial')?? >"image": { 
453     "@type":"ImageObject", 
454    "url":"https://www.upf.edu${.vars['separadorimatge'].getChild('Imatge_inicial').getData()}"</#if>  
455
456  
457
458</script> 
459 
460<style> 
461    /*Xarxes socials*/ 
462    .data_flex { 
463        display: flex; 
464        flex-direction: row; 
465        flex-wrap: nowrap; 
466        align-items: center; 
467        justify-content: space-between; 
468
469    .ft-mol-rrss-column__items span.ft-btn-rrss__text,.ft-mol-rrss-column__items .ft-btn-nav__text { 
470    display: none; 
471
472    .ft-mol-rrss-column__items { 
473        text-align: end; 
474
475    .ft-mol-rrss-column__items a { 
476        text-decoration: none; 
477
478    .ft-mol-rrss-column__items .fa-stack > i { 
479    color: ${colorSite}; 
480
481    .ft-mol-rrss-column__items .fa-stack > i:first-child { 
482        background-color: transparent; 
483        color: transparent; 
484
485    /*Unificar estils de padding*/ 
486    .layout-content > section > div, .layout-content > section > div .row > div, .container.noticia-maximized.nova .left { 
487        padding-left: 0 !important; 
488        padding-right: 0 !important; 
489
490    /*Fix notícies relacionades*/ 
491    ul.list-group.sidebar-list-group .autofit-col .list-group-title:only-child { 
492    height: auto; 
493
494    ul.list-group.sidebar-list-group .text-truncate-inline .text-truncate { 
495        display: inline-block; 
496        color: #363733; 
497        text-decoration: none; 
498        max-width: 100%; 
499        overflow: auto; 
500        text-overflow: initial; 
501        vertical-align: bottom; 
502        white-space: normal; 
503        word-wrap: normal; 
504
505    ul.list-group.sidebar-list-group .text-truncate-inline .text-truncate:hover { 
506        color: #8c8f85; 
507
508    /*FI fix notícies relacionades*/ 
509 
510    #media p { 
511    margin: 10px 0 5px; 
512
513    /* ----- Estil per adaptar a themes que no són UPF 2016 ----- */ 
514    #nom_page h1 { 
515        color: ${colorSite} !important; 
516        font-size: 23px; 
517        font-weight: bold; 
518        line-height: normal; 
519        margin-bottom: 15px; 
520        margin-top: 0; 
521        padding: 0; 
522
523    .contingut.subtitol, .contingut.subtitol p, .contingut.subtitol ul, .contingut.subtitol ol { 
524        color: ${colorSite} !important; 
525
526     
527    .data { 
528        color: #989b8f; 
529
530    #right h2 { 
531        font-weight: normal; 
532        font-size: 20px; 
533        color: ${colorSite}; 
534        line-height: normal; 
535        margin-bottom: 1em !important; 
536        margin-top: 1em !important; 
537        text-decoration: none; 
538        text-transform: none; 
539        padding: 0; 
540
541    #right h2:first-child { 
542        margin-top: 0 !important; 
543
544    .tipus a { 
545        text-decoration: none !important; 
546
547     
548    li.list-group.sidebar-list-group-item a { 
549        color: ${colorSite} !important; 
550
551     
552    span.taglib-text { 
553        color:  ${colorSite}; 
554    }  
555     
556    .categories div.tipus a{ 
557        background-color: ${colorSite}; 
558        margin-bottom: 5px; 
559        margin-right: 5px; 
560        max-width: 100%; 
561        position: relative; 
562        display: inline-block; 
563        text-decoration: none; 
564        color: #FFFFFF; 
565        padding: 5px 10px; 
566    }    
567     
568 
569    /* ----- Fi estil per adaptar a themes que no són UPF 2016 ----- */ 
570 
571    /* En aplicar aquesta class a un div .container, limitem amb auto per no ser sempre 1170px */ 
572    .noticia-maximized{ 
573        max-width: 1280px !important; 
574        width: auto !important; 
575
576    .noticia-maximized .row { 
577        align-items: stretch; 
578        align-content: stretch; 
579
580 
581    #nom_page{ 
582        display:block !important; 
583
584    #contingut > #nom_page{ 
585        display:none !important; 
586
587     
588    /* Per treure la icona de davant del títol Continguts relacionats*/ 
589    .asset-links h2{ 
590        background:none !important; 
591
592    .asset-links{ 
593        padding-left: 4px; 
594        margin-top: 0px; 
595
596    .list-group.sidebar-list-group{ 
597        padding-left: 25px !important; 
598
599    .list-group.sidebar-list-group-item{ 
600        list-style: initial !important; 
601
602    .list-group.sidebar-list-group-item img{ 
603        display:none; 
604
605    .contingut.subtitol, .contingut.subtitol p, .contingut.subtitol ul, .contingut.subtitol ol { 
606        font-weight: normal; 
607        padding-top: 0; 
608        line-height: normal !important; 
609
610     
611    .contingut.subtitol { 
612        border-bottom: 1px solid #ddd; 
613        margin-bottom: 10px; 
614        padding-bottom: 10px; 
615
616    .asset-full-content .tipus > a { 
617        background-color: ${colorSite} !important; 
618        margin-right: 5px; 
619        margin-bottom: 5px; 
620        position: relative; 
621        max-width:100%; 
622        text-decoration:none; 
623
624    .asset-full-content .tipus > a:hover { 
625        color: #ffffff !important; 
626
627     
628    .asset-full-content .tipus{ 
629        display: inline; 
630
631     
632    .taglib-social-bookmarks { 
633        display: block; 
634        float: right; 
635        background:none; 
636        margin-top:0px; 
637
638    .taglib-social-bookmarks a{ 
639        margin-bottom: 0px; 
640
641    .taglib-social-bookmarks ul{ 
642        padding:0px; 
643        margin-bottom:0px; 
644
645    .taglib-social-bookmarks ul li{ 
646        margin-right:0px; 
647
648    .asset-full-content .content { 
649        border-bottom: 0px solid #fff; 
650        margin-bottom: 20px; 
651        padding-bottom: 10px; 
652        padding-left: 12px; 
653        padding-right: 12px; 
654        width: 100%; 
655
656    div#content img { 
657        max-width: 100%; 
658
659    .asset-full-content .content::before { 
660        content: ""; 
661        display: inline-table; 
662        width: 100%; 
663
664    .asset-full-content .content h3 { 
665        font-size: 18px; 
666        font-weight: normal; 
667
668    .categories::after { 
669        content: ""; 
670        display: inline-table; 
671        width: 100%; 
672
673    .categories h2, .sheet-tertiary-title{ 
674        color: ${colorSite} !important; 
675
676 
677     
678    @media (min-width: 979px) and (max-width: 1200px) { 
679         
680
681    @media (max-width: 978px) { 
682        .asset-full-content .data { 
683            display:inline-table;} 
684
685    @media (max-width: 480px) {  
686        .asset-full-content .tipus > a { 
687            float:none;} 
688
689 
690     /*Nova notícia*/ 
691   .nova .names a { 
692    text-decoration: none !important; 
693    transition: 0.4s all; 
694
695    .nova .names a:hover img, .nova .names a:hover i { 
696    transform: translateY(-4px)!important; 
697    transition: 0.2s all; 
698
699    .nova .names { 
700    display: table; 
701    box-sizing: border-box; 
702    width: 100%; 
703
704    .nova .names .nom { 
705    width: 50%; 
706    display: inline-table; 
707
708    .nova .names .xarxes { 
709    width: 50%; 
710    display: inline-table; 
711
712    .nova p.youtube { 
713    margin: 0 0 20px; 
714
715    .nova p.subtitol:after { 
716    content: ""; 
717    width: 100%; 
718    height: 1px; 
719    background-color: #ddd; 
720    position: relative; 
721    display: table; 
722
723    .nova #right { 
724        padding-top: 25px; 
725
726    .nova .asset-full-content figure { 
727    display: inline-block; 
728    margin-bottom: 20px; 
729    border: 1px solid transparent; 
730    margin-right: 0; 
731    margin-left: 0; 
732    margin-top: 0; 
733
734    .nova .asset-full-content figcaption {display: block; text-align: center; font-size: 0.8em; font-style: italic; } 
735    .nova .fa-caret-down:before { 
736        content: "\f0d7" !important; 
737
738    @media (max-width: 480px) {  
739        .nova .asset-full-content figure { 
740        float: none !important; 
741
742
743    .nova .asset-full-content .content .content-body > p:nth-child(1):first-letter { 
744    color: ${colorSite}; 
745    float: left; 
746    font-family: Georgia; 
747    font-size: 5rem; 
748    line-height: 4rem; 
749    padding-top: 0; 
750    padding-right: 1rem; 
751    padding-left: 0px; 
752    padding-bottom: 0px; 
753    margin-top: -1rem; 
754
755     
756    ul.list-group.sidebar-list-group { 
757    list-style: none !important; 
758    margin: 0 !important; 
759    padding: 0 !important; 
760
761.asset-links .list-group.sidebar-list-group-item { 
762    list-style: none !important; 
763
764.asset-links li.list-group.sidebar-list-group-item a { 
765    color: #353430 !important; 
766    text-decoration: none !important; 
767    border: 1px solid #ddd; 
768    border-radius: 4px; 
769    display: block; 
770    padding: 10px; 
771    background-color: #eee; 
772
773.asset-links .list-group.sidebar-list-group-item a:hover { 
774    text-decoration: none !important; 
775
776.asset-links .list-group.sidebar-list-group-item a:before { 
777    content: "\f0c1"; 
778    font-family: 'fontawesome-alloy'; 
779    font-size: 25px; 
780    display: inline-block; 
781    margin-right: 4px; 
782    width: 10%; 
783    vertical-align: middle; 
784
785.asset-links li.list-group.sidebar-list-group-item a span.taglib-text { 
786    color: #353430 !important; 
787    display: inline-block; 
788    width: 80%; 
789    vertical-align: middle; 
790    text-decoration: none; 
791
792 
793.asset-links .list-group.sidebar-list-group-item:hover a, .asset-links .list-group.sidebar-list-group-item:hover a span.taglib-text { 
794    background-color: #353430 !important; 
795    color: #eee !important; 
796    text-decoration: none; 
797
798 
799/*Caixa contacte*/ 
800.caixa-contacte { 
801    border: 1px solid #ddd; 
802    padding: 10px; 
803    margin-bottom: 20px; 
804    margin-top: 30px; 
805    top: 60px; 
806    position: -webkit-sticky; 
807    position: sticky; 
808    box-sizing: border-box !important; 
809
810h2.mark { 
811    display: block; 
812    font-size: 0 !important; 
813    color: #fff !important; 
814    background-color: #fff !important; 
815
816 
817/*Elements notícia*/ 
818/*cita*/ 
819.nova cite { 
820    margin-top: 30px; 
821    margin-bottom: 30px; 
822    font-size: 20px; 
823    color: #666; 
824    padding-left: 10px; 
825    box-sizing: border-box; 
826    vertical-align: middle; 
827    display: inline-block; 
828    border-left: 3px solid #666; 
829    padding-top: 10px; 
830    padding-bottom: 10px; 
831    width: 80%; 
832    margin-left: 20%; 
833    line-height: normal !important; 
834
835 .nova .asset-full-content .content h3 { 
836    font-size: 18px; 
837    font-weight: normal; 
838    line-height: normal; 
839    margin-top: 40px; 
840    margin-bottom: 20px; 
841    color:  ${colorSite}; 
842
843.nova .asset-full-content .content h4 { 
844    font-size: 16px; 
845    font-weight: normal; 
846    line-height: normal; 
847    margin-top: 30px; 
848    margin-bottom: 10px; 
849    color: ${colorSite}; 
850
851 
852/*ODS*/ 
853@import url('https://fonts.googleapis.com/css2?family=Source+Sans+Pro&display=swap'); 
854 
855[class*=ods_] { 
856    font-family: 'Source Sans Pro', sans-serif; 
857    font-weight: bold; 
858    line-height: normal; 
859    text-transform: uppercase; 
860    font-size: 10px; 
861    color: white; 
862    display: inline-table; 
863    width: calc(50% - 4px); 
864    max-width: 130px; 
865    height: 130px; 
866    padding: 1em; 
867    box-sizing: border-box; 
868    background-color: grey; 
869    background-repeat: no-repeat; 
870    background-position: bottom; 
871    background-size: 100%; 
872    margin-left: 4px; 
873    margin-bottom: 4px; 
874
875.ods_01 { 
876    background-color: #e5233d; 
877    background-image: url(/documents/10193/252729907/ods_01.png); 
878
879.ods_02 { 
880    background-color: #dda73a; 
881     background-image: url(/documents/10193/252729907/ods_02.png); 
882
883.ods_03 { 
884    background-color: #4ca146; 
885     background-image: url(/documents/10193/252729907/ods_03.png); 
886
887.ods_04 { 
888    background-color: #c7212f; 
889     background-image: url(/documents/10193/252729907/ods_04.png); 
890
891.ods_05 { 
892    background-color: #ef402d; 
893     background-image: url(/documents/10193/252729907/ods_05.png); 
894
895.ods_06 { 
896    background-color: #27bfe6; 
897     background-image: url(/documents/10193/252729907/ods_06.png); 
898
899.ods_07 { 
900    background-color: #fbc412; 
901     background-image: url(/documents/10193/252729907/ods_07.png); 
902
903.ods_08 { 
904    background-color: #a31c44; 
905     background-image: url(/documents/10193/252729907/ods_08.png); 
906
907.ods_09 { 
908    background-color: #f26a2e; 
909     background-image: url(/documents/10193/252729907/ods_09.png); 
910
911.ods_10 { 
912    background-color: #dd1667; 
913     background-image: url(/documents/10193/252729907/ods_10.png); 
914
915.ods_11 { 
916    background-color: #f89d2a; 
917     background-image: url(/documents/10193/252729907/ods_11.png); 
918
919.ods_12 { 
920    background-color: #bf8d2c; 
921     background-image: url(/documents/10193/252729907/ods_12.png); 
922
923.ods_13 { 
924    background-color: #407f46; 
925     background-image: url(/documents/10193/252729907/ods_13.png); 
926
927.ods_14 { 
928    background-color: #1f97d4; 
929     background-image: url(/documents/10193/252729907/ods_14.png); 
930
931.ods_15 { 
932    background-color: #59ba47; 
933     background-image: url(/documents/10193/252729907/ods_15.png); 
934
935.ods_16 { 
936    background-color: #136a9f; 
937     background-image: url(/documents/10193/252729907/ods_16.png); 
938
939.ods_17 { 
940    background-color: #14496b; 
941     background-image: url(/documents/10193/252729907/ods_17.png); 
942
943 
944a.btn.button_ods { 
945    position: relative; 
946    display: table !important; 
947    width: auto; 
948    margin-top: 1em; 
949    margin-bottom: 0; 
950    background-image: none; 
951    background-color: ${colorSite}; 
952    color: #fff; 
953    text-shadow: none; 
954    border: none !important; 
955    float: none; 
956    font-size: inherit; 
957    border-radius: 0; 
958
959a.btn.button_ods:hover, a.btn.button_ods:focus { 
960    background-image: none; 
961    background-color: ${colorSite}70; 
962    color: #fff; 
963
964 
965</style>