NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name BitBucket Rating
// @namespace http://monotech.no/
// @version 0.3
// @description Adding rating to BitBucket issues list: sorting by bracketed [number] in issues' Title field
// @match https://bitbucket.org/*
// @copyright 2014, Monotech AS
// ==/UserScript==
// a function that loads jQuery and calls a callback function when jQuery has finished loading
function addJQuery(callback) {
var script = document.createElement('script');
script.setAttribute('src', '//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js');
script.addEventListener('load', function() {
var script = document.createElement('script');
script.textContent = 'window.jQ=jQuery.noConflict(true);(' + callback.toString() + ')();';
document.body.appendChild(script);
}, false);
document.body.appendChild(script);
}
// the guts of this userscript
function main() {
// jQ replaces $ to avoid conflicts.
function getCellValue(row, index){ return $(row).children('td').eq(index).html() }
function comparer(index) {
return function(a, b) {
var valA = getCellValue(a, index), valB = getCellValue(b, index)
var subA = valA.substring(valA.indexOf('[')+1, valA.indexOf(']'));
var subB = valB.substring(valB.indexOf('[')+1, valB.indexOf(']'));
if (jQ.isNumeric(subA) && !jQ.isNumeric(subB))
return -1;
if (!jQ.isNumeric(subA) && jQ.isNumeric(subB))
return 1;
return jQ.isNumeric(subA) && jQ.isNumeric(subB) ? subA - subB : valA.localeCompare(valB);
}
}
var listhref = jQ("#repo-issues-link").attr("href");
jQ("#repo-issues-link").attr("href", listhref+"&sort=-priority");
if (window.location.href.indexOf("/issues") != -1) {
if (window.location.href.indexOf("sort=-priority") != -1) {
var table = jQ('table.issues-list');
var rows = table.find('tr:gt(0)').toArray().sort(comparer(0));
for (var i = 0; i < rows.length; i++){table.append(rows[i])}
}
}
jQ("#issues-toolbar").append("<small>BitBucket Rating Userscript enabled</small>");
/*
jQ(document).on('click', '#sortByRating', function() {
});
*/
}
// load jQuery and execute the main function
addJQuery(main);