GitLab Total Time

Add total time to header of lists on GitLab boards

Version vom 16.08.2021. Aktuellste Version

Du musst eine Erweiterung wie Tampermonkey, Greasemonkey oder Violentmonkey installieren, um dieses Skript zu installieren.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

Sie müssten eine Skript Manager Erweiterung installieren damit sie dieses Skript installieren können

(Ich habe schon ein Skript Manager, Lass mich es installieren!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         GitLab Total Time
// @namespace    https://github.com/vitormattos/
// @version      0.1
// @description  Add total time to header of lists on GitLab boards
// @author       Vitor Mattos
// @match        http*://*/*/boards
// @match        http*://*/*/boards?*
// @match        http*://*/*/boards/*
// @icon         https://gitlab.com/assets/gitlab_logo-7ae504fe4f68fdebb3c2034e36621930cd36ea87924c11ff65dbcb8ed50dca58.png
// @require      https://code.jquery.com/jquery-3.6.0.min.js
// ==/UserScript==

function listTotalTime() {
    $('header.board-header div.issue-count-badge').each(function() {
        var container = $(this).children();
        var timeElement = container.find('span.list-total-time');
        if(timeElement.length === 0) {
            container.append('<span class="gl-display-inline-flex gl-ml-3 list-total-time"></span>')
        }
        timeElement = container.find('span.list-total-time')

        timeElement.attr('time_m', 0)
        timeElement.attr('time_h', 0)
    });

    $('time:not([datetime]').each(function() {
        var countElement = $(this).closest('div.board-inner').find('span.list-total-time');
        var time = $(this).text()
        var type = time.slice(-1)
        time = time.slice(0, -1)
        countElement.attr('time_' + type, parseInt(countElement.attr('time_' + type)) + parseInt(time))
    })

    $('span.list-total-time').each(function() {
        var min = parseInt($(this).attr('time_m'))
        if (min >= 60) {
            $(this).attr('time_h', parseInt($(this).attr('time_h')) + min / 60)
            $(this).attr('time_m', parseInt($(this).attr('time_m')) + min % 60)
        }
        var minPad = $(this).attr('time_m')
        minPad = ('00' + minPad).slice(-2)
        $(this).html(
            '<svg role="img" aria-hidden="true" class="gl-mr-2 gl-icon s16" data-testid="hourglass-icon"><use href="/assets/icons-05c4d4d8f3cc1fe0f22064d47d6a57d254ff9686a08abb74993ade21581e46f8.svg#hourglass"></use></svg>'
            + $(this).attr('time_h')
            + ':'
            + minPad
        )
    });
}

$(document).ready(function() {
    setTimeout(function () {
        $('<div class="gl-ml-3 gl-display-flex gl-align-items-center"><button title="" data-qa-selector="boards_config_button" type="button" class="btn btn-default btn-md gl-button" id="refresh-list-time"><!----> <!---->  <span class="gl-button-text">Refresh times</span></button></div>').insertAfter($('[data-testid="boards-create-list"]'));

        $('#refresh-list-time').on("click", function(){
            listTotalTime()
        })
    }, 1000)
});