Giter VIP home page Giter VIP logo

guiadevbrasil's Issues

Organização do repositório

Organização dos links

O respositório já possui um número considerável de links, acho que seria bastante útil organizar os links criando um índice organizado por tipo de conteúdo, é possível fazer isso com marckdown, para o visitante achar o que ele quer com mais facilidade, então seria algo semelhante a isso:

📑 Índice

  • Front-end
    • Links diversos
      • Sites Para Desenvolvedor Front-end
      • Templates Html Gratuitos
    • Cursos
    • Frameworks
      • React
        • Links diversos
        • Cursos
      • Vue
        • Links diversos
        • Cursos
      • Angular
        • Links diversos
        • Cursos

Modos corretos para contribuição

Um outro ponto interessante seria a padronização dos títulos de cada link e cada conjunto para não deixar o visitante perdido ou confuso pois há itens onde não há títulos, outros onde o título vem depois do link, outros que possuem descrição e outros que não, outros onde o título está todo em maiúsculos, outros todo em minúculos. Então, acho que uma boa saída seria haver um padrão:
O nome da mídia em questão vir primeiro com a primeira letra em maiúsculo, o link adicionado a esse link e abaixo uma descrição breve, não obrigatória, mas aconselhável, então seria algo semelhante a isso:

🔖 Figma

Uma ferramenta para design de interfaces.

Caso o usuário não souber muito sobre marckdown, poderia disponibilizar um padrão para copiar:

🔖 [NomeDoLink] (Link)

Descrição do link.

PS: Não pode haver espaços entre os coxetes do nome do link e o parênteses onde é inserido o link.


Conclusão

  • Organização dos links
  • Modos corretos para contribuição

Help

Mr5100 says mobile broadband disconnected I don't know what to do

Apps e jogos para treinar

Plus

Extensão de navegadores para analisar tecnologias do site:
https://www.wappalyzer.com/

extensão para pegar a cor do site:
https://chrome.google.com/webstore/detail/colorpick-eyedropper/ohcpnigalekghcmgcdcenkpelffpdolg

extensão para ver JSON pelo navegador:
https://github.com/tulios/json-viewer

extensão para quem trabalha com redux:
https://github.com/zalmoxisus/redux-devtools-extension

para quem usa windows com linux (WSL2)

wsl -l = list all distros
wsl -t = turn off distro
wsl -d = turn on distro
wsl -l --running show running distros

Para quem trabalha com docker:

docker pull [ fazer download da imagem ]
docker run [ build and start a container, and print logs from it ]
docker build [ build a container from a image ]
docker start -a [ start a container ] ( -a flag = connect the STDIN and STDOUT )
docker stop [ safe way to stop a container ]
docker kill [ imediatly kill container ]

docker exec -it [ exec command inside the container ] ( -it flag = -i -t connect the STDIN and STDOUT )
docker logs [ show logs from container ]
docker ps --all [ show containers ] ( --all flag = todos os container )

docker system prune [ clean docker delete everything ]

remover arquivos no linux:
rm -rf [ linux remove ] ( -rf = remove folder with everything )
cd .. volta uma pasta
cd [name] entra na pasta
ls lista todos arquivos da pasta

git:

git remote add [name(Git1)] [link(Github)]
git remote add [name(Git2)] [link(gitlab)]
git remote add [name(Git3)] [link(bitbucket)]

git add .
git commit [nome]
git push Git1 [sobe para o github]
git push Git2 [sobe para o gitlab]
git push Git3 [sobe para o bitbucket]

desse jeito voce pode ter o mesmo projeto em locais diferentes

colinha para SQL:
https://cdn.discordapp.com/attachments/719344822858547241/889907707820245002/1632221463353.png

instagram de dicas em react:
https://www.instagram.com/imateus.silva/
https://www.instagram.com/iuricode/

playlist must watch para entender javascript:
https://www.youtube.com/watch?v=j6iSONAO6sQ&list=PL9rc_FjKlX39T78CUANwmdta_d1CgUtMt&ab_channel=Origamid

metodos de array para js
https://cdn.discordapp.com/attachments/719344822858547241/875469062656905236/1628486570340.png

dica essencial de html:
https://www.instagram.com/p/CRzj2jdjUMV/

Foi isso que eu lembrei agora, recomendo voce organizar antes de subir alguma coisa kk

Clip Path

Adicionar o clip-path generator na seção de CSS.

Help for functionality

Please help me to understand how to use GitHub, I know the functions but seems like I am lost and all my contain aren't organized.

Ausência de seção Node.

Uma sugestão, acho que seria interessante adicionar uma aba somente focado em NodeJS e todo seu ecosisstema.

RearvlViewMirror

Hey mate, I tried to reach out to you on twitter, but not sure if you picked up the message.

Ive got a project I am working on that I think you'd be a really good fit for. I am moving into the NFT space and could do with someone with your skills that is trustworthy 😁

Dm me on twitter when you get a min (crpyto Timoon i think lol)

Excelente trabalho

Muito agradecido.

Apenas venho sugerir que o melhor canal de programação apareça na lista:

Canal do João Ribeiro

javascript

seria interessante indicar o ebook traduzido 'you dont know javascript' do kyle simpson.

Conteúdo de Java

Sou um fã da linguagem Java, vi que tem pouco conteúdo. Logo envio mais links úteis.

Java Documentação - Docs Java
Download Azul OpenJDK - JDK-JAVA

Adicionar CS50x

Opa, em primeiro lugar e em minha defesa de desenvevolder novo é a primeira vez que abro um issue.
Notei que não tens o CS50X da Harvard. Seria interessante.

Dicas de Livros

naney gigt shop

--
  |
  |
  |  
  |
  |
  |
  |  
  |
  |

Naney gift shop


  |
  |  
  |

Jabones Medicinales


  |
  |

Misión


  | Mi misión es servirle a la sociedad con la producción de jabones en distintas presentaciones con una alta calidad satisfaciendo las necesidades del cliente y de la sociedad en general.
  |  
  |

Visión


  | Mi visión es ser uno de los productores de jabones artesanales en nivel profesional teniendo una calidad que nos identifique.
  |  
  |  
  |


  | El jabón es un elemento de uso personal y diario muy importante en nuestra vida. Su función es principalmente higienizar la piel, y dependiendo de sus ingredientes pude incluso cuidar y mejorar el aspecto de esta. Estos jabones son completamente naturales. Dejan la piel más suave y tersa. Están hechos a base de resina, aceites esenciales y vitaminas.
  |


  |  
  |
  |
  |
  |  
  |


  |
  |
  |


  | Lo que puede ayudar el jabón casero es una forma de reducir el impacto ambiental de nuestro consumo. Proteger la piel y curar ciertas dolencias de la piel tales como la psoriasis, dermatitis, acné o terminar con la piel reseca. Los aceites caseros están realizados con aceite de oliva o coco, que incluyen unas series de vitaminas que son muy positivas para la piel y el cuerpo de las personas.
  |


  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |  
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |
  |  
  |
  |
  |
  |
  |
  |
TIPOS DE JABONESY SUS BENEFICIOS
Tipo de Jabon<t/h>
  |
BeneficiosTipo de piel
Carbón ActivadoAcnéTodo tipo de piel
Rosa MosquetaDermatitis/RosáseaPiel Sensible
Avena y mielHumectaPiel Seca
CaféExfoliante/CelulitisTodo Tipo de Piel
Coco ExfolianteTodo Tipo de Piel
LavandaAnsiedadTodo Tipo de Piel
Café y CanelaElasticidad/FirmezaTodo Tipo de Piel

  |  
  |  
  |

  | Copyright&Copy;2022 Cindy Garcia
  |

  |

  | [email protected]
  |

  |  
  |

Naney gift shop

Jabones Medicinales

Misión

Mi misión es servirle a la sociedad con la producción de jabones en distintas presentaciones con una alta calidad satisfaciendo las necesidades del cliente y de la sociedad en general.

Visión

Mi visión es ser uno de los productores de jabones artesanales en nivel profesional teniendo una calidad que nos identifique.

El jabón es un elemento de uso personal y diario muy importante en nuestra vida. Su función es principalmente higienizar la piel, y dependiendo de sus ingredientes pude incluso cuidar y mejorar el aspecto de esta. Estos jabones son completamente naturales. Dejan la piel más suave y tersa. Están hechos a base de resina, aceites esenciales y vitaminas.

Lo que puede ayudar el jabón casero es una forma de reducir el impacto ambiental de nuestro consumo. Proteger la piel y curar ciertas dolencias de la piel tales como la psoriasis, dermatitis, acné o terminar con la piel reseca. Los aceites caseros están realizados con aceite de oliva o coco, que incluyen unas series de vitaminas que son muy positivas para la piel y el cuerpo de las personas.

TIPOS DE JABONES Y SUS BENEFICIOS
Tipo de Jabon Beneficios Tipo de piel
Carbón ActivadoAcné Todo tipo de piel
Rosa MosquetaDermatitis/RosáseaPiel Sensible
Avena y mielHumectaPiel Seca
CaféExfoliante/CelulitisTodo Tipo de Piel
Coco ExfolianteTodo Tipo de Piel
LavandaAnsiedadTodo Tipo de Piel
Café y CanelaElasticidad/FirmezaTodo Tipo de Piel
Copyright&Copy;2022 Cindy Garcia

Adicionar o Scrimba

Fala meu conterrâneo, tudo blz? Não sei se a melhor forma de sugerir seria abrindo uma issue, mas vou fazer por aqui...

Como sugestão, inclui a plataforma da Scrimba como IDE eletrônica e instituição de ensino. Eu uso a IDE da Scrimba pra testar situações com o React (tenho particulamente uma coleção de blocos de códigos na minha conta) ou mesmo pra participar de seleções de trabalho.

A Scrimba também disponibiliza diversos cursos gratuitos - quase 100% deles possuem como foco o Web Development. Se o inglês não for barreira pra pessoa, eu super indico pros novatos.

Grande abraço Arthur e parabéns pela ideia!

Remover o Índice

Problema

Do meu ponto de vista, o conteúdo já é extenso, e o indice tambem o é dificultando a consulta de um determinado item.

Solução

Removemos o indice do conteúdo, e adicionamos uma pequena informacao sobre como navegar no conteudo usando a navegacao padrao oferecida pelo github por padrao. Abaixo segue uma ilustracao.

Screen Shot 2022-04-15 at 10 35 52

Recomendação: Digital Innovation One

Pessoas, também tem a Digital Innovation One ( dio.me) que é gratuita para quem é usuário.
O bom é que tem muuuito conteúdo bacana grátis, além de possibilidade de contratação pelos bootcamps em aberto. Vale a pena conferir.

https://dio.me/

Sugestões

📚 LIVROS:

🔖 Domain-Driven Design: Atacando as complexidades no coração do software (https://www.amazon.com.br/Domain-Driven-🔖 Design-Eric-Evans/dp/8550800651)
🔖 HTML e CSS: projete e construa websites (https://www.amazon.com.br/HTML-CSS-projete-construa-Websites/dp/8576089394)

📚 SITES ÚTEIS:

🔖 HTML Validator: https://www.freeformatter.com/html-validator.html
🔖 HTML5TEST How well does your browser support html5?: https://html5test.com/index.html
🔖 Image Slider Maker: https://imageslidermaker.com/v2

📚 CANAIS NO YOUTUBE:

🔖 https://www.youtube.com/channel/UCFbNIlppjAuEX4znoulh0Cw
🔖 https://www.youtube.com/channel/UCNDmzGYwwT3rdY3xQuW8QOA
🔖 https://www.youtube.com/channel/UCU5JicSrEM5A63jkJ2QvGYw
🔖 https://www.youtube.com/c/pessonizando
🔖 https://www.youtube.com/c/codigofontetv
🔖 https://www.youtube.com/c/LamaDev

Criar regras de contribuição

Esse repositório é realmente bem extenso, e atrativo para contribuições, acho que seria importante ter regras de contribuição, como prioridade de ordenação (por exemplo ordem alfabetica), templates para pull requests, tudo mais.

Existe um checklist de comunidade neste link: https://github.com/arthurspk/guiadevbrasil/community
Screen Shot 2021-10-18 at 16 19 22

_PS: se tiver em duvida acerca de licença, recomendo GPL3! _

Update de sites que me ajudaram na faculdade, talvez ajudem mais alguém

Javascript

https://momentjs.com/
https://animejs.com/
http://es6-features.org/#Constants
https://www.sencha.com/products/extjs/
https://babeljs.io/
https://angular.io/
https://docs.nestjs.com/

Mobile
https://reactnative.dev/
https://docs.expo.dev/

Java
https://www.eclipse.org/downloads/
https://www.oracle.com/java/technologies/javase/jdk12-archive-downloads.html
https://www.oracle.com/index.html
https://www.oracle.com/br/index.html
https://docs.oracle.com/javase/8/docs/
https://docs.oracle.com/javase/8/docs/api/
https://docs.oracle.com/en/java/
https://www.codecademy.com/resources/blog/advanced-java-code-challenges/
https://www.upgrad.com/blog/mvc-architecture-in-java/
https://www.devmedia.com.br/padrao-mvc-java-magazine/21995#11
https://www.devmedia.com.br/padrao-mvc-java-magazine/21995#5
https://www.edureka.co/blog/mvc-architecture-in-java/
https://www.devmedia.com.br/java-se-aprendendo-o-padrao-mvc/29546
https://www.azul.com/
https://start.spring.io/
https://www.fromdev.com/2014/10/most-widely-used-java-libraries.html
https://towardsdatascience.com/top-10-libraries-every-java-developer-should-know-37dd136dff54
https://medium.com/javarevisited/20-essential-java-libraries-and-apis-every-programmer-should-learn-5ccd41812fc7
https://dzone.com/articles/20-useful-open-source-libraries-for-java-programme
https://www.geeksforgeeks.org/arrays-in-java/
https://www.manualdaprogramacao.com.br/
https://howtodoinjava.com/
https://howtodoinjava.com/spring-boot2/testing/spring-boot-junit-resttemplate/
https://docs.oracle.com/en/
https://docs.oracle.com/en/java/javase/16/
https://www.javaguides.net/
https://www.javatpoint.com/
https://www.devmedia.com.br/qualidade-no-codigo-java-com-os-principios-s-o-l-i-
https://exercism.io/
http://www.universidadejava.com.br/
https://www.computersciencemaster.com.br/exercicios-de-orientacao-a-objetos/
https://www.azul.com/downloads/?package=jdk-fx
https://docs.oracle.com/javase/10/docs/api/overview-summary.html
https://www.caelum.com.br/apostila-java-web/
https://www.oracle.com/java/technologies/
https://dev.java/
https://www.oracle.com/java/technologies/downloads/#java17
https://docs.oracle.com/en/java/javase/17/
https://github.com/openjdk
https://openjdk.java.net/groups/build/doc/building.html
https://openjdk.java.net/
https://docs.oracle.com/javase/8/docs/api/java/util/package-summary.html
https://www.oracle.com/br/cloud
https://openjdk.java.net/projects/jdk/17/
http://sp16.datastructur.es/

HTML/CSS

https://materializecss.com/
https://monaca.io/
https://get.foundation/
https://www.w3tweaks.com/hand-picked-css-card-collections.html
http://www.flexboxdefense.com/
https://flexboxfroggy.com/
https://cssgridgarden.com/
https://flukeout.github.io/
https://rupl.github.io/unfold/
https://victordarras.fr/cssgame/
https://www.origamid.com/curso/css-flexbox/
https://www.origamid.com/curso/css-grid-layout/
https://www.origamid.com/projetos/css-grid-layout-guia-completo/
https://www.daniweb.com/programming/web-development/code/330933/a-simple-html-login-page-using-javascript
https://whatwg.org/

Noticias

https://medium.com/
https://dev.to/
https://www.itnews.com.au/
https://www.computerworld.com/news/
https://thehack.com.br/
https://tecnoblog.net/
https://diolinux.com.br/

https://www.manualdaprogramacao.com.br/
https://imasters.com.br/
https://news.ycombinator.com/
https://dl.acm.org/
https://www.computer.org/
https://ieeexplore.ieee.org/Xplore/home.jsp
https://www.elsevier.com/pt-br
https://news.google.com/topstories?hl=en-US&gl=US&ceid=US:en
Nova pasta

https://www.datasciencecentral.com/
https://www.dssgfellowship.org//blog/
https://www.datacamp.com/blog
https://www.becomingadatascientist.com/
https://www.codementor.io/community/topic/data-science
https://www.dataversity.net/category/blogs/
https://ischoolonline.berkeley.edu/blog/
https://www.dataplusscience.com/insights.html
https://nycdatascience.com/
https://ryanswanstrom.com/
https://online.datasciencedojo.com/blogs/
https://www.datarobot.com/blog/
https://blog.dominodatalab.com/

UX/UI

https://www.wallpaperflare.com/search?wallpaper=desktop
https://www.picpng.com/
https://www.gratispng.com/
http://www.pngpix.com/
https://pngtree.com/
https://br.freepik.com/
https://igluonline.com/pack-de-icones-png/#:~:text=%2022%20melhores%20packs%20de%20%C3%ADcones%20PNG%20e,Material%20Iconset%20vol%201%20(AI).%20%20More
https://wall.alphacoders.com/by_sub_category.php?id=209351&name=Attack+On+Titan+Wallpapers
https://www.pexels.com/pt-br/
https://isorepublic.com/
https://www.kaboompics.com/
https://www.everypixel.com/
https://handbrake.fr/
https://www.youtube.com/watch?v=vg-INqhKD5c&feature=youtu.be&ab_channel=GabrielSilvestri
https://www.figma.com/
https://www.colorzilla.com/
https://flatuicolors.com/
https://color.adobe.com/pt/create
https://paletton.com/#uid=1000u0kllllaFw0g0qFqFg0w0aF
https://colorhunt.co/palettes
https://material.io/
https://www.canva.com/colors/color-palette-generator/
https://color.adobe.com/create/color-wheel
https://www.color-hex.com/
https://colordesigner.io/
https://mycolor.space/?hex=%23845EC2&sub=1
https://icons8.com/icons/set/.html
https://www.flaticon.com/free-icon/html-coding_13706
https://www.flaticon.com/
https://speckyboy.com/free-ui-interface-icon-set/
https://avocode.com/
https://emojipedia.org/
https://favicon.io/
https://iconarchive.com/search?q=html
https://google.github.io/material-design-icons/
https://br.placeit.net/
https://www.mockupworld.co/?s=T-SHIRT
http://www.matildefilmes.com.br/psicologia-das-cores-guia-avancado-para-profissionais/
https://neilpatel.com/br/blog/psicologia-das-cores-como-usar-cores-para-aumentar-sua-taxa-de-conversao/
https://color.adobe.com/pt/create/color-wheel
https://br.pinterest.com/
https://dribbble.com/
https://driwwwle.com/
https://milanote.com/
https://www.lapa.ninja/
https://www.behance.net/
https://dribbble.com/thatshutterboi
https://www.behance.net/thatshutterboi
https://www.darkmodedesign.com/
https://brasil.uxdesign.cc/keep-closet-um-estudo-sobre-decidir-o-que-vestir-fd86dd3b5bc
https://developers.google.com/web/fundamentals/design-and-ux/ux-basics
https://github.com/togiberlin/ui-ux-designer-roadmap
https://www.photopea.com/
https://sumo.app/

Ferramentas

https://anyconv.com/pt/conversor-de-ai-para-jpeg/
https://www.pdfdrive.com/category/5
https://smallpdf.com/pdf-converter
https://www.freepdfconvert.com/pdf-to-word
https://www.freepdfconvert.com/
https://pt.z-lib.org/
https://sci-hub.scihubtw.tw/
https://www.beautiful.ai/
https://en.savefrom.net/19/
https://9convert.com/en4
https://www.virustotal.com/gui/
https://coggle.it/?org=0#YgJ7iUMks4i5b00G
https://answerthepublic.com/
https://whimsical.com/login
https://coggle.it/
https://miro.com/

Link escrito errado

Olá Arthur, por favor corrigir o link do Boostrap Made, está com um 's' a mais no link. Obrigado e parabéns pelo repositório

https://bootstrapmade.com/

AT-SPI - Assistive Technology Service Provider Interface

  • (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
  • Copyright 2008 Novell, Inc.
  • This library is free software; you can redistribute it and/or
  • modify it under the terms of the GNU Lesser General Public
  • License as published by the Free Software Foundation; either
  • version 2.1 of the License, or (at your option) any later version.
  • This library is distributed in the hope that it will be useful,
  • but WITHOUT ANY WARRANTY; without even the implied warranty of
  • MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  • Lesser General Public License for more details.
  • You should have received a copy of the GNU Lesser General Public
  • License along with this library; if not, write to the
  • Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  • Boston, MA 02110-1301, USA.
    */

#ifndef _BITARRAY_H
#define _BITARRAY_H

#include "dbus/dbus.h"
#include "glib.h"

#define BITARRAY_SEQ_TERM 0xffffffff

#define BITARRAY_SET(p, n) ((p)[n>>5] |= (1<<(n&31)))
#endif /* _BITARRAY_H */

nguyenhoanggiavy

<title>Cào Vui Có Thưởng| Trần Nguyễn Đan Trinh </title> <style> /* Set padding to keep content from hitting the edges */ .body-content { padding-left: 15px; padding-right: 15px; }
/* Override the default bootstrap behavior where horizontal description lists 

will truncate terms that are too long to fit in the left column
*/
.dl-horizontal dt {
white-space: normal;
}

/* Set width on the form input elements since they're 100% wide by default */
input,
select,
textarea {
  max-width: 280px;
}

.container2 {
  border: 3px solid grey;
  position: relative;
  width: 300px;
  height: 300px;
  margin: 0 auto;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  -o-user-select: none;
  user-select: none;
}

.canvas2 {
  position: absolute;
  top: 0;
}

.form2 {
  padding: 20px;
}
</style>

Cào đi - Vận may sẽ tới

Chúc Mừng Năm Mới 2022

Chúc mừng bạn đã nhận được


<script> let arr = ["10.000", "10.000", "Chúc bạn may mắn lần sau", "Chúc bạn may mắn lần sau", "20.000", "20.000", "50.000", "10.000", "10.000", "Chúc bạn may mắn lần sau"]; let index = Math.floor(Math.random() * 10); let code = document.getElementById("code"); let content = document.getElementById("content"); if (arr[index] != "Chúc bạn may mắn lần sau") { code.innerText = arr[index] + " VND"; content.innerText = "Chúc Đại ca năm mới vui vẻ"; } else { code.innerText = arr[index]; content.innerText = ""; } </script> <script> (function() { 'use strict'; var isDrawing, lastPoint; var container = document.getElementById('js-container'), canvas = document.getElementById('js-canvas'), canvasWidth = canvas.width, canvasHeight = canvas.height, ctx = canvas.getContext('2d'), image = new Image(), brush = new Image(); // base64 Workaround because Same-Origin-Policy image.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAKrCAMAAABYyA+mAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAADAFBMVEXaJR3bKxzlZRTlZBXxrAvxqwvbKB387gL87wLkYBX//wDkXxXwpwzwpgzaJx376gP86wPaKB3jWxbjWhbvogzvoQ3aJh375gP76APiVhfiVRfunQ3unA364gT65AThUBfhTxftlw7tlg753QX53wTgSxjgShjskg/skQ/42QX42AXfRRngRhnsjA/rjA/40wb30wbfQBn//gDfQhnrhxDrhhD3zgb3zQfePBr//QDePRrqghHqgRH2yQf2yAfdNhv+/AD//ADdOBrpfBHpexL1wwj1wgjcMxv++gH++wHdNBvodxLodhL0vgn0vQncMBz++AH++QHcMRvnchPncRPzuQnzuAnbLhz99gH+9gHcLhzmbRPmbBTytAryswr98wL99AHbLBzlZxTlZhTxrgvxrQvbKRz88AL98QLbKhzkYhXkYRXwqQvwqAz87ALjXRbjXBbvpAzvowz76QP86gPjVxbiVxbvng3ung364wTiURfhURfumA7tmA753gT63wThTBjhSxjtkw7tkg752gX52QXgRRngRxjsjg/sjQ/41Qb41AbfQRnfQxnriRDriBD30Ab3zwbePhrqhBDqgxD2ywf2ygfdORreOhrpfhHpfRH1xQj1xAjdNRvoeRLoeBL0wAj0vwncMhvcNBvndBPncxPzuwnzugn+9wHmbxPmbhPztQrytQr99QHbLRzlaRTlaBTyrwvxrwv98ALlYxXkYxXxqgvwqgv87QLkXhXkXRXwpQzwpAzjWRbjWBbvoA3vnw375QP75wPiUxfiUhfumg3umQ764QThThjhTRjtlQ7tlA753AXgSRjgSBjskA/sjw/41wX41gXfRBnriw/rihD30gb30QbePxrqhhDqhRD2zQf2zAfdOhreOxrpgBHpfxH1xwj1xgjdNxvpehLoehL1wQj0wQjodRLndRL0vAn0uwncLxzncBPnbxPztwrztgrmahTmaRTysQrysAr98gLiVBfumw352wX2xwf64ATePxnmaxTqgBHysgr///9y7SflAAAAAWJLR0T/pQfyxQAAAAd0SU1FB+EICgId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'; image.onload = function() { ctx.drawImage(image, 0, 0); // Show the form when Image is loaded. document.querySelectorAll('.form2')[0].style.visibility = 'visible'; }; brush.src = 'data:image/png;base64,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'; canvas.addEventListener('mousedown', handleMouseDown, false); canvas.addEventListener('touchstart', handleMouseDown, false); canvas.addEventListener('mousemove', handleMouseMove, false); canvas.addEventListener('touchmove', handleMouseMove, false); canvas.addEventListener('mouseup', handleMouseUp, false); canvas.addEventListener('touchend', handleMouseUp, false);
  function distanceBetween(point1, point2) {
    return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));
  }

  function angleBetween(point1, point2) {
    return Math.atan2(point2.x - point1.x, point2.y - point1.y);
  }
  // Only test every `stride` pixel. `stride`x faster,
  // but might lead to inaccuracy
  function getFilledInPixels(stride) {
    if (!stride || stride < 1) {
      stride = 1;
    }
    var pixels = ctx.getImageData(0, 0, canvasWidth, canvasHeight),
      pdata = pixels.data,
      l = pdata.length,
      total = (l / stride),
      count = 0;
    // Iterate over all pixels
    for (var i = count = 0; i < l; i += stride) {
      if (parseInt(pdata[i]) === 0) {
        count++;
      }
    }
    return Math.round((count / total) * 100);
  }

  function getMouse(e, canvas) {
    var offsetX = 0,
      offsetY = 0,
      mx, my;
    if (canvas.offsetParent !== undefined) {
      do {
        offsetX += canvas.offsetLeft;
        offsetY += canvas.offsetTop;
      } while ((canvas = canvas.offsetParent));
    }
    mx = (e.pageX || e.touches[0].clientX) - offsetX;
    my = (e.pageY || e.touches[0].clientY) - offsetY;
    return {
      x: mx,
      y: my
    };
  }

  function handlePercentage(filledInPixels) {
    filledInPixels = filledInPixels || 0;
    console.log(filledInPixels + '%');
    if (filledInPixels > 50) {
      canvas.parentNode.removeChild(canvas);
    }
  }

  function handleMouseDown(e) {
    isDrawing = true;
    lastPoint = getMouse(e, canvas);
  }

  function handleMouseMove(e) {
    if (!isDrawing) {
      return;
    }
    e.preventDefault();
    var currentPoint = getMouse(e, canvas),
      dist = distanceBetween(lastPoint, currentPoint),
      angle = angleBetween(lastPoint, currentPoint),
      x, y;
    for (var i = 0; i < dist; i++) {
      x = lastPoint.x + (Math.sin(angle) * i) - 25;
      y = lastPoint.y + (Math.cos(angle) * i) - 25;
      ctx.globalCompositeOperation = 'destination-out';
      ctx.drawImage(brush, x, y);
    }
    lastPoint = currentPoint;
    handlePercentage(getFilledInPixels(32));
  }

  function handleMouseUp(e) {
    isDrawing = false;
  }
})();
</script>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.