Last active
October 6, 2017 11:50
-
-
Save gigaherz/a37eccfb3832b9af0b92f8ebaed74911 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Foldable diffs | |
// @namespace http://tampermonkey.net/ | |
// @version 0.4 | |
// @description Adds a fold button to file diffs, and folds deleted files by default | |
// @author gigaherz | |
// @match https://bitbucket.org/* | |
// @grant none | |
// ==/UserScript== | |
(function() { | |
'use strict'; | |
var makeFoldButton = function($el) { | |
var div = $("<div class='aui-buttons'><button class='aui-button aui-button-light'>-</button></div>"); | |
var btn = div.find('button'); | |
var toggleFolding = function(){ | |
var diff=$el.find(".diff-content-container"); | |
diff.toggle(); | |
btn.text(diff.is(':visible') ? "-" : "+"); | |
}; | |
btn.click(toggleFolding); | |
div.insertBefore($el.find('.diff-actions.secondary > .bb-sbs-patch').prev()); | |
$el.find('.heading').click(toggleFolding).find('button').click(function(){return false;}); | |
if ($el.has('.diff-entry-lozenge.aui-lozenge-error').length > 0) | |
toggleFolding(); | |
}; | |
var makeFoldable = function() { | |
$('.diff-container').each(function(el) { | |
makeFoldButton($(this)); | |
}); | |
}; | |
var observeDomAdd = function(target, callback) { | |
var children = target.children; | |
for (var i = 0; i < children.length; i++) { | |
if (callback(children[i]) === false) | |
{ | |
return; | |
} | |
} | |
var observer = new WebKitMutationObserver(function(mutations) { | |
mutations.forEach(function(mutation) { | |
for(let i = 0; i < (mutation.addedNodes.length || []); i++) | |
{ | |
if (callback(mutation.addedNodes[i]) === false) | |
{ | |
break; | |
} | |
} | |
}); | |
}); | |
observer.observe(target, { | |
childList: true | |
}); | |
}; | |
var observeTab = function(target, id) { | |
observeDomAdd(target, function(node) { | |
if (node.id === id) { | |
makeFoldable(); | |
return false; | |
} | |
}); | |
}; | |
var cs = document.getElementById("changeset-diff"); | |
if (cs) { | |
makeFoldable(); | |
} else { | |
var diff = document.getElementById("compare-diff"); | |
if (diff) { | |
observeDomAdd(diff, function(node) { | |
if (node.id === "compare-diff-content") { | |
observeTab(node, 'changeset-diff'); | |
return false; | |
} | |
}); | |
} else { | |
var pr = document.getElementById("pr-tab-content"); | |
if (pr) { | |
observeTab(pr, 'pullrequest-diff'); | |
} | |
} | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment