Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a list of stale issues #217

Merged
merged 4 commits into from
Jul 9, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 99 additions & 4 deletions dist/community-toolbox.js
Original file line number Diff line number Diff line change
Expand Up @@ -81689,9 +81689,21 @@ function insertIssue(issue, el) {
}


function insertStale(issues, selector) {
let issuesLen = issues.length;
$('#stale-head').html('Stale Issues ('+issuesLen+'+)');
issues.forEach(function (issue) {
insertIssue(issue, selector);
})
}




module.exports = {
generateIssueHtml: generateIssueHtml,
insertIssue: insertIssue,
insertStale: insertStale
};
},{"moment":271}],402:[function(require,module,exports){
var insertRecentContributorsExec = false;
Expand Down Expand Up @@ -81986,6 +81998,7 @@ CommunityToolbox = function CommunityToolbox(org, repo) {
var recentContribsUtil = require('../utils/recentContribsUtil')
var autoCompleteUtil = require('../utils/autocomplete')
var ftoAuthorsUI = require('../UI/ftoAuthorsUI')
var issuesUtil = require('../utils/staleIssuesUtil')

const requestP = require('request-promise')
var parse = require('parse-link-header')
Expand Down Expand Up @@ -82177,6 +82190,13 @@ CommunityToolbox = function CommunityToolbox(org, repo) {
}


function showStaleIssues(org, repo) {
return issuesUtil.getStaleIssues(org, repo).then((data)=>{
if(data!=null && data!=undefined) {
issuesUI.insertStale(data, '.stale');
}
})
}



Expand All @@ -82193,20 +82213,21 @@ CommunityToolbox = function CommunityToolbox(org, repo) {
getIssuesForRepo: getIssuesForRepo,
getIssuesForOrg: getIssuesForOrg,
showRecentContributors: showRecentContributors,
getCommitsForRepo: getCommitsForRepo, // storeAllContributorsInDatabase: storeAllContributorsInDatabase,
getCommitsForRepo: getCommitsForRepo,
showAllContributors: showAllContributors,
showRepoContributors: showRepoContributors,
displayIssuesForRepo: displayIssuesForRepo,
initialize: initialize,
dropdownInit: dropdownInit,
ftoAuthorsUI: ftoAuthorsUI
ftoAuthorsUI: ftoAuthorsUI,
showStaleIssues: showStaleIssues
}

}

module.exports = CommunityToolbox;

},{"../UI/contributorsUI":399,"../UI/ftoAuthorsUI":400,"../UI/issuesUI":401,"../UI/recentContributorsUI":402,"../models/crud":403,"../models/utils":405,"../utils/autocomplete":408,"../utils/contributorsUtil":409,"../utils/fetchRepoUtil":410,"../utils/recentContribsUtil":411,"./chart":406,"github-api-simple":151,"parse-link-header":278,"request-promise":323}],408:[function(require,module,exports){
},{"../UI/contributorsUI":399,"../UI/ftoAuthorsUI":400,"../UI/issuesUI":401,"../UI/recentContributorsUI":402,"../models/crud":403,"../models/utils":405,"../utils/autocomplete":408,"../utils/contributorsUtil":409,"../utils/fetchRepoUtil":410,"../utils/recentContribsUtil":411,"../utils/staleIssuesUtil":412,"./chart":406,"github-api-simple":151,"parse-link-header":278,"request-promise":323}],408:[function(require,module,exports){
function generateAutocomplete(repos) {
let repoAlreadySelected = urlHash().getUrlHashParameter('r');

Expand Down Expand Up @@ -82661,4 +82682,78 @@ module.exports = {
within_this_week: within_this_week
}

},{"../models/utils":405,"./fetchRepoUtil":410}]},{},[407]);
},{"../models/utils":405,"./fetchRepoUtil":410}],412:[function(require,module,exports){
let model_utils = require('../models/utils')

function getOrgWideIssues(org) {
let totalPromises = [];
let staleIssues = [];
let currentTime = (new Date).getTime();
return model_utils.getItem("staleIssues-time").then((time) => {
if(time!=undefined && time!=null && (time-currentTime)/1000 >= 86400) {
return Promise.all([model_utils.deleteItem("staleIssues"), model_utils.deleteItem("staleIssues-time")])
.then(()=> {
return true;
})
}
})
.then(() => {
return model_utils.getItem("staleIssues").then((issues) => {
let pages = 5; // we take 2 to stay under API limit
if(issues!=undefined && issues!=null) {
return issues;
}

for(let i=1;i<=pages;i++) {
let curr = fetch(`https://api.github.com/search/issues?q=is%3Aopen+org%3A${org}+page%3A${i}`)
.then((data) => {
if(data.status=='200') {
return data.json();
}
})
.then(function (data) {
if(data!=null && data!=undefined) {
data.items.map(function mappingToIssues(issue, index) {
let dateLastUpdated = new Date(`${issue.updated_at}`);
let lastDate = dateLastUpdated.getTime();
let today = (new Date).getTime();
if(Math.ceil(Math.abs(today - lastDate) / (1000*3600*24)) > 10 ) {
staleIssues.push(issue);
}
})
}
})


totalPromises.push(curr);
}

return Promise.all(totalPromises).then(()=> {
let now = (new Date).getTime();
model_utils.setItem("staleIssues", staleIssues);
model_utils.setItem("staleIssues-time", now);
return staleIssues;
})
})
})
}



function getStaleIssues(org, repo) {
return getOrgWideIssues(org, repo).then((issues) => {
if(issues!=undefined && issues!=null) {
return issues;
}
})
}





module.exports = {
getOrgWideIssues: getOrgWideIssues,
getStaleIssues: getStaleIssues
}
},{"../models/utils":405}]},{},[407]);
12 changes: 12 additions & 0 deletions examples/demo.css
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,18 @@ h1, h2, .section h3 {
cursor: pointer;
background-color: rgba(221, 221, 255, 0.226);
}
.stale-container {
padding: 10px;
background-color: rgba(221, 221, 221, 0.493);
border-radius: 10px;

}

.stale {
overflow: scroll;
height: 1000px;
}


.fto-authors {
padding: 19px;
Expand Down
20 changes: 17 additions & 3 deletions examples/demo.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,17 @@ document.addEventListener('DOMContentLoaded', function () {
return false;
});
/*Scroll to top when arrow up clicked END*/


$('.stale').hover((e) => {
e.preventDefault();
let height = $('.stale').prop("scrollHeight")
let top = $('.stale').prop("scrollTop")
if(top==0) {
$('.stale').animate({ scrollTop: height*0.05 }, 'slow')
}
}, (e) => {
e.preventDefault();
})

var toolbox;

Expand Down Expand Up @@ -48,7 +58,7 @@ document.addEventListener('DOMContentLoaded', function () {
})

if (repo === 'all') {

toolbox.getIssuesForOrg(org, { qs: { labels: ftoLabel } })
.then(displayIssuesAndFtoAuthors('.first-timers-only'));

Expand All @@ -62,11 +72,13 @@ document.addEventListener('DOMContentLoaded', function () {
// Makes the toggle contributors list button click
d.click();
toolbox.dropdownInit();
// Fetch stale issues
toolbox.showStaleIssues(org, repo);
}
})

} else {

toolbox.api.Issues
.getIssuesForRepo(org, repo, { qs: { labels: ftoLabel } })
.then(displayIssuesAndFtoAuthors('.first-timers-only'));
Expand All @@ -82,6 +94,8 @@ document.addEventListener('DOMContentLoaded', function () {
// Makes the toggle contributors list button click
d.click();
toolbox.dropdownInit();
// Fetch stale issues
toolbox.showStaleIssues(org, repo);
}
})
}
Expand Down
8 changes: 8 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,14 @@ <h2>FTO Authors</h2>
<p>These people took some time out of their busy schedule to help in welcoming newcomers by creating FTO issues: </p>

<div class="fto-authors"></div>

<h2 id="stale-head">Stale Issues</h2>

<p>Here are some stale issues across all of our repositories which might utilize your help. Once you've completed the <span class="issue-label-for-newcomer">first-timer-only</span> and/or <span id="help-wanted-label">help-wanted</span> issues, you can take a look here to help someone else. Also, issue labels are always helpful while deciding to work on any issue.</p>
<p class="text-center"><i>( this list contains issues which haven't been updated for the past 10 days )</i></p>
<div class="stale-container">
<div class="stale"></div>
</div>


<h2 class="recent-contributors-head">Recent Contributors</h2>
Expand Down
12 changes: 12 additions & 0 deletions src/UI/issuesUI.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,19 @@ function insertIssue(issue, el) {
}


function insertStale(issues, selector) {
let issuesLen = issues.length;
$('#stale-head').html('Stale Issues ('+issuesLen+'+)');
issues.forEach(function (issue) {
insertIssue(issue, selector);
})
}




module.exports = {
generateIssueHtml: generateIssueHtml,
insertIssue: insertIssue,
insertStale: insertStale
};
13 changes: 11 additions & 2 deletions src/scripts/community-toolbox.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ CommunityToolbox = function CommunityToolbox(org, repo) {
var recentContribsUtil = require('../utils/recentContribsUtil')
var autoCompleteUtil = require('../utils/autocomplete')
var ftoAuthorsUI = require('../UI/ftoAuthorsUI')
var issuesUtil = require('../utils/staleIssuesUtil')

const requestP = require('request-promise')
var parse = require('parse-link-header')
Expand Down Expand Up @@ -206,6 +207,13 @@ CommunityToolbox = function CommunityToolbox(org, repo) {
}


function showStaleIssues(org, repo) {
return issuesUtil.getStaleIssues(org, repo).then((data)=>{
if(data!=null && data!=undefined) {
issuesUI.insertStale(data, '.stale');
}
})
}



Expand All @@ -222,13 +230,14 @@ CommunityToolbox = function CommunityToolbox(org, repo) {
getIssuesForRepo: getIssuesForRepo,
getIssuesForOrg: getIssuesForOrg,
showRecentContributors: showRecentContributors,
getCommitsForRepo: getCommitsForRepo, // storeAllContributorsInDatabase: storeAllContributorsInDatabase,
getCommitsForRepo: getCommitsForRepo,
showAllContributors: showAllContributors,
showRepoContributors: showRepoContributors,
displayIssuesForRepo: displayIssuesForRepo,
initialize: initialize,
dropdownInit: dropdownInit,
ftoAuthorsUI: ftoAuthorsUI
ftoAuthorsUI: ftoAuthorsUI,
showStaleIssues: showStaleIssues
}

}
Expand Down
3 changes: 2 additions & 1 deletion src/scripts/configure.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ document.addEventListener('DOMContentLoaded', (e)=> {

$('#newcomer-issues-link').attr("href", `https://github.com/${data['org']}/${data['default-repository']}/labels/${data['issue-label-for-newcomer']}`)
$('#help-wanted-issues').attr("href", `https://github.com/${data['org']}/${data['default-repository']}/labels/${data['help-wanted-issue-label']}`)

$('#help-wanted-label').html(`${data['help-wanted-issue-label']}`);

$('.guidelines-link').each(function() {
$(this).attr("href", `${data['newcomer-welcoming-guidelines-page-link']}`)
})
Expand Down
73 changes: 73 additions & 0 deletions src/utils/staleIssuesUtil.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
let model_utils = require('../models/utils')

function getOrgWideIssues(org) {
let totalPromises = [];
let staleIssues = [];
let currentTime = (new Date).getTime();
return model_utils.getItem("staleIssues-time").then((time) => {
if(time!=undefined && time!=null && (time-currentTime)/1000 >= 86400) {
return Promise.all([model_utils.deleteItem("staleIssues"), model_utils.deleteItem("staleIssues-time")])
.then(()=> {
return true;
})
}
})
.then(() => {
return model_utils.getItem("staleIssues").then((issues) => {
let pages = 5; // we take 2 to stay under API limit
if(issues!=undefined && issues!=null) {
return issues;
}

for(let i=1;i<=pages;i++) {
let curr = fetch(`https://api.github.com/search/issues?q=is%3Aopen+org%3A${org}+page%3A${i}`)
.then((data) => {
if(data.status=='200') {
return data.json();
}
})
.then(function (data) {
if(data!=null && data!=undefined) {
data.items.map(function mappingToIssues(issue, index) {
let dateLastUpdated = new Date(`${issue.updated_at}`);
let lastDate = dateLastUpdated.getTime();
let today = (new Date).getTime();
if(Math.ceil(Math.abs(today - lastDate) / (1000*3600*24)) > 10 ) {
staleIssues.push(issue);
}
})
}
})


totalPromises.push(curr);
}

return Promise.all(totalPromises).then(()=> {
let now = (new Date).getTime();
model_utils.setItem("staleIssues", staleIssues);
model_utils.setItem("staleIssues-time", now);
return staleIssues;
})
})
})
}



function getStaleIssues(org, repo) {
return getOrgWideIssues(org, repo).then((issues) => {
if(issues!=undefined && issues!=null) {
return issues;
}
})
}





module.exports = {
getOrgWideIssues: getOrgWideIssues,
getStaleIssues: getStaleIssues
}