From 1844e9fa6d711ef8e93b9dda48eecd6d7b76fccf Mon Sep 17 00:00:00 2001 From: unknown <41499871+Torpedo99@users.noreply.github.com> Date: Sun, 22 Dec 2019 19:36:57 +0530 Subject: [PATCH] Added Badges and Contributor Tracking Improved contributor tracking Added Predefined Badges Added Special Badges Added a /badge route and tooltips --- .gitignore | 3 + public/assets/badges/predefined/babysteps.png | Bin 0 -> 2468 bytes public/assets/badges/special/topcommits.png | Bin 0 -> 29228 bytes .../assets/badges/special/topmonthcommits.png | Bin 0 -> 1185 bytes .../assets/badges/special/topweekcommits.png | Bin 0 -> 25221 bytes .../assets/badges/special/topyearcommits.png | Bin 0 -> 1998 bytes public/index.html | 5 +- src/assets/badges/predefined/badges.json | 13 ++ .../badges/predefined/predefinedBadges.js | 42 +++++ src/assets/badges/special/badges.json | 34 ++++ src/assets/badges/special/specialBadges.js | 83 ++++++++++ src/components/auth/Login.vue | 1 - src/components/badgeList/BadgeListItem.vue | 67 ++++++++ src/components/general/Toolbar.vue | 9 +- src/components/home/OrgList.vue | 50 +++--- src/components/home/UserDetails.vue | 2 - src/components/org/ContributorItem.vue | 121 +++++++++----- src/components/org/Org.vue | 22 +-- src/components/org/OrgContributors.vue | 151 ++++++++++++++++++ src/components/org/OrgDetails.vue | 2 +- src/components/org/OrgRepos.vue | 14 +- src/components/org/RepoContributors.vue | 47 +++--- src/router.js | 103 ++++++------ src/store.js | 110 ++++++++++++- src/views/AuthView.vue | 9 +- src/views/BadgeView.vue | 55 +++++++ src/views/HomeView.vue | 53 +++--- 27 files changed, 806 insertions(+), 190 deletions(-) create mode 100644 public/assets/badges/predefined/babysteps.png create mode 100644 public/assets/badges/special/topcommits.png create mode 100644 public/assets/badges/special/topmonthcommits.png create mode 100644 public/assets/badges/special/topweekcommits.png create mode 100644 public/assets/badges/special/topyearcommits.png create mode 100644 src/assets/badges/predefined/badges.json create mode 100644 src/assets/badges/predefined/predefinedBadges.js create mode 100644 src/assets/badges/special/badges.json create mode 100644 src/assets/badges/special/specialBadges.js create mode 100644 src/components/badgeList/BadgeListItem.vue create mode 100644 src/components/org/OrgContributors.vue create mode 100644 src/views/BadgeView.vue diff --git a/.gitignore b/.gitignore index f655426..4d8dd43 100644 --- a/.gitignore +++ b/.gitignore @@ -91,3 +91,6 @@ backend/__pycache__/ # Config files .prettierrc.js + +# Visual Studio +/.vs diff --git a/public/assets/badges/predefined/babysteps.png b/public/assets/badges/predefined/babysteps.png new file mode 100644 index 0000000000000000000000000000000000000000..a3beecf95816b08881fd8077b84b8ae3dcd43a95 GIT binary patch literal 2468 zcmeAS@N?(olHy`uVBq!ia0y~yV5|n>pB!vJkp#DSHy9W=vproLLn`LHy}L1YvAc-d z#fb+Cq78VqJA`hSyK(bcha5+ND~FyHC4?@R%lM<@yyq0#2}+gC_CM!ci<0MV$bb9k z=l9Idclph~-~01@{{HQ9HMQ08dAoMLekS$FTI>Fw?9Yx2auaSavvk-xG>}OhxNKy> z_u=hR_T$TWtmg0d`S|&@$*;e!-+C?g{n^s!*T0JHR(<+c<9~n7r@tmW`@SzbZo$Bq z#4n)mjeLsjI3trAZ=b)Ush#1IT$wv(Z=KcL|J`)Se7VOAlz0Uc1QIgr94GjJW`8o{ zd$(+Mecj~;77X`ikr_C!Ks{L4(2(5xSiP;bzlZhyws|HXv-xX^eWvsDF@F%HPI&zP zvGePbUw^YDWy&x6n*V>X>|h~-TpJZ!9td*z9{-*h{yQs^YAR2?F1dU*)|?mUa)Tps z3Jz}=naHJpzGsQK7Uj-Xyu2sRU((IKu=v!1&4Qnw`NrOQ{`KwMWSIu0jqDr()eQ{f zQq7MU7#Fi0U%uy@@Z$%;Z5NmKL{885`>8ioI;lXWL0^ypqk&E`u;3FY$SJ5fb@tPP zAD!Rp9zC0)_+InBfAiztK3Q|Al-Bj;*UvY*|96Jb1lv>@pjDcSZwKf3{k+pV%Vun%l7ISu{@G!f zs`KLn!^hm$C;z{f1zNG!Uvjfv{k!12b&7w#NU&3s)qyc|;DLq1ffWZo3Ik(aKzj4N z>d(;H!M>>Y)PLi@bLB5B6*i|*@Ff(~ocQr+isSQ76TWwTfA@Q5Kd?C5XG?A|0@Vj9 zP1ug}_el9mcG?-esJUHLwD$JQ>ydTugZFu}9shohO2On%2h1jCHIuIew=MVIbM901 ze50OyZGY}9ze6Pp8V-I`G(WBUOg%3B=U!>{d}=uyXzquzn##|vPk()F^7rSzC(b^0 z@NUhM*;J~U4J_V0yEa>$ZPRJ<>l4o3J$rorOG7@g+b+n}^M8g#+jh%Iirn}DY<)3! My85}Sb4q9e01H8ePyhe` literal 0 HcmV?d00001 diff --git a/public/assets/badges/special/topcommits.png b/public/assets/badges/special/topcommits.png new file mode 100644 index 0000000000000000000000000000000000000000..bfb752f922e316040ab9e1a1942d701d8b6acdd3 GIT binary patch literal 29228 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� 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 literal 0 HcmV?d00001 diff --git a/public/assets/badges/special/topmonthcommits.png b/public/assets/badges/special/topmonthcommits.png new file mode 100644 index 0000000000000000000000000000000000000000..bdf899e8ac58c223dd4efc5a8c0a545dba8be595 GIT binary patch literal 1185 zcmeAS@N?(olHy`uVBq!ia0vp^4?&oN8Ax*GDtQ2@2?0JKuK)l4KT&diP0D6}{h+gT zmp5hYyx4xN$f@*P)0O)x9w&Mv`)KhjgR_q{oNn>$*p{`oE3|)q?NJY9?;A7jwwAV+rkAG#rRB!v zTPj;$n|%9Z*SYzzOYP(ww^!^jm$ke#_uk&}!`lk>p1<0d&A`BX#?!?yq+-t7yV=pV z3?v#7??$~zc(7sGWakOZJTkxj|G#@pr9yC88tbfO7oPvzpl@_0SMz;VWOcE#3j&m^ zJUh#7_Ed#8zR~|?eLE$vZQrletpbXNw)|Z7cKz8qs<~!f(Jiv`Te&xKnL97mKX#;` z=Jn=}0X)6?q!->`ygjcqccZnEOGNm?q8a<*_g9JSTh=Y1*S+-YuS{=CwXy>%1pfvr zdo(@v>Qg_paHB}JR#ryOlNm2E?rUaAboH^!QJ;mQr7cC}E*%@}4z*_b z{19EWaHGX^v)4<{9^RPY9z6NrwY?hc-$Nd*jR~?4*S4w6FgZHo#*>Q5Sq*-zo6foM z^gere=#KRQ{e^dA1(jT8cwTAkj9c0gyVL6Nj2m`RQ7d~_*cL6dcd?z#I?Lt%UqulW znX;!wJ<+c}&R#gZ+By2K;;qE+1hKSwUPY&tQX#jUt-Z{N8}!dq=zrA?Nq*F@P3Yw| z@yp8c+cU2%oEWh$tnI>%k6~@S6|UT73l++87iDk$ zaNXrgUe2Vuza6so++R?$aGKtnmewz+_AMZ#y#c+Q{Z2kr3+E`rouc|d+yy`McF*_9 zSfuFEA&?l`x-79>0O)*<_0c=31ou7{NMl~D!*eD5x?K@RuNlZ_pfZrW;4`69S6;p? zopbZ>Eu}4g_F8adWC%>R11<-*Qp3+s*~SZ`a= zu_3wY(*c!`?y4L1XEw{p$F+XogBUFQs@n-{$s`NbFH0aR{Lky79P0# zS;r*L>*~zwlg`V7yy%zlM=o5|ByRo5lFfU%Ma^{d!~Ay&{tA2BE|4hO@@ZeTsMx&f z`=+Ju_n24Cy?M8KWrgwAzkN{`_I?iOKKmhmzxu6ZU%Yi*{cB$p`1RPL$-7H{X*hFX zW=4gWShat8Y5cqG%eS0gSU9^fHDbBtPW|m!k*y0KKD+m7)xJBjw%kwoZn$@BSm$JE zV#ED(MuGC2-b-Rd8E;;dozjiz2oO)<4xA|+iCA6Eqm2@_hRr`IiRb97fMLY pn>9^wj%n?)5+4CU1h9O|e_^-j1o7lEO~5jT!PC{xWt~$(698SKEpGq- literal 0 HcmV?d00001 diff --git a/public/assets/badges/special/topweekcommits.png b/public/assets/badges/special/topweekcommits.png new file mode 100644 index 0000000000000000000000000000000000000000..833294363e961758f7423e3d1403d22a3b0462dc GIT binary patch literal 25221 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 literal 0 HcmV?d00001 diff --git a/public/assets/badges/special/topyearcommits.png b/public/assets/badges/special/topyearcommits.png new file mode 100644 index 0000000000000000000000000000000000000000..d8109ed0c03df22bb6614b1bf571d857d88f6a11 GIT binary patch literal 1998 zcmV;<2Qm1GP)lqv1@IXtH8nMlkB>vH^z`)k8!1{^T5WA@cXxNy6d?UCIvgAv^>KFO zt*=-M3(3jJyu7?TJUnFy3I6~F)*2>p2nhCUa^I zO?P(u|9|M%ys74uPzxkY6W{xTAG|2!zLNB5(l&YZiXaGrAnYLg!YG+8hdu@#)Sld2}IK44l91Vb> zw`IB<`XEF5Aw&Cd*|5aea@epX4l0~9+!n6a$k0y6(0<6!e#p>%$k2Y=H{A1tDJZuL zVNg-uu0?`Z#}Oahnu5B8YOAs4>6RMjs^)qJBt!clLyM`G>i2{#(eNPpSG^RPE}I$( zLQFg;I(5_O7P%o$M;a>`+RuwI^bxii)+K~s=nq9kK7>XHA2D6-^msC$3d{Y9z_+p( z8fT`$B#YbX8-W@H9MKUDA{DTcqJUlfNLnGIQ^-$mh8TyCA;o&g;GZGDp z-$q0BPY8{(6FA(oj1(LUxLsBdMT9+}k<{~o;&b5cNQP!u%dq0Sp@nsb^MM-%3n}I^ zG(yCad=Tk^Veob_vo`x=8-)fY`v^H%HXo`RicR2JK!s)us4cih5V2Fni#ngu5B0Hc0iZk>RU7s6j3=I?$e!C)L*>))x z<&716a|4Y#t~4169m4O*y4=z|FVPUuL(>3yVv!8V&~n47NbjAD)P~cB_+|Zk7zWK9 zfgiu$&-42{t>Hxct{r|EVAwDSP!Yd(Hs|T2HpJ{yb7@$bhYZP(40Ra>{G5(*L2kIQ zWN5^OEIazMGLW@lP~_)yoDUMgQfb-H;PC7i|IPRp6mL%%itpjb4WSrsa6U*4OAs0# zmaRm@m^W4}LyTlYxs;@_sxbu3ZPyKJ&KtU4hpG+v6qL`;+K?0dgnY2aFg%83oS32C z?#&{4{3H$;aJk_0sn<|hKdhrEs1Zc{TlmFECn+Cnslz(zfM6I@V#CyKWJredh6?*( zP7PJpA&-e}(7&fzgqTPlgr!Y2*QMeRL#?4dn(asQri?%DFBz%NqMH~0L|i1?>`uYt zNEl+MHaz4pF=&=0v`@L-tQEjCo*CK~Fg!#o*M9olcGtPaC9 z4cD9VPB2tZhXXdKI9tzf^8#2eCOFM&#(#W5>VTDRjR~nOaZs_UVP`{SOf;hFji7-h zq;A(S6fW0RH&jRy=7$^T^0Y;UWcYFnVNg-|!Dyy1tcGMqcpB%W$`Ojv4ozRS2vP~5zL z&!`v7#E_2^&J!AI=ezot$kGr`e z3_rCPuru5!5PJT-;e?^X4ZfMLq8L=!uf}xPh!OAEQI*h3?Ic}=eZP!==9&2}EPg@B^7>O*yEMKF3mK9j8JaW{ zV=+TR7KB-D)+r5*CyH?LFE8eGUowo48G5G~ssT@S7f-0lN&)R;C{q5Ma2z%?y~86J zlHtoVoEbM1H|tDei1%o&J!cs2(pfXLr*jNfOh|+>7sSWydCwijM-#?(T2I*T5#!+< z{kBscXdnomK!#*UhB+`?yuxa!{}}kE!@qK4mH+?%07*qoM6N<$f;wcHCIA2c literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html index 5de8c81..0cc3873 100644 --- a/public/index.html +++ b/public/index.html @@ -4,7 +4,7 @@ - + CodeBadge + = badge.min_commits && commits <= badge.max_commits) { + url = badgeURLPrefix + badge.badge; + tooltip = badge.tooltip; + } + }); + return {url: url, tooltip: tooltip}; + } + + getBadgeFromName(name) { + let data = {}; + json.forEach(function(badge) { + if(badge.name === name) + { + data = badge; + } + }); + return data; + } + + getBadgeURLPrefix() + { + return badgeURLPrefix; + } + + getAllBadgeIDs() + { + let keys = []; + for(let i in json) + keys.push(json[i].name); + return keys; + } +} diff --git a/src/assets/badges/special/badges.json b/src/assets/badges/special/badges.json new file mode 100644 index 0000000..3eaea63 --- /dev/null +++ b/src/assets/badges/special/badges.json @@ -0,0 +1,34 @@ +{ + "topContributor": { + "badge": "topcommits.png", + "tooltip": "Awarded to the top contributor of your organization!", + "information": { + "title": "Top Contributor of All Time", + "description": "Assigned to the person who has the highest commits in your organization!" + } + }, + "topWeekContributor": { + "badge": "topweekcommits.png", + "tooltip": "Awarded to the one with with highest commits last week!", + "information": { + "title": "Top Contributor this Week", + "description": "Assigned to the person who had the highest commits last week in your organization!" + } + }, + "topMonthContributor": { + "badge": "topmonthcommits.png", + "tooltip": "Awarded to the one with with highest commits this month!", + "information": { + "title": "Top Contributor this Month", + "description": "Assigned to the person who has the highest commits this month in your organization!" + } + }, + "topYearContributor": { + "badge": "topyearcommits.png", + "tooltip": "Awarded to the one with with highest commits this year!", + "information": { + "title": "Top Contributor this Year", + "description": "Assigned to the person who has the highest commits this year in your organization!" + } + } +} \ No newline at end of file diff --git a/src/assets/badges/special/specialBadges.js b/src/assets/badges/special/specialBadges.js new file mode 100644 index 0000000..f8a3a45 --- /dev/null +++ b/src/assets/badges/special/specialBadges.js @@ -0,0 +1,83 @@ +import store from "../../../store"; +import rawdata from "./badges"; + +const json = JSON.parse(JSON.stringify(rawdata)); +const badgeURLPrefix = "/assets/badges/special/"; + +export default class SpecialBadges { + getBadges(name, orgName) { + let badges = []; + + const topCommits = store.getters.getTopCommits(orgName); + const topWeekCommits = store.getters.getTopWeekCommits(orgName); + const topMonthCommits = store.getters.getTopMonthCommits(orgName); + const topYearCommits = store.getters.getTopYearCommits(orgName); + + //Make sure to sort in descending order of priority of display + + if (topCommits[0].name === name) { + badges.push({ + url: badgeURLPrefix + json["topContributor"].badge, + tooltip: json["topContributor"].tooltip + }); + } + + if (topWeekCommits[0].name === name) { + if (topWeekCommits[0].weeks[topWeekCommits[0].weeks.length - 1].c > 0) { + badges.push({ + url: badgeURLPrefix + json["topWeekContributor"].badge, + tooltip: json["topWeekContributor"].tooltip + }); + } + } + + if (topMonthCommits[0].name === name) { + let actuallyHasCommited = false; + for (let week in topMonthCommits[0].weeks) { + if (week.c > 0) { + actuallyHasCommited = true; + break; + } + } + if (topMonthCommits[0].weeks.length < 4) actuallyHasCommited = false; + if (actuallyHasCommited) + badges.push({ + url: badgeURLPrefix + json["topMonthContributor"].badge, + tooltip: json["topMonthContributor"].tooltip + }); + } + + if (topYearCommits[0].name === name) { + let actuallyHasCommited = false; + for (let week in topYearCommits[0].weeks) { + if (week.c > 0) { + actuallyHasCommited = true; + break; + } + } + if (topYearCommits[0].weeks.length < 52) actuallyHasCommited = false; + if (actuallyHasCommited) + badges.push({ + url: badgeURLPrefix + json["topYearContributor"].badge, + tooltip: json["topYearContributor"].tooltip + }); + } + + return badges; + } + + getBadgeFromName(name) { + return json[name]; + } + + getBadgePrefixURL() { + return badgeURLPrefix; + } + + getAllBadgeIDs() { + let keys = []; + for(let key in json) + keys.push(key); + return keys; + } +} diff --git a/src/components/auth/Login.vue b/src/components/auth/Login.vue index 818c837..20413cc 100644 --- a/src/components/auth/Login.vue +++ b/src/components/auth/Login.vue @@ -35,7 +35,6 @@ export default { const code = window.location.href.match(/\?code=(.*)/); if (code) { this.isLoading = true; - console.log(this.isLoading); axios({ method: `post`, url: `${AxiosHelper.gatekeeperUrl}?client_id=${ diff --git a/src/components/badgeList/BadgeListItem.vue b/src/components/badgeList/BadgeListItem.vue new file mode 100644 index 0000000..9f17945 --- /dev/null +++ b/src/components/badgeList/BadgeListItem.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/src/components/general/Toolbar.vue b/src/components/general/Toolbar.vue index cf40562..9461e4c 100644 --- a/src/components/general/Toolbar.vue +++ b/src/components/general/Toolbar.vue @@ -1,6 +1,6 @@