-
Notifications
You must be signed in to change notification settings - Fork 3
/
repo-element.js
90 lines (83 loc) · 2.43 KB
/
repo-element.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
/**
* Export browser global, AMD, and common js
*/
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// amd
define(['skate'], factory);
} else if (typeof exports === 'object') {
// commonjs
module.exports = factory(require('skate'));
} else {
// browser
root.GithubRepoElement = factory(root.skate, root.skateTemplateHtml);
}
}(this, function (skate) {
/**
* Github-repo element requires Skate.js to run. Either include it yourself,
* or use the bundled version of Github-repo.
*
* - https://github.com/skatejs/skatejs
*/
if (typeof skate !== 'function') {
throw new Error([
'Github-repo-element requires Skate.js! Make sure you either include',
'it in on your page, or use the bundled version. See',
'https://github.com/stevenschobert/github-repo-element#installing'
].join(' '));
}
var template = [
'<a class="ghrepo" data-ghrepo="url">',
'<div class="ghrepo-title" data-ghrepo="fullName"></div>',
'<div class="ghrepo-description">',
'<div data-ghrepo="description"></div>',
'</div>',
'<div class="ghrepo-meta">',
'<span class="ghrepo-stars">',
'<span data-ghrepo="stars"></span> stars',
'</span>',
'<span class="ghrepo-forks">',
'<span data-ghrepo="forks"></span> forks',
'</span>',
'</div>',
'</a>'
].join('');
var gh = new Github();
var GithubRepoElement = skate('github-repo', {
template: function createTemplate(element) {
if (element.innerHTML.replace(/\s/, '').length === 0) {
element.innerHTML = template;
}
},
attributes: {
src: function fetchRepo(element, change) {
gh.repo(change.newValue, function handleRepoFetch(repo) {
element.displayRepo(repo);
});
}
},
prototype: {
displayRepo: function displayRepo(repo) {
var linkEl = this.querySelector('[data-ghrepo="url"]');
if (linkEl) {
linkEl.setAttribute('href', repo.url);
}
[
'name',
'fullName',
'description',
'watchers',
'forks',
'language',
'stars'
].forEach(function displayItem(item) {
var el = this.querySelector('[data-ghrepo="'+item+'"]');
if (el) {
el.innerHTML = repo[item];
}
}, this);
}
}
});
return GithubRepoElement;
}));