Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing: ==> themeDisplay.getURLCurrent()?split("/")[2] [in template "20102#20129#23798944" at line 348, column 41] ---- Tip: It's the final [] step that caused this error, not those before it. ---- 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 friendlyURLTipoCurso = themeD... [in template "20102#20129#23798944" in function "getTipoCursoFirendlyUrl" at line 348, column 9] ----
1<#--
2Name: Unidade - Tipos de Curso
3Type: Asset Publisher Widget Template
4Path: ROOT/assets/unidades-tipos-de-curso/widget-templates/unidades_tipos_de_curso.html
5-->
6<#assign prefix = "ssp" />
7<#assign companyId = themeDisplay.getCompanyId() />
8<#assign siteGroupId = themeDisplay.getSiteGroupId() />
9<#assign friendlyUrlTipoCurso = getTipoCursoFirendlyUrl() />
10<#assign friendlyUrlUnidade = getUnidadeFirendlyUrl() />
11
12<#assign categoryId = 0 />
13
14<#if friendlyUrlTipoCurso?contains("livre") || friendlyUrlTipoCurso?contains("extensao")>
15 <#assign friendlyUrlTemaFirst = getTemaFirstLevelFriendly() />
16 <#assign friendlyUrlTemaSecond = getTemaSecondLevelFriendly() />
17 <#assign friendlyUrlTemaThird = getTemaThirdLevelFriendly() />
18
19 <#if friendlyUrlTipoCurso?contains("livre") >
20 <#assign tipoCurso = "Livre" />
21 <#else>
22 <#assign tipoCurso = "Extensão" />
23 </#if>
24<#-- cursos tecnicos nao tem 2o e 3o nivel de temas conforme prototipo GCR -->
25<#elseif friendlyUrlTipoCurso?contains("tecnico")>
26 <#assign tipoCurso = "Técnico" />
27 <#assign friendlyUrlTemaFirst = getTemaFirstLevelFriendly() />
28 <#assign friendlyUrlTemaSecond = "#erro#" />
29 <#assign friendlyUrlTemaThird = "#erro#" />
30
31<#else>
32</#if>
33
34<#assign groupService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") />
35<#assign groupObj = groupService.fetchFriendlyURLGroup(companyId, "/"+friendlyUrlUnidade) />
36<#assign groupIdUnidade = groupObj.getGroupId() />
37
38 <#assign journal = getJournalArticle(groupIdUnidade) >
39 <#if !journal?contains("#erro#")>
40 <#assign groupIdUnidade = groupId />
41 <#assign journalArticleUnidade = journal>
42 <#assign document = saxReaderUtil.read(journalArticleUnidade.getContent()) />
43 <#assign rootElement = document.getRootElement() />
44
45 <#-- Get fields -->
46
47 <#-- Nome da unidade -->
48 <#assign xPathSelector_nomeUnidadeParaBreadCrumb = saxReaderUtil.createXPath("dynamic-element[@field-reference='nomeUnidade']")>
49 <#assign nomeUnidadeParaBreadCrumb = xPathSelector_nomeUnidadeParaBreadCrumb.selectSingleNode(rootElement).getStringValue()>
50
51 <#-- Nome da unidade -->
52 <#assign xPathSelector_nome = saxReaderUtil.createXPath("dynamic-element[@field-reference='nomeUsualUnidade']")>
53 <#assign nomeUnidade = xPathSelector_nome.selectSingleNode(rootElement).getStringValue()>
54
55 <#assign xPathSelector_codigoUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='codigoUnidade']")>
56 <#assign codigoUnidade = xPathSelector_codigoUnidade.selectSingleNode(rootElement).getStringValue()?trim>
57
58 <#if nomeUnidade?? >
59 <#assign nome = nomeUnidade >
60 <#else>
61 <#assign nome = "" >
62 </#if>
63
64 <#-- Endereço 1 -->
65
66 <#-- Rua -->
67 <#assign xPathSelector_enderecoUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='enderecoUnidade']")>
68 <#assign enderecoUnidade = xPathSelector_enderecoUnidade.selectSingleNode(rootElement).getStringValue()?trim>
69
70 <#if enderecoUnidade?? >
71 <#assign endereco = enderecoUnidade >
72 <#else>
73 <#assign endereco = "" >
74 </#if>
75
76 <#-- número -->
77 <#assign xPathSelector_numEnderecoUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='numEnderecoUnidade']")>
78 <#assign numeroUnidade = xPathSelector_numEnderecoUnidade.selectSingleNode(rootElement).getStringValue()?trim>
79
80 <#if numeroUnidade?? >
81 <#assign numero = numeroUnidade >
82 <#else>
83 <#assign numero = "" >
84 </#if>
85
86 <#-- Bairro -->
87 <#assign xPathSelector_bairroUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='bairroUnidade']")>
88 <#assign bairroUnidade = xPathSelector_bairroUnidade.selectSingleNode(rootElement).getStringValue()?trim>
89
90 <#if bairroUnidade?? >
91 <#assign bairro = bairroUnidade >
92 <#else>
93 <#assign bairro = "" >
94 </#if>
95
96 <#-- Cidade -->
97 <#assign xPathSelector_cidadeUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='cidadeUnidade']")>
98 <#assign cidadeUnidade = xPathSelector_cidadeUnidade.selectSingleNode(rootElement).getStringValue()?trim>
99
100 <#if cidadeUnidade?? >
101 <#assign cidade = cidadeUnidade >
102 <#else>
103 <#assign cidade = "" >
104 </#if>
105
106 <#-- Cep -->
107 <#assign xPathSelector_cepUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='cepUnidade']")>
108 <#assign cepUnidade = xPathSelector_cepUnidade.selectSingleNode(rootElement).getStringValue()?trim>
109
110 <#if cepUnidade?? >
111 <#assign cep = cepUnidade >
112 <#else>
113 <#assign cep = "" >
114 </#if>
115
116 <#-- Fim endereço 1 -->
117
118 <#-- Endereço 2 -->
119
120 <#-- Rua -->
121 <#assign xPathSelector_enderecoUnidade2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='enderecoUnidade2']")>
122 <#assign enderecoUnidade2 = xPathSelector_enderecoUnidade2.selectSingleNode(rootElement).getStringValue()?trim>
123
124 <#if enderecoUnidade2?? >
125 <#assign endereco2 = enderecoUnidade2 >
126 <#else>
127 <#assign endereco2 = "" >
128 </#if>
129
130 <#-- número -->
131 <#assign xPathSelector_numeroUnidade2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='numeroUnidade2']")>
132 <#assign numeroUnidade2 = xPathSelector_numeroUnidade2.selectSingleNode(rootElement).getStringValue()?trim>
133
134 <#if numeroUnidade2?? >
135 <#assign numero2 = numeroUnidade2 >
136 <#else>
137 <#assign numero2 = "" >
138 </#if>
139
140 <#-- Bairro -->
141 <#assign xPathSelector_bairroUnidade2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='bairroUnidade2']")>
142 <#assign bairroUnidade2 = xPathSelector_bairroUnidade2.selectSingleNode(rootElement).getStringValue()?trim>
143
144 <#if bairroUnidade2?? >
145 <#assign bairro2 = bairroUnidade2 >
146 <#else>
147 <#assign bairro2 = "" >
148 </#if>
149
150 <#-- Cidade -->
151 <#assign xPathSelector_cidadeUnidade2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='cidadeUnidade2']")>
152 <#assign cidadeUnidade2 = xPathSelector_cidadeUnidade2.selectSingleNode(rootElement).getStringValue()?trim>
153
154 <#if cidadeUnidade2?? >
155 <#assign cidade2 = cidadeUnidade2 >
156 <#else>
157 <#assign cidade2 = "" >
158 </#if>
159
160 <#-- Cep -->
161 <#assign xPathSelector_cepUnidade2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='cepUnidade2']")>
162 <#assign cepUnidade2 = xPathSelector_cepUnidade2.selectSingleNode(rootElement).getStringValue()?trim>
163
164 <#if cepUnidade2?? >
165 <#assign cep2 = cepUnidade2 >
166 <#else>
167 <#assign cep2 = "" >
168 </#if>
169
170 <#-- Fim endereço 2 -->
171
172
173
174 <#-- Horário -->
175 <#assign xPathSelector_horarioUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='horarioUnidade']")>
176 <#assign horarioUnidade = xPathSelector_horarioUnidade.selectSingleNode(rootElement).getStringValue()?trim>
177
178 <#if horarioUnidade?? >
179 <#assign horario = horarioUnidade >
180 <#else>
181 <#assign horario = "" >
182 </#if>
183
184 <#-- DDD -->
185 <#assign xPathSelector_dddUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='dddTelefoneUnidade']")>
186 <#assign dddUnidade = xPathSelector_dddUnidade.selectSingleNode(rootElement).getStringValue()?trim>
187
188 <#if dddUnidade?? >
189 <#assign ddd = dddUnidade >
190 <#else>
191 <#assign ddd = "" >
192 </#if>
193
194 <#-- telefone -->
195 <#assign xPathSelector_telefoneUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='telefoneUnidade']")>
196 <#assign telefoneUnidade = xPathSelector_telefoneUnidade.selectSingleNode(rootElement).getStringValue()?trim>
197
198 <#if telefoneUnidade?? >
199 <#assign telefone = telefoneUnidade >
200 <#else>
201 <#assign telefone = "" >
202 </#if>
203
204 <#-- UF -->
205 <#assign xPathSelector_ufUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='ufUnidade']")>
206 <#assign ufUnidade = xPathSelector_ufUnidade.selectSingleNode(rootElement).getStringValue()?trim>
207
208 <#if ufUnidade?? >
209 <#assign UF = ufUnidade >
210 <#else>
211 <#assign UF = "" >
212 </#if>
213
214 <#-- Estacionamento -->
215 <#assign xPathSelector_estacionamento = saxReaderUtil.createXPath("dynamic-element[@field-reference='estacionamentoUnidade']")>
216 <#assign estacionamentoUnidade = xPathSelector_estacionamento.selectSingleNode(rootElement).getStringValue()>
217
218 <#if estacionamentoUnidade?? >
219 <#assign estacionamento = estacionamentoUnidade >
220 <#else>
221 <#assign estacionamento = "" >
222 </#if>
223
224 <#-- Estacionamento Unidade 2 -->
225 <#assign xPathSelector_estacionamento2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='estacionamentoUnidade2']")>
226 <#assign estacionamentoUnidade2 = xPathSelector_estacionamento2.selectSingleNode(rootElement).getStringValue()>
227
228 <#if estacionamentoUnidade2?? >
229 <#assign estacionamento2 = estacionamentoUnidade2 >
230 <#else>
231 <#assign estacionamento2 = "" >
232 </#if>
233
234 <#-- Facebook -->
235 <#assign xPathSelector_facebookUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='facebookUnidade']")>
236 <#assign facebookUnidade = xPathSelector_facebookUnidade.selectSingleNode(rootElement).getStringValue()>
237
238 <#if facebookUnidade?? >
239 <#assign facebook = facebookUnidade >
240 <#else>
241 <#assign facebook = "" >
242 </#if>
243
244 <#-- Instagram -->
245 <#assign xPathSelector_instagramUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='instagramUnidade']")>
246 <#assign instagramUnidade = xPathSelector_instagramUnidade.selectSingleNode(rootElement).getStringValue()>
247
248 <#if instagramUnidade?? >
249 <#assign instagram = instagramUnidade >
250 <#else>
251 <#assign instagram = "" >
252 </#if>
253
254 <#-- Maps -->
255 <#assign xPathSelector_googlemapsUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='googlemapsUnidade']")>
256 <#assign googlemapsUnidade = xPathSelector_googlemapsUnidade.selectSingleNode(rootElement).getStringValue()?trim>
257
258 <#if googlemapsUnidade?? >
259 <#assign googlemaps = googlemapsUnidade >
260 <#else>
261 <#assign googlemaps = "" >
262 </#if>
263
264 <#assign hasMaps = (googlemaps?trim?length > 0) >
265
266
267
268 <#-- Waze -->
269 <#assign xPathSelector_wazeUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='wazeUnidade']")>
270 <#assign wazeUnidade = xPathSelector_wazeUnidade.selectSingleNode(rootElement).getStringValue()>
271
272 <#if wazeUnidade?? >
273 <#assign waze = wazeUnidade >
274 <#else>
275 <#assign waze = "" >
276 </#if>
277
278 <#-- Imagem -->
279
280 <#assign imagem = getImagemURL('imagemUnidade')>
281 <#assign imagem2 = getImagemURL('imagemUnidade2')>
282
283 <#-- Estação próxima -->
284 <#assign xPathSelector_estacaoProxima = saxReaderUtil.createXPath("dynamic-element[@field-reference='estacaoProxima']")>
285
286 <#assign estacaoProxima = xPathSelector_estacaoProxima.selectSingleNode(rootElement).getStringValue()>
287
288 <#assign hasEstacaoProxima = (estacaoProxima?trim?length > 0) >
289
290 </#if>
291
292 <#function getImagemURL fieldName>
293
294 <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@field-reference='${fieldName}']")>
295
296 <#assign imagemStr = xPathSelector.selectSingleNode(rootElement).getStringValue()>
297
298 <#if imagemStr?contains("classPK") >
299 <#assign
300 imagemJson = jsonFactoryUtil.createJSONObject(imagemStr)
301 imagemId = getterUtil.getInteger(imagemJson.get('fileEntryId'))
302 dl = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService")
303 dlURLHelper = serviceLocator.findService("com.liferay.document.library.util.DLURLHelper")
304 fileEntry = dl.getFileEntry(imagemId)
305 imagemURL = dlURLHelper.getImagePreviewURL(fileEntry, themeDisplay)
306 imagem = {
307 "alt" : imagemJson.get('alt'),
308 "url" : imagemURL
309 }
310 />
311 <#return imagem>
312 </#if>
313
314 <#return {"alt":"", "url":""}>
315
316 </#function>
317
318 <#function getJournalArticle groupId>
319 <#assign journalArticleService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
320 <#assign friendlyURL = getUnidadeFirendlyUrl()>
321
322 <#attempt>
323
324 <#if !friendlyURL?contains("fragment_collections") >
325
326 <#return journalArticleService.getArticleByUrlTitle(groupId,friendlyURL)>
327
328 </#if>
329
330 <#recover>
331
332 <#return '#erro#'>
333 </#attempt>
334 </#function>
335
336 <#function getUnidadeFirendlyUrl >
337 <#assign friendly = themeDisplay.getURLCurrent()?split("/")[1]?split("?")?first />
338 <#if friendly?contains("web") >
339 <#assign friendly = themeDisplay.getURLCurrent()?split("/")[3]?split("?")?first>
340 </#if>
341
342 <#return friendly />
343
344 </#function>
345
346 <#function getTipoCursoFirendlyUrl >
347
348 <#assign friendlyURLTipoCurso = themeDisplay.getURLCurrent()?split("/")[2]?split("?")?first />
349 <#if friendlyURLTipoCurso?contains("guest") >
350 <#assign friendlyURLTipoCurso = themeDisplay.getURLCurrent()?split("/")[4]?split("?")?first>
351 </#if>
352
353 <#return friendlyURLTipoCurso />
354
355 </#function>
356
357 <#function getTemaFirstLevelFriendly >
358 <#attempt>
359 <#assign friendly = themeDisplay.getURLCurrent()?split("/")[1]?split("?")?first />
360 <#if !friendly?contains("web") >
361 <#if themeDisplay.getURLCurrent()?split("/")?size gt 3 >
362 <#assign friendly = themeDisplay.getURLCurrent()?split("/")[3]?split("?")?first />
363 <#else>
364 <#assign friendly = "" />
365 </#if>
366
367 <#else>
368 <#if themeDisplay.getURLCurrent()?split("/")?size gt 5 >
369 <#assign friendly = themeDisplay.getURLCurrent()?split("/")[5]?split("?")?first>
370 <#else>
371 <#assign friendly = "" />
372 </#if>
373 </#if>
374
375 <#return friendly />
376 <#recover>
377 <#return '#erro#'>
378 </#attempt>
379
380</#function>
381
382 <#function getTemaSecondLevelFriendly >
383 <#attempt>
384 <#assign friendly = themeDisplay.getURLCurrent()?split("/")[1]?split("?")?first />
385
386 <#if !friendly?contains("web") >
387 <#if themeDisplay.getURLCurrent()?split("/")?size gt 4 >
388 <#assign friendly = themeDisplay.getURLCurrent()?split("/")[4]?split("?")?first />
389 <#else>
390 <#assign friendly = "" />
391 </#if>
392 <#else>
393 <#if themeDisplay.getURLCurrent()?split("/")?size gt 6 >
394 <#assign friendly = themeDisplay.getURLCurrent()?split("/")[6]?split("?")?first>
395 <#else>
396 <#assign friendly = "" />
397 </#if>
398 </#if>
399
400 <#return friendly />
401 <#recover>
402 <#return '#erro#'>
403 </#attempt>
404
405</#function>
406
407 <#function getTemaThirdLevelFriendly >
408 <#attempt>
409 <#assign friendly = themeDisplay.getURLCurrent()?split("/")[1]?split("?")?first />
410
411 <#if !friendly?contains("web") >
412 <#if themeDisplay.getURLCurrent()?split("/")?size gt 5 >
413 <#assign friendly = themeDisplay.getURLCurrent()?split("/")[5]?split("?")?first />
414 <#else>
415 <#assign friendly = "" />
416 </#if>
417 <#else>
418 <#if themeDisplay.getURLCurrent()?split("/")?size gt 7 >
419 <#assign friendly = themeDisplay.getURLCurrent()?split("/")[7]?split("?")?first>
420 <#else>
421 <#assign friendly = "" />
422 </#if>
423 </#if>
424 <#return friendly />
425 <#recover>
426 <#return '#erro#'>
427 </#attempt>
428
429</#function>
430
431<style>
432
433.stop-scrolling {
434 height: 100%;
435 overflow: hidden;
436}
437
438/*Header Unidade*/
439
440.ssp-header-unidade__content-info-body{
441 padding-top:30px;
442}
443
444.ssp-header-unidade__atendimento-container > p > a {
445 color:white!important;
446}
447
448.ssp-header-unidade__atendimento-container > p > a:hover {
449 color:white!important;
450 font-weight: normal!important;
451}
452
453.creditoFotoMob{
454
455 margin: 0 auto;
456 background: #FFF7D6;
457 font-family: 'Montserrat';
458 font-size: 14px;
459 line-height: 1.6em;
460 border-radius: 3px;
461 max-width: 240px;
462 height: auto;
463 color: #4F596F;
464 padding: 5px;
465 position: relative;
466 float: right;
467 top: 70%;
468 max-height: 40px;
469 font-weight: 500;
470 right: 15%;
471 flex-wrap: unset;
472}
473
474.creditoFotoMob:after{ /*Triangulo*/
475 content: "";
476 width: 0;
477 height: 0;
478 position: absolute;
479 border-left: 10px solid transparent;
480 border-right: 10px solid transparent;
481 /*Faz seta "apontar para baixo. Definir o valor como 'top' fará ela "apontar para cima" */
482 /*Aqui entra a cor da "aba" do balão */
483 border-bottom: 10px solid #FFF7D6;
484 top: -9px; /*localização. Experimente alterar para 'bottom'*/
485 left: 20%;
486}
487.tooltip-inner {
488 max-width: 230px;
489 padding: 0.75rem 0.75rem;
490 color: #4F596F;
491 text-align: center;
492 background-color: #FFF7D6;
493 border-radius: 0.3125rem;
494}
495.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before {
496 top: 0;
497 border-width: 0.4rem 0.4rem 0;
498 border-top-color: #FFF7D6;
499}
500.ssp-header-title-bloco {
501 font-size: 20px;
502 font-weight: 600;
503}
504
505.ssp:not(.liferay-instance) .ssp-header-unidade__imagem-box-imagem{
506 height:100%;
507}
508/*#slider {
509 width: 80%;
510 max-width: 500px;
511 height: 25vw;
512 max-height: 150px;
513
514 position: relative;
515}*/
516
517#slider .ssp-header-unidade__imagem-box-imagem{
518 opacity: 0;
519 position: absolute;
520 /*width: 100%;
521 height: 100%;*/
522 object-fit: cover;
523 transition: opacity 2000ms;
524}
525
526#slider .ssp-header-unidade__imagem-box-imagem.selected {
527 opacity: 1;
528}
529
530@media only screen and (max-width: 1024px) {
531
532#slider .ssp-header-unidade__imagem-box-imagem{
533 margin-top: -240px;
534 height: 248px;
535
536 }
537 .ssp-header-unidade__container-info {
538 margin-top: 240px!important;
539 }
540
541}
542
543 @media only screen and (max-width: 768px){
544
545 .ssp:not(.liferay-instance) .ssp-header-unidade__imagem-box-imagem{
546 height:228px;
547 }
548 .ssp-header-title-bloco {
549 font-size: 14px;
550}
551
552 .creditoFotoMob{
553 font-size: 9px!important;
554 max-width: 161px!important;
555 max-height: 30px!important;
556 padding: 8.5px 9.5px!important;
557 line-height: 0.6em!important;
558
559 }
560}
561
562/* Final Header Unidade*/
563
564.btn-nivel-livre-ead{
565 background-color: #ff9057;
566 border-color: #ff9057;
567 box-shadow: none;
568 }
569
570 .icon-ao-vivo{
571 font-size:12px;
572 margin:0 3px;
573 }
574
575
576.subtema-ativo{
577
578 color:#fcc080!important;
579}
580
581.separador-subtemas{
582 width:100% !important;
583 margin-top: -1em !important;
584 margin-bottom: 2.25rem!important;
585}
586
587.bg-nivel-extensao {
588 background-color: #3ECCA6 !important; }
589 a.bg-nivel-extensao:hover, a.bg-nivel-extensao:focus,
590 button.bg-nivel-extensao:hover,
591 button.bg-nivel-extensao:focus {
592 background-color: #3ECCA6 !important; }
593
594
595/*novo forma de exibir o menu de areas*/
596
597.ssp:not(.liferay-instance) .ssp-section-tema__container-menu-item .tema {
598 font-size: 15px;
599 color: #454F63;
600}
601
602
603
604.ssp:not(.liferay-instance) .ssp-section-tema__container-menu {
605 flex-wrap: wrap;
606}
607
608.tema i{
609 margin-right: 8px;
610}
611
612
613</style>
614
615<#if tipoCurso == "Livre">
616
617 <style>
618 .ssp:not(.liferay-instance) .ativo{
619 background-color: #FF9057!important;
620 color:white!important;
621 font-weight: 600!important;
622 }
623
624 .tema-ativo{
625 background-color: #FF9057!important;
626 color:white!important;
627 font-weight: 600!important;
628 }
629
630 .ssp:not(.liferay-instance) .ssp-section-tema__container-menu-item .tema:hover {
631 background-color: #FF9057;
632 color: white;
633 font-weight: 600 !important;
634 }
635 .subtema.btn-nivel-3.subtema-ativo {
636 background: #FF9057!important;
637 color: white!important;
638 border-color: #FF9057!important;
639 }
640 </style>
641
642<#elseif tipoCurso == "Técnico">
643
644
645 <style>
646/* curso tecnico */
647 .ssp:not(.liferay-instance) .ativo{
648 background-color: #F7BD23!important;
649 color:white!important;
650 font-weight: 600!important;
651 }
652
653 .tema-ativo{
654 background-color: #F7BD23!important;
655 color:white!important;
656 font-weight: 600!important;
657 }
658
659 .ssp:not(.liferay-instance) .ssp-section-tema__container-menu-item .tema:hover {
660 background-color: #F7BD23;
661 color: white;
662 font-weight: 600 !important;
663 }
664 .subtema.btn-nivel-3.subtema-ativo {
665 background: #F7BD23!important;
666 color: white!important;
667 border-color: #F7BD23!important;
668 }
669 </style>
670
671<#else>
672
673 <style>
674/* curso extensao */
675 .ssp:not(.liferay-instance) .ativo{
676 background-color: #3ECCA6!important;
677 color:white!important;
678 font-weight: 600!important;
679 }
680
681 .tema-ativo{
682 background-color: #3ECCA6!important;
683 color:white!important;
684 font-weight: 600!important;
685 }
686
687 .ssp:not(.liferay-instance) .ssp-section-tema__container-menu-item .tema:hover {
688 background-color: #3ECCA6;
689 color: white;
690 font-weight: 600 !important;
691 }
692 .subtema.btn-nivel-3.subtema-ativo {
693 background: #3ECCA6!important;
694 color: white!important;
695 border-color: #3ECCA6!important;
696 }
697 </style>
698
699</#if>
700
701<style>
702
703/* css para link no nome da unidade */
704
705.ssp-header-unidade__title a{
706
707 text-decoration: none!important;
708 font-family: Montserrat;
709 font-size: 44px;
710 max-width: 440px;
711 font-weight: 600!important;
712 line-height: 1.23;
713 text-align: left;
714 color: white;
715}
716
717.ssp-section-tema__subtitle-curso-section {
718
719 margin-left: 40px!important;
720
721}
722
723.ssp-page-busca__section-resultado__ver-todos{
724 margin-right: 40px!important;
725}
726
727.submenu-tema-ativo{
728 background-color: #34495e!important;
729 color:white!important;
730 font-weight: 600!important;
731}
732
733.submenu-tema-ativo-hover{
734 background-color: #34495e!important;
735 color:white!important;
736 font-size:50px;
737 font-weight: 600!important;
738}
739
740.slider-curso>.slick-area__item{
741
742width:100%;
743
744}
745
746.custom-card-curso-tema{
747
748 height:288px!important;
749
750}
751
752@media only screen and (max-width: 768px){
753
754 .ssp:not(.liferay-instance) .custom-card-curso-tema {
755 width: 100% !important;
756 height:auto!important;
757 }
758
759
760 .ssp-page-busca__section-resultado__ver-todos {
761 display:none;
762 }
763
764 .filtroInscBolsa{
765 display:none!important;
766 }
767
768}
769
770.ssp:not(.liferay-instance) .ssp-container__cursos-sem-slick {
771 display: flex;
772 justify-content: center;
773 flex-wrap: wrap;
774}
775
776/*Novas funcionalidades*/
777 #filtro-temas-nivel-3{
778 padding-bottom: 2em;
779 }
780
781 .switch {
782 position: relative;
783 display: inline-block;
784 width: 63px;
785 height: 31.5px;
786 margin: 0;
787 }
788
789 .switch input {
790 opacity: 0;
791 width: 0;
792 height: 0;
793 }
794
795 .slider {
796 position: absolute;
797 cursor: pointer;
798 top: 0;
799 left: 0;
800 right: 0;
801 bottom: 0;
802 background-color: #454F63;
803 -webkit-transition: .4s;
804 transition: .4s;
805 }
806
807 .slider:before {
808 position: absolute;
809 content: "";
810 height: 21px;
811 width: 21px;
812 left: 7px;
813 bottom: 5.5px;
814 background-color: #454F63;
815 -webkit-transition: .4s;
816 transition: .4s;
817 }
818
819 input:checked + .slider {
820 background-color: #2967F4;
821 }
822
823 input:focus + .slider {
824 box-shadow: 0 0 1px #2967F4;
825 }
826
827 input:checked + .slider:before {
828 -webkit-transform: translateX(26px);
829 -ms-transform: translateX(26px);
830 transform: translateX(26px);
831 }
832
833 /* Rounded sliders */
834 .slider.round {
835 border-radius: 35px;
836 }
837
838 .slider.round:before {
839 border-radius: 50%;
840 }
841
842 /* content filter */
843
844 .ssp-slider-check__container{
845
846 display: flex;
847 justify-content: flex-end;
848
849 }
850
851
852
853 .ssp-slider-check__content-itens{
854
855 display: flex;
856 width: 800px!important;
857
858 justify-content: flex-end!important;
859
860 }
861
862 .ssp-slider-check__content-item{
863
864 display: flex;
865 align-items: center;
866 padding: 0 20px;
867 }
868
869
870 .ssp-slider-check__label{
871
872 font-family: Montserrat;
873 color: #78849E;
874 font-size: 16px;
875 padding-left: 10px;
876 font-weight: 600;
877
878 }
879
880 .ssp-section-tema__container-menu {
881 padding-bottom: 15px;
882 }
883
884 .ssp-section-tema__subtitle-desconto{
885 display: block;
886 font-size: 30px;
887 }
888
889 @media only screen and (max-width: 1024px) {
890
891 .ssp-section-tema__subtitle-desconto{
892 font-size: 19px;
893 }
894
895 .ssp-header-unidade__title a{
896
897 font-size: 24px;
898 }
899
900 .ssp-section-tema__subtitle-curso-section {
901
902 margin-left: 0px!important;
903
904 }
905
906 #filtro-ativo-nivel-2{
907 justify-content: center;
908 }
909
910 .ssp-slider-check__label{
911
912 font-size: 11px;
913
914 }
915
916 .tema-slick-area {
917
918 display: flex;
919 align-items: center;
920 justify-content: flex-start;
921 font-size: 0;
922 flex-wrap: wrap;
923 }
924
925 /* custom itens */
926
927
928 .ssp-unidade-temas__label-filtre-por{
929 font-size: 15px!important;
930 padding-left: 5px!important;
931 }
932
933
934 .ssp-section-tema__container-menu {
935 height: auto!important;
936 }
937
938 .tema-slick-area-mobile {
939 display: flex;
940 align-items: center;
941 justify-content: center;
942 font-size: 0;
943 flex-wrap: wrap;
944 }
945
946 .ssp-section-tema__container-submenu-nivel3 {
947
948 justify-content: center;
949 }
950
951 .ssp-slider-check__container{
952 padding-top:10px!important;
953 }
954 }
955</style>
956
957<#if tipoCurso == "Livre" || tipoCurso == "Extensão">
958
959 <style>
960 @media only screen and (max-width: 768px){
961 .tema-ativo::after{
962 font-family: "Font Awesome 5 Free";
963 font-weight: 900;
964 content: "\f00d";
965 font-size: 12px;
966 margin: 0 5px;
967 }
968 }
969 </style>
970</#if>
971<style>
972 @media only screen and (max-width: 768px){
973 .subtema-ativo::after{
974 font-family: "Font Awesome 5 Free";
975 font-weight: 900;
976 content: "\f00d";
977 font-size: 12px;
978 margin: 0 5px;
979 }
980
981 .ssp:not(.liferay-instance) .ssp-page-busca__section-resultado__ver-todos-mobile {
982 font-family: Montserrat;
983 font-size: 16px;
984 font-weight: 600;
985 line-height: 1.21;
986 color: #78849e;
987 text-decoration: none !important;
988 transition: 0.3s;
989 text-align: center !important;
990 padding-left: 7em;
991 }
992
993 .ssp:not(.liferay-instance) .ssp-page-busca__section-resultado__ver-todos-mobile::after {
994 font-family: FontAwesome;
995 font-weight: 900;
996 content: '\f054';
997 font-size: 12px;
998 margin-left: 5px;
999 }
1000
1001 }
1002
1003 /* Custom css para unidades */
1004
1005 .ssp-unidade-temas__label-filtre-por{
1006
1007 font-family: Montserrat;
1008 font-size: 20px;
1009 font-weight: 600;
1010 padding: 15px;
1011 padding-left: 30px;
1012 color: #78849E;
1013
1014 }
1015
1016 .ssp-section-tema__container-submenu-nivel3 .btn-nivel-3 {
1017 margin: 15px 10px;
1018
1019 }
1020
1021
1022 .ssp-line-nivel-divisor {
1023 width: 100%;
1024 height: 1px;
1025 background: #78849E;
1026 margin: 15px 0;
1027 }
1028
1029 .ssp-header-unidade__content-info{
1030 z-index: 0!important;
1031 }
1032
1033 .ssp-btn-tema-mobile--active{
1034 background-color: #FE9057!important;
1035 color: white!important;
1036 }
1037
1038 .ssp-btn-tema-mobile--active::after{
1039 font-family: "Font Awesome 5 Free";
1040 font-weight: 900;
1041 content: "\f00d";
1042 font-size: 12px;
1043 margin: 0 5px;
1044 }
1045
1046 .ssp-btn-subtema-mobile--active{
1047 background-color: #78849E!important;
1048 color: white!important;
1049 }
1050
1051
1052
1053 /* Botão Visualizar mais */
1054
1055 .ssp-btn__visualizar-mais-content{
1056 display: flex;
1057 flex-wrap: nowrap;
1058 align-items: center;
1059 justify-content: center;
1060 }
1061
1062 .ssp-btn__visualizar-mais{
1063 cursor: pointer;
1064 font-size: 14px;
1065 }
1066
1067 #visualizar-mais{
1068 font-family:montserrat;
1069 }
1070
1071 .tema{
1072 box-shadow: none !important;
1073 }
1074 .separador-subtemas{
1075 margin:10px 0px 30px 0px!important;
1076 }
1077
1078 .py-5{
1079 padding-bottom: 0px!important;
1080 padding-top: 5px!important;
1081 }
1082
1083 .ssp-section-tema__title{
1084 margin: 40px 0px 25px 0px!important;
1085 }
1086@media only screen and (min-width: 1025px){
1087 .ssp-section-tema__container-submenu-nivel3 .btn-nivel-3 {
1088 margin-bottom: 20px!important;
1089 }
1090
1091 .filtroTextoMobile{
1092 display: none;
1093 }
1094}
1095
1096/* novo botao ver todos os cursos */
1097
1098.ver-todos-cursos-link{
1099 color: #78849E!important;
1100}
1101
1102.ver-todos-cursos-link:hover{
1103 color: #515A6B!important;
1104}
1105
1106.ver-todos-cursos-link:hover p{
1107 color: #515A6B!important;
1108}
1109
1110.custom-card-curso-tema{
1111
1112 height:282px!important;
1113
1114}
1115
1116.container-fluid .row{
1117 margin: 0 !important;
1118}
1119
1120
1121.container-fluid .col-md-12{
1122 padding: 0 !important;
1123}
1124
1125.ver-todos-no-click{
1126 text-decoration: none !important;
1127 pointer-events: none !important;
1128}
1129
1130.slick-area__item.card-curso-nivel-2 .custom-card-curso-tema__title{
1131 height: 70px;
1132}
1133
1134#slider .ssp-header-unidade__imagem-box-imagem img{
1135 position: absolute;
1136 width: 100%;
1137 height: 100%;
1138 object-fit: cover;
1139}
1140
1141/* Transporte próximo */
1142
1143.ssp:not(.liferay-instance) .ssp-header-unidade__estacionamento {
1144 display:block;
1145 padding-top: 5px;
1146}
1147
1148.ssp:not(.liferay-instance) .ssp-header-unidade__endereco-container {
1149 display: flex;
1150 align-items: center;
1151 justify-content: space-between;
1152 flex-flow: column;
1153 align-items: flex-start;
1154 gap: 15px;
1155}
1156
1157.ssp:not(.liferay-instance) .ssp-header-unidade__estacionamento a{
1158 color:white;
1159}
1160
1161.ssp:not(.liferay-instance) .ssp-header-unidade__estacionamento a:hover{
1162 font-weight:normal!important;
1163}
1164
1165.ssp:not(.liferay-instance) .ssp-header-unidade__estacionamento p{
1166 display:inline-block;
1167 margin: 0;
1168}
1169
1170.ssp:not(.liferay-instance) .ssp-header-unidade__endereco {
1171 max-width: 100%;
1172}
1173
1174@media only screen and (max-width: 768px){
1175
1176 .ssp:not(.liferay-instance) .ssp-header-unidade__container-info .container {
1177 padding: 0;
1178 }
1179
1180 .ssp:not(.liferay-instance) .ssp-header-unidade__estacionamento p{
1181 display:inline;
1182 font-size: 13px;
1183 }
1184}
1185
1186
1187/* Alteracoes para 10019 */
1188.ssp:not(.liferay-instance) .ssp-section-tema__container-submenu-nivel3 .btn-nivel-3 {
1189 font-weight: 600;
1190 color: #454F63;
1191}
1192#filtro-temas-nivel-2 .subtema.subtema-ativo:not(.todos){
1193 margin: 0 auto 30px auto!important;
1194}
1195#filtro-temas-nivel-2 .btn-nivel-3{
1196 display: inline-flex;
1197 height: 40.061px;
1198 padding: 16.868px;
1199 justify-content: center;
1200 align-items: center;
1201 gap: 16.868px;
1202 flex-shrink: 0;
1203 border-radius: 8px;
1204 border: 1.054px solid #C3CAD9;
1205}
1206.tema-ativo::after{
1207 font-family: "Font Awesome 5 Free";
1208 font-weight: 900;
1209 content: "\f00d";
1210 font-size: 12px;
1211 margin: 0 5px;
1212}
1213.subtema-ativo:not(.subtema-ativo.todos)::after{
1214 font-family: "Font Awesome 5 Free";
1215 font-weight: 900;
1216 content: "\f00d";
1217 font-size: 12px;
1218 margin: 0 5px;
1219}
1220#filtro-temas-nivel-3{
1221 margin-bottom: 20px;
1222}
1223#filtro-temas-nivel-3 a:not(.todos, .subtema-ativo)::after{
1224 content: "+";
1225 padding-left: 10px;
1226 font-size: 16px;
1227}
1228.ssp:not(.liferay-instance) .ssp-section-tema__title{
1229 color: #78849E;
1230 text-align: center;
1231 font-family: Montserrat;
1232 font-size: 32px;
1233 font-style: normal;
1234 font-weight: 600;
1235 line-height: normal;
1236}
1237.ssp:not(.liferay-instance) .ssp-section-tema__title.selected {
1238 font-size: 24px;
1239 font-weight: 400;
1240}
1241.ssp:not(.liferay-instance) .ssp-section-tema__title::after {
1242 display: none!important;
1243}
1244.ssp-title-filtrar-mais {
1245 color: #454F63;
1246 font-family: Montserrat;
1247 font-size: 20px;
1248 font-style: normal;
1249 font-weight: 600;
1250 line-height: normal;
1251 margin-top: 58px;
1252 margin-bottom: 24px;
1253 margin-left: 10px;
1254}
1255#filtro-temas-nivel-3 .subtema {
1256 border-radius: 32px;
1257 border: 1.054px solid #C3CAD9;
1258 display: flex;
1259 height: 32px;
1260 padding: 16.868px 16px;
1261 justify-content: center;
1262 align-items: center;
1263 gap: 12px;
1264 color: var(--boto, #636C7E);
1265 text-align: center;
1266 font-family: Montserrat;
1267 font-size: 16px;
1268 font-style: normal;
1269 font-weight: 600;
1270 line-height: normal;
1271}
1272.ssp-divider {
1273 content: " ";
1274 display: block;
1275 background-color: #78849E;
1276 width: 127px;
1277 height: 3px;
1278 margin: 25px auto 50px;
1279}
1280.ssp-section-tema__container-menu-item:has(.tema-ativo) {
1281 margin-left: auto;
1282 margin-right: auto;
1283}
1284
1285@media only screen and (max-width: 1024px) {
1286 .ssp-title-filtrar-mais {
1287 color: #454F63;
1288 font-family: Montserrat;
1289 font-size: 18px;
1290 font-style: normal;
1291 font-weight: 600;
1292 line-height: normal;
1293 margin-top: 48px;
1294 margin-bottom: 40px;
1295 margin-left: 0px;
1296 }
1297 .ssp:not(.liferay-instance) .ssp-section-tema__title {
1298 color: #78849E;
1299 text-align: center;
1300 font-family: Montserrat;
1301 font-size: 21px;
1302 font-style: normal;
1303 font-weight: 700;
1304 line-height: normal;
1305 }
1306
1307 .ssp:not(.liferay-instance) .ssp-section-tema__title.selected {
1308 font-size: 16px;
1309 font-weight: 400;
1310 }
1311
1312 .ssp-divider {
1313 margin: 0px auto 30px;
1314 }
1315}
1316
1317.ssp:not(.liferay-instance) .ssp-card-curso, .ssp:not(.liferay-instance) .ssp-card-todos-cursos{
1318
1319box-shadow: 0 0 15px rgba(0, 0, 0, 0.20);
1320
1321}
1322</style>
1323
1324
1325<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
1326<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
1327<#assign groupId = themeDisplay.getSiteGroupId()>
1328
1329<#assign vocabularyTemaMercadologico = assetVocabularyLocalService.getGroupVocabulary(groupId, "Tema(Mercadológico)")>
1330
1331<input type="hidden" id="ssp-vocabulary-id-tema-mercadologico" value="${vocabularyTemaMercadologico.getVocabularyId()}">
1332
1333
1334<#-- Header da Unidade -->
1335
1336
1337<section style="position:relative;">
1338 <div class="ssp-header-unidade__imagem-box">
1339 <div class="ssp-header-unidade__imagem-box-box-linha"></div>
1340
1341 <div class="ssp-header-unidade__imagem-box-box-linha2"></div>
1342
1343 <div id="slider">
1344
1345 <div class="ssp-header-unidade__imagem-box-imagem selected">
1346
1347 <img src="${imagem.url}" loading="lazy" <#if imagem.alt?length != 0> alt="${imagem.alt}"</#if> >
1348
1349 </div>
1350
1351 <#if endereco2?length != 0>
1352
1353 <div class="ssp-header-unidade__imagem-box-imagem">
1354 <img src="${imagem2.url}" loading="lazy" <#if imagem2.alt?length != 0> alt="${imagem2.alt}"</#if> >
1355 </div>
1356
1357 </#if>
1358
1359
1360 </div>
1361 <!--div class="ssp-header-unidade__imagem-box-imagem" style="background-image: url(img/bg-fale-com-gente.jpg)"></div-->
1362
1363 <#-- dados de compartilhamento -->
1364 <@liferay_util["html-top"]>
1365 <meta name="image" property="og:image" content="${imagem.url}">
1366 <meta property="og:image:width" content="1024">
1367 </@>
1368 <#-- dados de compartilhamento -->
1369
1370 <#if tipoCurso == "Livre" >
1371 <div class="ssp-header-tema__tag-tipo-curso"></div>
1372 <#elseif tipoCurso == "Técnico">
1373 <!-- Tag de Tipo de Curso -->
1374 <div class="ssp-header-tema__tag-tipo-curso bg-nivel-tecnico"></div>
1375
1376 <#else>
1377 <!-- Tag de Extensão -->
1378 <div class="ssp-header-tema__tag-tipo-curso bg-nivel-extensao"></div>
1379
1380 </#if>
1381 <div class="ssp-header-unidade__container-info">
1382
1383 <div class="container">
1384
1385 <div class="ssp-header-unidade__content-info" style="height: auto;">
1386
1387 <div class="ssp-header-unidade__content-info-container">
1388
1389 <div>
1390
1391 <div>
1392 <small class="ssp-header-unidade__subtitle">Senac</small>
1393 </div>
1394
1395 <div class="ssp-header-unidade__title-container">
1396
1397 <div>
1398
1399 <h1 class="ssp-header-unidade__title">
1400 <a href="https://www.sp.senac.br/${friendlyUrlUnidade}">
1401 ${nome}
1402 </a>
1403 </h1>
1404
1405
1406 </div>
1407
1408 <#-- o código da unidade é usado para referência de unidade no -->
1409 <span id="codUnidadeReferencia" class="d-none">${codigoUnidade}</span>
1410 <span id="friendlyUnidade" class="d-none">${friendlyUrlUnidade}</span>
1411 <span id="friendlyTipoCurso" class="d-none">${friendlyUrlTipoCurso}</span>
1412 <span id="nomeUnidadeParaBreadCrumb" class="d-none">${nomeUnidadeParaBreadCrumb}</span>
1413
1414 <#if friendlyUrlTipoCurso?contains("livre")>
1415 <span id="tipoCursoText" class="d-none">Livre</span>
1416 <#elseif friendlyUrlTipoCurso?contains("tecnico")>
1417 <span id="tipoCursoText" class="d-none">Técnico</span>
1418 <#else>
1419 <span id="tipoCursoText" class="d-none">Extensão</span>
1420 </#if>
1421 <#if friendlyUrlTemaFirst?contains("#erro#")>
1422 <span id="friendlyTemaNv1" class="d-none"></span>
1423 <#else>
1424 <span id="friendlyTemaNv1" class="d-none">${friendlyUrlTemaFirst}</span>
1425 </#if>
1426 <#if friendlyUrlTemaSecond?contains("#erro#")>
1427 <span id="friendlyTemaNv2" class="d-none"></span>
1428 <#else>
1429 <span id="friendlyTemaNv2" class="d-none">${friendlyUrlTemaSecond}</span>
1430 </#if>
1431 <#if friendlyUrlTemaThird?contains("#erro#")>
1432 <span id="friendlyTemaNv3" class="d-none"></span>
1433 <#else>
1434 <span id="friendlyTemaNv3" class="d-none">${friendlyUrlTemaThird}</span>
1435 </#if>
1436
1437 </div>
1438
1439 </div>
1440
1441 <div class="ssp-header-unidade__endereco-container">
1442
1443 <div class="d-flex flex-wrap">
1444
1445 <div>
1446
1447 <#if endereco2?length != 0>
1448 <span class="ssp-header-title-bloco">Bloco I</span><br>
1449 </#if>
1450
1451 <address class="ssp-header-unidade__endereco">
1452 ${endereco}, ${numero}<br>
1453 ${bairro}, ${cidade} - ${UF}, ${cep}
1454 </address>
1455
1456 <span class="ssp-header-unidade__estacionamento">
1457
1458 <i class="fas fa-car"></i>
1459
1460 <#if estacionamento?contains("true")>
1461 <strong>Possui estacionamento?</strong> Sim
1462 <#else>
1463 <strong>Possui estacionamento?</strong> Não
1464 </#if>
1465
1466 </span>
1467 </div>
1468
1469 <#if endereco2?length != 0>
1470
1471 <div class="pt-5">
1472 <span class="ssp-header-title-bloco">Bloco II</span><br>
1473 <address class="ssp-header-unidade__endereco">
1474 ${endereco2}, ${numero2}<br>
1475 ${bairro2}, ${cidade2}, ${cep2}
1476 </address>
1477 <span class="ssp-header-unidade__estacionamento">
1478 <i class="fas fa-car"></i>
1479
1480 <#if estacionamento2?contains("true")>
1481 <strong>Possui estacionamento?</strong> Sim
1482 <#else>
1483 <strong>Possui estacionamento?</strong> Não
1484 </#if>
1485
1486 </span>
1487 </div>
1488
1489 </#if>
1490
1491 <#if hasEstacaoProxima>
1492
1493 <span class="ssp-header-unidade__estacionamento">
1494 <i class="fa-solid fa-train-subway" aria-hidden="true"></i>
1495 <strong>Estação mais próxima:</strong>
1496 ${estacaoProxima}
1497 </span>
1498
1499 </#if>
1500
1501 </div>
1502
1503 <div class="ssp-header-unidade__content-info-maps">
1504
1505
1506 <a class="btn btn-nivel border-white ssp-header-unidade__btn" href="${googlemaps}" target="_blank">
1507 <i class="fas fa-map-marker-alt mr-2 ssp-header-unidade__btn-icon"></i>Google Maps
1508 </a>
1509
1510 <a class="btn btn-nivel border-white ml-2 d-sm-inline-block d-md-none d-lg-none d-xl-none ssp-header-unidade__btn" href="${waze}" target="_blank">
1511 <i class="fab fa-waze mr-2 ssp-header-unidade__btn-icon"></i>Waze
1512 </a>
1513
1514 </div>
1515
1516 </div>
1517
1518 </div>
1519
1520 <div class="ssp-header-unidade__content-info-body">
1521
1522 <div class="ssp-header-unidade__atendimento-container">
1523 <p><strong>Atendimento:</strong></p>
1524 <p>${horario}</p>
1525 </div>
1526
1527 </div>
1528
1529
1530 </div>
1531
1532 </div>
1533
1534 </div>
1535
1536 </div>
1537
1538
1539<script>
1540
1541 if ( $.trim($('.ssp-header-unidade__title').html()) === 'Santo Amaro'){
1542
1543 $('.ssp-header-unidade__subtitle').html('Centro Universitário Senac')
1544
1545 } else if ( $.trim($('.ssp-header-unidade__title').html()) === 'Campos do Jordão'){
1546
1547 $('.ssp-header-unidade__subtitle').html('Centro Universitário Senac')
1548
1549 } else if ( $.trim($('.ssp-header-unidade__title').html()) === 'Águas de São Pedro'){
1550
1551 $('.ssp-header-unidade__subtitle').html('Centro Universitário Senac')
1552
1553 }
1554
1555//Animação de Crédito da imagem
1556
1557$(document).ready(function(){
1558 let larguraTela = $(window).width();
1559
1560 if(larguraTela < 1024){
1561
1562 animateCreditImage()
1563
1564 $(window).scroll(function() {
1565 ScrollPagina()
1566 });
1567
1568 }else{
1569
1570 $(".ssp-header-unidade__imagem-box-imagem" ).mouseover(function() {
1571 $(".creditoFotoMob").removeClass('d-none')
1572
1573 });
1574
1575 $(".ssp-header-unidade__imagem-box-imagem" ).mouseout(function() {
1576 $(".creditoFotoMob").addClass('d-none')
1577
1578 });
1579
1580 }
1581
1582 //verifica posição do Top
1583
1584 function ScrollPagina(){
1585
1586 let scrollPage = $(window).scrollTop();
1587
1588 if(scrollPage == 0){
1589
1590 animateCreditImage()
1591
1592 }
1593 }
1594
1595 function animateCreditImage(){
1596
1597 $( ".creditoFotoMob" ).removeClass('d-none').fadeIn( 200 ).delay( 2500 ).fadeOut( 5000 );
1598
1599 }
1600
1601 //anima Slider fotos unidades de
1602
1603 let time = 5000,
1604 currentImageIndex = 0,
1605 images = document
1606 .querySelectorAll("#slider .ssp-header-unidade__imagem-box-imagem")
1607 max = images.length;
1608
1609 function nextImage() {
1610
1611 images[currentImageIndex]
1612 .classList.remove("selected")
1613
1614 currentImageIndex++
1615
1616 if(currentImageIndex >= max)
1617 currentImageIndex = 0
1618
1619 images[currentImageIndex]
1620 .classList.add("selected")
1621 }
1622
1623 function start() {
1624
1625 let enderecos = document.querySelectorAll('address');
1626
1627 if(enderecos.length >= 2){
1628
1629 setInterval(() => {
1630 // troca de image
1631 nextImage()
1632 }, time)
1633 }
1634
1635 }
1636
1637 window.addEventListener("load", start)
1638
1639});
1640
1641</script>
1642
1643
1644
1645</section>
1646
1647<!-- Fim Header Unidade -->
1648
1649
1650
1651<#-- Conteúdo dinâmico que carrega os temas, subtemas e cursos -->
1652
1653<section>
1654
1655 <div>
1656
1657 <h2 class="ssp-section-tema__title" data-section="title">
1658 Qual a sua área de interesse?
1659 </h2>
1660
1661 <div class="ssp-divider"></div>
1662
1663 <div class="container">
1664
1665 <div id="temas" class="ssp-section-tema__container-menu">
1666
1667 <div class="ssp-section-tema__container-menu-item">
1668 <a href="#a" class="tema todos" data-nvl="0">
1669 <i class="fa-solid fa-dice-d6"></i>
1670 Todos
1671 </a>
1672 </div>
1673
1674 </div>
1675
1676 <!-- Botão Visualizar Mais -->
1677
1678 <div class="ssp-btn__visualizar-mais-content d-md-none d-lg-none d-xl-none">
1679
1680 <p id="visualizar-mais" class="ssp-btn__visualizar-mais">Visualizar mais</p>
1681
1682 <i class="fas fa-chevron-down mx-2 visualizar-mais-seta" style="font-size: 14px;"></i>
1683
1684 </div>
1685
1686 <!-- filtros ativos para Mobile -->
1687
1688 <div id="filtro-ativo" class="tema-slick-area-mobile py-2">
1689
1690 <!-- filtro nivel 1 -->
1691 <div id="filtro-ativo-nivel-1" class="ssp-section-tema__container-menu-item mega-menu">
1692
1693 </div>
1694
1695 <div id="filtro-ativo-nivel-2" class="container ssp-section-tema__container-submenu-nivel3">
1696
1697 </div>
1698
1699 </div>
1700
1701 </div>
1702
1703 </div>
1704
1705</section>
1706
1707<section id="tema-nivel2-container">
1708
1709 <div id="tema-atual">
1710 <h2 class="ssp-section-tema__title"></h2>
1711 <div class="ssp-divider"></div>
1712 </div>
1713
1714 <#--
1715 <div id="subtemas-lista-mobile"
1716 class="container d-none ssp-section-tema__container-submenu-nivel3"></div> -->
1717
1718 <div id="filtro-temas-nivel-2" class="container ssp-section-tema__container-submenu-nivel3 d-none"></div>
1719
1720 <div id="filtro-temas-nivel-3" class="container ssp-section-tema__container-submenu-nivel3 d-none"></div>
1721
1722</section>
1723
1724<section id="cursos-por-categoria-container"
1725 style="padding-bottom:30px">
1726
1727 <section class="py-5">
1728
1729 <div class="container">
1730 <!-- <hr class="filtroInscBolsa"> -->
1731 <div class="filtroTextoMobile">
1732 <span style="font-family: 'Montserrat';font-size: 15px;font-weight: 600;color: #454F63;" > Filtrar por:</span>
1733 </div>
1734 <div class="ssp-slider-check__container" style="padding: 20px 0px;" id="container-filtros">
1735 <div class="ssp-slider-check__content-itens">
1736
1737 <div class="ssp-slider-check__content-item">
1738
1739 <label id="inscricao-aberta" class="switch">
1740 <input id="chkInscricao" type="checkbox">
1741 <span class="slider round"></span>
1742 </label>
1743
1744 <span class="ssp-slider-check__label">Comprar agora</span>
1745
1746 </div>
1747
1748 <#if tipoCurso == "Livre" || tipoCurso == "Técnico">
1749
1750 <div class="ssp-slider-check__content-item">
1751
1752 <label id="bolsas-estudo" class="switch">
1753 <input id="chkBolsa" type="checkbox">
1754 <span class="slider azul round"></span>
1755 </label>
1756
1757 <span class="ssp-slider-check__label">Bolsas de estudo</span>
1758
1759 </div>
1760 </#if>
1761 </div>
1762
1763 </div>
1764
1765 <!-- <hr class="filtroInscBolsa"> -->
1766 </div>
1767
1768 </section>
1769
1770 <div style="padding-bottom: 30px;">
1771
1772 <section id="cursos-por-subtema-container" class="container d-none">
1773
1774 <!--h2 id="subtema-atual" class="ssp-section-tema__title-subtema"></h2-->
1775
1776 <div id="subsubtemas-lista" class="ssp-section-tema__container-submenu-nivel3"></div>
1777
1778 <div id="curso-sem-slick" class="ssp-container__cursos-sem-slick"></div>
1779
1780
1781 </section>
1782
1783 </div>
1784
1785 <div id="filtroSemCurso" class="ssp-bolsa-formulario__card-aviso-atencao d-none container text-left" style="width: 100%;">
1786
1787 <i class="fas fa-exclamation-circle ssp-bolsa-formulario__card-aviso-atencao-icon" aria-hidden="true"></i>
1788
1789 <div class="ssp-bolsa-formulario__card-aviso-texto"><p>Sem cursos para o filtro selecionado</p>
1790 </div>
1791
1792 </div>
1793
1794
1795</section>
1796
1797
1798<#-- Template para card de cursos por categoria -->
1799<section id="cursos-por-categoria-template"
1800 class="cursos-por-categoria ssp-section container d-none">
1801
1802
1803 <div class="ssp-page-busca__section-resultado-container"
1804 id="container-slider-cursos-livres">
1805
1806 <a href="#a" data-nvl="" data-tema=""
1807 class="ver-todos-cursos-link d-none-mobile">
1808 <p
1809 class="ssp-page-busca__section-resultado__title-outros tema-nome ssp-section-tema__subtitle-curso-section"></p></a>
1810
1811 </div>
1812
1813 <div class="slider-curso" style="display: flex;"></div>
1814
1815</section>
1816
1817<#-- Estrutura com botões de tipos de curso - os únicos que precisam ser dinâmicos são Livre e Técnico -->
1818
1819<section class="ssp-section ssp-section-lg-top">
1820
1821
1822 <div class="container text-left">
1823
1824 <h2 class="ssp-section-title">
1825 <lfr-editable id="title" type="rich-text">
1826 Cursos oferecidos
1827 </lfr-editable>
1828 </h2>
1829
1830 <div class="ssp-btns-horizontal-area">
1831
1832 <#function getCategorias primaryKey>
1833
1834 <#assign categoryService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
1835 <#attempt>
1836
1837 <#return categoryService.getCategories("com.liferay.journal.model.JournalArticle", primaryKey)>
1838
1839 <#recover>
1840
1841 <#return '#erro#'>
1842 </#attempt>
1843 </#function>
1844
1845 <#assign
1846
1847
1848 categoriesList = getCategorias(journal.getResourcePrimKey())
1849 normalizer = serviceLocator.findService("com.liferay.portal.kernel.util.FriendlyURLNormalizer")
1850 vocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")
1851 vocabularies = vocabularyLocalService.getAssetVocabularies(-1,-1)
1852
1853 />
1854
1855
1856 <#list vocabularies as vocabulary >
1857 <#if vocabulary.getName() == 'Unidades'>
1858
1859 <#assign
1860 xPathSelector_nomeUsualUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='nomeUsualUnidade']")
1861 nomeUsual = xPathSelector_nomeUsualUnidade.selectSingleNode(rootElement).getStringValue()
1862 categories = vocabulary.getCategories()
1863 >
1864 <#list categories as category>
1865 <#if category.getName()?trim == nomeUsual?trim>
1866
1867 <#assign categoryId = category.getCategoryId() >
1868 </#if>
1869 </#list>
1870 </#if>
1871 </#list>
1872
1873
1874
1875 <#-- Prefixo EAD-->
1876 <#assign xPathSelector_urlEAD = saxReaderUtil.createXPath("dynamic-element[@field-reference='prefixourlead']")>
1877 <#assign prefixoURLEAD = xPathSelector_urlEAD.selectSingleNode(rootElement).getStringValue()>
1878
1879 <#assign hasPrefixoUrlEad = (prefixoURLEAD?trim?length > 0) >
1880
1881
1882 <#list categoriesList![] as category>
1883
1884 <#assign vocabularyName = vocabularyLocalService.getVocabulary(category.getVocabularyId()).getTitle("pt-br")?trim />
1885
1886 <#if normalizer.normalize(vocabularyName) == "tipo-de-curso">
1887 <#assign normalizedCategoryName = normalizer.normalize(category.getName()) />
1888
1889 <#if category.getName() == "Livre EAD">
1890 <a href="#" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-${normalizedCategoryName}">Senac Online<i class="fas fa-signal-stream icon-ao-vivo" aria-hidden="true"></i>ao vivo</a>
1891 <#else>
1892 <a href="#" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-${normalizedCategoryName}">${category.getName()}</a>
1893 </#if>
1894
1895
1896 </#if>
1897
1898 </#list>
1899
1900 <#-- Verifica se a unidade oferta curso de Idiomas-->
1901
1902 <<#list categoriesList![] as category>
1903
1904 <#assign vocabularyName = vocabularyLocalService.getVocabulary(category.getVocabularyId()).getTitle("pt-br")?trim />
1905
1906 <#if normalizer.normalize(vocabularyName) == "tema-mercadologico-">
1907
1908 <#assign normalizedCategoryName = normalizer.normalize(category.getName()) />
1909
1910 <#if category.getName() == "Idiomas">
1911 <a href="#" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-${normalizedCategoryName}">${category.getName()}</a>
1912 <#else>
1913 </#if>
1914
1915 </#if>
1916
1917 </#list>
1918
1919 <#-- Verifica se a unidade oferta curso livre-->
1920
1921
1922 <#if hasPrefixoUrlEad >
1923
1924 <a href="${prefixoURLEAD}" target="_blank" class="btn btn-nivel btn-nivel-ead">EAD</a>
1925
1926 </#if>
1927
1928
1929 </div>
1930
1931 </div>
1932
1933
1934</section>
1935
1936 <script>
1937
1938const isMobile = $(window).width() <= 1024
1939
1940var temas = [];
1941var subtemasStorage = new Map();
1942var activeCategory = 'all';
1943var activeCategoryLevel = 0;
1944var limit = 2;
1945var offset = 0;
1946var todosText = '';
1947var limitTodosCursos = 16;
1948var offsetTodosCursos = 0;
1949var groupId = 0;
1950var tipoCursoNome = "${tipoCurso}";
1951var categoryIdTipoCurso = 0;
1952var tipoCursoNomeBreadCrumb = "";
1953var cookieName = "";
1954var tam = $(window).width();
1955var urlUnidade = "";
1956var urlTipoCurso = "";
1957var categoryIdUnidade = "";
1958var urlTemasStorage = new Map();
1959var urlTemaNv1 = "";
1960var urlTemaNv2 = "";
1961var urlTemaNv3 = "";
1962let urlParamTemaNv3 = ''
1963var acessoDireto = 0;
1964var categoryIdTemaNv1 = "";
1965var categoryIdTemaNv2 = "";
1966var categoryIdTemaNv3 = "";
1967const HOST = window.location.origin;
1968var filtrarInscricoesAbertas = 0;
1969var filtrarBolsaEstudo = 0;
1970var activeModeloExibicao = 1;
1971var limitCursos = isMobile ? 4 : 11;
1972var cliqueFiltroMobile = 0;
1973var carregandoMais = false;
1974var urlCursosPorTipoCursoETemaComFiltrosBolsaECompra = "/o/senac-content-services/cursosPorCategoriasComFiltrosBolsaECompra/{groupId}/{filtrarInscricoesAbertas}/{filtrarBolsaEstudo}/{considerarUnidade}/{start}/{end}?categoryIds={categoriaTemaId}&categoryIds={tipoCurso}"
1975var urlSearchTipoCurso = '/o/senac-content-services/idTipoCursoPorNome/{groupId}/{tipoCursoNome}';
1976var cardVerTodosTipoCursoClass = ''
1977let categorias = []
1978let categoryWithoutCourse = []
1979let friendlyUrlUnidade = ''
1980
1981$(document).ready(function(){
1982 init()
1983
1984 //Associa eventos
1985 $(document).on("click", ".ver-todos-cursos-link", verTodosCursos);
1986 $(document).on("click", ".card-ver-todos-cursos-link", verTodosCursos);
1987})
1988
1989function montaBreadCrumb(){
1990 var breadCrumb = $(".breadcrumb");
1991 var nomeUnidade = $("#nomeUnidadeParaBreadCrumb").text().trim();
1992
1993 breadCrumb.empty();
1994
1995 //Home
1996 breadCrumb.append('<li class="breadcrumb-item"><a class="breadcrumb-link" href="/" title="Home"><span class="breadcrumb-text-truncate">Home</span></a></li>');
1997
1998 //Unidades
1999 breadCrumb.append('<li class="breadcrumb-item"><a class="breadcrumb-link" href="/unidades" title="Unidades"><span class="breadcrumb-text-truncate">Unidades</span></a></li>');
2000
2001 //Unidade
2002 breadCrumb.append('<li class="breadcrumb-item"><a class="breadcrumb-link" href="/'+getFriendlyUrlUnidade()+'" title="'+nomeUnidade+'"><span class="breadcrumb-text-truncate">'+nomeUnidade+'</span></a></li>');
2003
2004 //Tipo de Curso
2005 breadCrumb.append('<li class="breadcrumb-item"><a class="breadcrumb-link" href="/'+getFriendlyUrlUnidade()+'/'+getUrlTipoCurso()+'" title="'+tipoCursoNomeBreadCrumb+'"><span class="breadcrumb-text-truncate">'+tipoCursoNomeBreadCrumb+'</span></a></li>');
2006
2007}
2008
2009function carregaLinkTodosBotoesModalidades(){
2010
2011$( document ).ready(function() {
2012
2013 var friendlyUrlUnidade = $("#friendlyUnidade").text().trim();
2014
2015 // extensão
2016 if (($('.ssp-btns-horizontal-area').find('.btn-nivel-extensao'))){
2017 var urlExt = "/"+friendlyUrlUnidade+ "/extensao-universitaria";
2018
2019 if(friendlyUrlUnidade == "senac-tatuape-luis-americano" || friendlyUrlUnidade == "centro-universitario-senac-campos-do-jordao")
2020 urlExt = "/busca?q=*&tipo-curso="+$('.ssp-btns-horizontal-area').find('.btn-nivel-extensao').data('categoryid')+"&unidade="+${categoryId}+'#c';
2021
2022 $('.ssp-btns-horizontal-area').find('.btn-nivel-extensao').attr("href", urlExt);
2023 //$('.ssp-btns-horizontal-area').find('.btn-nivel-extensao').attr("href", "https://www.sp.senac.br/jsp/default.jsp?template=1588.dwt&testeira=725&type=X&unit=NONE&sub=")
2024
2025 }
2026
2027 // Ensino Médio
2028 if (($('.ssp-btns-horizontal-area').find('.btn-nivel-ensino-medio-tecnico'))){
2029
2030
2031 var urlEmed = "/"+friendlyUrlUnidade+ "/ensino-medio-tecnico";
2032 $('.ssp-btns-horizontal-area').find('.btn-nivel-ensino-medio-tecnico').attr("href", urlEmed);
2033
2034
2035 }
2036
2037
2038 // Graduação
2039 if (($('.ssp-btns-horizontal-area').find('.btn-nivel-graduacao'))){
2040
2041 var urlGraduacao = "/"+friendlyUrlUnidade+ "/graduacao";
2042
2043 $('.ssp-btns-horizontal-area').find('.btn-nivel-graduacao').attr("href", urlGraduacao);
2044
2045 }
2046
2047 // Pos-Graduação
2048 if (($('.ssp-btns-horizontal-area').find('.btn-nivel-pos-graduacao'))){
2049
2050 $('.ssp-btns-horizontal-area').find('.btn-nivel-pos-graduacao').attr({
2051 href: "/"+friendlyUrlUnidade+ "/pos-graduacao",
2052 target: "_blank"
2053 })
2054
2055 }
2056
2057 // livre
2058 if (($('.ssp-btns-horizontal-area').find('.btn-nivel-livre'))){
2059
2060 var urlLiv = "/"+friendlyUrlUnidade+ "/cursos-livres";
2061
2062 //Solucao temporaria, ate o proxy estiver correto
2063 if(friendlyUrlUnidade == "senac-tatuape-luis-americano" || friendlyUrlUnidade == "centro-universitario-senac-campos-do-jordao")
2064 urlLiv = "/busca?q=*&tipo-curso="+$('.ssp-btns-horizontal-area').find('.btn-nivel-livre').data('categoryid')+"&unidade="+${categoryId}+'#c';
2065
2066 $('.ssp-btns-horizontal-area').find('.btn-nivel-livre').attr("href", urlLiv);
2067
2068 }
2069
2070 // livre Ao vivo
2071 if (($('.ssp-btns-horizontal-area').find('.btn-nivel-livre-ead'))){
2072
2073 $('.ssp-btns-horizontal-area').find('.btn-nivel-livre-ead').attr({
2074 href : "https://www.sp.senac.br/cursos-livres-senac-online-ao-vivo"
2075 })
2076
2077 }
2078
2079 // Regra para Botão de Idiomas
2080
2081 if(
2082
2083 $('#codUnidadeReferencia').text() === "137" ||
2084 $('#codUnidadeReferencia').text() === "123" ||
2085 $('#codUnidadeReferencia').text() === "23" ||
2086 $('#codUnidadeReferencia').text() === "58" ||
2087 $('#codUnidadeReferencia').text() === "32" ||
2088 $('#codUnidadeReferencia').text() === "62" && $('.ssp-btns-horizontal-area').find('.btn-nivel-idiomas')
2089
2090 ) {
2091
2092 var urlIdi = "/"+friendlyUrlUnidade+ "/cursos-livres/idiomas";
2093
2094 $('.ssp-btns-horizontal-area').find('.btn-nivel-idiomas').attr("href", urlIdi);
2095
2096 }else{
2097 $('.ssp-btns-horizontal-area').find('.btn-nivel-idiomas').addClass("d-none")
2098 }
2099
2100 // Técnicos
2101 if (($('.ssp-btns-horizontal-area').find('.btn-nivel-tecnico'))){
2102
2103 var urlTec = "/"+friendlyUrlUnidade+ "/cursos-tecnicos";
2104
2105 //Solucao temporaria, ate o proxy estiver correto
2106 if(friendlyUrlUnidade == "senac-tatuape-luis-americano" || friendlyUrlUnidade == "centro-universitario-senac-campos-do-jordao")
2107 urlTec = "/busca?q=*&tipo-curso="+$('.ssp-btns-horizontal-area').find('.btn-nivel-tecnico').data('categoryid')+"&unidade="+${categoryId}+'#c';
2108
2109 $(this).find('.btn-nivel-tecnico').attr("href", urlTec);
2110
2111 }
2112
2113 // Jovem Aprendiz
2114 if (($('.ssp-btns-horizontal-area').find('.btn-nivel-jovem-aprendiz'))){
2115
2116 $(this).find('.btn-nivel-jovem-aprendiz').attr({
2117 href: "/jovem-aprendiz",
2118 })
2119
2120 }
2121 });
2122}
2123
2124function carregaLinkBotoesLivreETecnico(){
2125
2126 urlUnidade = $("#friendlyUnidade").text().trim();
2127 urlTipoCurso = $("#friendlyTipoCurso").text().trim();
2128
2129 $.ajax({
2130 url : '/o/senac-content-services/url-tipos-de-curso/'+groupId,
2131 type : 'get',
2132 dataType: 'json',
2133 }).done(function(res) {
2134 $(res).each(function(key , value){
2135 if(value.name == 'tecnico'){
2136 //botao livre
2137 $("#linkTecnico").attr('href', "/"+urlUnidade+"/"+value.friendlyURL);
2138 }else
2139 if(value.name == 'livre'){
2140 $("#linkLivre").attr('href', "/"+urlUnidade+"/"+ value.friendlyURL);
2141 }
2142 });
2143 });
2144}
2145
2146
2147// Botao para filtro de cursos com inscricoes abertas e bolsas
2148$('#inscricao-aberta input, #bolsas-estudo input').click(function(){
2149
2150 //Atualiza as variaveis globais dos dois filtros
2151 $("#inscricao-aberta input").is(":checked") == true ? filtrarInscricoesAbertas = 1 : filtrarInscricoesAbertas = 0;
2152 $("#bolsas-estudo input").is(":checked") == true ? filtrarBolsaEstudo = 1 : filtrarBolsaEstudo = 0;
2153
2154 //Refaz a busca com os filtros atualizados
2155 switch(getCurrentLevel()){
2156 case 1:
2157 case 2:
2158 //Verifica se esta exibindo todos ou algum tema
2159 var botaoTodos = $('.todos');
2160
2161 if(botaoTodos.hasClass('ativo') || botaoTodos.hasClass('tema-ativo'))
2162 $('.todos:first').trigger('click');
2163
2164 //Se estiver ativo um tema, verifica se possui ativo um subtema
2165 else
2166 //Verifica o nivel do tema clicado
2167 $('.subtema-ativo:not(.todos)').length == 0 ? $('.subtema-ativo.todos').trigger('click') : $('.subtema-ativo:first').trigger('click', [$(this)]);
2168 break;
2169
2170 case 3:
2171 if($('#filtro-temas-nivel-3 .subtema-ativo:not(.todos)').length) {
2172 const preSelecteds = []
2173 document.querySelectorAll('#filtro-temas-nivel-3 .subtema-ativo:not(.todos)')
2174 .forEach(el => {
2175 preSelecteds.push(el)
2176 el.classList.remove('subtema-ativo')
2177 })
2178
2179 preSelecteds.forEach(async el => await clickTema(el.getAttribute('data-tema')))
2180 } else {
2181 const el = $('#filtro-temas-nivel-3 .todos')
2182 el.trigger('click')
2183 }
2184 break;
2185 }
2186})
2187
2188//carrega url com tema clicado
2189function atualizaUrlBrowser(urlTema,nivel){
2190 var path = window.location.pathname;
2191 var urlFinal = "";
2192
2193 if(path.indexOf('staging') > 1){
2194 urlFinal = "/web/guest-staging";
2195 }else
2196 if(path.indexOf('guest') > 1){
2197 urlFinal = "/web/guest";
2198 }
2199
2200 const pathnames = window.location.pathname.split('/').filter(str => !!str)
2201 urlFinal += '/' + pathnames[0] + '/' + pathnames[1]
2202
2203 //se for todos os cursos a url fica so /unidade/tipo-curso
2204 if(nivel > 0){
2205 const urlParams = new URLSearchParams(window.location.search);
2206
2207 switch(nivel){
2208
2209 case 1:
2210 urlTemaNv1 = urlTema;
2211 urlFinal += "/"+urlTemaNv1;
2212 break;
2213
2214 case 2:
2215 urlTemaNv2 = urlTema;
2216 urlFinal += tipoCursoNome != "Técnico" ? "/"+urlTemaNv1+"/"+urlTemaNv2 : "/"+urlTemaNv1;
2217 break;
2218
2219 case 3:
2220 urlTemaNv3 = urlTema;
2221
2222 if(tipoCursoNome != "Técnico" )
2223 urlParams.set('q', urlTemaNv3)
2224
2225 urlFinal += tipoCursoNome != "Técnico" ? "/"+urlTemaNv1+"/"+urlTemaNv2: "/"+urlTemaNv1;
2226 break;
2227
2228 }
2229
2230 urlFinal += (urlParams.toString() ? '?' + urlParams.toString() : '')
2231
2232 }
2233
2234 urlFinal = new URL(window.location.origin + urlFinal);
2235 if($("#inscricao-aberta input").is(":checked")){
2236 urlFinal.searchParams.set("inscricao", true);
2237 }
2238 if($("#bolsas-estudo input").is(":checked")){
2239 urlFinal.searchParams.set("bolsa", true);
2240 }
2241 window.history.pushState('', 'Categoria JavaScript', decodeURIComponent(urlFinal.toString()))
2242}
2243
2244function getUrlTipoCurso(){
2245 return $('#friendlyTipoCurso').text().trim();
2246}
2247
2248function buscaFriendlyUrlTemaEAtualizaBrowser(temaId, nivelClicado){
2249
2250 var friendlyUrlTema = urlTemasStorage.get(temaId);
2251
2252 if(typeof friendlyUrlTema === "undefined"){
2253 //se ainda nao tem no map, busco via ajax e armazeno no map a url do tema clicado para nao precisar buscar novamente
2254 $.ajax({
2255 url : '/o/senac-content-services/friendlyUrlPorCategoria/'+temaId,
2256 type : 'get',
2257 dataType: 'json',
2258 async: false
2259 }).done(function(res) {
2260
2261 urlTemasStorage.set(temaId,res.url);
2262 friendlyUrlTema = res.url
2263
2264 })
2265 }
2266
2267 if(nivelClicado == 3){
2268 let params = ''
2269
2270 document.querySelectorAll("#filtro-temas-nivel-3 a.subtema-ativo")
2271 .forEach(a => {
2272 const friendlyUrl = urlTemasStorage.get(parseInt(a.getAttribute('data-tema')))
2273 params = (params ? params + ',' : '') + friendlyUrl
2274 })
2275
2276 atualizaUrlBrowser(params,nivelClicado);
2277 } else {
2278 atualizaUrlBrowser(friendlyUrlTema,nivelClicado);
2279 }
2280
2281}
2282
2283let isAcessoDireto = false
2284//verifica se usuario acessou direto pelas urls dos temas e carrega os temas para dar sequencia
2285async function verificaAcessoDiretoELoadTema(){
2286 isAcessoDireto = true
2287 urlTemaNv1 = $("#friendlyTemaNv1").text().trim();
2288 urlTemaNv2 = $("#friendlyTemaNv2").text().trim();
2289 urlTemaNv3 = $("#friendlyTemaNv3").text().trim();
2290
2291 const urlParamsTemaNv3 = new URLSearchParams(window.location.search);
2292 urlParamTemaNv3 = urlParamsTemaNv3.get('q');
2293
2294 carregaTemas()
2295
2296 let nivel1CategoryId
2297 let nivel2CategoryId
2298 let nivel3CategoryId
2299
2300 if(urlTemaNv1) {
2301 getSubtemas(urlTemaNv1)
2302 .done(categories => {
2303 nivel1CategoryId = categories[0].categoryId
2304 clickTema(nivel1CategoryId)
2305 })
2306 }
2307
2308 if(urlTemaNv2){
2309 getSubtemas(urlTemaNv2, nivel1CategoryId)
2310 .done(categories => {
2311 nivel2CategoryId = categories[0].categoryId
2312 clickTema(nivel2CategoryId)
2313 })
2314 }
2315
2316 if(urlParamTemaNv3) {
2317 const params = urlParamTemaNv3.split(',')
2318
2319 for (let index = 0; index < params.length; index++) {
2320 const url = params[index];
2321
2322 const categories = await getSubtemas(url, nivel2CategoryId)
2323
2324 await clickTema(categories[0].categoryId)
2325 }
2326 }
2327
2328 isAcessoDireto = false
2329}
2330
2331function getFriendlyUrlUnidade() {
2332 return $("#friendlyUnidade").text().trim()
2333}
2334
2335/* Prepara a montagem inicial da página */
2336async function init() {
2337 var tipoCursoText = $('#tipoCursoText').text().trim();
2338
2339 if(tipoCursoText == "Livre"){
2340 tipoCursoNomeBreadCrumb = "Cursos Livres";
2341 tipoCursoNome = "Livre";
2342 cookieName = "ck-cursos-livre";
2343 cardVerTodosTipoCursoClass = "livre"
2344
2345 }else if(tipoCursoText == "Técnico"){
2346 tipoCursoNomeBreadCrumb = "Cursos Técnicos";
2347 tipoCursoNome = "Técnico";
2348 cookieName = "ck-cursos-tecnico";
2349 cardVerTodosTipoCursoClass = "tecnico"
2350
2351 }else if(tipoCursoText == "Extensão"){
2352 tipoCursoNomeBreadCrumb = "Extensão Universitária";
2353 tipoCursoNome = "Extensão";
2354 cookieName = "ck-cursos-extensao";
2355 cardVerTodosTipoCursoClass = "extensao"
2356 }
2357
2358 montaBreadCrumb()
2359
2360 friendlyUrlUnidade = getFriendlyUrlUnidade()
2361
2362 const categories = await getSubtemas(friendlyUrlUnidade)
2363 categoryIdUnidade = categories[0].categoryId
2364
2365 urlTipoCurso = getUrlTipoCurso();
2366
2367 groupId = Liferay.ThemeDisplay.getScopeGroupId();
2368
2369 $('#tema-atual h2').text("");
2370 $('#tema-atual').hide();
2371
2372 todosText = $('#tema-atual h2').text();
2373
2374 //Preenche o id do tipo de curso e a modalidade
2375 var url = urlSearchTipoCurso
2376 .replace('{groupId}', groupId)
2377 .replace('{tipoCursoNome}', tipoCursoNome);
2378
2379 $.ajax({
2380 url : url,
2381 type : 'get',
2382 async: false
2383 }).done(function(categoryIdTipoCursoResponse) {
2384
2385 categoryIdTipoCurso = categoryIdTipoCursoResponse;
2386
2387 });
2388
2389 carregarCategorias()
2390 verificaFiltroInscricaoBolsaEToggle()
2391 verificaAcessoDiretoELoadTema()
2392 visualizarMais()
2393 hideVisualizarMais()
2394
2395 if(isMobile) {
2396 visualizarMenos()
2397 showVisualizarMais()
2398 }
2399
2400 carregaLinkTodosBotoesModalidades();
2401
2402}
2403
2404function verificaFiltroInscricaoBolsaEToggle() {
2405 const urlParams = new URLSearchParams(window.location.search)
2406 $('#chkInscricao').prop("checked", urlParams.get('inscricao') == 'true')
2407 $('#chkInscricao').prop("checked") ? filtrarInscricoesAbertas = 1 : filtrarInscricoesAbertas = 0
2408 $('#chkInscricao').change(ev => selectFilter('inscricao', $('#chkInscricao')) )
2409
2410 if($('#chkBolsa').length) {
2411 $('#chkBolsa').prop("checked", urlParams.get('bolsa') == 'true')
2412 $('#chkBolsa').prop("checked") ? filtrarBolsaEstudo = 1 : filtrarBolsaEstudo = 0
2413 $('#chkBolsa').change(ev => selectFilter('bolsa', $('#chkBolsa')) )
2414 }
2415}
2416
2417function carregarCategorias() {
2418 if(!categorias.length) {
2419 const searchParams = new URLSearchParams({
2420 companyId: themeDisplay.getCompanyId(),
2421 groupIds: themeDisplay.getScopeGroupId(),
2422 parentCategoryIds: 0,
2423 vocabularyIds: document.querySelector('#ssp-vocabulary-id-tema-mercadologico').value
2424 })
2425
2426 $.ajax({
2427 url : '/o/senac-category-services/categories?' + searchParams.toString(),
2428 method : 'get',
2429 async: false
2430 })
2431 .done(data => categorias = data)
2432 .fail(err => console.error(err))
2433 }
2434}
2435
2436function selectFilter(paramkey, el) {
2437 setUrlParam(paramkey, el.prop("checked"))
2438}
2439
2440function setUrlParam(key, value) {
2441 const url = new URL(window.location.href)
2442 if(value)
2443 url.searchParams.set(key, value);
2444 else
2445 url.searchParams.set(key, false)
2446 window.history.pushState({}, '', decodeURIComponent(url.toString()))
2447}
2448
2449$(document).on("click", '.ssp-btn__visualizar-mais-content', toggleVisualizarMais)
2450
2451function visualizarMenos() {
2452 const itensTema = $('#temas').children();
2453 const itensExibidos = 6;
2454
2455 if(isMobile)
2456 itensTema.slice(itensExibidos).hide();
2457
2458 $('#visualizar-mais').text('Visualizar mais');
2459 $('#visualizar-mais').parent().find('i').removeClass('fa-chevron-up');
2460 $('#visualizar-mais').parent().find('i').addClass('fa-chevron-down');
2461}
2462
2463function visualizarMais() {
2464 const itensTema = $('#temas').children();
2465 const itensExibidos = 6;
2466
2467 if(isMobile)
2468 itensTema.slice(itensExibidos).show();
2469
2470 $('#visualizar-mais').text('Visualizar menos');
2471 $('#visualizar-mais').parent().find('i').removeClass('fa-chevron-down');
2472 $('#visualizar-mais').parent().find('i').addClass('fa-chevron-up');
2473}
2474
2475function toggleVisualizarMais(){
2476 if( $('#visualizar-mais').text() === "Visualizar mais" )
2477 visualizarMais()
2478 else
2479 visualizarMenos()
2480}
2481
2482function showVisualizarMais() {
2483 $('.ssp-btn__visualizar-mais-content').show()
2484}
2485
2486function hideVisualizarMais() {
2487 $('.ssp-btn__visualizar-mais-content').hide()
2488}
2489
2490/* Carrega os subtemas ou cursos ao clicar no tema */
2491let lastClicked
2492$(".container").on(
2493 "click",
2494 ".tema",
2495 function() {
2496 const categoriaId = $(this).data('tema');
2497 const isEqualTema = lastClicked == categoriaId
2498 lastClicked = categoriaId
2499
2500 const isTodos = this.classList.contains('todos')
2501
2502 activeCategoryLevel = $(this).data('nvl');
2503 limit = 2;
2504 offset = 0;
2505 limitTodosCursos = 16;
2506 offsetTodosCursos = 0;
2507
2508 $('#filtro-temas-nivel-2').empty()
2509 $('#filtro-temas-nivel-3').empty()
2510
2511 hideVisualizarMais()
2512 $('.tema').removeClass('ativo');
2513 $('.tema').removeClass('tema-ativo')
2514 $('.ssp-section-tema__container-menu-item').show()
2515
2516 document.querySelector('.ssp-divider').classList.add('d-none')
2517
2518 document.querySelector('[data-section="title"]').classList.remove('selected')
2519
2520 if(isTodos){
2521 document.querySelector('[data-section="title"]').innerHTML = 'Qual a sua área de interesse?'
2522 document.querySelector('.ssp-divider').classList.remove('d-none')
2523
2524 showVisualizarMais()
2525 atualizaUrlBrowser(0,0);
2526 $('.todos').addClass('ativo');
2527
2528 if(isMobile) {
2529 visualizarMenos()
2530 showVisualizarMais()
2531 }
2532 } else {
2533 document.querySelector('[data-section="title"]').innerHTML = 'Você selecionou:'
2534 $('.ssp-section-tema__container-menu-item').hide()
2535 $('.ssp-section-tema__container-menu-item').has(this).show()
2536
2537 if(isEqualTema) {
2538 removeFiltersLevel1()
2539 return
2540 } else
2541 $(this).addClass('tema-ativo')
2542
2543 $.ajax(
2544 {
2545 url : '/o/senac-content-services/category/'
2546 + $(this).data('tema'),
2547 type : 'get'
2548 }).done(function(category) {
2549
2550 activeCategory = JSON.parse(category);
2551
2552 cleanElements();
2553
2554 displayCursosPorTema();
2555
2556 displaySubTemasLista();
2557
2558 buscaFriendlyUrlTemaEAtualizaBrowser(categoriaId,1);
2559 });
2560
2561 if(!this.classList.contains('todos')) {
2562 hideOthersLevel1(this)
2563 }
2564 }
2565 }
2566);
2567
2568/* Quando clica em Ver Todos cursos de um tema */
2569function verTodosCursos(){
2570
2571 //Scrool top
2572 $('html, body').animate({
2573 scrollTop: $("#temas").offset().top
2574 }, -1000);
2575
2576
2577 var tema = $(this).data('tema');
2578 activeCategoryLevel = $(this).data('nvl');
2579
2580 if(activeCategoryLevel == 1)
2581 buscaFriendlyUrlTemaEAtualizaBrowser(tema,activeCategoryLevel);
2582
2583 // Verifica o elemento, adiciona a classe ativo e remove dos seus primos
2584 $('.todos').removeClass('ativo');
2585
2586 limit = 2;
2587 offset = 0;
2588
2589 $.ajax({
2590 url : '/o/senac-content-services/category/'+ tema,
2591 type : 'get'
2592 }).done(function(category) {
2593
2594 activeCategory = JSON.parse(category);
2595
2596 switch(activeCategoryLevel){
2597 case 1:
2598 $('.tema').removeClass('tema-ativo');
2599 $('.tema[data-tema="'+activeCategory.categoryId+'"]').not('.slick-cloned').each(function(){
2600 if(!$(this).parent().hasClass('slick-cloned')){
2601 var botaoTemaVerTodos = $(this);
2602 botaoTemaVerTodos.trigger('click');
2603 }
2604 });
2605
2606 break;
2607 case 2:
2608
2609 var botaoTemaVerTodosNv2 = $('.subtema[data-tema="'+activeCategory.categoryId+'"]');
2610 botaoTemaVerTodosNv2.trigger('click');
2611
2612 break;
2613 case 3:
2614 var botaoTemaVerTodosNv3 = $('.subtema[data-tema="'+activeCategory.categoryId+'"]');
2615 botaoTemaVerTodosNv3.trigger('click');
2616
2617 break;
2618 }
2619
2620
2621 });
2622}
2623
2624function defaultSubtema(el, temaIds) {
2625 limit = 2;
2626 offset = 0;
2627 limitTodosCursos = 16;
2628 offsetTodosCursos = 0;
2629
2630 $('#cursos-por-subtema-container').find('#curso-sem-slick').empty();
2631
2632 activeCategoryLevel = $(el).data('nvl');
2633
2634 if(!acessoDireto)
2635 buscaFriendlyUrlTemaEAtualizaBrowser($(el).data('tema'),activeCategoryLevel);
2636
2637 cleanElements();
2638
2639 const categories = []
2640 temaIds.forEach(id => {
2641 $.ajax({
2642 url : '/o/senac-content-services/category/' + id,
2643 type : 'get',
2644 async: false
2645 })
2646 .done((category) => {
2647 activeCategory = JSON.parse(category)
2648 categories.push(activeCategory)
2649 })
2650 });
2651
2652 displayCursosPorTema(categories)
2653}
2654
2655// evento de click nos subtemas
2656$("#filtro-temas-nivel-2")
2657.on("click", ".subtema", function(ev, trigger) {
2658
2659 $(this).siblings('.todos').removeClass("subtema-ativo")
2660
2661 if(this.classList.contains('todos') || (this.classList.contains('subtema-ativo') && !trigger)) {
2662 removeFiltersLevel2()
2663 return
2664 } else {
2665 hideOthersLevel2(this)
2666 this.classList.add('subtema-ativo')
2667 }
2668
2669 defaultSubtema(this, [$(this).data('tema')])
2670})
2671
2672$("#filtro-temas-nivel-3")
2673.on("click", ".subtema", function(ev) {
2674
2675 $(this).siblings('.todos').removeClass("subtema-ativo")
2676
2677 if(this.classList.contains('todos')) {
2678 removeFiltersLevel3()
2679 return
2680 }
2681
2682 const isActived = this.classList.contains('subtema-ativo')
2683 if(isActived)
2684 this.classList.remove('subtema-ativo')
2685 else
2686 this.classList.add('subtema-ativo')
2687
2688
2689 const anyActive = !!document.querySelector("#filtro-temas-nivel-3 a.subtema-ativo")
2690 if(!anyActive)
2691 removeFiltersLevel3()
2692
2693 const temaIds = []
2694 document.querySelectorAll("#filtro-temas-nivel-3 a.subtema-ativo:not(.todos)")
2695 .forEach(a => temaIds.push(a.getAttribute('data-tema')))
2696
2697 defaultSubtema(this, temaIds)
2698})
2699
2700/* Click no botao todos */
2701$(".container").on("click", ".todos:not(.subtema.todos)", function() {
2702
2703 atualizaUrlBrowser(0);
2704
2705 activeCategory = 'all';
2706 activeCategoryLevel = $(this).data('nvl');
2707 offset = 0;
2708
2709 /* Limpa dados de subtemas que possam ter sido criados na navegação */
2710 cleanElements();
2711
2712 $('#tema-atual').show()
2713 $('#tema-atual h2').text(todosText);
2714
2715 // Esconde a div com subtemas
2716 $('#filtro-temas-nivel-2').empty();
2717 $('#filtro-temas-nivel-2').addClass('d-none');
2718
2719 displayCursosPorTema();
2720
2721});
2722
2723/* Limpa a tela para exibição de novos cursos */
2724function cleanElements() {
2725
2726 $('#subtemas-lista').empty();
2727
2728 $('#cursos-por-categoria-container .cursos-por-categoria').remove();
2729 $('#subtema-atual').empty();
2730 $('#cursos-por-subtema-container #subsubtemas-lista').empty();
2731 $('#cursos-por-subtema-container .ssp-card-curso').remove();
2732
2733 $('#cursos-por-categoria-container').removeClass('d-none');
2734 $('#cursos-por-subtema-container').addClass('d-none');
2735}
2736
2737/*
2738 * Armazena a navegação em cookies, se habilitado
2739 */
2740$(document).on("click", ".ck-curso", function() {
2741
2742 //Verifica se os alternadores estao selecionados e manipula o link do curso de acordo a eles.
2743 urlFinal = new URL(window.location.origin + $(this).attr('href'));
2744 let filtroInscricaoBolsa = false;
2745
2746 if($("#inscricao-aberta input").is(":checked")){
2747 urlFinal.searchParams.set("inscricao", true);
2748 filtroInscricaoBolsa = true;
2749 }
2750 if($("#bolsas-estudo input").is(":checked")){
2751 urlFinal.searchParams.set("bolsa", true);
2752 filtroInscricaoBolsa = true;
2753 }
2754 $(this).attr('href', urlFinal.pathname + (filtroInscricaoBolsa ? "?"+urlFinal.searchParams : ""))
2755
2756
2757 //Verifica se o cookie está habilitado
2758 if(getCookie('portalSenacCookie') != null){
2759
2760 var articleId = $(this).data('ck');
2761 manageCookieArray(cookieName, articleId);
2762 manageCookieArray('ck-cursos', articleId);
2763 }
2764
2765});
2766
2767/*
2768 * Exibe os cursos por tema, dependendo do nivel
2769 */
2770function displayCursosPorTema(categories) {
2771 hideMensagemSemCurso();
2772
2773 // Verifica o nivel
2774 switch (activeCategoryLevel) {
2775
2776 case 0: // exibe todos
2777 $('#tema-atual').hide()
2778 limit = 2;
2779
2780 $.each(temas.slice(offset, limit + offset), function(k, t) {
2781
2782 if($('#cursos-por-categoria-'+t.categoryId).length == 0){
2783 var template = $('#cursos-por-categoria-template').clone();
2784 template.prop('id', 'cursos-por-categoria-'+t.categoryId);
2785 template.removeClass('d-none');
2786 $('#cursos-por-categoria-container').append(template);
2787 }
2788
2789 $.ajax(
2790 {
2791 url : '/o/senac-content-services/category/'
2792 + t.categoryId,
2793 type : 'get',
2794 async: false
2795 }).done(function(category) {
2796
2797 var dadosCategoria = JSON.parse(category);
2798
2799 //monta as divs para cada tcategoria
2800 var templatePorCategoria = $('#cursos-por-categoria-'+dadosCategoria.categoryId);
2801 templatePorCategoria.find('.tema-nome').text(dadosCategoria.name);
2802 templatePorCategoria.find('.ver-todos-cursos-link').attr('data-nvl', 1);
2803 templatePorCategoria.find('.ver-todos-cursos-link').attr('data-tema', dadosCategoria.categoryId);
2804 templatePorCategoria.removeClass('d-none');
2805
2806 cursosPorCategoriaModelo1(dadosCategoria);
2807
2808 });
2809 });
2810
2811 // Esconde botao carregar mais, se necessário
2812
2813 $('.section-carregar-mais').remove();
2814
2815 if (temas.length > limit + offset)
2816 $('#cursos-por-categoria-container').append('<section style="padding: 30px 0; width:100%" class="section-carregar-mais"><div class="container"><a href="#a" class="ssp-section-tema__btn-ver-mais" id="carregar-mais" style="visibility:hidden"> Carregar mais unidades </a></div></section>');
2817
2818 break;
2819
2820 case 1:
2821 limit = 2;
2822
2823 $('#tema-atual h2').text("O que você quer aprender nessa área?");
2824 $('#tema-atual').show()
2825
2826 // Exibe os cursos dos subtemas do tema clicado percorrendo a lista de
2827 // subtemas do tema clicado
2828 if(subtemasStorage.get(activeCategory.categoryId) && subtemasStorage.get(activeCategory.categoryId).length > 0){
2829
2830 $.each(subtemasStorage.get(activeCategory.categoryId).slice(offset,
2831 limit + offset), function(k, t) {
2832
2833 if($('#cursos-por-categoria-'+t.categoryId).length == 0){
2834 var template = $('#cursos-por-categoria-template').clone();
2835 template.prop('id', 'cursos-por-categoria-'+t.categoryId);
2836
2837 template.removeClass('d-none');
2838
2839 $('#cursos-por-categoria-container').append(template);
2840 }
2841
2842 $.ajax(
2843 {
2844 url : '/o/senac-content-services/category/'
2845 + t.categoryId,
2846 type : 'get',
2847 async: false
2848 }).done(function(category) {
2849
2850 var dadosCategoria = JSON.parse(category);
2851
2852 //monta as divs para cada tcategoria
2853 var templatePorCategoria = $('#cursos-por-categoria-'+dadosCategoria.categoryId);
2854 templatePorCategoria.find('.tema-nome').text(dadosCategoria.name);
2855 templatePorCategoria.find('.ver-todos-cursos-link').attr('data-nvl', 2);
2856 templatePorCategoria.find('.ver-todos-cursos-link').attr('data-tema', dadosCategoria.categoryId);
2857 templatePorCategoria.removeClass('d-none');
2858
2859 cursosPorCategoriaModelo1(dadosCategoria);
2860
2861 });
2862 });
2863
2864 // Esconde botao carregar mais, se necessário
2865 $('.section-carregar-mais').remove();
2866
2867 if (subtemasStorage.get(activeCategory.categoryId).length > limit + offset)
2868 $('#cursos-por-categoria-container').append('<section style="padding: 30px 0; width:100%" class="section-carregar-mais"><div class="container"><a href="#a" class="ssp-section-tema__btn-ver-mais" id="carregar-mais" style="visibility:hidden"> Carregar mais unidades </a></div></section>');
2869
2870 }else{
2871 //Se nao tiver subtema, exibe o modelo 2
2872 cursosPorCategoriaModelo2();
2873 }
2874
2875 break;
2876
2877 case 2: // exibe cursos do nivel 2
2878 limitTodosCursos = 16;
2879 cursosPorCategoriaModelo2();
2880 break;
2881
2882 case 3:
2883 // subtemas de nivel 3 nao devem ter limite
2884 limitTodosCursos = ($('#filtro-temas-nivel-3 .subtema-ativo:not(.todos)').length) ? -1 : 16;
2885 cursosPorCategoriaModelo3(categories);
2886 break;
2887 }
2888
2889}
2890
2891/*
2892 * Faz a exibição dos cursos quando se carrega a tela ou clica em 'Todos'
2893 */
2894function cursosPorCategoriaModelo1(category) {
2895
2896 activeModeloExibicao = 1;
2897 categoryWithoutCourse = []
2898 hideMensagemSemCurso()
2899
2900 var urlFinal = '/o/senac-content-services/cursosPorCategoriasComFiltrosBolsaECompra/'
2901 + groupId + '/'
2902 + filtrarInscricoesAbertas +'/'
2903 + filtrarBolsaEstudo
2904 + '/1/'
2905 + '0/'
2906 + limitCursos
2907 + '?'
2908 + 'categoryIds='+ category.categoryId + '&'
2909 + 'categoryIds='+ categoryIdTipoCurso+ '&'
2910 + 'categoryIds='+ categoryIdUnidade
2911
2912
2913
2914 $
2915 .ajax(
2916 {
2917 url : urlFinal,
2918 type : 'get',
2919 beforeSend: function () {
2920 loading('#cursos-por-categoria-'+category.categoryId+' .slider-curso');
2921 }
2922 })
2923 .done(
2924 function(cursosPorCategoria) {
2925
2926 enableScroll(true);
2927
2928 cursosPorCategoria = JSON.parse(cursosPorCategoria);
2929
2930 var totalCursos = cursosPorCategoria.total;
2931
2932 //Se nao retornou cursos, deve esconder a div da categoria
2933 if(totalCursos == 0){
2934 $('#cursos-por-categoria-'+category.categoryId).html('');
2935
2936 //essa classe tirar todo o padding da div, escondendo ela
2937 $('#cursos-por-categoria-'+category.categoryId).removeClass('ssp-section');
2938
2939 if(isMobile){
2940 var $element = document.getElementById('cursos-por-categoria-container');
2941 var _elementPos = $element.offsetTop + 100;
2942 var _scrollDown = _elementPos + (filtrarInscricoesAbertas == 1 || filtrarBolsaEstudo == 1 ? 300 : 1);
2943 window.scrollTo(window.scrollX || window.pageXOffset, _scrollDown);//carrega os cursos
2944 setTimeout(()=> window.scrollTo(window.scrollX || window.pageXOffset, _elementPos), 500);//mostra o primeiro
2945
2946 }else{
2947 var _scrollDown = (window.scrollY || window.pageYOffset) + (filtrarInscricoesAbertas == 1 || filtrarBolsaEstudo == 1 ? 20 : 1);
2948 window.scrollTo(window.scrollX || window.pageXOffset, _scrollDown);
2949 }
2950 updateMensagemSemCurso();
2951 return;
2952 }else{
2953
2954 if(!$('#cursos-por-categoria-'+category.categoryId).hasClass('ssp-section'))
2955 $('#cursos-por-categoria-'+category.categoryId).addClass('ssp-section');
2956
2957 }
2958
2959 var articles = [];
2960
2961 $.each(cursosPorCategoria.cursos, function(k, c){
2962 articles.push(c.articleId);
2963 });
2964
2965
2966 //Verifica a situação dos botoes de inscrições e bolsa
2967 $.ajax({
2968 url : '/o/senac-content-services/verificaBotoesInscricaoEBolsaPorUnidade/'+groupId+'/'+articles.join(',')+'/'+categoryIdUnidade,
2969 type : 'get',
2970 async: false
2971 })
2972 .done(function(infoBotoes){
2973
2974 enableScroll(true);
2975
2976 if(infoBotoes.length > 0) {
2977
2978 infoBotoes = JSON.parse(infoBotoes);
2979
2980 var template = $('#cursos-por-categoria-'+category.categoryId);
2981
2982 $('#cursos-por-categoria-'+category.categoryId+' .slider-curso').empty();
2983
2984 $.each(cursosPorCategoria.cursos, async function(k, curso) {
2985
2986 var itemCurso = buildCardCurso(curso, infoBotoes, isMobile)
2987
2988 template.append(itemCurso);
2989
2990 template.find('.slider-curso').append(itemCurso);
2991
2992 });
2993
2994 updateMensagemSemCurso();
2995
2996 // chama o slider por categoria
2997 if (isMobile){
2998 template.find('.slider-curso').css({"flex-wrap":"wrap"});
2999
3000 if($('.ssp-page-busca__section-resultado__ver-todos-mobile[data-tema="'+category.categoryId+'"]').length == 0){
3001
3002 //Exibe o link ver todos
3003 //Adicionava o botão ver todos. Possível adição do código do card novo!
3004 if(totalCursos > 4){
3005 template.find('.slider-curso').append('<a data-nvl="'+(activeCategoryLevel+1)+'" data-tema="'+category.categoryId+'" class="ssp-card-todos-cursos livre card-ver-todos-cursos-link" ><p>Conferir todos <br>os <span>cursos</span></p><i class="far fa-arrow-right"></i></a>')
3006 } else {
3007 $(".ver-todos-cursos-link[data-tema='"+category.categoryId+"']").addClass("ver-todos-no-click");
3008 }
3009 }
3010 }else{
3011 template.find('.slider-curso').addClass(
3012 'slick-area slick-area--md-bleed slider-container slider-id-'
3013 + category.categoryId);
3014 if(totalCursos > 11){
3015 template.find('.slider-curso').append('<a data-nvl="'+(activeCategoryLevel+1)+'" data-tema="'+category.categoryId+'" class="ssp-card-todos-cursos livre card-ver-todos-cursos-link" ><p>Conferir todos <br>os <span>cursos</span></p><i class="far fa-arrow-right"></i></a>')
3016 } else {
3017 $(".ver-todos-cursos-link[data-tema='"+category.categoryId+"']").addClass("ver-todos-no-click");
3018 }
3019
3020 $('.slider-id-' + category.categoryId).removeClass('slick-initialized')
3021 sliderCurso('.slider-id-' + category.categoryId);
3022 }
3023 }
3024 })
3025 })
3026
3027 .fail(function(jqXHR, textStatus, msg) {
3028 // alert(msg);
3029 })
3030}
3031
3032/*
3033 * Faz a exibição dos cursos quando se clica em temas nivel 2
3034 */
3035function cursosPorCategoriaModelo2() {
3036
3037 activeModeloExibicao = 2;
3038 categoryWithoutCourse = []
3039 hideMensagemSemCurso()
3040
3041 $('#tema-atual').hide()
3042 $("#tema-atual h2").html('');
3043
3044 // Busca os filhos (3 nivel)
3045 $.ajax({
3046 url : '/o/senac-unidade-services/subtemasPorTipoCursoETemaEUnidade/'+ groupId+ '/'+ activeCategory.categoryId+ '/'+ tipoCursoNome+'/'+categoryIdUnidade,
3047 type : 'get',
3048 data : {}
3049 }).done(function(subtemas) {
3050
3051 enableScroll(true);
3052
3053 subtemas = JSON.parse(subtemas);
3054
3055 let subsubtemaLista = '' ;
3056
3057 if(subtemas.length > 0) {
3058 subsubtemaLista = '<h3 class="ssp-title-filtrar-mais">Filtrar mais:</h3>';
3059 const btnTodos = '<a href="#a" '
3060 + ' class="subtema btn-nivel-3 subtema-ativo todos" '
3061 + '" data-nvl="2" >'
3062 + 'Todos'
3063 + '</a>'
3064
3065 subsubtemaLista += btnTodos
3066 }
3067
3068 $.each(subtemas, function(k, v) {
3069 subsubtemaLista += '<a href="#a" class="subtema btn-nivel-3" data-tema="'
3070 + v.categoryId
3071 + '" data-nvl="3" >'
3072 + v.name
3073 + '</a>';
3074 });
3075
3076 const containerSubTemaLista = document.createElement('div')
3077 containerSubTemaLista.classList.add('row')
3078 containerSubTemaLista.innerHTML = subsubtemaLista
3079 $('#filtro-temas-nivel-3').html(containerSubTemaLista.outerHTML);
3080
3081 if(subtemas.length > 0) $('#filtro-temas-nivel-3').removeClass('d-none');
3082
3083 cursosPorCategoriaModelo3();
3084
3085 })
3086
3087}
3088
3089async function getCursosByCategory(category) {
3090 if(activeCategory == 'all')
3091 return []
3092
3093 var urlFinal = '/o/senac-content-services/cursosPorCategoriasComFiltrosBolsaECompra/'
3094 + groupId + '/'
3095 + filtrarInscricoesAbertas +'/'
3096 + filtrarBolsaEstudo
3097 + '/1/'
3098 + offsetTodosCursos +'/'
3099 + (limitTodosCursos + offsetTodosCursos)
3100 + '?'
3101 + 'categoryIds='+ category.categoryId + '&'
3102 + 'categoryIds='+ categoryIdTipoCurso+ '&'
3103 + 'categoryIds='+ categoryIdUnidade
3104
3105 return new Promise((resolve) => {
3106 $.ajax({
3107 url : urlFinal,
3108 type : 'get',
3109 data : {},
3110 async: false,
3111 beforeSend: function () {
3112 var totalItens = $('#curso-sem-slick .slick-area__item').length;
3113 if(totalItens > 0){
3114 $('#curso-sem-slick .slick-area__item').each(function(){
3115 if(!$.trim($(this).html()).length)
3116 $(this).remove();
3117 })
3118 }
3119 }
3120 })
3121 .done((data) => resolve(JSON.parse(data)))
3122 })
3123}
3124/*
3125 * Faz a exibição dos cursos quando se clica em temas nivel 3
3126 */
3127async function cursosPorCategoriaModelo3(categories) {
3128 activeModeloExibicao = 3;
3129 categoryWithoutCourse = []
3130 hideMensagemSemCurso()
3131
3132 //Se já estiver carregando não deixa juntar várias chamadas
3133 if($('#loading-todos-cursos').length > 0) return;
3134
3135 //Loading
3136 $('#cursos-por-categoria-container').append('<div id="loading-todos-cursos" style="width:100%; text-align:center">'+
3137 '<div class="ssp-loader-content">'+
3138 '<div class="ssp-loader"></div>'+
3139 '<p class="ssp-loader-text">Carregando...</p>'+
3140 '</div>'+
3141 '</div>');
3142 $("#tema-atual").hide()
3143 $("#tema-atual h2").html('');
3144
3145 categories = categories && categories.length ? categories : [activeCategory]
3146
3147 const cursosPorSubtema = []
3148 var totalCursos = 0;
3149 var templateContainer = $('#cursos-por-subtema-container');
3150 if(offsetTodosCursos == 0) templateContainer.find('#curso-sem-slick').empty();
3151
3152 for (let index = 0; index < categories.length; index++) {
3153 const category = categories[index];
3154
3155 const cursosEncontrados = await getCursosByCategory(category)
3156
3157 if(!cursosEncontrados || !cursosEncontrados.cursos || !cursosEncontrados.length)
3158 categoryWithoutCourse.push(category)
3159
3160 totalCursos += cursosEncontrados.total;
3161
3162 cursosEncontrados.cursos.forEach(cEncontrado => {
3163 if(!cursosPorSubtema.filter(c => c.articleId == cEncontrado.articleId).length)
3164 cursosPorSubtema.push(cEncontrado)
3165 })
3166 }
3167
3168 $('.ssp-loader-content').parent().remove();
3169
3170 if(!cursosPorSubtema.length) {
3171 updateMensagemSemCurso()
3172 enableScroll(true)
3173 return
3174 }
3175
3176 var articles = [];
3177
3178 $.each(cursosPorSubtema, function(k, c){
3179 articles.push(c.articleId);
3180 });
3181
3182 //Verifica a situação dos botoes de inscrições e bolsa
3183 $.ajax({
3184 url : '/o/senac-content-services/verificaBotoesInscricaoEBolsaPorUnidade/'+groupId+'/'+articles.join(',')+'/'+categoryIdUnidade,
3185 type : 'get',
3186 async: false
3187 })
3188 .done(async function(infoBotoes){
3189
3190 if(infoBotoes.length > 0) {
3191
3192 infoBotoes = JSON.parse(infoBotoes);
3193
3194 for (let index = 0; index < cursosPorSubtema.length; index++) {
3195 const curso = cursosPorSubtema[index];
3196
3197 var itemCurso = buildCardCurso(curso, infoBotoes, isMobile)
3198
3199 itemCurso.addClass('card-curso-nivel-2');
3200
3201 // procura a div criada e adiciona os cursos
3202 templateContainer.find('#curso-sem-slick').append(itemCurso);
3203 }
3204
3205 templateContainer.removeClass('d-none');
3206
3207 var totalCursosExibicao = $('#curso-sem-slick .slick-area__item').length;
3208
3209 // Esconde botao carregar mais, se necessário
3210 $('.section-carregar-mais').remove();
3211
3212 if (totalCursosExibicao < totalCursos)
3213 $('#cursos-por-subtema-container').append('<section style="padding: 30px 0; width:100%" class="section-carregar-mais"><div class="container"><a href="#a" class="ssp-section-tema__btn-ver-mais" id="carregar-mais" style="visibility:hidden"> Carregar mais unidades </a></div></section>');
3214 }
3215
3216 updateMensagemSemCurso();
3217
3218 })
3219
3220 enableScroll(true)
3221}
3222
3223function montaTextoTipoCursoParaCard(curso){
3224
3225 var tipoCursoNomeFinal = curso.tipoCursoNome + " ¿ " + curso.formatos[0].name;
3226
3227 if(curso.tipoCursoNome == "Livre")
3228 tipoCursoNomeFinal = "Livre";
3229 //tipoCursoNomeFinal = "Curso " + curso.tipoCursoNome + " ¿ " + curso.formatos[0].name;
3230
3231 return tipoCursoNomeFinal;
3232}
3233
3234//ao final de todos os ajax, se não houver curso na pag por causa dos filtros, exibimos mensagem de nenhum curso
3235$(document).ajaxStop(function () {
3236 $(".card-curso-nivel-2").each(function () {
3237 if($(this).children().length == 0)
3238 $(this).remove()
3239 });
3240});
3241
3242function hideMensagemSemCurso() {
3243 const $msg = $("#filtroSemCurso");
3244 if(!$msg.hasClass('d-none')) $msg.addClass('d-none');
3245}
3246function updateMensagemSemCurso() {
3247
3248 if($(".slick-area__item").not('.cursos-recentes-card').not('.d-none').length > 0 || $('#curso-sem-slick .slick-area__item').length > 0){
3249 hideMensagemSemCurso();
3250 return;
3251 }
3252
3253 let htmlSemCurso = ''
3254
3255 switch (getCurrentLevel()) {
3256 case 1:
3257 case 2:
3258 htmlSemCurso = getTextoSemCurso(filtrarBolsaEstudo,filtrarInscricoesAbertas,activeCategory.name)
3259 $(".ssp-bolsa-formulario__card-aviso-texto").html(htmlSemCurso);
3260 break;
3261
3262 case 3:
3263 categoryWithoutCourse
3264 .forEach(category => {
3265 const el = document.querySelector('[data-tema="' + category.categoryId + '"]')
3266 if(el) {
3267 const temaName = el.text
3268 htmlSemCurso += getTextoSemCurso(filtrarBolsaEstudo, filtrarInscricoesAbertas, temaName)
3269 }
3270 })
3271 if(!htmlSemCurso)
3272 htmlSemCurso = getTextoSemCurso(filtrarBolsaEstudo,filtrarInscricoesAbertas,activeCategory.name)
3273
3274 $(".ssp-bolsa-formulario__card-aviso-texto").html(htmlSemCurso);
3275 break;
3276
3277 default:
3278 break;
3279 }
3280
3281 if(htmlSemCurso){
3282 $("#filtroSemCurso").removeClass("d-none");
3283 }
3284}
3285
3286function getTextoSemCurso(filtroBolsa,filtroInsc,temaNome){
3287
3288 temaNome = typeof temaNome === "undefined" ? '' : 'de '+temaNome;
3289
3290 if(filtroBolsa && filtroInsc)
3291 return "<p>No momento, estamos sem cursos <strong><span id='nomeTemaSemCurso'>"+temaNome+"</span></strong> disponíveis para compra e com bolsas de estudo.<br>Selecione outras áreas para consultar bolsas ou <a href='https://www.sp.senac.br/bolsas-de-estudo'>confira bolsas disponíveis em diferentes cursos.</a></p>";
3292 else if(filtroBolsa)
3293 return "<p>No momento, estamos sem cursos <strong><span id='nomeTemaSemCurso'>"+temaNome+"</span></strong> com bolsas de estudo.<br>Selecione outras áreas para consultar bolsas ou <a href='https://www.sp.senac.br/bolsas-de-estudo'>confira bolsas disponíveis em diferentes cursos.</a></p>";
3294 else if(filtroInsc)
3295 return "<p>No momento, estamos sem cursos <strong><span id='nomeTemaSemCurso'>"+temaNome+"</span></strong> disponíveis para compra.";
3296
3297 return ''
3298}
3299
3300/*
3301 * Monta a lista de temas de curso livre no header da página
3302 */
3303
3304function carregaTemas() {
3305
3306 $
3307 .ajax(
3308 {
3309 url : '/o/senac-unidade-services/temasPorTipoCursoEUnidade/'+groupId+'/'+tipoCursoNome+'/'+categoryIdUnidade,
3310 type : 'get',
3311 async: false
3312 })
3313 .done(
3314 function(temasLista) {
3315 if(typeof temasLista != 'object')
3316 temasLista = JSON.parse(temasLista);
3317
3318 var temasObj = $('#temas');
3319
3320 $
3321 .each(
3322 temasLista,
3323 function(k, tema) {
3324 const icon = (categorias.filter(cat => cat.categoryId == tema.categoryId)[0] || {properties: {}}).properties.icon
3325 temasObj
3326 .append('<div class="ssp-section-tema__container-menu-item mega-menu"><a href="#a" class="tema" data-nvl="1" data-tema="'
3327 + tema.categoryId
3328 + '">'
3329 + '<i class="' + icon + '"></i>'
3330 + tema.name
3331 + '</a></div>');
3332
3333 // Armazena os subtemas deste tema
3334 $
3335 .ajax(
3336 {
3337 url : '/o/senac-unidade-services/subtemasPorTipoCursoETemaEUnidade/'+ groupId+ '/'+ tema.categoryId+ '/'+ tipoCursoNome+'/'+categoryIdUnidade,
3338 type : 'get',
3339 data : {},
3340 async: false
3341 })
3342 .done(
3343 function(subtemas) {
3344 subtemasStorage
3345 .set(
3346 tema.categoryId,
3347 JSON
3348 .parse(subtemas));
3349
3350 });
3351 });
3352
3353 temas = temasLista;
3354
3355 displayCursosPorTema();
3356
3357 $('.todos').addClass('ativo');
3358
3359 }).fail(function(jqXHR, textStatus, msg) {
3360 // alert(msg);
3361 });
3362}
3363
3364/*
3365 * Exibe a lista de subtemas no mouse over do tema
3366 */
3367function displaySubTemasLista(categoryId) {
3368 $('#filtro-temas-nivel-2').empty();
3369 $('#filtro-temas-nivel-2').removeClass('d-none');
3370
3371 const btnTodos = $('<a href="#a" '
3372 + ' class="subtema btn-nivel-3 subtema-ativo todos" '
3373 + '" data-nvl="2" >'
3374 + 'Todos'
3375 + '</a>')
3376
3377 $('#filtro-temas-nivel-2').append(btnTodos);
3378
3379 if(!subtemasStorage.get(activeCategory.categoryId) || !subtemasStorage.get(activeCategory.categoryId).length)
3380 $('#filtro-temas-nivel-2 .subtema-ativo.todos').hide()
3381
3382 $.each(subtemasStorage.get(activeCategory.categoryId), function(k, t) {
3383 $('#filtro-temas-nivel-2').append('<a href="#a" class="subtema btn-nivel-3" data-tema="'
3384 + t.categoryId
3385 + '" data-nvl="2" >'
3386 + t.name
3387 + '</a>');
3388 });
3389}
3390
3391//Carregar mais
3392$(window).scroll(function() {
3393
3394 var element = document.querySelector('#carregar-mais');
3395
3396 if(element != null && !carregandoMais){
3397 var position = element.getBoundingClientRect();
3398
3399 // carregar maios
3400 if(position.top >= 0 && position.bottom <= window.innerHeight) {
3401 // enableScroll(false);
3402 var qtCardsSubTema = $('#cursos-por-subtema-container .ssp-card-curso').not('.d-none').length;
3403 if(qtCardsSubTema > 0){
3404 offsetTodosCursos = qtCardsSubTema;
3405 $('.section-carregar-mais').remove();
3406 }else{
3407 offset = $('.cursos-por-categoria').not('.d-none').length;
3408 }
3409
3410 const urlParamsTemaNv3 = new URLSearchParams(window.location.search);
3411 urlParamTemaNv3 = urlParamsTemaNv3.get('q');
3412
3413 if(!urlParamTemaNv3)
3414 displayCursosPorTema();
3415 }
3416 }
3417
3418});
3419
3420function enableScroll(enable) {
3421 if(enable === false) document.body.classList.add("stop-scrolling")
3422 else document.body.classList.remove("stop-scrolling");
3423 carregandoMais = !enable;
3424}
3425
3426function hideOthersLevel1(elementShow){
3427 document.querySelectorAll('#temas .ssp-section-tema__container-menu-item a')
3428 .forEach(a => a != elementShow ? a.classList.add('d-none') : undefined)
3429}
3430
3431function hideOthersLevel2(elementShow){
3432 document.querySelectorAll('#filtro-temas-nivel-2 a')
3433 .forEach(a => a != elementShow ? a.classList.add('d-none') : undefined)
3434}
3435
3436function hideOthersLevel3(elementShow){
3437 document.querySelectorAll('#filtro-temas-nivel-3 a')
3438 .forEach(a => a != elementShow ? a.classList.add('d-none') : undefined)
3439}
3440
3441function showAllLevel1(){
3442 document.querySelectorAll('#temas .ssp-section-tema__container-menu-item a')
3443 .forEach(btn => {
3444 btn.classList.remove('d-none')
3445 btn.classList.remove('ativo')
3446 btn.classList.remove('tema-ativo')
3447 })
3448}
3449
3450function showAllLevel2(){
3451 document.querySelectorAll('#filtro-temas-nivel-2 a')
3452 .forEach(btn => {
3453 btn.classList.remove('d-none')
3454 btn.classList.remove('subtema-ativo')
3455 })
3456}
3457
3458function showAllLevel3(){
3459 document.querySelectorAll('#filtro-temas-nivel-3 a')
3460 .forEach(btn => {
3461 btn.classList.remove('d-none')
3462 btn.classList.remove('subtema-ativo')
3463 })
3464}
3465
3466function removeFiltersLevel1() {
3467 showAllLevel1()
3468
3469 const btnActived = document.querySelector('#temas .ssp-section-tema__container-menu-item .todos')
3470 btnActived.click()
3471}
3472
3473function removeFiltersLevel2() {
3474 const btnActived = document.querySelector('#temas .tema-ativo')
3475 btnActived.click()
3476
3477 new Promise(() => btnActived.click())
3478}
3479
3480function removeFiltersLevel3() {
3481 const btnActivedNivel2 = document.querySelector('#filtro-temas-nivel-2 .subtema-ativo:not(.todos)')
3482 const temaNivel2 = btnActivedNivel2.getAttribute('data-tema')
3483
3484 removeFiltersLevel2()
3485
3486 const intervalNível2 = setInterval(() => {
3487 const btn = document.querySelector('[data-tema="' + temaNivel2 + '"]')
3488
3489 if(btn) {
3490 btn.click()
3491 $('.ssp-loader-content').parent().remove();
3492 clearInterval(intervalNível2)
3493 }
3494 }, 200);
3495}
3496
3497function clickTema(categoryId) {
3498 return new Promise(resolve => {
3499 const interval = setInterval(() => {
3500 const el = document.querySelector('[data-tema="' + categoryId + '"]')
3501
3502 if(el) {
3503 el.click()
3504 clearInterval(interval)
3505 resolve()
3506 }
3507 }, 200);
3508 })
3509}
3510
3511function getSubtemas(categoryFriendlyUrl, parentCategoryId) {
3512 return $.ajax({
3513 url : '/o/senac-unidade-services/categoriaPorFriendlyURL/'+categoryFriendlyUrl+"/"+(parentCategoryId || 0),
3514 type : 'get',
3515 dataType: 'json',
3516 async: false
3517 })
3518}
3519
3520function getCategoriesIdNivel3Actived() {
3521 const categories = []
3522
3523 document.querySelectorAll("#filtro-temas-nivel-3 a.subtema-ativo")
3524 .forEach(a => categories.push(parseInt(a.getAttribute('data-tema'))))
3525
3526 return categories
3527}
3528
3529function getCurrentLevel() {
3530 let level = 1
3531
3532 if(document.querySelector('#temas .tema-ativo'))
3533 level = 1
3534
3535 if(document.querySelector('#filtro-temas-nivel-2 .subtema-ativo'))
3536 level = 2
3537
3538 if(document.querySelector('#filtro-temas-nivel-3 .subtema-ativo'))
3539 level = 3
3540
3541 return level
3542}
3543
3544
3545</script>