1function onlyDigits(v) { 2 return String(v || "").replace(/\D+/g, ""); 3} 4 5function atribuirFuncoesBotao(botoes, tipoLink, pixBillet) { 6 botoes.forEach((botao) => { 7 botao.href = "javascript:void(0)"; 8 9 botao.addEventListener("click", function () { 10 if ( 11 parametroCurso === "com" && 12 paramTipo && 13 [ 14 "netflix-dados", 15 "comunidade-programadores", 16 "vit", 17 "trial7", 18 "aut", 19 "fat", 20 ].includes(paramTipo) 21 ) { 22 definirLinkCheckout( 23 dicLinksCheckout[parametroFonte][tipoLink][paramTipo], 24 dicSrcPadrao, 25 pixBillet, 26 ); 27 } else if (window.ehCupom) { 28 const cupomHidePixEBoleto = 29 parametroCupomNormalizado === "flow-2"; 30 const cupomHidePixSemBoleto = [ 31 "castro", 32 "flow-org", 33 "fundador", 34 "zico", 35 ].includes(parametroCupomNormalizado); 36 const pixBilletCupom = 37 cupomHidePixEBoleto || cupomHidePixSemBoleto ? 1 : 0; 38 const billetCupom = cupomHidePixEBoleto 39 ? 1 40 : cupomHidePixSemBoleto 41 ? "" 42 : undefined; 43 44 definirLinkCheckout( 45 dicLinksCheckout["lespera"]["cp"][ 46 parametroCupomNormalizado 47 ], 48 dicSrcPadrao, 49 pixBilletCupom, 50 billetCupom, 51 ); 52 } else { 53 console.log({ tipoLink }); 54 definirLinkCheckout( 55 dicLinksCheckout[parametroFonte][tipoLink][parametroCurso], 56 dicSrcPadrao, 57 pixBillet, 58 ); 59 } 60 }); 61 }); 62} 63 64function togglePopupAberto(spinner) { 65 if (popupContainerEl) { 66 popupContainerEl.classList.toggle("visivel"); 67 popupContainerEl.removeAttribute("style"); 68 } else { 69 bodyEl.classList.toggle("popup-aberto"); 70 } 71 72 if (spinner) { 73 togglePopupSpinner(); 74 } 75} 76 77function trocarConteudoPopup(conteudo, texto, togglePopup) { 78 let divConteudo = 79 formActive.parentElement.querySelector(".popup__conteudo"); 80 81 if (conteudo == "trilha") { 82 formActive.style.display = "none"; 83 84 divConteudo.removeAttribute("style"); 85 divConteudo.innerText = texto; 86 } else { 87 divConteudo.style.display = "none"; 88 formActive.removeAttribute("style"); 89 } 90 91 if (togglePopup) { 92 togglePopupAberto(false); 93 } 94} 95 96function togglePopupSpinner() { 97 if (popupContainerEl) { 98 popupContainerEl 99 .querySelector(".caixa-popup") 100 .classList.add("carregando-spinner"); 101 popupContainerEl 102 .querySelector(".fundo-spinner") 103 .classList.add("carregando-spinner"); 104 } else { 105 bodyEl.classList.add("popup-aberto--spinner"); 106 } 107} 108 109function marcarPrecheckoutHiaEnviado() { 110 if (parametroCurso !== "hia") return; 111 112 try { 113 sessionStorage.setItem("hashiaPrecheckoutEnviado", "1"); 114 } catch (error) {} 115} 116 117function precheckoutHiaJaEnviado() { 118 if (parametroCurso !== "hia") return false; 119 120 try { 121 return sessionStorage.getItem("hashiaPrecheckoutEnviado") === "1"; 122 } catch (error) { 123 return false; 124 } 125} 126 127function enviarFormulario() { 128 togglePopupSpinner(); 129 marcarPrecheckoutHiaEnviado(); 130 formActive.submit(); 131} 132 133function limparCamposCheckoutHia() { 134 if (parametroCurso !== "hia") return; 135 136 checkoutHiaSelecionado = ""; 137 138 [ 139 linkTempIDProdutoForm, 140 linkTempIDOfertaForm, 141 linkTempSRCForm, 142 linkTempPixBilletForm, 143 linkTempPixForm, 144 linkTempBilletForm, 145 ].forEach((campo) => { 146 if (campo) { 147 campo.value = ""; 148 } 149 }); 150} 151 152function resetarEstadoCheckoutHia() { 153 if (parametroCurso !== "hia") return; 154 155 limparCamposCheckoutHia(); 156 bodyEl.classList.remove("popup-aberto", "popup-aberto--spinner"); 157 document.querySelector(".popup")?.setAttribute("aria-hidden", "true"); 158 document 159 .querySelectorAll(".carregando-spinner") 160 .forEach((elemento) => elemento.classList.remove("carregando-spinner")); 161} 162 163function definirCheckoutHiaSelecionado(IDLinkTemp, srcForm) { 164 if (parametroCurso !== "hia" || !IDLinkTemp) return; 165 166 const checkoutUrl = new URL("https://pay.hotmart.com/" + IDLinkTemp[0]); 167 const srcCheckout = String(srcForm || "").trim(); 168 const sckCheckout = String( 169 document.querySelector("[name='field[158]']")?.value || "", 170 ).trim(); 171 172 checkoutUrl.searchParams.set("off", IDLinkTemp[1]); 173 174 if (linkTempPixForm?.value !== "") { 175 checkoutUrl.searchParams.set("hidePix", linkTempPixForm.value); 176 } 177 178 if (linkTempBilletForm?.value !== "") { 179 checkoutUrl.searchParams.set("hideBillet", linkTempBilletForm.value); 180 } 181 182 checkoutUrl.searchParams.set("checkoutMode", "10"); 183 184 if (srcCheckout) { 185 checkoutUrl.searchParams.set("src", srcCheckout); 186 } 187 188 if (sckCheckout) { 189 checkoutUrl.searchParams.set("sck", sckCheckout); 190 } 191 192 checkoutHiaSelecionado = checkoutUrl.toString(); 193} 194 195function redirecionarCheckoutHiaSeReenvio() { 196 if ( 197 parametroCurso !== "hia" || 198 !precheckoutHiaJaEnviado() || 199 !checkoutHiaSelecionado 200 ) { 201 return false;
202 } 203 204 togglePopupSpinner(); 205 window.location.href = checkoutHiaSelecionado; 206 return true; 207} 208 209function definirLinkCheckout(IDLinkTemp, srcForm, pixBillet, billet) { 210 limparCamposCheckoutHia(); 211 212 if ( 213 linkTempIDProdutoForm && 214 linkTempIDOfertaForm && 215 linkTempSRCForm && 216 linkTempPixBilletForm 217 ) { 218 console.log(IDLinkTemp[0], IDLinkTemp[1], srcForm, pixBillet); 219 linkTempIDProdutoForm.value = IDLinkTemp[0]; 220 linkTempIDOfertaForm.value = IDLinkTemp[1]; 221 linkTempSRCForm.value = srcForm; 222 223 if (parametroCurso === "claude" && parametroFonte === "jornada") { 224 linkTempPixBilletForm.value = 1; 225 if (linkTempPixForm) { 226 linkTempPixForm.value = 1; 227 } 228 if (linkTempBilletForm) { 229 linkTempBilletForm.value = 1; 230 } 231 } else if (parametroTipo === "fat") { 232 // Campanha wfat: checkout com Pix e sem boleto. O formulario 15647 233 // usa os campos separados; o combinado legado fica vazio. 234 // Vem antes do ramo `com`+`aula` porque a pagina serve os dois ao mesmo 235 // tempo â o curso continua "com" e a fonte continua "aula". 236 linkTempPixBilletForm.value = ""; 237 if (linkTempPixForm) { 238 linkTempPixForm.value = 0; 239 } 240 if (linkTempBilletForm) { 241 linkTempBilletForm.value = 1; 242 } 243 } else if (parametroCurso === "com" && parametroFonte === "aula") { 244 if (linkTempPixForm) { 245 linkTempPixForm.value = 0; 246 } 247 if (linkTempBilletForm) { 248 linkTempBilletForm.value = 1; 249 } 250 } else if (parametroCurso === "hia" && parametroFonte === "jornada") { 251 linkTempPixBilletForm.value = pixBillet; 252 if (linkTempPixForm) { 253 linkTempPixForm.value = 0; 254 } 255 if (linkTempBilletForm) { 256 linkTempBilletForm.value = 1; 257 } 258 } else if (typeof billet !== "undefined") { 259 linkTempPixBilletForm.value = pixBillet; 260 if (linkTempPixForm) { 261 linkTempPixForm.value = pixBillet; 262 } 263 if (linkTempBilletForm) { 264 linkTempBilletForm.value = billet; 265 } 266 } else { 267 linkTempPixBilletForm.value = pixBillet; 268 } 269 270 definirCheckoutHiaSelecionado(IDLinkTemp, srcForm); 271 } 272 273 trocarConteudoPopup("precheckout", "", false); 274 275 var formCompleto = true; 276 const camposIgnoradosFormCompleto = ["field[6]", "s"]; 277 278 if (parametroCurso === "hia") { 279 camposIgnoradosFormCompleto.push("field[58]"); 280 } 281 282 inputsForm.forEach(function (elInput) { 283 if ( 284 elInput.value == "" && 285 !camposIgnoradosFormCompleto.includes(elInput.getAttribute("name")) 286 ) { 287 formCompleto = false; 288 } 289 }); 290 291 if (formCompleto) { 292 if (redirecionarCheckoutHiaSeReenvio()) return; 293 294 enviarFormulario(); 295 } else { 296 togglePopupAberto(false); 297 } 298} 299 300function ajustesVideoVendas() { 301 let elemVideo = document.querySelector("#js-video"); 302 303 if (elemVideo) { 304 if ( 305 parametroFonte == "aula" || 306 parametroFonte == "intensivao" || 307 parametroFonte == "jornada" || 308 parametroFonte == "up" 309 ) { 310 // Alterar o src do vÃdeo se existir na tabela 311 312 if (paramTipo) { 313 // if (paramTipo == "netflix-dados") { 314 // elemVideo.src = 315 // dicSRCVideo[parametroFonte]["netflix-dados"][0]; 316 // } else if (paramTipo == "comunidade-programadores") { 317 // elemVideo.src = 318 // dicSRCVideo[parametroFonte][ 319 // "comunidade-programadores" 320 // ][0]; 321 // } 322 // if (paramTipo == "comunidade-programadores") { 323 // elemVideo.src = 324 // dicSRCVideo[parametroFonte][ 325 // "comunidade-programadores" 326 // ][0]; 327 // } 328 } else { 329 if ( 330 dicSRCVideo[parametroFonte] && 331 dicSRCVideo[parametroFonte][parametroCurso] 332 ) { 333 if (dicSRCVideo[parametroFonte][parametroCurso][1]) { 334 if ( 335 dicSRCVideo[parametroFonte][parametroCurso][1] == 336 "amazon" && 337 elemVideo.tagName == "iframe" 338 ) { 339 criarVideoYouTube(
340 "js-video", 341 dicSRCVideo[parametroFonte][parametroCurso][0], 342 ); 343 return; 344 } 345 } 346 347 elemVideo.src = 348 dicSRCVideo[parametroFonte][parametroCurso][0]; 349 } 350 } 351 } 352 353 if (parametroCurso == "excel") { 354 if (parametroFonte == "perpetuo" && parametroTipo == "vsl") { 355 var idOnboarding = new URLSearchParams( 356 window.location.search, 357 ).get("video"); 358 var dictCorrespondencia = { 359 "0.0": "https://player.hashtagtreinamentos.com/embed/?v=3219d8f1-b5c5-4c73-9130-497afd8a87fd&availableSpeeds=1,1.25,1.5", 360 1.1: "https://player.hashtagtreinamentos.com/embed/?v=fdab6a69-fc12-420b-be75-352615705453&availableSpeeds=1,1.25,1.5", 361 2.1: "https://player.hashtagtreinamentos.com/embed/?v=43f24f84-cd7b-429d-9512-99265e2f1414&availableSpeeds=1,1.25,1.5", 362 3.1: "https://player.hashtagtreinamentos.com/embed/?v=a7eceafc-cf1c-42db-bc52-c7c4aea578aa&availableSpeeds=1,1.25,1.5", 363 4.1: "https://player.hashtagtreinamentos.com/embed/?v=7fa778ec-6eee-4962-9b8f-7d755caeb884&availableSpeeds=1,1.25,1.5", 364 5.1: "https://player.hashtagtreinamentos.com/embed/?v=0038e43e-5f07-4709-a220-3580400496cc&availableSpeeds=1,1.25,1.5", 365 6.1: "https://player.hashtagtreinamentos.com/embed/?v=ceabbf31-d864-448f-ac6e-2f2d548d6f5f&availableSpeeds=1,1.25,1.5", 366 1.2: "https://player.hashtagtreinamentos.com/embed/?v=983d48f4-c1a0-4b61-be1e-148d75f9e81d&availableSpeeds=1,1.25,1.5", 367 2.2: "https://player.hashtagtreinamentos.com/embed/?v=8a0c5111-e519-4ee3-95b3-35ac28086b73&availableSpeeds=1,1.25,1.5", 368 3.2: "https://player.hashtagtreinamentos.com/embed/?v=3273f2f2-6d32-4bd3-8b3e-153fe129f2c6&availableSpeeds=1,1.25,1.5", 369 4.2: "https://player.hashtagtreinamentos.com/embed/?v=321ebb3d-bf5d-4410-ac86-38a206e74f9e&availableSpeeds=1,1.25,1.5", 370 5.2: "https://player.hashtagtreinamentos.com/embed/?v=7fcc5698-8ce3-4c7e-b5ec-8120dbaeda06&availableSpeeds=1,1.25,1.5", 371 6.2: "https://player.hashtagtreinamentos.com/embed/?v=9464a43b-bea6-4507-84fa-7ba662323d9e&availableSpeeds=1,1.25,1.5", 372 1.3: "https://player.hashtagtreinamentos.com/embed/?v=787bc8cf-2595-4bf1-8e99-d130857a34c8&availableSpeeds=1,1.25,1.5", 373 2.3: "https://player.hashtagtreinamentos.com/embed/?v=e50c2da5-4552-49b1-99a9-5e57fad5eaa5&availableSpeeds=1,1.25,1.5", 374 3.3: "https://player.hashtagtreinamentos.com/embed/?v=5a3ec0d7-840c-4d36-b226-20201bdae125&availableSpeeds=1,1.25,1.5", 375 4.3: "https://player.hashtagtreinamentos.com/embed/?v=52177aab-990b-48af-a5ce-ab32e90cd9ea&availableSpeeds=1,1.25,1.5", 376 5.3: "https://player.hashtagtreinamentos.com/embed/?v=41a329d8-9412-4743-beef-4b4f9c8244cc&availableSpeeds=1,1.25,1.5", 377 6.3: "https://player.hashtagtreinamentos.com/embed/?v=e51e64d7-3e90-4790-ab76-20ae0c33c3a5&availableSpeeds=1,1.25,1.5", 378 }; 379 380 // Ajustar atributos do vÃdeo para o panda 381 elemVideo.id = "panda-5c9e3909-45c3-4421-afff-b3d9cef7b867"; 382 elemVideo.allow = 383 "accelerometer;gyroscope;autoplay;encrypted-media;picture-in-picture"; 384 elemVideo.allowFullscreen = true; 385 elemVideo.setAttribute("fetchpriority", "high"); 386 387 // Editar vÃdeo conforme o ID de Onboarding 388 if (idOnboarding && dictCorrespondencia[idOnboarding]) { 389 elemVideo.src = dictCorrespondencia[idOnboarding]; 390 } else { 391 elemVideo.src = dictCorrespondencia["0.0"]; 392 } 393 394 // Carregar o JS do Panda 395 loadJS( 396 "https://player.hashtagtreinamentos.com/api.v2.js", 397 true, 398 onPandaPlayerApiLoad, 399 ); 400 401 function onPandaPlayerApiLoad() { 402 const player = new PandaPlayer("panda-player", { 403 onReady: () => { 404 console.log( 405 "Player is ready", 406 player.getCurrentTime(), 407 ); 408 409 player.onEvent( 410 throttle(function ({ message }) { 411 if (message === "panda_timeupdate") { 412 console.log( 413 "Tempo atualizou", 414 player.getCurrentTime(), 415 ); 416 417 // Passando dos 20 min 418 if ( 419 player.getCurrentTime() > 1200 && 420 !hasClass( 421 document.body, 422 "pgvex-liberada", 423 ) 424 ) { 425 document.body.classList.add( 426 "pgvex-liberada", 427 ); 428 document.body.classList.remove( 429 "pgvex-fechada", 430 ); 431 loadJS( 432 "//code.jivosite.com/widget/mULhfvoict", 433 ); 434 } 435 } 436 }, 5000), 437 ); 438 }, 439 onError: (event) => { 440 console.log("Player onError", event); 441 }, 442 }); 443 } 444 } else if (parametroFonte == "jornada") { 445 elemVideo.id = "js-video"; 446 elemVideo.style = ""; 447 elemVideo.allow = 448 "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"; 449 elemVideo.allowFullscreen = ""; 450 elemVideo.removeAttribute("fetchpriority"); 451 elemVideo.setAttribute( 452 "referrerpolicy", 453 "strict-origin-when-cross-origin", 454 ); 455 elemVideo.setAttribute("frameborder", "0"); 456 } 457 } 458 } 459} 460 461// Body e Formulário 462var bodyEl = document.body; 463var formActive = document.querySelector(".form"); 464 465if (!formActive) { 466 formActive = document.querySelector("form"); 467} 468 469var popupContainerEl = document.getElementById("fundo-popup"); 470 471// Parâmetros de URL 472var parametrosURL = new URLSearchParams(window.location.search); 473var parametroSRC = parametrosURL.get("src"); 474var parametroFonte = parametrosURL.get("fonte"); // Lista de Espera, Perpétuo... 475var parametroCurso = parametrosURL.get("curso"); // Excel, JavaScript... 476var parametroTipo = parametrosURL.get("tipo"); // Teste A, Teste B... 477var parametroCupom = parametrosURL.get("cupom"); 478var parametroOrigem = parametrosURL.get("origem"); 479 480var parametroCupomNormalizado = (parametroCupom || "").toLowerCase(); 481 482const listaCupons = [ 483 "redcast", 484 "sacani", 485 "flow", 486 "flow-org", 487 "flow-2", 488 "raiam", 489 "curry", 490 "curry-tr", 491 "peter", 492 "peter-tr", 493 "vilela", 494 "castro", 495 "fundador", 496 "zico", 497]; 498 499window.ehCupom = listaCupons.includes(parametroCupomNormalizado); 500 501const mapaTitleCupom = { 502 sacani: "Comunidade Impressionadora da Hashtag Treinamentos Sacani", 503 flow: "Comunidade Impressionadora da Hashtag Treinamentos Flow", 504 "flow-org": "Comunidade Impressionadora da Hashtag Treinamentos Flow-5.5", 505 "flow-2": "Comunidade Impressionadora da Hashtag Treinamentos Flow", 506 raiam: "Comunidade Impressionadora da Hashtag Treinamentom Raiam", 507 redcast: "Comunidade Impressionadora da Hashtag Treinamentos Redcast", 508 peter: "Comunidade Impressionadora da Hashtag Treinamentos Peter-5.0", 509 "peter-tr": "Comunidade Impressionadora da Hashtag Treinamentos Peter-5.5", 510 curry: "Comunidade Impressionadora da Hashtag Treinamentos Curry-5.0", 511 "curry-tr": "Comunidade Impressionadora da Hashtag Treinamentos Curry-5.5", 512 vilela: "Comunidade Impressionadora da Hashtag Treinamentos Vilela", 513 castro: "Comunidade Impressionadora da Hashtag Treinamentos Castro", 514 fundador: "Comunidade Impressionadora da Hashtag Treinamentos Fundador", 515 zico: "Comunidade Impressionadora da Hashtag Treinamentos Zico", 516}; 517 518if ( 519 parametroCurso === "com" && 520 window.ehCupom && 521 mapaTitleCupom[parametroCupomNormalizado] 522) { 523 document.title = mapaTitleCupom[parametroCupomNormalizado]; 524} 525 526// Campos do formulário 527let inputsForm = formActive.querySelectorAll("input"); 528let fullnameForm = document.querySelector("#fullname"); 529let emailForm = document.querySelector("#email"); 530let linkTempIDProdutoForm = document.querySelector("[name='field[112]']"); 531let linkTempIDOfertaForm = document.querySelector("[name='field[113]']"); 532let linkTempSRCForm = document.querySelector("[name='field[114]']"); 533let linkTempPixBilletForm = document.querySelector("[name='field[115]']"); 534let linkTempPixForm = document.querySelector("[name='field[180]']"); 535let linkTempBilletForm = document.querySelector("[name='field[181]']"); 536let checkoutHiaSelecionado = ""; 537 538if (parametroCurso === "hia") { 539 limparCamposCheckoutHia(); 540 541 window.addEventListener("pageshow", (event) => { 542 if (event.persisted || bodyEl.classList.contains("popup-aberto--spinner")) { 543 resetarEstadoCheckoutHia(); 544 } 545 }); 546} 547 548// Botões Comunidade 549var elemsBotaoPadrao = document.querySelectorAll(
550 '[id*="botaoPopupPadrao"], [id*="botao-linkcomu-padrao"], .js-botaoPadrao', 551); 552var elemsBotaoPix = document.querySelectorAll( 553 '[id*="botaoPopupPix"], [id*="botao-linkcomu-pix"]', 554); 555var elemsBotaoRecorrente = document.querySelectorAll( 556 '[id*="botaoPopupRecorrente"], [id*="botao-linkcomu-limite"]', 557); 558 559// Botões Oferta 560var elemsBotaoOferta = document.querySelectorAll(".js-botaoOferta"); 561 562// Botões Popup Trilha 563var elemsBotaoPopupTrilha = document.querySelectorAll(".js-botaoPopupTrilha"); 564 565// Botões Avulso 566var elemsBotaoAvulsoPadrao = document.querySelectorAll( 567 '[id*="botaoPopupAvulsoPadrao"], [id*="botao-link-padrao"]', 568); 569var elemsBotaoAvulsoPix = document.querySelectorAll( 570 '[id*="botaoPopupAvulsoPix"], [id*="botao-link-pix"]', 571); 572var elemsBotaoAvulsoRecorrente = document.querySelectorAll( 573 '[id*="botaoPopupAvulsoRecorrente"], [id*="botao-link-limite"]', 574); 575 576// Botão Fechar Popup 577var elemsBotaoFechar = document.querySelectorAll('[id*="botaoPopupFechar"]'); 578 579// Elementos que mudam conforme a fonte 580let elemsPrecoParcelado = document.querySelectorAll(".js-preco-parcelado"); 581let elemsPrecoParceladoInt = document.querySelectorAll( 582 ".js-preco-parcelado-int", 583); 584let elemsPrecoParceladoDec = document.querySelectorAll( 585 ".js-preco-parcelado-dec", 586); 587let elemsPrecoAVista = document.querySelectorAll(".js-preco-avista"); 588 589let elemPrecoDe = document.querySelectorAll(".js-preco-de"); 590let elemContainerToggle = document.querySelectorAll( 591 "[class*=pgto__container-toggle]", 592); 593let elemPrecoFoco = document.querySelectorAll( 594 ".preco__caixa:not(.preco__caixa--semfoco)", 595); 596let elemPrecoSemFoco = document.querySelectorAll(".preco__caixa--semfoco"); 597let elemBlocoToggle = document.querySelector(".bloco-toggle-pgvpy"); 598let elemsBlocoPlano = document.querySelectorAll(".bloco-planos-pgvpy"); 599 600let elemsQtdAulas = document.querySelectorAll(".js-qtd-aulas"); 601let elemsQtdHoras = document.querySelectorAll(".js-qtd-horas"); 602let elemsQtdCursosCom = document.querySelectorAll(".js-qtd-cursos-com"); 603let elemsCursosCom = document.querySelectorAll(".js-cursos-com"); 604let elemsDescricaoCursosCom = document.querySelectorAll( 605 ".js-descricao-cursos-com", 606); 607 608let dicQtdAulas = { 609 pa: "200 aulas", 610 vba: "400", 611 ppt: "120", 612 fe: "400", 613 js: "500", 614}; 615let dicQtdHoras = { 616 pa: "20 horas", 617 vba: "87", 618 ppt: "27", 619 fe: "100", 620 js: "115", 621}; 622 623let dicCursosCom = { 624 Excel: "para quem está buscando uma vaga no mercado (praticamente todas as vagas boas têm Excel como pré requisito - à s vezes até como prova no processo seletivo) e também pra quem precisa usar o Excel no dia a dia na empresa e dominar tudo do básico ao avançado da principal ferramenta do Mercado de Trabalho.", 625 "Power BI": 626 "uma das melhores formas de você se destacar tanto em processos seletivos quanto na sua empresa com a ferramenta que atualmente é um dos maiores diferenciais no Mercado, pra aprender a criar Relatórios e Dashboards que impressionam dentro de qualquer empresa, além de entrar em vagas da área de Dados (Business Intelligence, por exemplo), que pagam bem acima da média.", 627 Python: "a linguagem de programação que mais cresce no mundo. Nesse programa você vai aprender a dominar o Python pra fazer automações incrÃveis, Desenvolver sites, construir análises com Ciência de Dados (uma das carreiras mais valorizadas no Mercado), trabalhar com Inteligência Artificial, e muito mais, mesmo que você nunca tenha programado na vida, pra surfar essa onda que na minha opinião é uma das maiores oportunidades de crescimento na carreira e ser o profissional que as empresas cada vez estão buscando mais.", 628 VBA: "vai te ajudar a automatizar praticamente qualquer tarefa repetitiva que você faça dentro do Excel (inclusive mandar e-mail, criar apresentação em PowerPoint automaticamente, gerar relatórios automáticos em PDF, etc).", 629 SQL: "a linguagem mais importante do mundo para quem trabalha com dados. Nesse programa você vai aprender tudo sobre como trabalhar com grande volume de dados, uma das habilidades mais importantes do mercado com o aumento do volume de informações. Você vai aprender como trabalhar com bancos de dados seja pra se destacar na sua empresa atual, pra conseguir um diferencial em processos seletivos ou até mesmo para entrar em áreas de dados - existe MUITA vaga promissora pra quem domina o SQL.", 630 PowerPoint: 631 "esse é um programa único, sem comparativo no mercado, onde vou te mostrar como realmente Dominar a Arte da Apresentação para ser reconhecido e receber as Melhores Oportunidades no Mercado de Trabalho. Você não vai aprender âapenasâ a montar uma apresentação de impacto, mas também todas as técnicas de Persuasão, Linguagem Corporal, Como perder a timidez, e como IMPRESSIONAR em qualquer apresentação (formal ou informal).", 632 JavaScript: 633 "a linguagem de programação que manda quando o assunto é desenvolvimento WEB. Para você ter uma ideia, 98,3% de todos os sites no mundo utilizam JavaScript. Isso acontece, pois essa linguagem de programação é responsável por tornar os sites interativos e inteligentes, mas não para por aÃ. Além de ser utilizado na grande maioria dos sites, o JavaScript é muito popular por ser uma das poucas linguagens que permite o desenvolvedor trabalhar em todas as áreas do desenvolvimento, sendo elas: front-end (parte visual); backend (parte da inteligência que roda por trás); banco de dados (armazenamento de informações).", 634 "HTML & CSS": 635 "o HTML e CSS são as linguagens de programação utilizadas para criar e estilizar sites na WEB. Todo e qualquer site existente hoje na Internet utiliza essas duas linguagens em seus códigos. O HTML atua na parte da construção da estrutura do site, já o CSS atua na estilização das páginas. Então, enquanto o HTML monta o esqueleto da página, o CSS deixa a página bonita e visual. O HTML e o CSS atuam em conjunto para criar páginas bonitas e bem estruturadas.", 636 "Inteligência Artificial": 637 "aprenda como usar da melhor forma as principais tecnologias de Inteligência Artificial para se destacar no Mercado de Trabalho. São elas: ChatGPT, Gemini, Copilot, Midjourney, Dall-e, Bardeen, Gamma,
637Copilot 365, Perplexity, Claude, Make AI, e muito mais!", 638 "Power Automate": 639 "aprenda a ferramenta da Microsoft focada em otimizar e automatizar todo e qualquer fluxo de trabalho. Impressione na sua empresa fazendo automações de tarefas e processos integrando esse programa com as principais ferramentas do Mercado de Trabalho", 640}; 641let qtdCursosCom = Object.keys(dicCursosCom).length; 642let cursosCom = ""; 643let descricaoCursosCom = ""; 644 645var dicSRCVideo = { 646 aula: { 647 js: [ 648 "https://webinarios-hashtag.s3.us-east-2.amazonaws.com/Live+de+Apresenta%C3%A7%C3%A3o+do+Programa+Full+Stack+Impressionador.mp4", 649 "amazon", 650 ], 651 sql: [ 652 "https://webinarios-hashtag.s3.us-east-2.amazonaws.com/Live+de+Apresenta%C3%A7%C3%A3o+do+Programa+SQL+Impressionador.mp4", 653 "amazon", 654 ], 655 // com: [ 656 // "https://webinarios-hashtag.s3.us-east-2.amazonaws.com/live_da_comunidade_impressionadora+(1080p).mp4", 657 // "amazon", 658 // ], 659 // `com`, `netflix-dados` e `comunidade-programadores` (as tres exclusivas da 660 // pg-comunidade-impressionadora.php) sairam daqui em 2026-09: o video do hero 661 // dessa pagina passou a ser decidido inteiro no PHP do template (uma fonte so). 662 // As duas ultimas ja estavam mortas antes disso â o unico ponto que as lia 663 // (`if (paramTipo) {...}` logo acima) estava comentado, e guardavam YouTube 664 // diferente do que a pagina realmente usa hoje (Panda, via a ternaria/PHP). 665 // Nenhuma outra pagina usa esses tres valores de curso, entao saÃram sem 666 // afetar mais nada aqui. 667 }, 668 jornada: { excel: ["https://youtube.com/embed/oo28Ki1ZZ8A", "yt"] }, 669}; 670 671var dicCodigosCurso = { 672 js: "js", 673 excel: "ex", 674 pa: "pa", 675 sql: "sql", 676 vba: "vba", 677 ppt: "ppt", 678 fe: "fe", 679 com: "ci", 680 /* 681 * ð´ `fullstack` entrou em 24/08/2026 com a pgv do Full Stack. Sem esta linha o 682 * guard logo abaixo (`if (!dicCodigosCurso[parametroCurso]) parametroCurso = 683 * "com"`) troca o curso pela Comunidade EM SILENCIO, e quem clica na oferta do 684 * Full Stack cai no checkout errado sem uma linha de erro. O codigo "fs" e o 685 * mesmo que a LP usa â ele entra no `conversion`, entao inventar outro aqui 686 * partiria o relatorio em dois nomes para o mesmo produto. 687 */ 688 fullstack: "fs", 689 "agentes-ia": "agentes-ia", 690 "no-code": "nc", 691 cc: "cc", 692 claude: "claude", 693 hia: "hia", 694 agia: "agia", 695}; 696 697let dicHueModeBotaoForm = { 698 js: ["292", "dark"], 699 // A LP trata `fullstack` como alias de `js` na cor do botao do form; o valor e 700 // o mesmo de la. Esta leitura e guardada (`if (dicHueModeBotaoForm[...])`), 701 // entao a ausencia nao quebrava nada â so deixava o botao sem a hue da pagina. 702 fullstack: ["292", "dark"], 703 excel: ["159", "dark"], 704 pa: ["198", "dark"], 705 sql: ["193", "light"], 706 vba: ["193", "light"], 707 ppt: ["193", "light"], 708 fe: ["181", "dark"], 709 com: ["211", "dark"], 710 "agentes-ia": ["337", "dark"], 711 "no-code": ["284", "dark"], 712 cc: ["211", "dark"], 713 claude: ["15", "dark"], 714 hia: ["326", "dark"], 715 agia: ["12", "dark"], 716}; 717 718var dicSrcPadrao = { 719 lespera: "les", 720 perpetuo: "vtsd_", 721 intensivao: "l", 722 aula: "w", 723 up: "up_", 724 afiliado: "af_", 725 email: "em_", 726 pat: "pat_", 727}; 728 729// A base da Jornada e a do Intensivao; campanhas com SRC proprio sobrescrevem 730// este valor na resolucao abaixo. 731dicSrcPadrao["jornada"] = dicSrcPadrao["intensivao"]; 732dicSrcPadrao["down"] = dicSrcPadrao["intensivao"]; 733 734var dicIDForm = { 735 lespera: { 736 js: "6132", 737 excel: "5344", 738 sql: "5372", 739 vba: "5374", 740 ppt: "5376", 741 fe: "8211", 742 com: "7807", 743 // 10412 = o mesmo form que a LP usa para o Full Stack. 744 fullstack: "10412", 745 "agentes-ia": "13973", 746 "no-code": "14011", 747 claude: "14953", 748 /* 749 * ð´ `pa` faltava aqui e a falta era invisivel: sem a chave, a fonte
750 * `lespera` da pgv de Power Automate caia no fallback e parava no 8173, 751 * que e `[WEBINAR]`. O `[ORGANICO] [POWER AUTOMATE]` (8231) existia 752 * parado desde 11/07/2024, na mesma lista 56. 753 * 754 * O comentario do registro chegava a AFIRMAR que 8173 era 755 * `dicIDForm.lespera.pa` â a chave nao existia. Afirmacao sobre chave de 756 * dicionario e o tipo de coisa que ninguem confere, porque parece 757 * conferida. 758 */ 759 pa: "8231", 760 }, 761 perpetuo: { 762 js: "6842", 763 excel: "5056", 764 sql: "5858", 765 vba: "5860", 766 ppt: "5862", 767 fe: "6882", 768 claude: "15429" 769 }, 770 intensivao: { 771 js: "6690", 772 excel: "5976", 773 "agentes-ia": "13916", 774 hia: "15018", 775 claude: "15620", 776 }, 777 up: { 778 js: "6128", 779 excel: "5978", 780 sql: "6110", 781 vba: "6112", 782 ppt: "6114", 783 fe: "8212", 784 }, 785 aula: { 786 js: "7672", 787 pa: "8173", 788 sql: "8148", 789 fe: "7739", 790 com: "7837", 791 cc: parametroTipo === "lira" ? "15631" : "14468", 792 "no-code": "14609", 793 claude: "15289", 794 agia: "15358", 795 }, 796 vpi: { com: "7809" }, 797 afiliado: { com: "8307" }, 798 email: { 799 com: "7807", 800 }, 801 down: { 802 com: "12253", 803 }, 804 pat: { 805 com: "12562", 806 }, 807 cupom: { 808 redcast: { 809 com: "13164", 810 }, 811 sacani: { 812 com: "13259", 813 }, 814 flow: { 815 com: "13261", 816 }, 817 "flow-2": { 818 com: "15598", 819 }, 820 "flow-org": { 821 com: "14951", 822 }, 823 raiam: { 824 com: "14007", 825 }, 826 curry: { 827 com: "14255", 828 }, 829 "curry-tr": { 830 com: "14462", 831 }, 832 peter: { 833 com: "14271", 834 }, 835 "peter-tr": { 836 com: "14275", 837 }, 838 vilela: { 839 com: "14390", 840 }, 841 castro: { 842 com: "14937", 843 }, 844 fundador: { 845 com: "14939", 846 }, 847 zico: { 848 com: "15097", 849 }, 850 }, 851 trial7: { 852 com: "13113", 853 }, 854 aut: { 855 com: "14310", 856 }, 857 fat: { 858 com: "15647", 859 }, 860}; 861 862var listaFormOrigem = { 863 com: { 864 cupom: { 865 sacani: { 866 igfb: "13802", 867 adv: "13804", 868 }, 869 }, 870 }, 871}; 872 873// Mesmo Pré Checkout para Jornada e Intensivão 874dicIDForm["jornada"] = dicIDForm["intensivao"]; 875 876/* 877 * ð´ `agia` e `agentes-ia` sao o MESMO curso com dois nomes. 878 * 879 * O `?curso=` que a pagina de Agentes de IA carimba e `agentes-ia`, e e assim 880 * que ela aparece em `lespera`. Em `aula` a chave ficou `agia` â e a diferenca 881 * nao da erro, da lead na lista errada: `dicIDForm["aula"]["agentes-ia"]` e 882 * undefined, o codigo cai no `dicIDForm["aula"]["com"]` e o lead de Agentes de 883 * IA entra na lista da COMUNIDADE (7837). 884 * 885 * Medido em producao em 21/08/2026: `/agentes-ia-impressionador?fonte=aula` 886 * postava para 7837, e `?fonte=aula` e uma fonte real, de link de aula. 887 */ 888Object.keys(dicIDForm).forEach(function (fonte) { 889 var mapa = dicIDForm[fonte]; 890 if (!mapa || typeof mapa !== "object") { 891 return; 892 } 893 if (mapa["agia"] && !mapa["agentes-ia"]) { 894 mapa["agentes-ia"] = mapa["agia"]; 895 } 896 if (mapa["agentes-ia"] && !mapa["agia"]) { 897 mapa["agia"] = mapa["agentes-ia"]; 898 } 899}); 900 901var dicPrecosFonte = { 902 lespera: "124,75", 903 intensivao: "97,14", 904}; 905 906var dicPrecosAVistaFonte = { 907 lespera: "1.497", 908 intensivao: "997", 909 jornada: "997", 910}; 911 912// Perpétuo mesmo preço de lista de espera 913dicPrecosFonte["perpetuo"] = dicPrecosFonte["lespera"]; 914 915// Upsell e Webinar mesmo preço de lançamento 916dicPrecosFonte["up"] = dicPrecosFonte["intensivao"]; 917dicPrecosFonte["down"] = dicPrecosFonte["intensivao"]; 918dicPrecosFonte["aula"] = dicPrecosFonte["intensivao"]; 919dicPrecosFonte["jornada"] = dicPrecosFonte["intensivao"]; 920dicPrecosFonte["afiliado"] = dicPrecosFonte["intensivao"]; 921dicPrecosFonte["email"] = dicPrecosFonte["intensivao"]; 922dicPrecosFonte["pat"] = dicPrecosFonte["lespera"]; 923 924dicPrecosAVistaFonte["perpetuo"] = dicPrecosAVistaFonte["lespera"]; 925dicPrecosAVistaFonte["up"] = dicPrecosAVistaFonte["intensivao"]; 926dicPrecosAVistaFonte["down"] = dicPrecosAVistaFonte["intensivao"]; 927dicPrecosAVistaFonte["aula"] = dicPrecosAVistaFonte["intensivao"]; 928dicPrecosAVistaFonte["afiliado"] = dicPrecosAVistaFonte["intensivao"]; 929dicPrecosAVistaFonte["email"] = dicPrecosAVistaFonte["intensivao"]; 930dicPrecosAVistaFonte["pat"] = dicPrecosAVistaFonte["lespera"]; 931 932// IDProduto, IDOferta 933var dicLinksCheckout = { 934 lespera: { 935 cp: { 936 js: ["L16941472G", "o466y1zw"], 937 excel: ["L16941472G", "evy4c5jw"], 938 sql: ["L16941472G", "l6qs1d9q"], 939 vba: ["L16941472G", "l6qs1d9q"], 940 com: ["C100129942R", "olio4n49"],
941 ppt: ["L16941472G", "jlk5p56u"], 942 fe: ["L16941472G", "uxbsd9ly"], 943 redcast: ["O104398157W", "ya1fqgo0"], 944 sacani: ["S103433364N", "fcw9o4ah"], 945 flow: ["B103434844X", "71v18vcj"], 946 "flow-org": ["G106019466C", "ljhb39x9"], 947 "flow-2": ["G106019466C", "nsr9r9gf"], 948 "agentes-ia": ["G102647570U", "32g9ttdx"], 949 raiam: ["F104376394C", "20z3rfgn"], 950 curry: ["W104887496N", "abf6v14i"], 951 "no-code": ["D102584061W", "xg57t0sd"], 952 peter: ["C104746124W", "21wijc8t"], 953 "peter-tr": ["F104877486G", "tlcxtxuw"], 954 vilela: ["C105109188C", "by8k5qbf"], 955 "curry-tr": ["L105465889C", "c1hrmod7"], 956 castro: ["C105955247C", "ejbd46sa"], 957 fundador: ["O105990845I", "lqhm0ttq"], 958 zico: ["L106100608Q", "950pjpn9"], 959 claude: ["R105987676E", "8uxvbi27"], 960 /* 961 * ð´ Full Stack tem produto PROPRIO na Hotmart, e nao e o `L16941472G` 962 * dos outros cursos: `I100237169V?off=pgmtre14` abre "[P] Full Stack + 963 * Comunidade Impressionadora" (lido na Hotmart em 24/08/2026). As 964 * coordenadas vieram do precheckout inline da LP, que vende esta 965 * formacao hoje, e foram conferidas abrindo o checkout â nao deduzidas. 966 */ 967 fullstack: ["I100237169V", "pgmtre14"], 968 /* 969 * ð´ `pa` existia em `dicCodigosCurso`, em `dicIDForm.lespera` e em 970 * `dicHueModeBotaoForm`, e NAO existia aqui. O modo de falhar e pior que o 971 * do guard de curso desconhecido: `definirLinkCheckout` recebe `undefined` 972 * e morre em `IDLinkTemp[0]`, entao o popup coleta o lead e o botao de 973 * pagamento nao leva a lugar nenhum â sem uma linha em log. 974 * 975 * As coordenadas vieram do precheckout inline da LP que vende este curso 976 * hoje (`dlp/n8n/pg-inscricao.html`) e foram conferidas abrindo o checkout: 977 * `F100272256F?off=bhuq0cho` responde "[P] Power Automate + Comunidade 978 * Impressionadora" (lido na Hotmart em 26/08/2026). 979 */ 980 pa: ["F100272256F", "bhuq0cho"], 981 }, 982 cl: { 983 js: ["L16941472G", "7q1t1kri"], 984 excel: ["L16941472G", "8l5juetb"], 985 sql: ["L16941472G", "ajh1pi3z"], 986 vba: ["L16941472G", "ajh1pi3z"], 987 // O ramo recorrente do mesmo produto proprio (ver o comentario em `cp`). 988 fullstack: ["I100237169V", "j7rt4nc8"], 989 com: ["C100129942R", "h8r85kai"], 990 ppt: ["L16941472G", "57gawgd8"], 991 fe: ["L16941472G", "wid30kqp"], 992 // O ramo recorrente do mesmo produto (ver o comentario em `cp`). 993 pa: ["F100272256F", "16z11s1m"], 994 }, 995 ap: { 996 js: ["X82392969H", "uncreodq"], 997 excel: ["V6008994R", "siu1b7e5"], 998 sql: ["Q57557503P", "voyqecd5"], 999 vba: ["B14959865K", "0mblo3v9"], 1000 ppt: ["F18811894U", "hlitsf7v"], 1001 }, 1002 al: { 1003 js: ["E82396870B", "x4qtpyu5"], 1004 excel: ["V39120067A", "3gmjcbsi"], 1005 sql: ["R57560907X", "tqyv3g0f"], 1006 vba: ["T39166951K", "yb8krum7"], 1007 ppt: ["N39169236Y", "9r3iyzi4"], 1008 }, 1009 }, 1010 1011 up: { 1012 cp: { 1013 js: ["L16941472G", "0ut8zmvo"], 1014 excel: ["L16941472G", "fu9uivcl"], 1015 sql: ["L16941472G", "fu9uivcl"], 1016 vba: ["L16941472G", "fu9uivcl"], 1017 ppt: ["L16941472G", "fu9uivcl"], 1018 }, 1019 cl: { 1020 js: ["L16941472G", "gbgo569m"], 1021 excel: ["L16941472G", "auytd52f"], 1022 sql: ["L16941472G", "auytd52f"], 1023 vba: ["L16941472G", "auytd52f"], 1024 ppt: ["L16941472G", "auytd52f"], 1025 }, 1026 ap: { 1027 js: ["X82392969H", "6mi3451a"], 1028 excel: ["V6008994R", "h57kjitn"], 1029 sql: ["Q57557503P", "bc67cz0q"], 1030 vba: ["B14959865K", "ootxgwf2"], 1031 ppt: ["F18811894U", "dafuwesx"], 1032 }, 1033 al: { 1034 js: ["E82396870B", "1sn5wpx4"], 1035 excel: ["V39120067A", "2izh008r"], 1036 sql: ["R57560907X", "hslic8st"], 1037 vba: ["T39166951K", "is87li4s"], 1038 ppt: ["N39169236Y", "vw7edcwf"], 1039 }, 1040 }, 1041 1042 aula: { 1043 cp: { 1044 js: ["A91410311H", "zvxm01v4"], 1045 pa: ["A91410311H", "8vjtclg8"], 1046 sql: ["A91410311H", "qrr2pqbp"], 1047 fe: ["A91410311H", "x78z4o0n"], 1048 com: ["A91410311H", "kho5z8of"], 1049 "netflix-dados": ["D100367357P", "9w90nykt"], 1050 "comunidade-programadores": ["L100464049K", "e4bukefo"], 1051 trial7: ["H103765760W", "drmqh8qu"], 1052 aut: ["F101626777A", "hbd6b0zm"], 1053 // tipo=fat (campanha wfat): mesma oferta do No Code, por tipo e nao por curso â 1054 // o `?curso=` da Comunidade continua "com". 1055 fat: ["H105430328B", "637tl9we"], 1056 cc: 1057 parametroTipo === "lira" 1058 ? ["H107199321U", "axqw5jzi"] 1059 : ["M105178307J", "0p5dset7"], 1060 "no-code": ["H105430328B", "637tl9we"], 1061 claude: ["D106201374U", "ucneg58z"], 1062 agia: ["H106655154T", "cc7iruch"], 1063 }, 1064 cl: { 1065 js: ["A91410311H", "d4eakybv"], 1066 pa: ["A91410311H", "3tltkc36"], 1067 sql: ["A91410311H", "amwq10z6"], 1068 fe: ["A91410311H", "9ef79q52"], 1069 com: ["A91410311H", "u4diob8m"], 1070 "netflix-dados": ["D100367357P", "up26uze3"], 1071 "comunidade-programadores": ["L100464049K", "ztpp0owg"], 1072 }, 1073 }, 1074 1075 afiliado: { 1076 cp: { 1077 com: ["L16941472G", "pjxk6v22"], 1078 }, 1079 cl: { 1080 com: ["L16941472G", "tn5px8v4"], 1081 }, 1082 }, 1083 1084 vpi: { 1085 cp: { com: ["L16941472G", "pjxk6v22"] }, 1086 cl: { com: ["L16941472G", "tn5px8v4"] }, 1087 }, 1088 1089 intensivao: { 1090 cp: { js: ["L16941472G", "ob5jfv87"] }, 1091 cl: { js: ["L16941472G", "gdsml483"] }, 1092 }, 1093 1094 jornada: { 1095 cp: { 1096 excel: ["L16941472G", "iqf27ssx"], 1097 "agentes-ia": ["J103696309G", "eodx7mq8"], 1098 claude: ["D107199198F", "xg7xip8x"], 1099 hia: ["B105069184M", "r6lwuvgg"], 1100 }, 1101 cl: { 1102 excel: ["L16941472G", "dmf4vn6q"], 1103 // hia: ["B105069184M", "fhervvon"], 1104 }, 1105 }, 1106 1107 down: { 1108 cp: { vit: ["L16941472G", "pjxk6v22"] }, 1109 cl: { vit: ["L16941472G", "3r1ngv3c"] },
1110 }, 1111 1112 pat: { 1113 cp: { 1114 com: ["L102188797O", "wj7wbf62"], 1115 }, 1116 }, 1117}; 1118 1119// Links do perpétuo são os mesmos da lista de espera 1120dicLinksCheckout["perpetuo"] = dicLinksCheckout["lespera"]; 1121 1122// Links de E-mail são os mesmos da aula 1123dicLinksCheckout["email"] = dicLinksCheckout["aula"]; 1124 1125// Links de webinar avulso são os mesmos de comunidade 1126dicLinksCheckout["aula"]["ap"] = dicLinksCheckout["aula"]["cp"]; 1127dicLinksCheckout["aula"]["al"] = dicLinksCheckout["aula"]["cl"]; 1128 1129// Links de lançamento avulso são os mesmos de comunidade 1130dicLinksCheckout["intensivao"]["ap"] = dicLinksCheckout["intensivao"]["cp"]; 1131dicLinksCheckout["intensivao"]["al"] = dicLinksCheckout["intensivao"]["cl"]; 1132 1133// Links de lançamento avulso são os mesmos de comunidade 1134dicLinksCheckout["jornada"]["ap"] = dicLinksCheckout["jornada"]["cp"]; 1135dicLinksCheckout["jornada"]["al"] = dicLinksCheckout["jornada"]["cl"]; 1136/* 1137 * So cursos alcançaveis neste motor. Curso desconhecido vira `com` antes da 1138 * consulta; declarar PBI, Python, IA ou CD aqui anunciaria cobertura impossÃvel. 1139 */ 1140dicIDForm["org-yt"] = { 1141 excel: "15550", 1142 ppt: "15552", 1143 vba: "15553", 1144 sql: "15554", 1145 fullstack: "15557", 1146 com: "15559", 1147}; 1148 1149/* 1150 * PAGINAS DE NICHO (set/2026): a MESMA oferta do curso guarda-chuva, com formulario 1151 * PROPRIO no ActiveCampaign. 1152 * 1153 * A /curso-lovable vende o No Code e IA Impressionador. Ate 20/09/2026 ela levava 1154 * `curso_param` `no-code` e postava para o 14011, o pre-checkout do No Code: o lead 1155 * entrava no CRM como lead de No Code e ninguem separava depois quem veio pela pagina 1156 * de Lovable. Decisao do Diego (20/09/2026): cada pagina de nicho tem o seu form, 1157 * clonado do guarda-chuva por `scripts/venda/ac-clona-form.py --nicho` â mesma lista 1158 * (o produto e o mesmo), mesmos campos e checkout; muda so o nome, o cabecalho e as 1159 * tags (`PRECHECKOUT_LOVABLE`, `PRECHECKOUT_LOVABLE_ORGANICO`). 1160 * 1161 * A chave e o `curso_param` do registro da pgv. `de` e o guarda-chuva de que o nicho 1162 * HERDA tudo o que decide o produto â o codigo do curso (monta o `src`, entao a venda 1163 * continua contada como No Code: `lesnc-pgvendas`), os links de checkout de toda 1164 * fonte e o form de toda fonte que o guarda-chuva tenha. Por cima disso entra o form 1165 * proprio em `lespera` (o visitante que chegou por busca, que e o caso desta pagina) 1166 * e o `hue` do botao do popup, que repete o de `hashtag_curso_accent()` da pagina e 1167 * nao o do guarda-chuva (sem `hue`, herda o do guarda-chuva). 1168 * 1169 * O `src` especial de `aula` + `no-code` (`wfat`, logo abaixo) NAO e herdado de 1170 * proposito: e de campanha, e a pagina de nicho nao e a pagina da campanha. 1171 * 1172 * ð´ Chave que falta aqui = pagina postando para a COMUNIDADE: `curso_param` 1173 * desconhecido cai em `com` no guard de `dicCodigosCurso`, e o markup certo e 1174 * reescrito com o 7807. O `valida-carimbo-curso.mjs` cobra que o form da pagina seja 1175 * o `form_ac_markup` do registro, em Chrome real â e o que acusa a falta. 1176 */ 1177var NICHOS = { 1178 lovable: { de: "no-code", lespera: "15666", hue: ["340", "dark"] }, 1179 // /curso-n8n vende o Agentes de IA e n8n; o 15672 e o clone do 13973 (20/09/2026) 1180 // e o 345 e a matiz do `accent` da pagina (o rosa da landing), nao o 337 do 1181 // guarda-chuva. 1182 n8n: { de: "agentes-ia", lespera: "15672", hue: ["345", "dark"] }, 1183}; 1184 1185Object.keys(NICHOS).forEach(function (nicho) { 1186 var base = NICHOS[nicho].de; 1187 dicCodigosCurso[nicho] = dicCodigosCurso[base]; 1188 dicHueModeBotaoForm[nicho] = NICHOS[nicho].hue || dicHueModeBotaoForm[base]; 1189 Object.keys(dicIDForm).forEach(function (fonte) { 1190 var mapa = dicIDForm[fonte]; 1191 if (mapa && typeof mapa === "object" && mapa[base] && !mapa[nicho]) { 1192 mapa[nicho] = mapa[base]; 1193 } 1194 }); 1195 dicIDForm["lespera"][nicho] = NICHOS[nicho].lespera; 1196 Object.keys(dicLinksCheckout).forEach(function (fonte) { 1197 var tipos = dicLinksCheckout[fonte]; 1198 if (!tipos || typeof tipos !== "object") { 1199 return; 1200 } 1201 Object.keys(tipos).forEach(function (tipo) { 1202 var mapa = tipos[tipo]; 1203 if (mapa && typeof mapa === "object" && mapa[base] && !mapa[nicho]) { 1204 mapa[nicho] = mapa[base]; 1205 } 1206 }); 1207 }); 1208 if (dicQtdAulas[base] && !dicQtdAulas[nicho]) { 1209 dicQtdAulas[nicho] = dicQtdAulas[base]; 1210 } 1211 if (dicQtdHoras[base] && !dicQtdHoras[nicho]) { 1212 dicQtdHoras[nicho] = dicQtdHoras[base]; 1213 } 1214}); 1215 1216 1217/* 1218 * Sem `?fonte=` na URL, a fonte e `lespera` â o visitante que chegou por busca. 1219 * 1220 * ð´ Ate 28/08/2026 havia aqui uma excecao que empurrava o curso `pa` para 1221 * `fonte=aula`, e ainda REESCREVIA a URL com `updateURLParam`. Ela existia por 1222 * uma razao que deixou de valer: `pa` nao tinha `lespera` em `dicIDForm`, entao 1223 * sem o empurrao o lead caia no fallback. Empurrar para `aula` era o palpite
1224 * menos ruim quando nao havia opcao organica. 1225 * 1226 * O efeito colateral era que a pgv organica de Power Automate â que carimba 1227 * `?curso=pa` e nao carimba fonte nenhuma â mandava TODO lead para o formulario 1228 * de WEBINAR (8173). Agora `dicIDForm.lespera.pa` e o 1229 * `[ORGANICO] [POWER AUTOMATE]` (8231), e a excecao nao tem mais o que resolver. 1230 * 1231 * Quem quiser a fonte `aula` continua pedindo por `?fonte=aula`, como todo mundo. 1232 */ 1233/* `org-yt` reutiliza toda a experiencia de `lespera`; a origem lembrada muda 1234 * somente o formulario e o sufixo do `src`. */ 1235var origemReferencia; 1236 1237if (!parametroFonte) { 1238 parametroFonte = "lespera"; 1239} else if (parametroFonte === "org-yt") { 1240 parametroFonte = "lespera"; 1241 origemReferencia = "org-yt"; 1242} else if (!dicLinksCheckout[parametroFonte]) { 1243 dicLinksCheckout[parametroFonte] = dicLinksCheckout["lespera"]; 1244} 1245 1246// Definindo curso se não tiver nenhum 1247if (!parametroCurso || !dicCodigosCurso[parametroCurso]) { 1248 parametroCurso = "com"; 1249} 1250 1251const usaSrcLiraClaude = 1252 parametroFonte === "aula" && 1253 parametroCurso === "cc" && 1254 parametroTipo === "lira"; 1255 1256// Atualizar SRC se tiver algum parâmetro na URL 1257if (parametroSRC) { 1258 dicSrcPadrao = parametroSRC; 1259} else { 1260 if (!dicSrcPadrao[parametroFonte]) { 1261 dicSrcPadrao[parametroFonte] = dicSrcPadrao["lespera"]; 1262 } 1263 1264 if (usaSrcLiraClaude) { 1265 dicSrcPadrao = "wlcc"; 1266 } else if (parametroTipo) { 1267 const objTipoSrc = { 1268 "netflix-dados": dicSrcPadrao[parametroFonte] + "nd-pgvendas", 1269 "comunidade-programadores": 1270 dicSrcPadrao[parametroFonte] + "dev-pgvendas", 1271 vit: "lvit-ds", 1272 trial7: "wci-trial", 1273 aut: "waut", 1274 fat: "wfat", 1275 }; 1276 1277 dicSrcPadrao = objTipoSrc[parametroTipo]; 1278 1279 // if (parametroTipo === "netflix-dados") { 1280 // dicSrcPadrao = dicSrcPadrao[parametroFonte] + "nd" + "-pgvendas"; 1281 // } else if (parametroTipo === "comunidade-programadores") { 1282 // dicSrcPadrao = dicSrcPadrao[parametroFonte] + "dev" + "-pgvendas"; 1283 // } else if (parametroTipo === "vit") { 1284 // dicSrcPadrao = "lvit-ds"; 1285 // } 1286 } else if (window.ehCupom) { 1287 const mapaSrcCupom = { 1288 redcast: "inf-redcast-live001", 1289 sacani: "inf-sacani", 1290 flow: "inf-flow", 1291 "flow-org": "inf-flow-org", 1292 "flow-2": "inf-flow-org-eleicao", 1293 raiam: "inf-raiam", 1294 curry: "inf-curry", 1295 "curry-tr": "inf-curry-traf", 1296 peter: "inf-peter-org", 1297 "peter-tr": "inf-peter-traf", 1298 vilela: "inf-vilela", 1299 castro: "inf-castro", 1300 fundador: "inf-fundador", 1301 zico: "inf-zico", 1302 }; 1303 1304 if (window.ehCupom) { 1305 dicSrcPadrao = mapaSrcCupom[parametroCupomNormalizado]; 1306 } 1307 } else { 1308 if (parametroFonte === "aula" && parametroCurso === "no-code") { 1309 dicSrcPadrao = "wfat"; 1310 } else if ( 1311 parametroFonte === "jornada" && 1312 parametroCurso === "claude" 1313 ) { 1314 dicSrcPadrao = "lcld"; 1315 } else if ( 1316 parametroFonte === "jornada" && 1317 parametroCurso === "agentes-ia" 1318 ) { 1319 dicSrcPadrao = "lnc-pgvendas"; 1320 } else if ( 1321 parametroCurso === "hia" && 1322 dicSrcPadrao[parametroFonte] === "l" 1323 ) { 1324 dicSrcPadrao = "uphia"; 1325 } else { 1326 dicSrcPadrao = 1327 dicSrcPadrao[parametroFonte] + 1328 dicCodigosCurso[parametroCurso] + 1329 "-pgvendas"; 1330 } 1331 } 1332} 1333 1334/* Mantem o prefixo historico e acrescenta a origem; `&src=` explicito continua 1335 * soberano. Ex.: `lescom-pgvendas` vira `lescom-pgvendas-yt`. */ 1336var MARCA_SRC_POR_ORIGEM = { 1337 "org-yt": "-yt", 1338}; 1339 1340if (!parametroSRC && MARCA_SRC_POR_ORIGEM[origemReferencia]) { 1341 dicSrcPadrao += MARCA_SRC_POR_ORIGEM[origemReferencia]; 1342} 1343 1344// Incluir o tipo da página no SRC, se existir 1345if ( 1346 !usaSrcLiraClaude && 1347 parametroTipo && 1348 ![ 1349 "netflix-dados", 1350 "comunidade-programadores", 1351 "vit", 1352 "trial7", 1353 "aut", 1354 "fat", 1355 ].includes(parametroTipo) 1356) { 1357 dicSrcPadrao += "_" + parametroTipo; 1358} 1359 1360// Adicionar o evento de clique nos botões de oferta 1361elemsBotaoOferta.forEach((botao) => { 1362 botao.href = "javascript:void(0)"; 1363 1364 const funcaoBotao = () => { 1365 irAteElementoID("secao-oferta"); 1366 1367 botao.href = "#secao-oferta"; 1368 1369 botao.removeEventListener("click", funcaoBotao); 1370 }; 1371 1372 botao.addEventListener("click", funcaoBotao); 1373}); 1374 1375// Adicionar o evento de clique nos botões de Popup de Trilha
1376elemsBotaoPopupTrilha.forEach((botao) => { 1377 botao.addEventListener("click", () => { 1378 trocarConteudoPopup("trilha", botao.getAttribute("textotrilha"), true); 1379 }); 1380}); 1381 1382// Trocar IDs formulário de pré-checkout 1383var numFormActive = ""; 1384 1385if (window.ehCupom) { 1386 const formOrigemSacani = 1387 listaFormOrigem?.com?.cupom?.sacani?.[parametroOrigem]; 1388 1389 if (parametroCupomNormalizado === "sacani" && formOrigemSacani) { 1390 numFormActive = formOrigemSacani; 1391 } else { 1392 numFormActive = 1393 dicIDForm["cupom"][parametroCupomNormalizado][parametroCurso]; 1394 } 1395} else if (parametroTipo && ["trial7", "aut", "fat"].includes(parametroTipo)) { 1396 numFormActive = dicIDForm[parametroTipo][parametroCurso]; 1397} else { 1398 /* 1399 * ð´ A CADEIA DE FALLBACK E O QUE DECIDE EM QUE LISTA O LEAD CAI. 1400 * 1401 * Ate 21/08/2026 ela tinha tres defeitos, e os tres terminavam na COMUNIDADE: 1402 * 1403 * 1. `dicIDForm[parametroFonte][parametroCurso]` com uma fonte que nao e 1404 * chave do mapa estoura `TypeError` â `undefined[curso]`. O precheckout 1405 * MORRE ali, e o que fica valendo e o formulario do markup. Medido em 1406 * producao: `?fonte=xyz` (um typo no link de anuncio basta) deixava 1407 * `/claude-impressionador`, `/no-code-impressionador` e 1408 * `/agentes-ia-impressionador` postando para 7807, a lista da Comunidade. 1409 * 2. o segundo ramo caia em `dicIDForm[fonte]["com"]`: fonte conhecida e 1410 * curso ausente daquela fonte mandava o lead do curso para a lista da 1411 * Comunidade DAQUELA fonte. Foi assim que 1412 * `/agentes-ia-impressionador?fonte=aula` postava para 7837. 1413 * 3. o terceiro ramo, sem fonte nenhuma, tambem caia na Comunidade. 1414 * 1415 * A regra agora e uma so: na duvida, a lista de espera DESTE curso. Cair na 1416 * lista de outro produto nao e degradar, e mandar o lead para a campanha 1417 * errada â e nao aparece em log nenhum, porque o form envia e a pessoa ve 1418 * "obrigado". 1419 * 1420 * E NAO ha ultimo degrau de proposito. Quando nada resolve para este curso, o 1421 * certo e nao reescrever nada: o formulario do MARKUP e o piso, e ele foi 1422 * corrigido nas seis paginas que usam este motor â todas traziam 7807, a 1423 * lista da Comunidade. E o unico jeito de servir o `cc` (Claude Code), que 1424 * so existe em `aula`: um degrau final para `lespera["com"]` SOBRESCREVERIA 1425 * o markup certo com o da Comunidade, que e o defeito de novo, ao contrario. 1426 * 1427 * A pagina da Comunidade continua certa sem esse degrau: `parametroCurso` 1428 * cai em `"com"` sozinho quando nao ha `?curso=` (ou ele e desconhecido), e 1429 * `lespera["com"]` resolve normalmente. 1430 */ 1431 // Sem `var`: `numFormActive` ja e declarado no topo (`var` e de FUNCAO, nao de 1432 // bloco), e redeclarar aqui faz parecer que esta e outra variavel â que e 1433 // como um refactor introduz bug de escopo sem mudar comportamento nenhum. 1434 var mapaFonte = (parametroFonte && dicIDForm[parametroFonte]) || {}; 1435 /* A origem volta somente neste degrau. Sem form proprio, `lespera` continua 1436 * sendo o fallback; nunca o ultimo formulario do mapa. */ 1437 var mapaOrigem = (origemReferencia && dicIDForm[origemReferencia]) || {}; 1438 numFormActive = 1439 mapaOrigem[parametroCurso] || 1440 mapaFonte[parametroCurso] || 1441 dicIDForm["lespera"][parametroCurso] || 1442 ""; 1443} 1444 1445if ( 1446 numFormActive && 1447 numFormActive != formActive.id.replace("_form_", "").replace("_", "") 1448) { 1449 document.querySelector("#" + formActive.id + "submit").id = 1450 "_form_" + numFormActive + "_submit"; 1451 formActive.id = "_form_" + numFormActive + "_"; 1452 document.querySelectorAll("[type=hidden]")[0].value = numFormActive; 1453 document.querySelectorAll("[type=hidden]")[1].value = numFormActive; 1454} 1455 1456// Ajustar cores do popup de pre-checkout 1457if (dicHueModeBotaoForm[parametroCurso]) { 1458 document.body.setAttribute( 1459 "style", 1460 `--hue-botao-form: ${dicHueModeBotaoForm[parametroCurso][0]}`, 1461 ); 1462 document.body.setAttribute(dicHueModeBotaoForm[parametroCurso][1], ""); 1463} 1464 1465// Adicionar o evento de clique nos botões padrões, de recorrência e no botão de fechar o popup e também zera os links para deixar apenas o clique no botão 1466 1467// Comunidade 1468if (parametroFonte === "pat") { 1469 atribuirFuncoesBotao(elemsBotaoPadrao, "cp", 0); 1470} else { 1471 atribuirFuncoesBotao(elemsBotaoPadrao, "cp", 1); 1472} 1473atribuirFuncoesBotao(elemsBotaoPix, "cp", 0); 1474atribuirFuncoesBotao(elemsBotaoRecorrente, "cl", 1); 1475 1476// Avulsos 1477atribuirFuncoesBotao(elemsBotaoAvulsoPadrao, "ap", 1); 1478atribuirFuncoesBotao(elemsBotaoAvulsoPix, "ap", 0); 1479atribuirFuncoesBotao(elemsBotaoAvulsoRecorrente, "al", 1); 1480 1481// Botão fechar popup precheckout 1482elemsBotaoFechar.forEach(function (elem) { 1483 elem.href = "#"; 1484 1485 elem.addEventListener("click", function () { 1486 togglePopupAberto(); 1487 }); 1488}); 1489
1490// Atualizar quantidade de Aulas e Horas do curso 1491if (dicQtdAulas[parametroCurso]) { 1492 elemsQtdAulas.forEach((elem) => { 1493 elem.innerText = dicQtdAulas[parametroCurso]; 1494 }); 1495} 1496 1497if (dicQtdHoras[parametroCurso]) { 1498 elemsQtdHoras.forEach((elem) => { 1499 elem.innerText = dicQtdHoras[parametroCurso]; 1500 }); 1501} 1502 1503// Criando a lista de cursos da comunidade 1504Object.keys(dicCursosCom).forEach((chave, i, lista) => { 1505 if (cursosCom) { 1506 if (i == lista.length - 1) { 1507 cursosCom += " e "; 1508 } else { 1509 cursosCom += ", "; 1510 } 1511 } 1512 1513 cursosCom += chave; 1514 1515 if (dicCursosCom[chave]) { 1516 if (descricaoCursosCom) { 1517 descricaoCursosCom += "<br><br>"; 1518 } 1519 1520 descricaoCursosCom += `<strong>${chave}:</strong> ${dicCursosCom[chave]}`; 1521 } 1522}); 1523 1524// Atualizar quantidade, cursos e descrição da Comunidade 1525elemsCursosCom.forEach((elem) => { 1526 elem.innerText = cursosCom; 1527}); 1528 1529elemsQtdCursosCom.forEach((elem) => { 1530 elem.innerText = qtdCursosCom; 1531}); 1532 1533elemsDescricaoCursosCom.forEach((elem) => { 1534 elem.innerHTML = descricaoCursosCom; 1535}); 1536 1537let precoFinal; 1538 1539if (window.ehCupom) { 1540 precoFinal = dicPrecosFonte["aula"]; 1541} else { 1542 precoFinal = dicPrecosFonte[parametroFonte]; 1543} 1544 1545// Acertar Preços de acordo com a Página Carregada 1546elemsPrecoParcelado.forEach((elem) => { 1547 elem.innerText = "R$ " + precoFinal; 1548}); 1549 1550elemsPrecoParceladoInt.forEach((elem) => { 1551 elem.innerText = precoFinal.substring(0, precoFinal.indexOf(",")); 1552}); 1553 1554elemsPrecoParceladoDec.forEach((elem) => { 1555 elem.innerText = precoFinal.substring(precoFinal.indexOf(",") + 1); 1556}); 1557 1558if (elemsPrecoAVista.length > 0) { 1559 elemsPrecoAVista.forEach((elem) => { 1560 elem.innerText = dicPrecosAVistaFonte[parametroFonte]; 1561 }); 1562} 1563 1564if ( 1565 parametroFonte == "aula" || 1566 parametroFonte == "intensivao" || 1567 parametroFonte == "jornada" || 1568 parametroFonte == "up" 1569) { 1570 elemPrecoDe.forEach((precoDe) => { 1571 precoDe.innerHTML = '<span class="cortado">R$ 1.500</span> por 12x de'; 1572 }); 1573 1574 if ( 1575 parametroFonte == "aula" || 1576 parametroFonte == "intensivao" || 1577 parametroFonte == "jornada" 1578 ) { 1579 // Ocultar o container de toggle 1580 elemContainerToggle.forEach((container) => { 1581 container.style.display = "none"; 1582 }); 1583 1584 // Ocultar caixa avulso
1585 elemPrecoSemFoco.forEach((elemPreco, i) => { 1586 elemPreco.style.display = "none"; 1587 1588 if (i == 0) { 1589 elemPreco.parentElement.classList.remove( 1590 "container--oferta-duplo", 1591 ); 1592 elemPreco.parentElement.classList.add("container--oferta"); 1593 } 1594 }); 1595 1596 // Ocultar melhor opção na caixa padrão 1597 elemPrecoFoco.forEach((elemPreco) => { 1598 let melhorPreco = elemPreco.querySelector( 1599 '[class*="preco__melhoropcao"]', 1600 ); 1601 melhorPreco.style.display = "none"; 1602 }); 1603 1604 // Ocultar opções de pagamento e caixa avulso na versão antiga da página de vendas 1605 if (elemBlocoToggle) { 1606 elemBlocoToggle.classList.add("oculto"); 1607 } 1608 1609 elemsBlocoPlano.forEach((bloco) => { 1610 let elemBlocoNormal = bloco.querySelector( 1611 ".bloco-plano-pgvpy:not(.destaque-bloco-plano-pgvpy)", 1612 ); 1613 let elemBlocoDestaque = bloco.querySelector( 1614 ".destaque-bloco-plano-pgvpy", 1615 ); 1616 1617 bloco.classList.add("bloco-unico"); 1618 elemBlocoDestaque.classList.add("bloco-unico"); 1619 elemBlocoNormal.classList.add("oculto"); 1620 }); 1621 } 1622} 1623 1624// Ajustes na página se for Perpétuo de VSL de Excel 1625if (parametroCurso == "excel") { 1626 if (parametroFonte == "perpetuo" && parametroTipo == "vsl") { 1627 var elemSecaoVSL = document.querySelector("#secao-vsl"); 1628 1629 // Ocultar seção pós-VSL e interações da página 1630 elemSecaoVSL.classList.add("secao-pgvex--ocultas"); 1631 document.body.classList.add("pgvex-fechada"); 1632 } 1633} 1634 1635// Ajustes no VÃdeo de Vendas 1636ajustesVideoVendas(); 1637 1638// Funções para validar o formulário 1639const isRequired = (value) => (value === "" ? false : true); 1640 1641const isEmailValid = (email) => { 1642 const re = 1643 /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 1644 return re.test(email); 1645}; 1646 1647const showError = (input, message) => { 1648 const formField = input.parentElement; 1649 1650 input.setAttribute("aria-invalid", "true"); 1651 formField.classList.remove("sucesso"); 1652 formField.classList.add("erro"); 1653 1654 const erro = formField.querySelector("small"); 1655 erro.textContent = message; 1656}; 1657 1658const showSuccess = (input) => { 1659 const formField = input.parentElement; 1660 1661 input.setAttribute("aria-invalid", "false"); 1662 formField.classList.remove("erro"); 1663 formField.classList.add("sucesso"); 1664 1665 const error = formField.querySelector("small"); 1666 error.textContent = ""; 1667}; 1668 1669const checkfullname = () => { 1670 let valid = false; 1671 const fullname = fullnameForm.value.trim(); 1672 1673 if (!isRequired(fullname)) { 1674 showError(fullnameForm, "Seu nome não pode ser vazio."); 1675 } else { 1676 showSuccess(fullnameForm); 1677 valid = true; 1678 } 1679 return valid; 1680}; 1681 1682const checkEmail = () => { 1683 let valid = false; 1684 const email = emailForm.value.trim(); 1685 1686 if (!isRequired(email)) { 1687 showError(emailForm, "Seu e-mail não pode ser vazio."); 1688 } else if (!isEmailValid(email)) { 1689 showError(emailForm, "O e-mail digitado não é válido."); 1690 } else { 1691 showSuccess(emailForm); 1692 valid = true; 1693 } 1694 return valid; 1695}; 1696 1697formActive.addEventListener( 1698 "input", 1699 debounce(function (e) { 1700 switch (e.target.id) { 1701 case "fullname": 1702 checkfullname(); 1703 break; 1704 case "email": 1705 checkEmail(); 1706 break; 1707 } 1708 }), 1709); 1710 1711formActive.addEventListener("submit", function (e) { 1712 e.preventDefault(); 1713 1714 let isfullnameValid = checkfullname(), 1715 isEmailValid = checkEmail(); 1716 1717 let isFormValid = isfullnameValid && isEmailValid; 1718 1719 if (isFormValid) { 1720 if (redirecionarCheckoutHiaSeReenvio()) return; 1721 1722 enviarFormulario(); 1723 } 1724}); 1725 1726// Script para preencher o formulário de pre-checkout com os parâmetros da URL 1727function editarValorCampoForm(elemsForm, valorForm) { 1728 elemsForm.forEach(function (element) { 1729 element.value = valorForm; 1730 }); 1731} 1732 1733var elemsFormFullname = document.querySelectorAll("#fullname"); 1734var elemsFormEmail = document.querySelectorAll("#email"); 1735var elemsFormPhone = document.querySelectorAll("#phone"); 1736var elemsFormDDD = document.querySelectorAll("[id='field[59]']"); 1737var elemsFormCelular = document.querySelectorAll("[id='field[60]']"); 1738 1739var parametrosURLCheckout = new URLSearchParams(window.location.search); 1740 1741var valorFirstname = parametrosURLCheckout.get("firstname") || (window.leadUrlParams || {}).firstname; 1742var valorFullname = parametrosURLCheckout.get("fullname") || (window.leadUrlParams || {}).fullname; 1743 1744// Incluir a lógica de window.leadEmail e window.leadPhone 1745var valorEmail = (parametrosURLCheckout.get("email") || (window.leadUrlParams || {}).email || "").trim(); 1746if (!valorEmail) valorEmail = String(window.leadEmail || "").trim(); 1747 1748// Base phone: URL > leadPhone 1749var phoneBase = onlyDigits((parametrosURLCheckout.get("phone") || (window.leadUrlParams || {}).phone || "").trim()); 1750if (!phoneBase) phoneBase = onlyDigits(window.leadPhone); 1751 1752// Se vier com DDI 55 (e tiver tamanho suficiente), remove pra extrair DDD/celular corretamente 1753// (mantém só BR) 1754var phoneSemDdi = phoneBase; 1755if (phoneSemDdi.indexOf("55") === 0 && phoneSemDdi.length >= 12) { 1756 phoneSemDdi = phoneSemDdi.substring(2); 1757} 1758 1759// DDD e celular: URL >
1759 fallback do phoneSemDdi 1760var valorDDD = (parametrosURLCheckout.get("ddd") || (window.leadUrlParams || {}).ddd || "").trim(); 1761if (!valorDDD) 1762 valorDDD = phoneSemDdi.length >= 10 ? phoneSemDdi.substring(0, 2) : ""; 1763 1764var valorCelular = (parametrosURLCheckout.get("celular") || (window.leadUrlParams || {}).celular || "").trim(); 1765if (!valorCelular) 1766 valorCelular = phoneSemDdi.length >= 10 ? phoneSemDdi.substring(2) : ""; 1767 1768// Phone final: URL > leadPhone (já normalizado em dÃgitos) 1769var valorPhone = phoneBase; 1770 1771if (valorFullname) { 1772 editarValorCampoForm(elemsFormFullname, valorFullname); 1773} else if (valorFirstname) { 1774 editarValorCampoForm(elemsFormFullname, valorFirstname); 1775} 1776 1777if (valorEmail) { 1778 editarValorCampoForm(elemsFormEmail, valorEmail); 1779} 1780 1781if (elemsFormPhone.length > 0) { 1782 if (valorDDD && valorCelular) { 1783 editarValorCampoForm(elemsFormPhone, valorDDD + valorCelular); 1784 } else if (valorPhone) { 1785 editarValorCampoForm(elemsFormPhone, valorPhone); 1786 } 1787} else { 1788 if (valorDDD && valorCelular) { 1789 editarValorCampoForm(elemsFormDDD, valorDDD); 1790 editarValorCampoForm(elemsFormCelular, valorCelular); 1791 } else if (valorPhone) { 1792 editarValorCampoForm(elemsFormDDD, valorPhone.substring(0, 2)); 1793 editarValorCampoForm(elemsFormCelular, valorPhone.substring(2)); 1794 } 1795}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.