I want to create a userscript that will modify the way that a commit message is displayed in the Bitbucket Pipelines console, in a web browser.
So far, I have written the following JavaScript, which works fine on the Bitbucket "commits" page. It does two things:
- Enable line wrapping.
- set a 2-line height.
// ==UserScript==
// @name        Bitbucket change display of Git commit messages.user.js
// @namespace   bitbucket
// @include     https://bitbucket.org/*
// @version     1
// @grant       none
// ==/UserScript==
// Guidance:
// https://somethingididnotknow.wordpress.com/2013/07/01/change-page-styles-with-greasemonkeytampermonkey/
// https://stackoverflow.com/questions/19385698/how-to-change-a-class-css-with-a-greasemonkey-script
// You need to use Firefox -> Browser Tools -> Web Developer Tools -> Inspector
// (or Google Chrome -> View -> Developer -> Developer Tools -> Inspector),
// to see the CSS elements that don't look good.
function addGlobalStyle(css) {
    var head, style;
    head = document.getElementsByTagName('head')[0];
    if (!head) { return; }
    style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = css;
    head.appendChild(style);
}
/** This function will run after the time delay, to wait for the dynamic content to load. */
window.setTimeout(changeCssMessageStyleInGitCommitTable_OnceOnly, 3000);
var GIT_COMMIT_TABLE_STYLE_CHANGED = false; // A global flag
/**
 * Make the Git commits table show more text: Make the commit message
 * display as 2 lines wrapped, without "..." truncation at the end.
 */
function changeCssMessageStyleInGitCommitTable_OnceOnly() {
    try {
        // The Message column should not show "...", and not have single-line spacing.
        // You must get the cssTag names indirectly (without hard-coding), because they change often.
        let gitCommitFirstTableRow = document.querySelectorAll("tr")[1];
        if (gitCommitFirstTableRow == null || !window.location.href.includes("/commits")) {
            console.log("changeCssMessageStyleInGitCommitTable_OnceOnly() Problem: gitCommitFirstTableRow == null, retrying");
            window.setTimeout(changeCssMessageStyleInGitCommitTable_OnceOnly, 3000);
            return;
        }
        var gitCommitFirstMessage = gitCommitFirstTableRow.children[2];
        gitCommitFirstMessage = gitCommitFirstMessage.children[0].children[0];
        if (!gitCommitFirstMessage.hasAttribute("class")) {
            console.log(`ERROR 1: gitCommitFirstMessage ${gitCommitFirstMessage} - NO ATTRIBUTE "class". Retrying`);
            gitCommitFirstMessage = gitCommitFirstTableRow.children[2].children[0].children[1];
            if (!gitCommitFirstMessage.hasAttribute("class")) {
                console.log(`ERROR 2: gitCommitFirstMessage ${gitCommitFirstMessage} - NO ATTRIBUTE "class". Exiting`);
                return;
            }
        }
        let cssTag1 = gitCommitFirstMessage.getAttribute("class").split(" ")[0];
        addGlobalStyle(`.${cssTag1} { white-space: normal; line-height: normal; max-height: 37px }`);
        // Author names should not show truncated "..." labels
        var gitCommitFirstAuthor = gitCommitFirstTableRow.children[0].children[0].children[1];
        let cssTag2 = gitCommitFirstAuthor.getAttribute("class").split(" ")[0];
        addGlobalStyle(`.${cssTag2} { margin-left: 7px; text-overflow: unset; }`);
        // Reduce the left and right padding of the git commits list
        var table = document.querySelector("div[spacing='comfortable']");
        if (table != null) {
            let cssTag = table.getAttribute("class").split(" ")[1];
            addGlobalStyle(`.${cssTag} { padding: 0px 6px; }`);
        }
        GIT_COMMIT_TABLE_STYLE_CHANGED = true;
    } catch (error) {
        console.log(`changeCssStylesInGitCommitTable() ERROR: ${error}`);
        window.setTimeout(changeCssMessageStyleInGitCommitTable_OnceOnly, 6000); // retry
    }
    if (GIT_COMMIT_TABLE_STYLE_CHANGED == false) {
        window.setTimeout(changeCssMessageStyleInGitCommitTable_OnceOnly, 5000); // retry in 5 seconds
    }
}
You can see in the above screenshot how it alters the CSS properties of the "git commit message" text labels, to change them from single-line with "..." truncation, to 2-line with no truncation. That's what I want. Notice the "MERGED" commits display more text. The main code that achieves this is this line:
addGlobalStyle(`.${cssTag1} { white-space: normal; line-height: normal; max-height: 37px }`);
Note: You can use the following public repos to test this user-script and see it in action:
- https://bitbucket.org/bitbucketpipelines/official-pipes/commits/
- https://bitbucket.org/bitbucketpipelines/bitbucket-pipes-toolkit/commits/
- https://bitbucket.org/bitbucketpipelines/template-gradle-build/commits/
- Various projects from this Bitbucket user: https://bitbucket.org/bitbucketpipelines/
But when I attempt to do the same thing on the 'Bitbucket Pipelines history' page, it does not work:
// ==UserScript==
// @name        Bitbucket change display of Pipelines messages.user.js
// @namespace   bitbucket
// @include     https://bitbucket.org/*
// @version     1
// @grant       none
// ==/UserScript==
// Guidance:
// https://somethingididnotknow.wordpress.com/2013/07/01/change-page-styles-with-greasemonkeytampermonkey/
// https://stackoverflow.com/questions/19385698/how-to-change-a-class-css-with-a-greasemonkey-script
// You need to use Firefox -> Browser Tools -> Web Developer Tools -> Inspector
// (or Google Chrome -> View -> Developer -> Developer Tools -> Inspector),
// to see the CSS elements that don't look good.
function addGlobalStyle(css) {
    var head, style;
    head = document.getElementsByTagName('head')[0];
    if (!head) { return; }
    style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = css;
    head.appendChild(style);
}
/** Try to change the style immediately on page load */
addGlobalStyle(`.gZYlAg { white-space: normal; line-height: normal; max-height: 37px }`);
/** This function will run after the time delay, to wait for the dynamic content to load. */
window.setTimeout(changeCssStyleInPipelinesHistoryTable_OnceOnly, 3000);
var GIT_COMMIT_TABLE_STYLE_CHANGED = false; // A global flag
/**
 * Try to change the style again, after a time delay.
 * Make the Pipelines history table show more text: Make the commit message
 * display as 2 lines wrapped, without "..." truncation at the end.
 */
function changeCssStyleInPipelinesHistoryTable_OnceOnly() {
    try {
        // The Message column should not show "...", and not have single-line spacing.
        // You must get the cssTag names indirectly (without hard-coding), because they change often.
        addGlobalStyle(".gZYlAg { white-space: normal; line-height: normal; max-height: 37px }");
        GIT_COMMIT_TABLE_STYLE_CHANGED = true;
    } catch (error) {
        console.log(`changeCssStyleInPipelinesHistoryTable_OnceOnly() ERROR: ${error}`);
        window.setTimeout(changeCssStyleInPipelinesHistoryTable_OnceOnly, 6000); // retry
    }
    if (GIT_COMMIT_TABLE_STYLE_CHANGED == false) {
        window.setTimeout(changeCssStyleInPipelinesHistoryTable_OnceOnly, 5000); // retry in 5 seconds
    }
}
For some reason, the above script does not modify any of the CSS styles in the Bitbucket Pipelines page, to enable 2-line text labels.
But if I modify the page manually, by going to Developer Tools → Elements tab → use the 'select element' pointer to click on the element *rarr; then set white-space: normal and add max-height: 40px ; then it works fine:
You can use the following public repos to test this userscript and see it in action:
- https://bitbucket.org/bitbucketpipelines/template-gradle-build/addon/pipelines/home#!/
- https://bitbucket.org/bitbucketpipelines/official-pipes/addon/pipelines/home#!/
- https://bitbucket.org/bitbucketpipelines/bitbucket-pipes-toolkit/addon/pipelines/home#!/
- https://bitbucket.org/bitbucketpipelines/example-google-app-engine-deploy/addon/pipelines/home#!/
- https://bitbucket.org/bitbucketpipelines/example-aws-s3-deploy/addon/pipelines/home#!/
- Various projects from this Bitbucket user: https://bitbucket.org/bitbucketpipelines/
How do I make the script work to set the CSS styles automatically, on the Bitbucket Pipelines page?
- What's wrong with the addGlobalStyle()approach (with or without the time delays)?
- Is there a better way to achieve this kind of page layout modification?


 
    