Ir ao conteúdo
  • Cadastre-se

Rui Guilherme

Membro Pleno
  • Posts

    194
  • Cadastrado em

  • Última visita

Tudo que Rui Guilherme postou

  1. Como eu falei você pode simplesmente trocar o elemento "button" e continuar usando o evento onClick: Porém é uma boa pratica usar icones(SVG) nesse caso ou uma imagem otimizada (AVIF, WEBP ou SVG), exemplo: HTML: <input type="password" id="senha" /> <i class="bi bi-eye-slash" onclick="togglePassword()" id="togglePassword"></i> CSS: #togglePassword { cursor: pointer; } JS: function togglePassword() { const inputPassword = document.querySelector('#senha') const iconTogglePassword = document.querySelector('#togglePassword') const type = inputPassword.getAttribute('type') === 'password' ? 'text' : 'password' inputPassword.setAttribute('type', type) iconTogglePassword.classList.remove(type === 'text' ? 'bi-eye-slash' : 'bi-eye') iconTogglePassword.classList.add(type === 'text' ? 'bi-eye' : 'bi-eye-slash') } Se você quiser uma demo online: https://codepen.io/ruiguilherme/pen/OJmZEBb Se você quer usar literalmente imagens <img> (Mesmo não sendo uma boa pratica) então você vai precisar criar uma classe CSS com o atributo "display: none": .ocultarImagemSenha { display: none; } Dai você vai pegar essa classe e vai adicionar a imagem que você quer ocultar e vai remover ela da imagem que você quer mostrar. Exatamente como eu fiz no exemplo anterior, você vai usar o imagem1.classList.remove("ocultarImagemSenha") e imagem2.classList.add("ocultarImagemSenha") para fazer um "toggle" nas imagens, uma hora mostra a imagem1 (que indica que a senha está exposta) e outra hora mostra a imagem2 (que indica que a senha não está exposta). Obs: AMBAS imagens vão ter o evento onClick ou você pode adicionar as imagens dentro de uma <div></div> e colocar o evento onclick nessa <div onclick="togglePassword()">; Porém usar esse segundo metodo pode causar alguns problemas de funcionamento em browsers mais "limitados" tipo o Safari e o Internet Explorer;
  2. Você pode fazer isso facilmente usando JavaScript do lado do client: HTML: <input type="password" id="senha" /> <button onclick="togglePassword()" id="togglePassword">Mostrar senha</buttonn> JavaScript: function togglePassword() { const inputPassword = document.querySelector('#senha') const btnTogglePassword = document.querySelector('#togglePassword') const type = inputPassword.getAttribute('type') === 'password' ? 'text' : 'password' inputPassword.setAttribute('type', type) // Você só precisa alterar o "button" para o icon do olho, o processo é o mesmo... btnTogglePassword.innerText = type === 'text' ? 'Esconder senha' : 'Mostrar senha' } Caso queira ver uma demo online: https://codepen.io/ruiguilherme/pen/YzVLaZp?editors=1010
  3. Você se refere a duas pessoas diferentes realizar a mesma reserva no mesmo horario? Se for o caso então você precisa usar o formado de hora Date e Time no formulário: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/time https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date Destaco que desde de 2015 não existe mais o datetime: https://github.com/whatwg/html/issues/336 Antes de realizar a reserva é só verificar no banco de dados se existe alguma reserva feita na mesma data e horario, feito isso é só salvar a reserva e notificar o usuario que foi feita com sucesso. Acredito que seja uma boa pratica fazer o front-end já desativar os horarios já pegos, porém deve ser feito uma checagem antes de salvar para evitar "problemas." Vale lembrar que calcular e checar as diferenças de dias e horas entre duas datas não é algo tão difícil de ser feito, recomendo ler um pouco sobre o Objeto Global de Date do JavaScript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
  4. Não é ideal usar "let", altere para "const" Caso queira mais detalhes: https://github.com/facebook/react/issues/13982#issuecomment-433349510 Caso queria ler o Pull Request da issue react#13982: https://github.com/expo/expo/pull/7761 Esse bug está acontecendo porque o scopo está voltando ao normal e o React está renderizando do zero, não sei como está toda a sua chamada, mas simulei seu código e funcionou perfeitamente: https://codesandbox.io/s/romantic-smoke-joet0?file=/src/App.js Caso tenha problemas em ver o código em execução: https://joet0.csb.app/ Provavelmente você deve estar usando renderização por servidor o que pode estar causando esse bug, acredito que a melhor solução seja definir o: function abrir() { setOpen(!aberto); } no mesmo escopo do hamburgue dai você não deve perder o state do "open/setOpen" Outra solução mais completa e profissional seria usar o Redux, dai você vai eliminar TODOS OS PROBLEMAS de states entre componentes e hooks.
  5. Não manjo muito de bugs no Sequelize, mas pelo visto isso se trata de um bug antigo dentro do sequelize que o "include" não funciona ou não funciona corretamente no findOne: https://github.com/sequelize/sequelize/issues/3182#issuecomment-75241849 Talvez isso consiga te ajudar: include:[ { model: Conteudo, attributes : ['id','user_id','conteudo'] , // <---- não esqueça de colocar as foreign key separate : true, // <--- Executar as querys separadamente limit: 8 } ] Não tenho 100% de certeza mas acredito que o separate não funciona com o "where", mas você pode tentar e se não funcionar talvez dar um split na quantidade resolva seu problema.
  6. Eu faria assim: const contatos = [ { nome: 'contato1', telefone: 'telefone1', email: '[email protected]' } ] const setContato = (contato) => { contatos.push(contato) } // Vai mostrar apenas um valor console.log(contatos) // Adiciona um novo valor dentro da array "contatos" setContato({nome: 'contato2', telefone: 'telefone2', email: '[email protected]'}) // Vai mostrar dois valores. console.log(contatos) Porém o que você está fazendo não está exatamente errado, mas pode ficar mais verboso... Não é muito comum escrever uma aplicação dentro de um objeto, mas não necessariamente errado, exemplo: const Lang = imports.lang; const ObjectA = new Lang.Class({ ... }); dentro do "Lang.Class" iria ser passado o objeto com todas as funções da aplicação, um exemplo pratico: https://github.com/Tudmotu/gnome-shell-extension-clipboard-indicator/blob/master/extension.js
  7. @Luiz Paulo Escobar Eu concordo com você, usar "pureCSS" é verboso e não faz sentido... Porém não acho que seja "invável" porque não sabemos o motivo dele querer fazer isso, por exemplo: E se for um desafio? Ou puramente curiosidade quanto ao uso do CSS com eventos. Além disso ter uma noção de como funciona eventos no CSS podem ajudar bastante, porque o JS ainda é bastante verboso em alguns momentos para adicionar folha de estilo com eventos em relação ao CSS.
  8. HTML: <!-- Made by Erik Terwan --> <!-- 24th of November 2015 --> <!-- MIT License --> <nav role="navigation"> <div id="menuToggle"> <!-- A fake / hidden checkbox is used as click reciever, so you can use the :checked selector on it. --> <input type="checkbox" /> <!-- Some spans to act as a hamburger. They are acting like a real hamburger, not that McDonalds stuff. --> <span></span> <span></span> <span></span> <!-- Too bad the menu has to be inside of the button but hey, it's pure CSS magic. --> <ul id="menu"> <a href="#"><li>Home</li></a> <a href="#"><li>About</li></a> <a href="#"><li>Info</li></a> <a href="#"><li>Contact</li></a> <a href="https://erikterwan.com/" target="_blank"><li>Show me more</li></a> </ul> </div> </nav> CSS: /* * Made by Erik Terwan * 24th of November 2015 * MIT License * * * If you are thinking of using this in * production code, beware of the browser * prefixes. */ body { margin: 0; padding: 0; /* make it look decent enough */ background: #232323; color: #cdcdcd; font-family: "Avenir Next", "Avenir", sans-serif; } #menuToggle { display: block; position: relative; top: 50px; left: 50px; z-index: 1; -webkit-user-select: none; user-select: none; } #menuToggle a { text-decoration: none; color: #232323; transition: color 0.3s ease; } #menuToggle a:hover { color: tomato; } #menuToggle input { display: block; width: 40px; height: 32px; position: absolute; top: -7px; left: -5px; cursor: pointer; opacity: 0; /* hide this */ z-index: 2; /* and place it over the hamburger */ -webkit-touch-callout: none; } /* * Just a quick hamburger */ #menuToggle span { display: block; width: 33px; height: 4px; margin-bottom: 5px; position: relative; background: #cdcdcd; border-radius: 3px; z-index: 1; transform-origin: 4px 0px; transition: transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0), background 0.5s cubic-bezier(0.77,0.2,0.05,1.0), opacity 0.55s ease; } #menuToggle span:first-child { transform-origin: 0% 0%; } #menuToggle span:nth-last-child(2) { transform-origin: 0% 100%; } /* * Transform all the slices of hamburger * into a crossmark. */ #menuToggle input:checked ~ span { opacity: 1; transform: rotate(45deg) translate(-2px, -1px); background: #232323; } /* * But let's hide the middle one. */ #menuToggle input:checked ~ span:nth-last-child(3) { opacity: 0; transform: rotate(0deg) scale(0.2, 0.2); } /* * Ohyeah and the last one should go the other direction */ #menuToggle input:checked ~ span:nth-last-child(2) { transform: rotate(-45deg) translate(0, -1px); } /* * Make this absolute positioned * at the top left of the screen */ #menu { position: absolute; width: 300px; margin: -100px 0 0 -50px; padding: 50px; padding-top: 125px; background: #ededed; list-style-type: none; -webkit-font-smoothing: antialiased; /* to stop flickering of text in safari */ transform-origin: 0% 0%; transform: translate(-100%, 0); transition: transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0); } #menu li { padding: 10px 0; font-size: 22px; } /* * And let's slide it in from the left */ #menuToggle input:checked ~ ul { transform: none; } Link do código/live: https://codepen.io/erikterwan/pen/EVzeRP
  9. Não entendi nada com nada. kkkk Você quer atualizar o servidor IIS, porém você vai perder o banco de dados e os códigos da aplicação (aiaiai esse Windows...) Sua preocupação é em atualizar esse servidor e colocar sua aplicação online novamente usando o "backup" do github? Github(git) é versionador, caso ele esteja sendo usado corretamente perda de códigos deveria ser impossível... Digamos a seguinte situação: Servidor IIS tem a versão 1.2.8 da aplicação e por algum mótivo desconhecido essa versão não está no github, nessa situação você precisa abrir o código fonte no servidor e criar um branch nova a partir do código fonte do servidor e subir ela para github(git push), dai quando atualizar o IIS e quiser subir o código basta dar um git clone <LINK DO .GIT> e/ou um git checkout <NOME DA BRANCH QUE você CRIOU>; Dessa forma você consegue "restaurar" o código exatamente como ele estava no servidor ISS. Em relação ao banco de dados eu acredito que simplesmente fazendo um dump do .sql e salvado ele em algum lugar seguro (cuidado para isso não vazar) seja uma solução ou você pode automatizar o backup do banco de dados que é gg.
  10. Como deu "split" não definido quer dizer que sua váriavel não está vinda como String, vale lembrar que o split é um prototype de String. Esse código por exemplo vai dar "split não definida": const exemplo = 1 exemplo.split(' ') Para evitar essa issue eu recomendo escrever a função da seguinte forma: function testa() { // Essa "??" é apenas para evitar undefined ou null; const frase = document.getElementById('com').value ?? ""; //pega a entrada de comando no html if (frase.length <= 0 || typeof frase !== "string") { alert("Você precisa digitar alguma coisa válida"); return false; } // Por se tratar de uma array, você pode rodar isso dentro um map para trabalhar com os valores individualmente. // é uma boa ideia tratar a frase com o split para evitar espaços no começo da frase. const palavra1 = frase.trim().split(' '); const primeiraPalavraNaoTratada = palavra1[0] const primeiraPalavraTratada = primeiraPalavraNaoTratada.toLowerCase() if(primeiraPalavraTratada === "help") { alert(`A primeira palavra é ${primeiraPalavraNaoTratada}`); } } Acredito que a função escrita assim não deve apresentar problemas de definição.
  11. Você provavelmente está atrás de Canvas. https://github.com/niklasvh/html2canvas Acredito que você consiga executar o html2canvas direto na sua extensão para sicronizar a printscreen do site e a url. Exemplo pratico para capturar a janela e enviar a imagem: https://jsfiddle.net/rnkopL7z/3/
  12. Acho muito legal a sua ideia e gosto de ver projetos como esses, minha única observação é evitar o uso de imagens para mostrar o código, recomendo usar o markdown syntax highlight; Porém apesar de achar um projeto legal, já existem sites como o MDN(Mozilla Developer Network) e o W3S(W3Schools) que já fazem documentações de HTML, CSS e JavaScript(E afins) com maestria, e o MDN precisa de contribuidores para traduzirem as documentações, por exemplo Uint8Array precisa de contribuição em pt-BR e pt-PT. (Você pode mudar o idioma no canto superior direito)
  13. Eu não cheguei a entender 100% do seu código mas pelo visto quando você está usando o splice() você queria remover o valor, certo? Por isso você obtem o checkbox e usa o checked para checar se é true e só assim deletar aquele valor. O problema é que o splice n retorna uma nova array sem o valor removido, ele remove o valor da array e retornar uma nova array com o valor removido. Digamos a seguinte situação: const d = 8 const itensLocalStorage = ['database1','database2','database3','database4','database5','database6','database7','database8','database9','database10'] const resultado = itensLocalStorage.splice(d,1) // resultado vai receber a Array deletada. console.log(resultado) // retorno esperado: Array [ "database9" ] O correto seria isso: const d = 8 const itensLocalStorage = ['database1','database2','database3','database4','database5','database6','database7','database8','database9', 'database10'] itensLocalStorage.splice(d,1) //itensLocalStorage agora foi modificada e o database09 foi removido console.log(itensLocalStorage) // retorno esperado: Array(9) [ "database1", "database2", "database3", "database4", "database5", "database6", "database7", "database8", "database10" ] 2 Caso (Como eu falei, n entendi exatamente o código.) O splice vai retornar uma nova array ou vai modificar sua array atual, e em ambos os casos os index vão mudar... Talvez seu problema seja exatamente esse, após remover um valor da array os index mudam, e nos proximos splice() o for vai bugar porque os index da array mudaram. Exemplo: // Digamos que eu queira remover o database3, database6 e o database9 const itensRemover = [2,5,8] //Esses números indicam os index lá do itensLocalStorage (Considere isso como uma simulação do checkbox, cada número desses simboliza um checkbox) // Esses são os itens salvos no localStorage. const itensLocalStorage = ['database1','database2','database3','database4','database5','database6','database7','database8', 'database9','database10'] for (let d = 0; d < 3; d++) { itensLocalStorage.splice(itensRemover[d],1) } // resultado esperado: Array(8) [ "database1", "database2", "database4", "database5", "database6", "database8", "database9", "database10" ] porque isso acontece? Quando você remove o database3, o index 5 que antes tinha o valor de database6 agora vale database7 (por isso o database7 é removido) e o index 8 que antes tinha o valor de database9 agora não tem mais nenhum valor. Nessa situação você n consegue usar um "loop" para remover itens... Então, como remover os itens? A solução está no indexOf() // Digamos que eu queira remover o database3, database6 e o database9 const itensRemover = ['database3','database6','database9'] const itensLocalStorage = ['database1','database2','database3','database4','database5','database6','database7','database8', 'database9','database10'] for (let d = 0; d < 3; d++) { // indexRemover vai receber o index CORRETO onde os itens a serem removidos estão. const indexRemover = itensLocalStorage.indexOf(itensRemover[d]) itensLocalStorage.splice(indexRemover,1) } // retorno esperado: Array(7) [ "database1", "database2", "database4", "database5", "database7", "database8", "database10" ] Dica extra: O JavaScript tem o querySelector() que pode facilitar sua vida ao selecionar os checkbox marcados pelo usuario, já que ele suporta cssPath, recomendo a leitura dos seguintes sites: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll https://developer.mozilla.org/en-US/docs/Web/CSS/:checked Exemplo de uma situação onde você seleciona apenas os checkbox marcados: const checkedList = document.querySelectorAll('input[type="checkbox"]:checked') // checkedList vai receber uma array com todos os valores marcados, dai você pode rodar no map, for in ou for para trabalhar com esses valores.
  14. Só uma observação em relação a Angular: A Google não sabe fazer as coisas e decretou a morte do Angular, existem alternativos melhore é mais robustos como ReactJS e VueJS Para dominar uma linguagem é muito complexo, trabalho tem mais de 5 anos com JavaScript e até hoje estou aprendendo coisas novas e atualmente estou entrando no mundo das "propostas": https://github.com/tc39/proposals; Eu acredito que você consiga trabalhar comercialmente com uma linguagem de alto nível sem problemas em menos de 3 meses, se tiver mais prática ou pré conhecimento isso pode ser reduzido facilmente para menos de 3 meses... O ponto importante não é ter dominio completo em várias linguagens, tente focar em ser um programador T: Se aprofunde em uma linguagem e suas frameworks e tenha um pré conhecimento o suficiente para fazer manutenção outras linguagens e aprende-las rapidamente. Minha Stack hoje é principalmente formada por JavaScript(React, Next, Redux, Node, Express...) e meus demais conhecimentos é PHP Vanilla, Kotlin e Flutter(Dart).
  15. O acesso ao localStorage no React é feito normalmente, segue a doc: https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage localStorage.setItem('sou_uma_chave', 'eu sou o valor dessa chave'); localStorage.getItem('sou_uma_chave'); Exemplo online: Código + App: https://codesandbox.io/s/wizardly-pine-toj0x?file=/src/App.js App: https://toj0x.csb.app/
  16. Não, não é adequado. Mas eu não diria que é errado... Só é mais complexo e trabalhoso. Eu já fiz servidores com dados sensiveis dentro do servidor da nossa empresa, até hj n tive problemas e temos bem mais liberdade. Vou tentar listar alguns pontos: 1. Você precisa montar uma estrutura de servidor usando qualquer distro Linux, porém precisar montar minimamente um bom Firewall. 2. Evite DMZ, abra apenas as portas necessarias. 3. Procure por HTTPS (SSL/TLS) de ponta a ponta. 4. Use um proxy para esconder o IP da sua rede durante a propagação do DNS, o CloudFlare faz isso gratuitamente. 5. Não armazene dados dos cartões de créditos... Faça isso apenas se você tiver garantia de segurança na estrutura do seu servidor. 6. Se for armazenar dados de cartão de crédito então evite armazenar o código de segurança e o nome no cartão de crédito de seus clientes. 7. Use alguma gateway de pagamento, dai ela fica responsável por realizar todos os processos de pagamentos e vai apenas te retornar se deu tudo certo ou não. Deixando de ser necessario armazenar dados sensiveis no seu banco de dados. (Existem várias na internet) 8. instalar SSL é um saco, e costuma dar problemas. 9. Ataque de negação de serviço. - Acho difícil isso acontecer, mas pode acontecer. 10. Não é ideial usar sua rede para outros serviços, por exemplo abrir uma porta para o Minecraft. haha 11. É ideal ter pelo menos duas maquinas dedicada para isso, o que pode causar dores de cabeça 12. Você vai ter que aprender a lidar com ngix e/ou apache 13. Você vai precisar ter a minima noção de Docker se quiser ter um uptime decente. 14. O IP da sua rede precisa ser válido e fixo(você também pode optar por ddns). Vale a pena fazer isso tudo? Não... Definitivamente não, em geral os custos são maiores e a quantidade de problemas que isso pode causar pode ser inviavel para uma única pessoa lidar... São poucos os casos onde essa solução é viavel... Serviços da Amazon e Google são quase 0800 e tem excelente desempenho.
  17. @LX12 Eu nunca ouvi falar de banco de dados no Google Sites, mas acredito que não seja possível... Todas as documentações que eu encontro sobre DATA no Google sites são de 2012 e tem avisos para não usar, e mesmo lendo essas documentações n ficou mt claro como funciona e n parece ser exatamente um banco de dados. https://developers.google.com/sites/docs/1.0/reference Eu sei que é possível usar o Intranet Gadgets Gallery para fazer RSS/Facebook/Twitter Feeds. Exceto se eu estiver errado eu só consigo pensar em três soluções que TALVEZ podem funcionar: 1º) Deixar de usar o Google Sites e tentar portar seu aplicativo para o Google's App Engine ou usar alguma outra plataforma. - Isso pode demandar mais tempo, mas o GAE é mais fácil de trabalhar e com menos limitações. 2º) Fazer uma API externa e usar ela como banco de dados. (Dai você só precisa enviar os dados e consultar os dados) - O problema dessa solução é que o gadgets precisa fazer request's http (usando o fetch por exemplo) e eu n sei se isso é possível. - O segundo problema dessa solução é que você vai precisar de um local para armazenar a API e escrever essa API (Pode ser com NodeJS por exemplo). Exemplo: Google Site -> Painel de Login -> Preenche Formulário e envia os dados de login para a API Externa -> API Externa recebe os dados, consulta no banco de dados se a senha está correta e retorna se o Login deu certo ou não -> Dependendo da resposta da API você redireciona para página X(sucesso) ou Y(falha) API Externa - Pode ser no próprio Google, o importante é ter banco de dados e que você consiga rodar algo no lado do servidor para receber e enviar dados. 3º) Você pode fazer o site no Google Sites e carregar ele em outro site, dai esse site vai ter acesso ao DOM do Google Sites e você vai ter mais liberdade para trabalhar com JavaScript. https://stackoverflow.com/questions/22372441/accessing-pages-on-google-sites-to-load-on-my-site - Vale destacar que um simples iframe pode não ser o suficiente: https://stackoverflow.com/questions/2620755/how-is-it-possible-for-an-iframe-to-access-its-parents-dom Aviso: Cara, eu realmente não consigo imaginar melhores soluções uma aplicação complexa no Google Sites.
  18. @LX12 No Wiki mostra que ele não suporta CSS externo. Você também n consegue executar JavaScript diretamente, você vai precisar fazer isso por gadgets, gadgets segundo a Google é "mini-applications built using HTML, with JavaScript, Flash or Silverlight for dynamic behaviors."; Porém existe limitações como interação com DOM(Sem acesso a supers como document, window e afins). Eu não manjo nada de Google Sites, mas vou deixar alguns links para tentar te dar um norte: https://workspaceupdates.googleblog.com/2017/12/embed-html-and-javascript-in-new-google-sites.html https://support.google.com/sites/answer/2500646?hl=en&ref_topic=1046075 https://blog.ncce.org/2013/12/10/put-javascript-into-google-sites/ https://support.google.com/sites/answer/2500646?hl=en Vale lembrar que a Google não gosta mt dessa forma de inserir JavaScript no Google Sites e dependendo das suas gambiarras pode acabar ferindo a politica de privacidade da Google (ironico) e você pode acabar tendo o site desativado, recomendo ler: https://support.google.com/docs/answer/148505?hl=en
  19. Acredito que o Wikipedia tem bastante informação sobre as limitações e as tecnologias usadas no Google Sites. https://en.wikipedia.org/wiki/Google_Sites Eu particularmente não recomendo usar uma plataforma como o Google Sites para desenvolver um TCC, acredito que só de usar seus conhecimentos em JavaScript, HTML e CSS você já consiga brincar o suficiente sem depender dessas plataformas, o objetivo do seu TCC não é ter uma interface bonitinha e sim ser funcional, certo? Usando ou não o Google Sites você vai ter que escrever códigos na mão, e usar o Google Sites pode te levar para alguma limitação o que pode atrasar bastante o seu TCC...
  20. Você se referindo a uma Modal? Não é difícil fazer, mas o código pode ficar um pouco verboso por causa do CSS então vou deixar um link para W3School que tem um guia bem legal e completo para iniciantes. https://www.w3schools.com/howto/howto_css_modals.asp Além disso você encontra milhares de códigos prontos em frameworks e mini-frameworks, basta pesquisar "modal with javascript" ou "modal with only css" que você encontra vários.
  21. Essa "lib" que você está se referindo é alguma API não oficial do Whastapp? Tipo a whatsapp-web.js? Eu já escrevi alguns programas em C# WPF mas nunca cheguei a estudar o abismo dessa linguagem, duvido encontrar em código pronto para resolver esse problema especialmente para C#... Acredito que a forma mais rápida de resolver esse problema é usando alguma API não oficial como a que eu citei e rodar o servidor nodejs fazendo a comunicação por JSON, essa api não oficial que eu mandei já oferece diversos recursos para trabalhar com o Whatsapp(inclusive com stickers) então agiliza bastante o serviço. Isso deve te ajudar: https://stackoverflow.com/questions/34629681/start-node-js-server-from-a-c-sharp-application Outra solução mas vai usar bastante tempo é construir sua própria API para o Whatsapp, existem várias discussões de como enviar uma imagem como sticker dai é só usar algumas dessas soluções dentro do C# e adaptar para sua aplicação. https://github.com/mukulhase/WebWhatsapp-Wrapper/issues/921 (Esse caso é com Python, e é bastante fácil trabalhar com Python dentro de outros ambientes)
  22. Você não precisa fazer exatamente usando um for, usar o for nesse caso é considerado uma má prática, o ideal é usar o querySelector: HTML: <h1>Questionário</h1> <ol type="1"> <li>Q1</li> <input type="radio" name="radio" value="errado" />R1 <input type="radio" name="radio" value="certo" />R2 <input type="radio" name="radio" value="errado" />R3 <input type="radio" name="radio" value="errado" />R4 <input type="radio" name="radio" value="errado" />R5 <input type="submit" name="submit" value="submit" onclick="funcao();" /> </ol> JavaScript: function funcao(){ // querySelector retorna null quando nenhuma é selecionada, o operador "??" é um operador de nulabilidade // Recomendo essa leitura caso desconheça o operador: // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator const selecionado = document.querySelector('input[name="radio"]:checked') ?? false; if (!selecionado) { alert("Você não selecionou nenhuma") } else if(selecionado.value === "certo"){ alert(selecionado.value); } else { alert("Opção incorreta"); } } Caso você queira ver funcionando em tempo real: https://codepen.io/ruiguilherme/pen/vYxReaP?editors=1010
  23. Não entendi nada com nada, mas acredito que você vai precisar colocar um botão com um evento onclick para evitar o browser de detectar o link. Algo assim: <button onclick="abrirLink()">Click me</button> <script> function abrirLink() { // lembra-se de colocar http ou https se não o Browser vai entender que é para abrir como um path no domonio atual. window.open("https://www.duckgo.com") } </script> Vale lembrar que isso vai apenas ocultar o link de aparecer no canto inferior direito/esquerdo, porém se a pessoa abrir o código da página vai conseguir ver o evento no botão e conseguir ver o link, se esse link tem informações sensiveis então sua aplicação provavelmente via precisar puxar o link do lado do servidor e só depois abrir no front-end.
  24. @Yan_ Eu joguei Star Citizen com 16GB de RAM e depois quando coloquei 32GB eu senti muita diferença nos tempos dos frames e deixei de ter stuttering (Os frames continuaram os mesmos). Claro, existe uma galera falando que isso é vazamento de memorias da engine do jogo, o que não é improvavel.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!