// ==UserScript== // @name Bitbucket Whitespaces // @namespace https://bitbucket.org/ // @description Show hidden symbols (spaces, tabs) // @match https://bitbucket.org/* // @version 0.2 // @downloadURL https://update.greasyfork.cloud/scripts/1725/Bitbucket%20Whitespaces.user.js // @updateURL https://update.greasyfork.cloud/scripts/1725/Bitbucket%20Whitespaces.meta.js // ==/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. jQ('.udiff-line .source').each(function() { jQ(this).html( jQ(this).html() .replace( /^([ \+\-].*?)\s+$/, '$1[trailing whitespaces]' ) .replace( /\t/g, 'ยป ' ) ); }); } // load jQuery and execute the main function addJQuery(main);