-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
140 lines (126 loc) · 6.52 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
const inputImageHidden = document.getElementById("image-upload");
document.getElementById("button-upload").addEventListener("click", () => {
inputImageHidden.click();
});
inputImageHidden.addEventListener("change", async (event) => {
const file = event.target.files[0];
if (file) {
// Verifica se o tipo do arquivo é uma imagem
if (!file.type.match('image.*')) {
alert("Por favor, selecione um arquivo de imagem.");
return;
}
// Converte o tamanho do arquivo para megabytes (2mb) e compara com o limite
if (file.size > 2 * 1024 * 1024) {
alert("O arquivo é muito grande. O tamanho máximo permitido é 2MB.");
return;
}
// Se o arquivo for válido
try {
const fileContent = await readFileContents(file);
document.querySelector(".container-image__image").src = fileContent.urlFile;
document.querySelector(".container-image-name p").textContent = fileContent.nameFile;
} catch (error) {
console.error("Erro na leitura do arquivo.");
}
}
});
function readFileContents (file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => {
resolve({ urlFile: reader.result, nameFile: file.name });
};
reader.onerror = () => {
reject (`Erro na leitura do arquivo ${file.name}`);
};
reader.readAsDataURL(file);
});
}
const tagsInput = document.getElementById("project-tags");
const tagsList = document.getElementById("list-tags");
tagsList.addEventListener("click", (event) => {
if (event.target.tagName === "IMG") { //Verifica se a tag clicada foi a "IMG"
event.target.parentElement.remove(); // Remove a tag pai "LI"
}
})
const possibleTags = ["Front-end", "JavaScript", "TypeScript", "HTML", "CSS", "React", "Next.js", "Angular", "Vue.js", "Svelte", "Back-end", "Node.js", "Python", "Java", "PHP", "Ruby", "Go", "C#", ".NET", "Django", "Flask", "Laravel", "SQL", "NoSQL", "C++", "C#", "Rust", "Kotlin", "Swift", "Dart", "Orientação a objetos", "Programação funcional", "Programação reativa", "Programação imperativa", "Programação declarativa", "jQuery", "Bootstrap", "Material UI", "Tailwind CSS", "Express.js", "Spring", "Django", "Flask", "Laravel", "Ruby on Rails", "TensorFlow", "PyTorch", "OpenCV", "Scikit-learn", "Pandas", "NumPy", "Git", "SVN", "Docker", "Kubernetes", "AWS", "Azure", "GCP", "Heroku", "Testes", "Unitários", "Integração", "End-to-end", "Gradle", "Maven", "npm", "Design Patterns", "MVC", "Singleton", "Factory", "Observer", "DevOps", "CI/CD", "Infrastructure", "Segurança", "OWASP", "criptografia", "autenticação", "autorização", "Web development", "full stack", "Mobile", "iOS", "Android", "Flutter", "React Native", "Games", "Unity", "Unreal Engine", "Game Development", "Data Science", "Machine Learning", "Deep Learning", "Data Mining", "Big Data", "Inteligência Artificial", "IA", "NLP", "Computer Vision", "Sistemas Embarcados", "Arduino", "Raspberry Pi"];
async function checkTagIsValid (tagText) {
return new Promise ((resolve) => {
setTimeout(() => {
resolve(possibleTags.map(tags => tags.toLowerCase()).includes(tagText.toLowerCase()));
});
});
}
tagsInput.addEventListener("keypress", async (event) => {
if (event.key == "Enter") {
event.preventDefault();
const textTag = tagsInput.value.trim(); // trim() remove espaços no inicio e no final de uma string.
if (textTag !== "") {
try {
const tagIsValid = await checkTagIsValid(textTag);
if (tagIsValid) {
const newTag = document.createElement("li");
newTag.innerHTML = `<p>${tagsInput.value}</p> <img src="img/close-dark.svg" alt="ícone fechar">`;
tagsList.appendChild(newTag);
tagsInput.value = "";
} else {
tagsInput.value = "";
alert("Tag não encontrada, tente outra.")
}
} catch (error) {
tagsInput.value = "";
console.error("Erro ao verificar se a tag é valida.")
alert("Erro ao verificar se a tag é valida.");
}
} else {
alert("Tag inválida, tente novamente.");
tagsInput.value = "";
}
}
});
const formProject = document.querySelector("form");
const buttonPublish = document.getElementById("button-publish");
const buttonDiscard = document.getElementById("button-discard");
async function publishProject(projectName, projectDescription, projectTags) {
return new Promise( (resolve, reject) => {
setTimeout(() => {
//Simulação de envio para o banco de dados.
const success = Math.random() > 0.5;
if (success) {
resolve(`Projeto publicado com sucesso: Nome: ${projectName} - Descrição: ${projectDescription} - Tags: ${projectTags}.`);
} else {
reject("Erro ao publicar o projeto.");
}
}, 1000);
})
}
buttonPublish.addEventListener("click", async (event) => {
event.preventDefault();
const projectName = document.getElementById("project-name").value.trim();
const projectDescription = document.getElementById("project-description").value.trim();
const projectTags = Array.from(tagsList.querySelectorAll("p")).map((tag) => tag.textContent);
if (projectName !== "" && projectDescription !== "" && projectTags.length > 0) {
try {
const result = await publishProject(projectName, projectDescription, projectTags);
console.log(result);
alert("Projeto publicado com sucesso.");
formProject.reset();
tagsList.innerHTML = "";
document.getElementById("project-image").src = "img/code-editor.svg";
document.querySelector(".container-image-name p").textContent = "image_projeto.png";
} catch (error) {
console.log(error);
alert("Erro ao publcar o projeto, tente novamente.");
}
} else {
alert("Você precisa preencher todos os campos e incluir pelo menos uma tag.");
}
});
buttonDiscard.addEventListener("click", (event) => {
event.preventDefault();
formProject.reset();
tagsList.innerHTML = "";
document.getElementById("project-image").src = "img/code-editor.svg";
document.querySelector(".container-image-name p").textContent = "image_projeto.png";
});