Skip to content

Commit

Permalink
Bug 1089737 - Create shortcuts for next/previous job navigation
Browse files Browse the repository at this point in the history
  • Loading branch information
rakesh committed Jan 4, 2015
1 parent d939f0a commit 712de15
Show file tree
Hide file tree
Showing 3 changed files with 179 additions and 2 deletions.
13 changes: 13 additions & 0 deletions ui/js/controllers/main.js
Expand Up @@ -52,6 +52,7 @@ treeherder.controller('MainCtrl', [
// test for key modifiers to allow browser shortcuts eg.
// console, new/private browsing window, history, print
if (!ev.metaKey && !ev.shiftKey && !ev.ctrlKey) {

if (ev.keyCode === 73) {
// toggle display in-progress jobs(pending/running), key:i
$scope.toggleInProgress();
Expand All @@ -68,6 +69,18 @@ treeherder.controller('MainCtrl', [
thEvents.selectPreviousUnclassifiedFailure
);

}else if(ev.keyCode == 39){
// Highlight next job, key: right arrow
$rootScope.$emit(
thEvents.selectNextJob
);

}else if(ev.keyCode == 37){
// Highlight next job, key: left arrow
$rootScope.$emit(
thEvents.selectPreviousJob
);

} else if (ev.keyCode === 32) {
// If a job is selected add it otherwise
// let the browser handle the spacebar
Expand Down
164 changes: 162 additions & 2 deletions ui/js/directives/clonejobs.js
Expand Up @@ -92,6 +92,96 @@ treeherder.directive('thCloneJobs', [
}
});

$rootScope.$on(
thEvents.selectNextJob, function(ev){

var jobMap = ThResultSetModel.getJobMap($rootScope.repoName);
var lastJobSelected = ThResultSetModel.getSelectedJob($rootScope.repoName);
var el, key, job, step;
var step = 'nextElementSibling';

if(lastJobSelected.el == undefined || lastJobSelected.el[0] == undefined ){

var currentElement = document.getElementsByClassName('result-set')[0];
el = traceJob($(currentElement),step,'job-btn');

}else{

var currentElement = lastJobSelected.el[0];

// Parsing for parent which satisy parameter mentioned in variable step
while(!currentElement[step] || $(currentElement[step]).css('display') == 'none'){

if(!currentElement[step]){
currentElement = traceParent($(currentElement), 1)[0];
}else{
currentElement = currentElement[step];
}

}

// look through parent's sibling for element with class job-row
el = traceJob($(currentElement[step]),step,'job-btn');

}




if(el != null){

key = el.attr(jobKeyAttr);
job = jobMap[key].job_obj;
selectJob(job);

}
});

$rootScope.$on(
thEvents.selectPreviousJob, function(ev){

var jobMap = ThResultSetModel.getJobMap($rootScope.repoName);
var lastJobSelected = ThResultSetModel.getSelectedJob($rootScope.repoName);
var el, key, job, jobsList, i, step, currentElement;

step = 'previousElementSibling';
el = null;

if(lastJobSelected.el === undefined || lastJobSelected.el[0] === undefined){

var resultsets = document.getElementsByClassName('result-set');
currentElement = resultsets[resultsets.length - 1];
el = traceJob($(currentElement),step,'job-btn');

}else{

currentElement = lastJobSelected.el[0];

while(!currentElement[step] ){
currentElement = traceParent($(currentElement), 1)[0];
}

el = traceJob($(currentElement[step]),step,'job-btn');

}

while(el == null){

currentElement = traceParent($(currentElement),1)[0];
if(currentElement === undefined)
break;
el = traceJob($(currentElement[step]),step,'job-btn');

}
if(el != null){
key = el.attr(jobKeyAttr);
job = jobMap[key].job_obj;
selectJob(job);
}



});
$rootScope.$on(
thEvents.selectPreviousUnclassifiedFailure, function(ev){

Expand Down Expand Up @@ -319,7 +409,7 @@ treeherder.directive('thCloneJobs', [

var addRevisions = function(resultset, element){
// $log.debug("addRevisions", resultset, element);

if(resultset.revisions.length > 0){

var revisionInterpolator = thCloneHtml.get('revisionsClone').interpolator;
Expand Down Expand Up @@ -782,7 +872,7 @@ treeherder.directive('thCloneJobs', [
if(platforms === undefined){
continue;
}

var p;
for(p = 0; p < platforms.length; p++){

Expand Down Expand Up @@ -1069,6 +1159,76 @@ treeherder.directive('thCloneJobs', [
tableEl.append(row);
}
};

var traceParent = function(el, level){

for(var i=0; i<level; i++){
el = el.parent();
}

return el;
}

var traceJob = function(elem, step, clss){

var elemsList, jobFound, jobElem, reverseList, tempList, jobsList;

elemsList = [elem];
jobFound = false;
jobElem = null;
reverseList = false;

while(!jobFound && elemsList.length>0){

tempList = [];

angular.forEach(elemsList,function(tempElem){

if(!jobFound){

if(tempElem.hasClass(clss) && tempElem.css('display')!='none'){

jobFound = true;
jobElem = $(tempElem);

}else{

if(tempElem.children().length>0){

angular.forEach(tempElem.children(), function(tempChild){

if($(tempChild).hasClass('platform-group')){

jobsList = $($(tempChild).children()[1]).children();
for(var i=0; i<jobsList.length; i++){
tempList.push($(jobsList[i]));
}

reverseList = true;

}else
tempList.push($(tempChild));

})
}
}
}
})

elemsList = []

//reverseList for previous obj
if(reverseList && step=='previousElementSibling'){

elemsList = tempList.reverse();
reverseList = false;

}else{
elemsList = tempList;
}
}
return jobElem;
}

var linker = function(scope, element, attrs){

Expand Down
4 changes: 4 additions & 0 deletions ui/js/providers.js
Expand Up @@ -229,6 +229,10 @@ treeherder.provider('thEvents', function() {

selectPreviousUnclassifiedFailure: "previous-unclassified-failure-EVT",

selectNextJob: "next-job-EVT",

selectPreviousJob: "previous-job-EVT",

addRelatedBug: "add-related-bug-EVT",

saveClassification: "save-classification-EVT",
Expand Down

0 comments on commit 712de15

Please sign in to comment.