Skip to content
This repository was archived by the owner on May 14, 2024. It is now read-only.

Commit 58466b1

Browse files
edited view.js and index.js and repo.js and style.css and try.js
1 parent 5553de8 commit 58466b1

6 files changed

Lines changed: 4882 additions & 4 deletions

File tree

homework/View.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
class View {
2+
constructor(e) {
3+
this.initialize(e);
4+
}
5+
async initialize(e) {
6+
const t = document.getElementById('root'), r = Util.createAndAppend('header', t, { class: 'header' });
7+
Util.createAndAppend('p', r, { html: 'HYF Repositories' });
8+
const n = Util.createAndAppend('select', r, {
9+
class: 'repo-selector',
10+
'aria-label': 'HYF Repositories',
11+
});
12+
n.addEventListener('change', () => this.fetchAndRender(n.value)),
13+
Util.createAndAppend('div', t, { id: 'container' });
14+
try {
15+
const t = await Util.fetchJSON(e);
16+
(this.repos = t.sort((e, t) => e.name.localeCompare(t.name)).map(e => new Repository(e))),
17+
this.repos.forEach((e, t) => {
18+
Util.createAndAppend('option', n, { html: e.name(), value: t });
19+
}),
20+
this.fetchAndRender(n.value);
21+
}
22+
catch (e) {
23+
this.renderError(e);
24+
}
25+
}
26+
async fetchAndRender(e) {
27+
const t = this.repos[e], r = document.getElementById('container');
28+
try {
29+
const e = await t.fetchContributors();
30+
r.innerHTML = '';
31+
const n = Util.createAndAppend('div', r, { class: 'left-div whiteframe' }), i = Util.createAndAppend('div', r, { class: 'right-div whiteframe' });
32+
Util.createAndAppend('p', i, { html: 'Contributions', class: 'contributor-header' });
33+
const a = Util.createAndAppend('ul', i, { class: 'contributor-list' });
34+
t.render(n), e.map(e => new Contributor(e)).forEach(e => e.render(a));
35+
}
36+
catch (e) {
37+
this.renderError(e);
38+
}
39+
}
40+
renderError(e) {
41+
const t = document.getElementById('container');
42+
(t.innerHTML = ''),
43+
Util.createAndAppend('div', t, { html: e.message, class: 'alert alert-error' });
44+
}
45+
}

homework/index.html

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,13 @@
1616
</head>
1717

1818
<body>
19-
<div id="root"></div>
20-
<script src="./index.js"></script>
19+
<div id="root"> <h2>HYF Repositories<h2> </div>
20+
21+
<div id="roota">
22+
<p id="repoInfo"></p>
23+
<p id="repoContributers"><sub>Contributins : <br /></sub></h6></p>
24+
</div>
25+
<script src="index.js"></script>
2126
</body>
2227

2328
</html>

homework/index.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,31 @@
2929
});
3030
return elem;
3131
}
32+
function createLI(root, sel, options = []) {
33+
const select = document.createElement(sel);
34+
35+
root.appendChild(select);
36+
select.innerHTML = options
37+
.sort()
38+
.map(repo => `<option value="${repo.id}">${repo.name}</option>`)
39+
.join('\n');
40+
select.addEventListener('change', function() {
41+
const chosenRepoId = +this.value;
42+
const selectedRepo = options.find(repo => repo.id === chosenRepoId);
43+
document.getElementById('repoInfo').innerHTML = 'repository: ' + selectedRepo.name + '<br />' + 'Description: ' + selectedRepo.description + "<br />>" + 'forks: ' + selectedRepo.forks + '<br />' + 'updated: ' + selectedRepo.updated_at;
44+
document.getElementById('repoContributers').innerHTML
45+
46+
});
47+
}
3248

3349
function main(url) {
3450
fetchJSON(url, (err, data) => {
3551
const root = document.getElementById('root');
3652
if (err) {
3753
createAndAppend('div', root, { text: err.message, class: 'alert-error' });
3854
} else {
39-
createAndAppend('pre', root, { text: JSON.stringify(data, null, 2) });
55+
// createAndAppend('pre', root, { text: JSON.stringify(data, null, 2) });
56+
createLI(root, 'select', data);
4057
}
4158
});
4259
}

0 commit comments

Comments
 (0)