-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.js
158 lines (140 loc) · 5.06 KB
/
main.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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
const btnEncurtar = document.querySelector(".btn-encurtar");
const input = document.querySelector(".shorten input[type=text]");
btnEncurtar.addEventListener("click", () => {
if (input.value.trim() == "") {
showErrorMessage("Por favor digite uma url...");
} else if (!isUrl(input.value.trim())) {
showErrorMessage("Digite uma url correcta por favor");
} else {
removeErrorMessage();
let url = `https://api.shrtco.de/v2/shorten?url=${input.value.trim()}`;
encurtar(url);
input.value = '';
}
});
// Evento de digitar no input da url
input.addEventListener("keyup", () => {
if (input.value.trim() == "") {
showErrorMessage("Por favor digite uma url...");
} else if (!isUrl(input.value.trim())) {
showErrorMessage("Digite uma url correcta por favor");
} else {
removeErrorMessage();
}
});
function showErrorMessage(msg) {
document.querySelector("p.error").textContent = msg;
document.querySelector(".bg").classList.add("error");
}
function removeErrorMessage() {
document.querySelector(".bg").classList.remove("error");
}
function isUrl(str) {
const pattern = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i;
return pattern.test(str);
}
async function encurtar(url) {
setDefaultConfigInBtnCopy();
const response = await fetch(url);
const data = await response.json();
//Verificar se tudo deu certo
if (data.ok == true) {
let code = data.result.code;
let linkEncurtado = data.result.full_short_link;
let linkOriginal = data.result.original_link;
addLinkInLocalStorage(code, linkEncurtado, linkOriginal);
addLinkInHTML(linkOriginal, linkEncurtado);
} else {
// console.log("Houve um erro");
}
}
// inserir links na div links container
function addLinkInHTML(linkOriginal, LinkEncurtado) {
let linksContainer = document.querySelector(".links-encurtados-container");
let templateDiv = `<div class="link">
<p class="original">${linkOriginal}</p>
<div>
<a href="${LinkEncurtado}" class="encurtado">${LinkEncurtado}</a>
<button class="btn-copy" data-link="${LinkEncurtado}">Copy</button>
</div>
</div>
`;
linksContainer.innerHTML += templateDiv;
}
// Localstarare
function addLinkInLocalStorage(code, linkEncurtado, linkOriginal) {
let AllLinks = JSON.parse(localStorage.getItem("links")) || [];
AllLinks.push({
code: code,
linkEncurtado: linkEncurtado,
linkOriginal: linkOriginal
});
localStorage.setItem("links", JSON.stringify(AllLinks));
}
// mostrar os links que estão no localstorage
function showLinksInLocalStorage() {
let links = JSON.parse(localStorage.getItem("links"));
if (links == null) {
} else {
for (let i = 0; i < links.length; i++) {
addLinkInHTML(links[i].linkOriginal, links[i].linkEncurtado);
}
}
}
showLinksInLocalStorage();
document.addEventListener('click',(e)=>{
if(e.target.classList.contains('btn-copy')){
setDefaultConfigInBtnCopy();
let element = e.target;
console.log(element.getAttribute('data-link'));
navigator.clipboard.writeText(element.getAttribute('data-link')).then(()=>{
element.innerText = 'Copied!';
element.classList.add('copied');
});
}
})
// Esse função serve para setar o texto copy em todos os botões que têm a classe btn-copy
function setDefaultConfigInBtnCopy(){
let allButtons = document.querySelectorAll('.btn-copy');
allButtons.forEach((button)=>{
button.classList.remove('copied');
button.innerText = 'copy';
});
}
// função responsável pela verificação de internet
function verifyInternet(){
let xhr = new XMLHttpRequest(); //criando novo objeto XML
xhr.open("GET","https://jsonplaceholder.typicode.com/posts", true); //sending get request on this URL
xhr.onload = ()=>{
//uma vez ajax carregado
//se o status do ajax for igual a 200 ou menor que 300, isso significa que o usuário está obtendo dados desse URL fornecido
//ou seu status de resposta é 200, o que significa que ele está online
if(xhr.status == 200 && xhr.status < 300){
//o usuário está com internet
setTimeout(()=>{ //ocultar a notificação do brinde automaticamente após 5 segundos
//remover o prenchimento branco
online();
}, 200);
}else{
//o usuário está sem internet
offline(); //chamando a função offline se o status do ajax não for igual a 200 ou não inferior a 300
}
}
xhr.onerror = ()=>{
offline(); //chamando a função offline se o URL passado não estiver correto ou retornando 404 ou outro erro
}
xhr.send(); //enviando solicitação get para o URL passado
}
function offline(){
document.querySelector('.alert-internet').classList.add('open');
document.querySelector('.shorten button ').style.pointerEvents = 'none';
}
function online(){
document.querySelector('.alert-internet').classList.remove('open');
document.querySelector('.shorten button ').style.pointerEvents = 'all';
}
window.onload = ()=>{
setInterval(()=>{ //esta função setInterval chama ajax frequentemente após 100ms
verifyInternet();
}, 50);
}