-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
99 lines (72 loc) · 2.59 KB
/
Copy pathscript.js
File metadata and controls
99 lines (72 loc) · 2.59 KB
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
const textField = document.querySelector('#text-field');
const autocomplete = document.querySelector('.autocomplete');
const result = document.querySelector('.result');
const debounce = (fn, debounceTime) => {
let timeoutId;
return function(...args) {
const context = this;
clearTimeout(timeoutId);
timeoutId = setTimeout(() => {
fn.apply(context,args);
}, debounceTime);
}
};
textField.addEventListener('keyup', debounce(() => {
autocomplete.textContent = '';
searchRepositories();
}, 400));
async function searchRepositories() {
if(!(textField.value.trim() === '')) {
return await fetch(`https://api.github.com/search/repositories?q=${textField.value}`)
.then(res => {
if(res.ok) {
res.json().then(repositories => {
repositories.items.forEach((repo,index) => {
if(index < 5) {
showRepo(repo);
}
})
})
}else {
throw new Error('Введите запрос или подождите 1 минуту');
}
})
.catch(err => console.log(err));
}
}
function showRepo(repository) {
const repo = document.createElement('li')
repo.className = 'repository';
repo.textContent = repository.name
let obj = {
name: repository.name,
owner: repository.owner.login,
stars: repository.stargazers_count
}
repo.dataset.info = JSON.stringify(obj)
autocomplete.append(repo)
}
autocomplete.addEventListener("click", (e) => {
e.target.classList.add("clicked");
let repositoryOptions = JSON.parse(e.target.dataset.info);
let pinRepo = document.createElement("li");
let repoName = document.createElement("div");
repoName.textContent = `Name: ${repositoryOptions.name}`;
let repoOwner = document.createElement("div");
repoOwner.textContent = `Owner: ${repositoryOptions.owner}`;
let repoStars = document.createElement("div");
repoStars.textContent = `Stars: ${repositoryOptions.stars}`;
let repoSvg = document.createElement("div");
repoSvg.className = "close-button opened";
pinRepo.append(repoName);
pinRepo.append(repoOwner);
pinRepo.append(repoStars);
pinRepo.append(repoSvg);
result.append(pinRepo);
textField.value = "";
});
result.addEventListener('click', e => {
if (e.target.classList.contains('close-button')) {
e.target.closest('li').remove();
}
})