Ficha de las Historias Animadas
Se ha producido un error al procesar la plantilla.
Denied access to method or field getAttribute of class org.apache.catalina.core.ApplicationHttpRequest
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign url = request.getAttribute("C... [in template "20902#20940#7261276" at line 141, column 1]
----
1<style>
2 #naranja {
3 color: orange !important;
4 }
5
6 #siguiente, #anterior {
7 font-size: 90px;
8 top: 100px;
9 }
10
11 #siguiente a, #anterior a {
12 cursor: pointer;
13 }
14
15 .image, .bloqueAudio {
16 display: none;
17 }
18
19 #image0 {
20 display: block;
21 }
22
23 .resumen {
24 color: #707070;
25 border-top: 1px dotted #E9C1DB;
26 border-bottom: 1px dotted #E9C1DB;
27 clear: both;
28 margin: 20px 0;
29 padding: 0 0 20px;
30 }
31
32 .nivo-controlNav {
33 position: absolute;
34 right: 0;
35 }
36
37 .nivo-controlNav a {
38 display: block;
39 width: 22px;
40 height: 22px;
41 background: url(/o/x61tThemeIkasbilWAR-theme/images/slider/bullets.png) no-repeat;
42 text-indent: -9999px;
43 border: 0;
44 margin-right: 3px;
45 float: left;
46 }
47
48 .nivo-controlNav a.active {
49 background-position: 0 -22px;
50 }
51
52 #detalle-habe-aldizkaria-fitxa > div:last-of-type #imgNode {
53 text-align: center;
54 }
55
56 #detalle-habe-aldizkaria-fitxa > div:last-of-type #imgNode + #siguiente a {
57 float: right;
58 }
59
60 @media only screen and (max-device-width: 1024px) and (min-device-width: 768px) and (orientation: portrait) {
61 #siguiente, #anterior {
62 font-size: 60px;
63 padding: 0;
64 }
65
66 #detalle-habe-aldizkaria-fitxa > div:last-of-type #imgNode {
67 padding: 0;
68 }
69 }
70
71 @media (max-width: 480px) {
72 #siguiente, #anterior {
73 font-size: 50px;
74 top: 55px;
75 }
76 }
77</style>
78
79<script>
80 $(document).ready(function () {
81 $("#audio0").trigger('play');
82 });
83
84 var slideIndex = 0;
85
86 function showSlides(pos, posPunto) {
87 var i;
88 var slides = document.getElementsByClassName("image");
89 var nivos = document.getElementsByClassName("nivo-control");
90 var audio = document.getElementById("audio" + slideIndex);
91 $(".nivo-control").removeClass("active");
92
93 //Interrumpe el audio si no se ha reproducido del todo al pasar a otro
94 if (audio.duration > 0 && !audio.paused) {
95 audio.pause();
96 audio.currentTime = 0;
97 }
98
99 //Pone invisibles todas las imagenes
100 for (i = 0; i < slides.length; i++) {
101 slides[i].style.display = "none";
102 }
103
104 if (pos == 1 && posPunto == -1) {
105 //Flecha derecha
106 slideIndex++;
107 if (slideIndex == slides.length) {
108 slideIndex = 0;
109 }
110 } else if (pos == -1 && posPunto == -1) {
111 //Flecha izquierda
112 slideIndex--;
113 if (slideIndex == -1) {
114 slideIndex = slides.length - 1;
115 }
116 } else {
117 //Se hace click en cualquier punto
118 $(".nivo-control").removeClass("active");
119 slideIndex = posPunto;
120 }
121
122 //Actualiza el estilo de los botones cuando se haga click sobre alguna flecha
123 for (i = 0; i < nivos.length; i++) {
124 if (nivos[i].getAttribute("rel") == slideIndex) {
125 nivos[i].className = "nivo-control active";
126 }
127 }
128
129 //Actualiza el estilo de los botones cuando se haga click en uno
130 $(".nivo-control").click(function () {
131 $(this).addClass("active");
132 });
133
134 //Muestra la imagen que corresponde junto a su reproduccion
135 slides[slideIndex].style.display = "block";
136 audio = document.getElementById("audio" + slideIndex);
137 audio.play();
138 }
139</script>
140
141<#assign url = request.getAttribute("CURRENT_URL")>
142<#assign id = paramUtil.getString(request, "articleId")>
143
144<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
145<#assign journalArticleResourceLocalServiceUtil = staticUtil["com.liferay.journal.service.JournalArticleResourceLocalServiceUtil"]>
146<#assign artResourcePK = journalArticleResourceLocalServiceUtil.getArticleResourcePrimKey(groupId, id)/>
147<#assign DLAppLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppLocalService")>
148
149<#--Incrementamos el valor de las visitas cada vez que se entra en el detalle-->
150<#assign assetEntryLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil"]>
151<#assign assetEntry = assetEntryLocalServiceUtil.getEntry("com.liferay.journal.model.JournalArticle", artResourcePK)>
152
153<#--Contadores-->
154<#assign $contadorImg = 0 />
155<#assign $contadorAudio = 0 />
156
157<#if id?has_content>
158 <#if journalArticleLocalService??>
159 <#assign articleById = journalArticleLocalService.getDisplayArticle(getterUtil.getLong(groupId), id) />
160 <#assign document = saxReaderUtil.read(articleById.getContentByLocale(locale)) >
161
162 <#assign titulo = document.valueOf("//dynamic-element[@field-reference='izenburua']/dynamic-content/text()") />
163 <#assign descripcion = document.valueOf("//dynamic-element[@field-reference='deskribapena']/dynamic-content/text()") />
164 <#assign imagen = document.valueOf("//dynamic-element[@field-reference='irudia']/dynamic-content/text()") />
165
166 <#assign slideNodes = document.selectNodes("//dynamic-element[@field-reference='slide']") />
167 <#assign imagenNodes = document.selectNodes("//dynamic-element[@field-reference='imagen']/dynamic-content/text()") />
168 <#assign audiosNodes = document.selectNodes("//dynamic-element[@field-reference='audio']/dynamic-content/text()") />
169
170 <div class="col-xs-12 col-md-12 col-lg-12 separadorDerecho" id="detalle-habe-aldizkaria-fitxa">
171 <#--PARTE IZQUIERDA-->
172 <div class="col-xs-12 col-sm-4 col-md-4 col-lg-4">
173 <#if imagen != ''>
174 <#assign jsonImagen = jsonFactoryUtil.createJSONObject(imagen)>
175 <#assign imagenFile = DLAppLocalService.getFileEntryByUuidAndGroupId(jsonImagen.getString("uuid"), getterUtil.getLong(groupId)) >
176 <#assign imagenUrl = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + themeDisplay.getScopeGroupId() +
177 "/" + imagenFile.getFolderId() + "/" + htmlUtil.unescape(imagenFile.getTitle())>
178 <img src="${imagenUrl}" width="210" height="176">
179 </#if>
180 </div>
181 <#--PARTE DERECHA-->
182 <div class="col-xs-12 col-sm-8 col-md-8 col-lg-8">
183 <#if titulo != ''>
184 <div class="titulo">
185 <h2>${titulo}</h2>
186 </div>
187 </#if>
188 <div class="descripcion">
189 <p>${descripcion}</p>
190 </div>
191 <#--PARTE FLECHA ANTERIOR-->
192 <div id="anterior" class="col-xs-2 col-sm-1 col-md-2 col-lg-2">
193 <a onclick="showSlides(-1, -1)"><i id="naranja" class="glyphicon glyphicon-triangle-left"></i></a>
194 </div>
195 <#--PARTE IMAGEN Y PUNTOS-->
196 <div id="imgNode" class="col-xs-8 col-sm-10 col-md-8 col-lg-8">
197 <#if imagenNodes?is_sequence>
198 <#assign temporary_image_src = "" />
199 <#list imagenNodes as imagenNodes_e>
200 <#assign temporary_image_src = imagenNodes_e.getText() />
201 <#assign jsonImagen = jsonFactoryUtil.createJSONObject(temporary_image_src)>
202 <#assign imagenFile = DLAppLocalService.getFileEntryByUuidAndGroupId(jsonImagen.getString("uuid"), getterUtil.getLong(groupId)) >
203 <#assign imagenUrl = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + themeDisplay.getScopeGroupId() +
204 "/" + imagenFile.getFolderId() + "/" + htmlUtil.unescape(imagenFile.getTitle())>
205 <#assign $idImg = "image" + $contadorImg />
206 <div id=${$idImg} class="image">
207 <img id="image" src="${imagenUrl}">
208 </div>
209 <#assign $contadorImg = $contadorImg + 1 />
210 </#list>
211 </#if>
212 <div id="nivo-controlNav" class="nivo-controlNav">
213 <script type="text/javascript">
214 //Se crean los puntos con sus respectivos onclicks para que el orden no se pierda
215 var noPos = 0;
216 var nivo = document.getElementById("nivo-controlNav");
217 for (j = 0; j < ${$contadorImg}; j++) {
218 var a = document.createElement("a");
219 var node = document.createTextNode(j + 1);
220 if (j == 0) {
221 a.className = "nivo-control active";
222 } else {
223 a.className = "nivo-control";
224 }
225 a.rel = j;
226 a.appendChild(node);
227
228 a.onclick = (function (noPos, j) {
229 return function () {
230 showSlides(noPos, j);
231 };
232 })(noPos, j);
233
234 nivo.appendChild(a);
235
236 }
237 </script>
238 </div>
239 </div>
240 <#--PARTE FLECHA SIGUIENTE-->
241 <div id="siguiente" class="col-xs-2 col-sm-1 col-md-2 col-lg-2">
242 <a onclick="showSlides(1, -1)"><i id="naranja" class="glyphicon glyphicon-triangle-right"></i></a>
243 </div>
244 <#if audiosNodes?is_sequence>
245 <#assign temporary_image_src = "" />
246 <#list audiosNodes as audiosNodes_e>
247 <#assign temporary_audio_src = audiosNodes_e.getText() />
248 <#assign jsonAudio = jsonFactoryUtil.createJSONObject(temporary_audio_src)>
249 <#assign audioFile = DLAppLocalService.getFileEntryByUuidAndGroupId(jsonAudio.getString("uuid"), getterUtil.getLong(groupId)) >
250 <#assign audioUrl = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + themeDisplay.getScopeGroupId() +
251 "/" + audioFile.getFolderId() + "/" + htmlUtil.unescape(audioFile.getTitle())>
252 <#assign $idAudio = "audio" + $contadorAudio />
253 <div class="bloqueAudio">
254 <#--<#if $contadorAudio == 0>
255 <audio id=${$idAudio} preload="auto" autoplay controls>
256 <#else>-->
257 <audio id=${$idAudio} preload="auto" controls>
258 <#--</#if>-->
259 <source src="${audioUrl}" type="audio/mpeg">
260 </audio>
261 </div>
262 <#assign $contadorAudio = $contadorAudio + 1 />
263 </#list>
264 </#if>
265 </div>
266 </div>
267 </#if>
268</#if>
