Navigate between open issues on the Jira current sprint with y (up) and n (down). Add shift to jump to first or last.
当前为
// ==UserScript==
// @name Navigate Jira Issues on Swimlanes with y & n
// @namespace http://tedmor.in/
// @version 0.1
// @description Navigate between open issues on the Jira current sprint with y (up) and n (down). Add shift to jump to first or last.
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js
// @author Ted Morin
// @match https://*.atlassian.net/secure/*
// @grant none
// ==/UserScript==
// jshint asi:true
(function() {
'use strict';
let issueNumber = 0
/* Open issues */
function openIssues() {
return $('.ghx-swimlane .ghx-swimlane-header') // Get all headers
.filter((i, el) => !$(el).hasClass('ghx-done')) // Filter out the closed ones
.map((i, el) => $(el).parent())
}
/* Return the open issue at given index */
function issueAt(index) {
return openIssues()[index] // Return the parent, which is the actual swimlane element
}
/* Scroll to an issue by index */
function scrollToIssue(index) {
console.log('Scrolling to', index)
$('#ghx-pool').animate({scrollTop: issueAt(index).offset().top - $('.ghx-first').offset().top}, 200)
}
$(document).keypress(function(e) {
switch (e.which) {
case 110: // n
if (issueAt(issueNumber + 1)) {
issueNumber += 1
scrollToIssue(issueNumber)
}
break;
case 78: // N
issueNumber = openIssues().length - 1
break;
case 121: // y
if (issueAt(issueNumber - 1)) {
issueNumber -= 1
}
break;
case 89: // Y
issueNumber = 0
break;
}
scrollToIssue(issueNumber)
})
})();