112 Comunitat Valenciana - 112CV
S'ha produït un error mentre es processava la plantilla.
?substring(...) argument #2 had invalid value: The index must be at least 0, but was -1.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign parameterKey = parameterKeyAn... [in template "10155#10193#161981574" at line 115, column 49]
----
1<#ftl output_format="HTML">
2<#--
3 * Autor: Andrea Olivero
4 * Fecha Inicio: 22/06/2020
5 * Formato migracion: json
6 * Fecha Finalizacion: 30/06/2020
7 -->
8
9 <#assign reserved_article_title = "${.vars['reserved-article-title'].data}"/>
10 <#assign reserved_article_id = "${.vars['reserved-article-id'].data}"/>
11 <#assign viewUrl=""/>
12 <#assign cuerpo=""/>
13 <#assign posicion=""/>
14 <#assign iframeId = "${.vars['reserved-article-id'].data}"/>
15 <#assign iframeProtocol = ""/>
16 <#assign width = "100%"/>
17 <#assign height = "650"/>
18 <#assign scrolling = "auto"/>
19 <#assign src = ""/>
20 <#assign velocityCount = ""/>
21 <#assign ajustar_alto = false/>
22 <#assign mostrar_atras = false/>
23 <#assign mostrar_enlazar = false/>
24 <#assign mostrar_imprimir = false/>
25
26 <div class="webContent" style="float:none;">
27 <#if reserved_article_title?? && reserved_article_title!="">
28 <p class="header10">${reserved_article_title}</p>
29 </#if>
30 </div>
31
32 <#--Dependiendo del valor de la variable posicion el Cuerpo se pinta arriba o abajo
33 por lo que primero recogemos los valores en variables -->
34
35 <#--Posición arriba/abajo-->
36 <#if Posicion??>
37 <#assign posicion=Posicion.getData()/>
38 </#if>
39
40 <#--Texto en el cuerpo caja de texto enriquecido.-->
41 <#if Cuerpo??>
42 <#assign cuerpo = Cuerpo.getData()/>
43 </#if>
44
45 <div class="iframe">
46 <#--Si el valor seleccionado es arriba entonces imprimimos el contenido del cuerpo.-->
47 <#if posicion == "arriba">
48 <div class="texto_cuerpo">
49 ${cuerpo?no_esc}
50 </div>
51 </#if>
52 <#--Comprobamos valores rellenados por usuario-->
53 <#if ancho.getData()?? && ancho.getData()!="">
54 <#assign width = ancho.getData()/>
55 </#if>
56
57 <#if alto.getData()?? && alto.getData()!="">
58 <#assign height = alto.getData()/>
59 </#if>
60
61 <#if barra_desplazamiento.getData()?? && barra_desplazamiento.getData()!="">
62 <#assign scrolling = barra_desplazamiento.getData()/>
63 </#if>
64
65 <#if url.getData()?? && url.getData()!="">
66 <#assign src = url.getData()/>
67 </#if>
68
69 <#if autoajustar_alto?? && autoajustar_alto.getData()=="true">
70 <#assign ajustar_alto = true/>
71 </#if>
72
73 <#if mostrar_enlace_atras?? && mostrar_enlace_atras.getData()=="true">
74 <#assign mostrar_atras = true/>
75 </#if>
76
77 <#if mostrar_enlace_enlazar?? && mostrar_enlace_enlazar.getData()=="true">
78 <#assign mostrar_enlazar = true/>
79 </#if>
80
81 <#if mostrar_boton_imprimir?? && mostrar_boton_imprimir.getData()=="true">
82 <#assign mostrar_imprimir = true/>
83 </#if>
84
85 <#--Obtengo el dominio actual-->
86 <#assign currentUrl = Request.CURRENT_COMPLETE_URL/>
87 <#assign urlParts = currentUrl?split("/")/>
88 <#assign currentDomain = ""/>
89 <#assign currentProtocol = ""/>
90 <#list urlParts as urlPart>
91 <#if velocityCount == "3">
92 <#assign currentDomain = urlPart/>
93 </#if>
94 </#list>
95 <#--Obtengo el dominio del iframe -->
96 <#assign srcParts = src?split("/")/>
97 <#assign iframeDomain = ""/>
98 <#assign serverUrl = ""/>
99
100 <#if srcParts[0] == "http:" || srcParts[0] == "https:">
101 <#assign iframeDomain = srcParts[2]/>
102 <#assign iframeProtocol = srcParts[0]/>
103 <#assign serverUrl = iframeProtocol + "//" + iframeDomain/>
104 </#if>
105
106 <#if src?? && src!="">
107 <#-- parámetros de la url del portal-->
108
109 <#assign parametrosString = httpUtil.getQueryString(currentUrl)/>
110 <#assign parameterList = parametrosString?split("&")/>
111 <#assign sufijo = ""/>
112
113 <#list parameterList as parameterKeyAndValue>
114 <#if parameterKeyAndValue?? && parameterKeyAndValue?has_content>
115 <#assign parameterKey = parameterKeyAndValue?substring(0,parameterKeyAndValue?index_of("="))/>
116 <#assign parameterValue = parameterKeyAndValue?substring(parameterKeyAndValue?index_of("=")+1)/>
117
118 <#assign anyadir = true/>
119
120 <#-- ENT-308086 : Tenemos que ver si se ha añadido algún valor en el campo ignore_parametros-->
121 <#if ignore_parametros?? && ignore_parametros?has_content>
122 <#assign ignoreParameters = ignore_parametros.getData()?split(";")/>
123 <#list ignoreParameters as ignoreParameter>
124 <#if ignoreParameter?? && ignoreParameter?has_content && ignoreParameter==parameterKey>
125 <#assign anyadir = false/>
126 </#if>
127 </#list>
128 </#if>
129 <#--FIN ENT-308086-->
130
131 <#--Buscamos si se ha definido la URL que se ha de ver en el iFrame-->
132 <#if parameterKey == "viewUrl${iframeId}">
133 <#assign viewUrl = parameterValue />
134 <#assign anyadir = false/>
135 </#if>
136
137
138 <#if anyadir >
139 <#if sufijo != "" >
140 <#assign sufijo = sufijo + "&" />
141 <#else>
142 <#assign sufijo = "?" />
143 </#if>
144 <#assign sufijo = sufijo + parameterKeyAndValue />
145 </#if>
146 </#if>
147 </#list>
148
149 <#--Establecemos la URL que se ha de ver en el iFrame, si se ha definido-->
150
151 <#if viewUrl?? && viewUrl!="">
152 <#assign src = serverUrl + viewUrl />
153 </#if>
154
155 <#if sufijo?? && sufijo!="">
156
157 <#--Comprobamos si la URL ya trae parametros para concatenarlos-->
158 <#assign index = src?index_of('?')/>
159
160 <#if (index >= 0) >
161 <#assign sufijo = sufijo?replace("?", "&")/>
162 </#if>
163 <#assign src = "${src}${sufijo}"/>
164 </#if>
165
166 <div class="iframe-error-protocol" style="display: none;"><span><@liferay.language key="iframe.mensaje" /><a href="${src?no_esc}" target="_blank"><b><@liferay.language key="iframe.mensaje.ventana" /></b></a></span></div>
167 <#if mostrar_enlazar || mostrar_atras || mostrar_imprimir>
168 <div class="iframe-controls iframe-controls-${reserved_article_id} gva-btn-group gva-btn-group-end">
169 <#if mostrar_imprimir>
170 <a class="taglib-icon pull-right gva-btn gva-btn-outline-primary" id="iframe-print-${reserved_article_id}" target="_self">
171 <i class="fas fa-print"></i>
172 <span class="taglib-text"><@liferay.language key="print" /></span>
173 </a>
174 </#if>
175 <#if mostrar_enlazar>
176 <a class="iframe-show-link pull-right gva-btn gva-btn-outline-primary" id="iframe-show-link-${reserved_article_id}" style="display: none;" ><i class="fas fa-link"></i><@liferay.language key="iframe.enlazar" /></a>
177 </#if>
178 <#if mostrar_atras>
179 <a class="back-link pull-right gva-btn gva-btn-ghost-primary bold" id="iframe-back-link-${reserved_article_id}" href="javascript:history.go(-1)" style="display: none;"><i class="fa-solid fa-arrow-left"></i><@liferay.language key="back" /></a>
180 </#if>
181 </div>
182 <#if mostrar_enlazar>
183 <div id="iframe-link-${reserved_article_id}" class="iframe-link">
184 <input aria-labelledby="iframe-show-link-${reserved_article_id}" id="iframe-link-input-${reserved_article_id}" class="iframe-link-input" type="text" style="display: none;" />
185 </div>
186 </#if>
187
188 </#if>
189
190 <div id="iframe-container-${reserved_article_id}">
191 <iframe allow="clipboard-write" src="" width="${width}" height="${height}" scrolling="${scrolling}" title="${reserved_article_title}" id="iframe-${reserved_article_id}" name="iframe-${reserved_article_id}"></iframe>
192 </div>
193
194
195 <#--Si el valor seleccionado es abajo imprimimos el contenido del cuerpo.-->
196 <#if posicion == "abajo">
197 <div class="texto_cuerpo">
198 ${cuerpo?no_esc}
199 </div>
200 </#if>
201
202 <script type="text/javascript">
203
204
205 // Script para que no cargue el src del iframe dos veces por el efecto del SPA https://help.liferay.com/hc/es/requests/41501
206 var iframe = document.getElementById('iframe-${reserved_article_id}');
207 var url = "${src?no_esc}";
208 if (Liferay.SPA && iframe) {
209 iframe.src = url;
210 }
211 else {
212 Liferay.on(
213 'SPAReady',
214 function(event) {
215 if (iframe) {
216 iframe.src = url;
217 }
218 }
219 );
220 }
221
222 // No es el mismo dominio, así que definimos el valor del document.domain
223 <#if (ajustar_alto || mostrar_atras) && currentDomain?has_content && iframeDomain?has_content && !currentDomain.equals(iframeDomain) >
224 document.domain = 'gva.es';
225 </#if>
226
227 // ENT-337637 Cogemos protocolo por js
228 if( location.protocol == "https:" && "${iframeProtocol}" == "http:" )
229 $('.iframe-error-protocol').css('display','block');
230
231
232 // Controlar la visualizacion de los botones de Atras y Enlazar en las sucesivas cargas del iframe
233 <#if mostrar_enlazar || mostrar_atras >
234 var numLoads=0;
235 document.getElementById('iframe-${reserved_article_id}').onload = function () {
236 if (numLoads > 0) {
237 if ($(window).scrollTop() > $('#iframe-container-${reserved_article_id}').offset().top) {
238 $('html, body').animate({ scrollTop: $('#iframe-container-${reserved_article_id}').offset().top - 60 }, 'slow');
239 }
240 $('#iframe-link-input-${reserved_article_id}').fadeOut();
241 }
242 if (numLoads == 1) {
243 $('#iframe-show-link-${reserved_article_id}').show();
244 $('#iframe-back-link-${reserved_article_id}').show();
245 }
246 numLoads++;
247 }
248 </#if>
249
250
251 //Obtener enlace permanente del iframe
252 $('#iframe-show-link-${reserved_article_id}').click(function (event) {
253
254 //Cuando le damos click no queremos que se quede el marco del foco
255 $('#iframe-show-link-${reserved_article_id}').blur();
256
257 var input = $('#iframe-link-input-${reserved_article_id}');
258
259 if (!$(input).is(':visible')) {
260
261 var iframeLocation = document.getElementById('iframe-${reserved_article_id}').contentWindow.location;
262
263 var pageUrl = window.location.href;
264 var iframeParams = iframeLocation.href;
265
266 if (pageUrl.includes('?')) {
267 pageUrl = pageUrl.substring(0, pageUrl.indexOf('?'));
268 }
269
270 if (iframeParams.includes('?')) {
271 iframeParams = iframeParams.substring(iframeParams.indexOf('?')+1);
272 iframeParams = '&' + iframeParams.replace(/(&)?viewUrl=[^&]+/g, '');
273 } else {
274 iframeParams = '';
275 }
276
277 $(input).val(pageUrl + '?viewUrl${iframeId}=' + iframeLocation.pathname + iframeParams);
278 }
279 $(input).toggle();
280 });
281
282 $('#iframe-show-link-${reserved_article_id}').keyup(function(event){
283 if (event.keyCode == 13) {
284 event.preventDefault();
285 $('#iframe-show-link-${reserved_article_id}').click();
286 }
287 });
288
289 //Imprimimos sólo el contenido del iframe
290 $('#iframe-print-${reserved_article_id}').click(function (event) {
291 var ifr = document.getElementById("iframe-${reserved_article_id}");
292 ifr.contentWindow.focus();
293 ifr.contentWindow.print();
294 console.log("Click")
295 });
296 $('#iframe-print-${reserved_article_id}').keyup(function(event){
297 if (event.keyCode == 13) {
298 event.preventDefault();
299 $('#iframe-print-${reserved_article_id}').click();
300 }
301 });
302
303 //El enlace « Atrás de los publicadores para los contenidos de tipo IFRAME, vuelve atrás en el historial para que deshaga una posible navegación realizada en la página incrustada
304 $("span[class='header-back-to']").find("a").attr("href", "javascript:window.history.back()");
305
306 //Autoajustar alto cada vez que se cargue el contenido del iframe
307 <#if ajustar_alto >
308
309 // Autoajustar el alto del iframe cada segundo
310 setInterval(function() {
311 var iframe = document.getElementById('iframe-${reserved_article_id}');
312 var style = 0;
313 if (iframe && iframe !== 'null' && iframe !== 'undefined') {
314 style = iframe.style.height.replace('px', '');
315 if (iframe.contentWindow.document.body && iframe.contentWindow.document.body !== 'null' && iframe.contentWindow.document.body !== 'undefined') {
316 var offset = iframe.contentWindow.document.body.offsetHeight + 30;
317
318 if(style>=offset+31 || style<=offset-31){
319 iframe.style.height = offset + 'px';
320 }
321 }
322 }
323 },1);
324 </#if>
325 </script>
326
327 <#else>
328 No se ha introduccido una URL de iframe.
329 </#if>
330 </div>
Bon Nadal
Veure totes les notes de premsa






