Skip to content

Commit

Permalink
Add organization example and better organization support.
Browse files Browse the repository at this point in the history
  • Loading branch information
azenla committed Jul 31, 2014
1 parent feb298d commit cc9de92
Show file tree
Hide file tree
Showing 11 changed files with 241 additions and 19 deletions.
12 changes: 11 additions & 1 deletion example/common.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
import "dart:html";
import "dart:async" show Timer;

void init(String script) {
void init(String script, {void onReady()}) {
var stopwatch = new Stopwatch();
if (onReady != null) {
document.onReadyStateChange.listen((event) {
if (document.readyState == ReadyState.COMPLETE) {
stopwatch.stop();
print("Document Finished Loading in ${stopwatch.elapsedMilliseconds}ms");
onReady();
}
});
}

document.querySelector("#view-source").onClick.listen((_) {
var popup = window.open("view_source.html", "View Source");
Expand Down
17 changes: 17 additions & 0 deletions example/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<!DOCTYPE html>

<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GitHub for Dart - Demos</title>
</head>

<body>
<h1>GitHub for Dart - Demos</h1>

<a href="repos.html"><h3>Repositories</h3></a>
<a href="organization.html"><h3>Organization</h3></a>
<a href="users.html"><h3>Users</h3></a>
</body>
</html>
40 changes: 40 additions & 0 deletions example/organization.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import "dart:html";

import "package:github/browser.dart";
import "common.dart";

GitHub github;
DivElement $org;

void main() {
init("organization.dart", onReady: () {
github = new GitHub(new BrowserFetcher(), auth: new Authentication.withToken("5fdec2b77527eae85f188b7b2bfeeda170f26883"));
$org = querySelector("#org");
loadOrganization();
});
}

void loadOrganization() {
github.organization("DirectMyFile").then((Organization org) {
return org.teams;
}).then((List<Team> teams) {
for (var team in teams) {
var e = new DivElement()..id = "team-${team.name}";
e.classes.add("team");
$org.append(e);
e.append(new HeadingElement.h3()..text = team.name);
team.members.then((List<TeamMember> members) {
var divs = members.map((member) {
var h = new DivElement();
h.classes.add("box");
h.classes.add("user");
h.style.textAlign = "center";
h.append(new ImageElement(src: member.avatarUrl, width: 64, height: 64)..classes.add("avatar"));
h.append(new AnchorElement(href: member.url)..append(new ParagraphElement()..text = "${member.login}"));
return h;
});
divs.forEach(e.append);
});
}
});
}
46 changes: 46 additions & 0 deletions example/organization.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<!DOCTYPE html>
<html>
<head>
<title>GitHub Organization</title>

<style>
.line {
border-top: 1px;
border-style: solid;
}

.box {
border: 2px solid;
}

.user {
display: inline-block;
margin-top: 5px;
margin-left: 5px;
width: 256px;
}

.avatar {
margin-top: 5px;
}

.team {
margin-bottom: 5px;
}
</style>
</head>

<body>
<div class="header">
<h1>GitHub Organization</h1>
<button id="view-source">View the Source</button>
<p></p>
</div>

<div id="org">
</div>

<script type="application/dart" src="organization.dart"></script>
<script src="packages/browser/dart.js"></script>
</body>
</html>
18 changes: 4 additions & 14 deletions example/users.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,11 @@ GitHub github;
DivElement $users;

void main() {
var stopwatch = new Stopwatch();
stopwatch.start();
github = new GitHub(new BrowserFetcher());

$users = querySelector("#users");

document.onReadyStateChange.listen((event) {
if (document.readyState == ReadyState.COMPLETE) {
stopwatch.stop();
print("Document Finished Loading in ${stopwatch.elapsedMilliseconds}ms");
loadUsers();
}
init("users.dart", onReady: () {
github = new GitHub(new BrowserFetcher());
$users = querySelector("#users");
loadUsers();
});

init("users.dart");
}

void loadUsers() {
Expand Down
15 changes: 14 additions & 1 deletion lib/src/browser/core.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,20 @@ class BrowserFetcher extends Fetcher {
queryString = buildQueryString(params);
}

request.open("GET", "${github.endpoint}${path}${queryString}");
var url = new StringBuffer();

if (path.startsWith("http")) {
url.write(path);
url.write(queryString);
} else {
url.write(github.endpoint);
url.write(path);
url.write(queryString);
}

request.open("GET", url.toString());

headers.forEach(request.setRequestHeader);

var completer = new Completer();

Expand Down
4 changes: 2 additions & 2 deletions lib/src/common/auth.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
part of github.common;

class Authentication {
String token;
final String token;

Authentication.withToken(this.token);

Authentication.anonymous();
Authentication.anonymous() : this.token = null;
}
9 changes: 9 additions & 0 deletions lib/src/common/client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -118,4 +118,13 @@ class GitHub {
});
return group.future;
}

/**
* Fetches the team members of the team specified by [id].
*/
Future<List<TeamMember>> teamMembers(int id) {
return fetcher.fetchJSON("/teams/${id}/members").then((List json) {
return new List.from(json.map((it) => TeamMember.fromJSON(this, it)));
});
}
}
96 changes: 96 additions & 0 deletions lib/src/common/organization.dart
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,100 @@ class Team {
team.json = input;
return team;
}

Future<List<TeamMember>> get members => github.teamMembers(id);
}

class TeamMember {
final GitHub github;

String login;
int id;

@ApiName("avatar_url")
String avatarUrl;

String type;

@ApiName("site_admin")
bool siteAdmin;

@ApiName("html_url")
String url;

Map<String, dynamic> json;

TeamMember(this.github);

static TeamMember fromJSON(GitHub github, input) {
var member = new TeamMember(github);
member.login = input['login'];
member.id = input['id'];
member.avatarUrl = input['avatar_url'];
member.type = input['type'];
member.siteAdmin = input['site_admin'];
member.url = input['html_url'];
return member;
}

Future<User> asUser() => github.user(login);
}

class TeamRepository extends Repository {
TeamRepositoryPermissions permissions;

TeamRepository(GitHub github) : super(github);

static TeamRepository fromJSON(GitHub github, input) {
var repo = new TeamRepository(github);
repo.name = input['name'];
repo.id = input['id'];
repo.fullName = input['full_name'];
repo.fork = input['fork'];
repo.url = input['html_url'];
repo.description = input['description'];
repo.cloneUrls = new CloneUrls();
repo.cloneUrls.git = input['git_url'];
repo.cloneUrls.ssh = input['ssh_url'];
repo.cloneUrls.https = input['clone_url'];
repo.cloneUrls.svn = input['svn_url'];
repo.homepage = input['homepage'];
repo.size = input['size'];
repo.stargazersCount = input['stargazers_count'];
repo.watchersCount = input['watchers_count'];
repo.language = input['language'];
repo.hasIssues = input['has_issues'];
repo.hasDownloads = input['has_downloads'];
repo.hasWiki = input['has_wiki'];
repo.defaultBranch = input['default_branch'];
repo.openIssuesCount = input['open_issues_count'];
repo.networkCount = input['network_count'];
repo.subscribersCount = input['subscribers_count'];
repo.forksCount = input['forks_count'];
repo.createdAt = parse_date(input['created_at']);
repo.pushedAt = parse_date(input['pushed_at']);
repo.json = input;
repo.owner = RepositoryOwner.fromJSON(input['owner']);
repo.private = input['private'];
repo.permissions = TeamRepositoryPermissions.fromJSON(github, input['permissions']);
return repo;
}
}

class TeamRepositoryPermissions {
final GitHub github;

bool admin;
bool push;
bool pull;

TeamRepositoryPermissions(this.github);

static TeamRepositoryPermissions fromJSON(GitHub github, input) {
var perms = new TeamRepositoryPermissions(github);
perms.admin = input['admin'];
perms.push = input['push'];
perms.pull = input['pull'];
return perms;
}
}
1 change: 1 addition & 0 deletions lib/src/common/repo.dart
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ class Repository {
repo.forksCount = input['forks_count'];
repo.createdAt = parse_date(input['created_at']);
repo.pushedAt = parse_date(input['pushed_at']);
repo.private = input['private'];
repo.json = input;
repo.owner = RepositoryOwner.fromJSON(input['owner']);
return repo;
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ dev_dependencies:
browser: '>=0.10.0+2 <0.11.0'
scheduled_test: '>=0.11.1 <0.12.0'
hop: '>=0.31.0+1 <0.32.0'
yaml: '2.0.0'
yaml: '2.0.0'

0 comments on commit cc9de92

Please sign in to comment.