Updates the contributors.adoc page by using data retrieved via GitHub API
diff --git a/src/main/java/org/apache/tomee/website/Contributors.java b/src/main/java/org/apache/tomee/website/Contributors.java
index fb4d0bf..f529506 100755
--- a/src/main/java/org/apache/tomee/website/Contributors.java
+++ b/src/main/java/org/apache/tomee/website/Contributors.java
@@ -18,100 +18,38 @@
import lombok.Builder;
import lombok.Data;
-import org.apache.johnzon.jaxrs.JohnzonProvider;
-import javax.net.ssl.HttpsURLConnection;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
-import java.io.UnsupportedEncodingException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
-import java.util.stream.Stream;
-
-import static java.util.Collections.emptyList;
-import static java.util.Optional.ofNullable;
-import static java.util.stream.Collectors.toList;
public class Contributors {
- private static final String GRAVATAR_BASE = "http://fr.gravatar.com/";
-
private Contributors() {
// no-op
}
- public static Contributor singleLoad(final WebTarget target, final String input) throws IOException {
- try {
- return ofNullable(loadGravatar(target, input)).orElse(loadStatic(input));
- } catch (Exception e) {
- e.printStackTrace();
- return loadStatic(input);
- }
- }
-
public static Contributor loadStatic(final String input) {
final String[] strings = input.split(" *\\| *");
- final String mail = strings[0].replaceAll("\\*$", "");
- final boolean committer = strings[0].endsWith("*");
- final String name = strings.length > 1 ? strings[1] : mail.replaceAll("@.*", "");
+ final String name = strings.length > 0 ? strings[0] : "";
+ final String github = strings.length > 1 ? strings[1] : "";
final String picture = strings.length > 2 ? strings[2] : "../img/noimg.png";
return Contributor.builder()
.name(name)
- .id(mail)
- .committer(committer)
- .gravatar(picture)
+ .id(name)
+ .avatar(picture)
+ .github(github)
.build();
}
- public static Contributor loadGravatar(final WebTarget target, final String input) throws IOException {
- final String[] strings = input.split(" *\\| *");
- final boolean committer = strings[0].endsWith("*");
- final String mail = committer ? strings[0].substring(0, strings[0].length() - 1) : strings[0];
- final String hash = gravatarHash(mail);
- final Response gravatar = target.path(hash + ".json").request(MediaType.APPLICATION_JSON_TYPE).get();
- if (gravatar.getStatus() != HttpsURLConnection.HTTP_OK) {
- System.err.println("[ERROR] No gravatar for " + mail);
- return null;
- }
- final Contributor contributor = ofNullable(gravatar.readEntity(Gravatar.class).getEntry())
- .map(e -> e[0])
- .map(e -> Contributor.builder()
- .id(e.getId())
- .name(
- ofNullable(e.getName())
- .map(n -> ofNullable(n.getFormatted()).orElse(ofNullable(n.getGivenName()).orElse("") + ofNullable(n.getFamilyName()).orElse("")))
- .orElseGet(() -> ofNullable(e.getDisplayName()).orElse(ofNullable(e.getPreferredUsername()).orElse(mail))))
- .description(e.getAboutMe())
- .link(
- Stream.concat(
- ofNullable(e.getAccounts())
- .map(a -> Stream.of(a).map(l -> Link.builder().name(l.getShortname()).url(l.getUrl()).build()).collect(toList()))
- .orElse(emptyList()).stream(),
- ofNullable(e.getUrls())
- .map(a -> Stream.of(a).map(l -> Link.builder().name(l.getTitle()).url(l.getValue()).build()).collect(toList()))
- .orElse(emptyList()).stream())
- .collect(toList()))
- .gravatar("http://www.gravatar.com/avatar/" + hash + "?s=140")
- .build())
- .orElse(Contributor.builder().name(mail).id(mail).build());
- contributor.setCommitter(committer);
- ofNullable(contributor.getLink()).ifPresent(l -> Collections.sort(l, (o1, o2) -> o1.getName().compareTo(o2.getName())));
- return contributor;
- }
-
public static Collection<Contributor> load(final String contributorsList) throws IOException { // used in page.gsp
- final WebTarget target = ClientBuilder.newClient().register(new JohnzonProvider()).target(GRAVATAR_BASE);
final List<Contributor> contributors = new ArrayList<>();
final ExecutorService es = Executors.newFixedThreadPool(16);
final String rawList = contributorsList.substring(contributorsList.indexOf("<pre>") + "<pre>".length(), contributorsList.indexOf("</pre>"));
@@ -125,15 +63,9 @@
final String mail = line;
es.submit(() -> {
Contributor contributor = null;
- try {
- contributor = singleLoad(target, mail);
- } catch (final IOException e) {
- throw new IllegalStateException(e);
- }
- if (contributor != null) {
- synchronized (contributors) {
- contributors.add(contributor);
- }
+ contributor = loadStatic(mail);
+ synchronized (contributors) {
+ contributors.add(contributor);
}
});
}
@@ -145,78 +77,17 @@
Thread.interrupted();
return Collections.emptyList();
}
- Collections.sort(contributors, (o1, o2) -> o1.name.compareTo(o2.id));
+ Collections.sort(contributors, Comparator.comparing(o -> o.name));
return contributors;
}
- private static String gravatarHash(final String mail) {
- try {
- final MessageDigest md = MessageDigest.getInstance("MD5");
- byte[] cp1252s = md.digest(mail.getBytes("CP1252"));
- final StringBuilder sb = new StringBuilder();
- for (final byte anArray : cp1252s) {
- sb.append(Integer.toHexString((anArray & 0xFF) | 0x100).substring(1, 3));
- }
- return sb.toString();
- } catch (final NoSuchAlgorithmException | UnsupportedEncodingException e) {
- throw new IllegalStateException(e);
- }
- }
-
- @Data
- @Builder
- public static class Link {
- private String name;
- private String url;
- }
-
@Data
@Builder
public static class Contributor {
private String id;
private boolean committer;
private String name;
- private String description;
- private String gravatar;
- private List<Link> link;
+ private String github;
+ private String avatar;
}
-
- @Data
- public static class GravatarName {
- private String formatted;
- private String givenName;
- private String familyName;
- }
-
- @Data
- public static class GravatarUrl {
- private String value;
- private String title;
- }
-
- @Data
- public static class GravatarAccount {
- private String shortname;
- private String url;
- }
-
- @Data
- public static class Gravatar {
- private GravatarEntry[] entry;
- }
-
- @Data
- public static class GravatarEntry {
- private String id;
- private String hash;
- private String aboutMe;
- private String requestHash;
- private String profileUrl;
- private String preferredUsername;
- private String thumbnailUrl;
- private GravatarName name;
- private GravatarUrl[] urls;
- private GravatarAccount[] accounts;
- private String displayName;
- }
-}
+}
\ No newline at end of file
diff --git a/src/main/java/org/apache/tomee/website/GitHubContributors.java b/src/main/java/org/apache/tomee/website/GitHubContributors.java
new file mode 100644
index 0000000..075a0e1
--- /dev/null
+++ b/src/main/java/org/apache/tomee/website/GitHubContributors.java
@@ -0,0 +1,74 @@
+package org.apache.tomee.website;
+
+import lombok.Data;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.tomitribe.util.IO;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+public class GitHubContributors {
+
+ protected static final String BASE_URL = "https://api.github.com/repos/apache/tomee/contributors";
+
+ /*
+ * Can be used to retrieve an up 2 date list of contributors via the GitHub API
+ * The output of this class can be pasted into /src/main/jbake/content/community/contributors.adoc
+ */
+ public static void main(String[] args) throws IOException {
+
+ final List<Contributor> contributorList = GitHubContributors.fillContributors();
+
+ for (Contributor c : contributorList) {
+ System.out.println(c);
+ }
+ }
+
+
+ public static List<Contributor> fillContributors() throws IOException {
+ final List<Contributor> contributorList = new ArrayList<>();
+
+ boolean hasPagesLeft = true;
+
+ int currentPage = 1;
+ while (hasPagesLeft) {
+ final String content = IO.slurp(new URL(BASE_URL + "?per_page=100&page=" + currentPage));
+ final JSONArray contributors = new JSONArray(content);
+
+ if (contributors.length() == 0) {
+ hasPagesLeft = false;
+ } else {
+ for (int i = 0; i < contributors.length(); i++) {
+
+ JSONObject c = contributors.getJSONObject(i);
+
+ contributorList.add(new Contributor(
+ c.getString("id"),
+ c.getString("login"),
+ c.getString("avatar_url"),
+ c.getString("html_url"),
+ c.getLong("contributions")));
+ }
+ }
+ currentPage++;
+ }
+ return contributorList;
+ }
+
+ @Data
+ public static class Contributor {
+ private final String id;
+ private final String name;
+ private final String avatar;
+ private final String url;
+ private final long contributions;
+
+ @Override
+ public String toString() {
+ return name + " | " + url + " | " + avatar;
+ }
+ }
+}
diff --git a/src/main/jbake/content/community/contributors.adoc b/src/main/jbake/content/community/contributors.adoc
index 1a700de..aa75236 100755
--- a/src/main/jbake/content/community/contributors.adoc
+++ b/src/main/jbake/content/community/contributors.adoc
@@ -1,35 +1,113 @@
-= Wall of fame
+= Wall of Fame - Contributors
:jbake-date: 2016-03-16
:jbake-type: contributors
:jbake-status: published
----
-adc@apache.org* | Alan Cabrera | https://twitter.com/maguro/profile_image?size=bigger
-ammulder@apache.org* | Aaron Mulder | ../img/ammulder.png
-agumbrecht@tomitribe.com*
-dain@iq80.com*
-dblevins@apache.org*
-djencks@apache.org* | David Jencks
-dsh@apache.org* | Daniel Stefan Haischt | https://twitter.com/uebermodean/profile_image?size=bigger
-gawor@apache.org* | Jarek Gawor | https://twitter.com/jgawor/profile_image?size=bigger
-gdamour@apache.org* | Gianny Damour | ../img/gdamour.jpg
-genspring@apache.org* | Lin Quan Jiang | ../img/genspring.jpg
-hogstrom@apache.org* | Matt Richard Hogstrom | https://twitter.com/hogstrom/profile_image?size=bigger
-jgallimore@apache.org* | Jonathan Gallimore | https://twitter.com/jongallimore/profile_image?size=bigger
-jgenender@apache.org* | Jeff Genender | ../img/jgenender.jpg
-jlaskowski@apache.org* | Jacek Laskowski | https://twitter.com/jaceklaskowski/profile_image?size=bigger
-jlmonteiro@apache.org* | Jean-Louis Monteiro | https://twitter.com/JLouisMonteiro/profile_image?size=bigger
-jvanzyl@apache.org*
-jwhitlock@apache.org*
-kevan@apache.org* | Kevan Lee Miller | https://twitter.com/kevanmiller/profile_image?size=bigger
-kmalhi@apache.org* | Karan Singh Malhi | https://twitter.com/KrnMal/profile_image?size=bigger
-lajos@apache.org* | Lajos Moczar
-manugeorge@apache.org* | Manu George | ../img/manugeorge.jpg
-mnour@apache.org* | Mohammad Nour El-Din | ../img/mnour.jpg
-rickmcguire@apache.org* | Rick McGuire | ../img/rickmcguire.jpg
-rmannibucau@gmail.com*
-struberg@yahoo.de*
-tveronezi@apache.org*
-vishwanathk@apache.org* | Vishwanath | https://twitter.com/stratwine/profile_image?size=bigger
-xuhaihong@apache.org* | Haihong Xu | ../img/xuhaihong.jpg
+rmannibucau | https://github.com/rmannibucau | https://avatars.githubusercontent.com/u/1249546?v=4
+dblevins | https://github.com/dblevins | https://avatars.githubusercontent.com/u/94926?v=4
+jgallimore | https://github.com/jgallimore | https://avatars.githubusercontent.com/u/548624?v=4
+AndyGee | https://github.com/AndyGee | https://avatars.githubusercontent.com/u/2536412?v=4
+jeanouii | https://github.com/jeanouii | https://avatars.githubusercontent.com/u/1233474?v=4
+tveronezi | https://github.com/tveronezi | https://avatars.githubusercontent.com/u/1918442?v=4
+dain | https://github.com/dain | https://avatars.githubusercontent.com/u/58298?v=4
+jaceklaskowski | https://github.com/jaceklaskowski | https://avatars.githubusercontent.com/u/62313?v=4
+radcortez | https://github.com/radcortez | https://avatars.githubusercontent.com/u/5796305?v=4
+Daniel-Dos | https://github.com/Daniel-Dos | https://avatars.githubusercontent.com/u/8139890?v=4
+struberg | https://github.com/struberg | https://avatars.githubusercontent.com/u/79310?v=4
+djencks | https://github.com/djencks | https://avatars.githubusercontent.com/u/569822?v=4
+otaviojava | https://github.com/otaviojava | https://avatars.githubusercontent.com/u/863011?v=4
+cesarhernandezgt | https://github.com/cesarhernandezgt | https://avatars.githubusercontent.com/u/1454523?v=4
+kmalhi | https://github.com/kmalhi | https://avatars.githubusercontent.com/u/5103199?v=4
+ivanjunckes | https://github.com/ivanjunckes | https://avatars.githubusercontent.com/u/2260551?v=4
+brunobat | https://github.com/brunobat | https://avatars.githubusercontent.com/u/2318030?v=4
+j4fm | https://github.com/j4fm | https://avatars.githubusercontent.com/u/6817157?v=4
+rzo1 | https://github.com/rzo1 | https://avatars.githubusercontent.com/u/13417392?v=4
+jgawor | https://github.com/jgawor | https://avatars.githubusercontent.com/u/796079?v=4
+stratwine | https://github.com/stratwine | https://avatars.githubusercontent.com/u/696945?v=4
+doychin | https://github.com/doychin | https://avatars.githubusercontent.com/u/7131283?v=4
+danielsoro | https://github.com/danielsoro | https://avatars.githubusercontent.com/u/350841?v=4
+emecas | https://github.com/emecas | https://avatars.githubusercontent.com/u/849502?v=4
+cchacin | https://github.com/cchacin | https://avatars.githubusercontent.com/u/292938?v=4
+cicekhayri | https://github.com/cicekhayri | https://avatars.githubusercontent.com/u/143997?v=4
+exabrial | https://github.com/exabrial | https://avatars.githubusercontent.com/u/1392297?v=4
+tandraschko | https://github.com/tandraschko | https://avatars.githubusercontent.com/u/2485545?v=4
+ShermanMarshall | https://github.com/ShermanMarshall | https://avatars.githubusercontent.com/u/10781839?v=4
+eapjunior | https://github.com/eapjunior | https://avatars.githubusercontent.com/u/20850916?v=4
+gabrielbussolo | https://github.com/gabrielbussolo | https://avatars.githubusercontent.com/u/4117683?v=4
+vrossellotravelc | https://github.com/vrossellotravelc | https://avatars.githubusercontent.com/u/45101500?v=4
+mnour | https://github.com/mnour | https://avatars.githubusercontent.com/u/153299?v=4
+josehenriqueventura | https://github.com/josehenriqueventura | https://avatars.githubusercontent.com/u/2358940?v=4
+CristianDVN | https://github.com/CristianDVN | https://avatars.githubusercontent.com/u/14073354?v=4
+rmcguinness | https://github.com/rmcguinness | https://avatars.githubusercontent.com/u/906421?v=4
+SvetlinZarev-SAP | https://github.com/SvetlinZarev-SAP | https://avatars.githubusercontent.com/u/43135961?v=4
+uncommon-design | https://github.com/uncommon-design | https://avatars.githubusercontent.com/u/53859462?v=4
+jgenender | https://github.com/jgenender | https://avatars.githubusercontent.com/u/643609?v=4
+marcoantoniobferreira | https://github.com/marcoantoniobferreira | https://avatars.githubusercontent.com/u/23589475?v=4
+svenruppert | https://github.com/svenruppert | https://avatars.githubusercontent.com/u/2665330?v=4
+gdiazs | https://github.com/gdiazs | https://avatars.githubusercontent.com/u/2397243?v=4
+BogdanStirbat | https://github.com/BogdanStirbat | https://avatars.githubusercontent.com/u/2213741?v=4
+alexferreiradev | https://github.com/alexferreiradev | https://avatars.githubusercontent.com/u/8191965?v=4
+mpredli01 | https://github.com/mpredli01 | https://avatars.githubusercontent.com/u/4043260?v=4
+sercheo87 | https://github.com/sercheo87 | https://avatars.githubusercontent.com/u/1036090?v=4
+Croway | https://github.com/Croway | https://avatars.githubusercontent.com/u/34543311?v=4
+dineshkumarg | https://github.com/dineshkumarg | https://avatars.githubusercontent.com/u/13047948?v=4
+gerdogdu | https://github.com/gerdogdu | https://avatars.githubusercontent.com/u/1370429?v=4
+robinsonvs | https://github.com/robinsonvs | https://avatars.githubusercontent.com/u/8331918?v=4
+cotnic | https://github.com/cotnic | https://avatars.githubusercontent.com/u/10333974?v=4
+jrxxjr | https://github.com/jrxxjr | https://avatars.githubusercontent.com/u/8740736?v=4
+davidsalter | https://github.com/davidsalter | https://avatars.githubusercontent.com/u/32864282?v=4
+gmcdonald | https://github.com/gmcdonald | https://avatars.githubusercontent.com/u/287517?v=4
+fost14oct-zz | https://github.com/fost14oct-zz | https://avatars.githubusercontent.com/u/36649784?v=4
+cassunde | https://github.com/cassunde | https://avatars.githubusercontent.com/u/3828140?v=4
+weverthon-medeiros | https://github.com/weverthon-medeiros | https://avatars.githubusercontent.com/u/14115193?v=4
+puneethps | https://github.com/puneethps | https://avatars.githubusercontent.com/u/16502032?v=4
+carljmosca | https://github.com/carljmosca | https://avatars.githubusercontent.com/u/215651?v=4
+dheffelfinger | https://github.com/dheffelfinger | https://avatars.githubusercontent.com/u/13482727?v=4
+gacsnic | https://github.com/gacsnic | https://avatars.githubusercontent.com/u/24616597?v=4
+chongma | https://github.com/chongma | https://avatars.githubusercontent.com/u/6253322?v=4
+nishantraut | https://github.com/nishantraut | https://avatars.githubusercontent.com/u/10669557?v=4
+davidromero | https://github.com/davidromero | https://avatars.githubusercontent.com/u/2968138?v=4
+fredster33 | https://github.com/fredster33 | https://avatars.githubusercontent.com/u/64927044?v=4
+pavelsmajda | https://github.com/pavelsmajda | https://avatars.githubusercontent.com/u/24811669?v=4
+rhuan080 | https://github.com/rhuan080 | https://avatars.githubusercontent.com/u/10210672?v=4
+ferdisn | https://github.com/ferdisn | https://avatars.githubusercontent.com/u/28998445?v=4
+bitcod3r | https://github.com/bitcod3r | https://avatars.githubusercontent.com/u/4358449?v=4
+ivannov | https://github.com/ivannov | https://avatars.githubusercontent.com/u/664730?v=4
+whitlockjc | https://github.com/whitlockjc | https://avatars.githubusercontent.com/u/98899?v=4
+jchemile | https://github.com/jchemile | https://avatars.githubusercontent.com/u/7410390?v=4
+juneau001 | https://github.com/juneau001 | https://avatars.githubusercontent.com/u/121002?v=4
+patriciauz | https://github.com/patriciauz | https://avatars.githubusercontent.com/u/20784387?v=4
+sendilkumarn | https://github.com/sendilkumarn | https://avatars.githubusercontent.com/u/12471122?v=4
+breakponchito | https://github.com/breakponchito | https://avatars.githubusercontent.com/u/279375?v=4
+dalexandrov | https://github.com/dalexandrov | https://avatars.githubusercontent.com/u/2016949?v=4
+dependabot[bot] | https://github.com/apps/dependabot | https://avatars.githubusercontent.com/in/29110?v=4
+aboullaite | https://github.com/aboullaite | https://avatars.githubusercontent.com/u/2836850?v=4
+avermeer | https://github.com/avermeer | https://avatars.githubusercontent.com/u/17863217?v=4
+Dexmaster | https://github.com/Dexmaster | https://avatars.githubusercontent.com/u/6061000?v=4
+brettporter | https://github.com/brettporter | https://avatars.githubusercontent.com/u/49108?v=4
+cbos | https://github.com/cbos | https://avatars.githubusercontent.com/u/255404?v=4
+danielshahaf | https://github.com/danielshahaf | https://avatars.githubusercontent.com/u/2141904?v=4
+deki | https://github.com/deki | https://avatars.githubusercontent.com/u/858827?v=4
+kaminfeuer | https://github.com/kaminfeuer | https://avatars.githubusercontent.com/u/7949105?v=4
+gerwinjansen | https://github.com/gerwinjansen | https://avatars.githubusercontent.com/u/13243946?v=4
+HillmerCh | https://github.com/HillmerCh | https://avatars.githubusercontent.com/u/29781653?v=4
+jimmycasey | https://github.com/jimmycasey | https://avatars.githubusercontent.com/u/5089723?v=4
+JuanMorenoDeveloper | https://github.com/JuanMorenoDeveloper | https://avatars.githubusercontent.com/u/7319391?v=4
+kaloyanspiridonov | https://github.com/kaloyanspiridonov | https://avatars.githubusercontent.com/u/42994528?v=4
+katya-stoycheva | https://github.com/katya-stoycheva | https://avatars.githubusercontent.com/u/24268910?v=4
+mawiesne | https://github.com/mawiesne | https://avatars.githubusercontent.com/u/20473513?v=4
+revmischa | https://github.com/revmischa | https://avatars.githubusercontent.com/u/245131?v=4
+scriptmonkey | https://github.com/scriptmonkey | https://avatars.githubusercontent.com/u/1366409?v=4
+sebfz1 | https://github.com/sebfz1 | https://avatars.githubusercontent.com/u/1717144?v=4
+suyogbarve | https://github.com/suyogbarve | https://avatars.githubusercontent.com/u/1817914?v=4
+SvetlinZarev | https://github.com/SvetlinZarev | https://avatars.githubusercontent.com/u/1794797?v=4
+kakawait | https://github.com/kakawait | https://avatars.githubusercontent.com/u/275609?v=4
+cocorossello | https://github.com/cocorossello | https://avatars.githubusercontent.com/u/3096556?v=4
+violetagg | https://github.com/violetagg | https://avatars.githubusercontent.com/u/696661?v=4
+pendor | https://github.com/pendor | https://avatars.githubusercontent.com/u/209193?v=4
+javalenjara | https://github.com/javalenjara | https://avatars.githubusercontent.com/u/51468684?v=4
+mayens | https://github.com/mayens | https://avatars.githubusercontent.com/u/233983?v=4
+t4fm | https://github.com/t4fm | https://avatars.githubusercontent.com/u/47995607?v=4
+yenerm | https://github.com/yenerm | https://avatars.githubusercontent.com/u/715370?v=4
----
diff --git a/src/main/jbake/templates/contributors.gsp b/src/main/jbake/templates/contributors.gsp
index c4049d8..8e8d40f 100755
--- a/src/main/jbake/templates/contributors.gsp
+++ b/src/main/jbake/templates/contributors.gsp
@@ -16,23 +16,18 @@
</div>
<div class="row">
<div class="col-md-12 contributors">
- <div class="text-center" style="padding-bottom: 2em;">A <i class="fa fa-star-o" style="color:#F38F24;"></i> means the contributor is also a committer.</div>
+ <div class="text-center" style="padding-bottom: 2em;">We want to thank the following individuals for contributing to Apache TomEE. An up to date contributor list can be found <a href="https://github.com/apache/tomee/graphs/contributors">here</a>. The current list of committers can be found <a href="https://projects.apache.org/committee.html?tomee">here</a>.</div>
<ul>
<%
org.apache.tomee.website.Contributors.load(content.body).each {contributor ->
%>
<div class="col-sm-4">
<div class="photo col-sm-5">
- <img alt="${contributor.name}" src="${contributor.gravatar}" style="width:140px">
- <% if (contributor.committer){ %><i class="pull-right fa fa-star-o" style="color:#F38F24;"></i><% } %>
+ <img src="${contributor.avatar}" style="width:140px">
</div>
<div class="col-sm-7">
- <h3 class="contributor-name" style="font-size:1.4em;">${contributor.name}</h3>
+ <h5 class="contributor-name" style="font-size:1.0em;"><a href="${contributor.github}">${contributor.name}</a></h5>
<p></p>
- <ul class="list-inline">
- <%contributor.link.each {l ->%>
- <li><a href="${l.url}">${l.name}</a></li>
- <%}%>
</div>
</div>
<% } %>