GitLab Jira Issue Extractor(DEV)

GitLab Jira Issue Exactor: You can extract jira issues in GitLab after you enable the plugin "jira-issue-tracker".

Per 11-04-2019. Zie de nieuwste versie.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         GitLab Jira Issue Extractor(DEV)
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  GitLab Jira Issue Exactor: You can extract jira issues in GitLab after you enable the plugin "jira-issue-tracker".
// @author       tanglei.me
// @match        *://*/*
// @require      http://code.jquery.com/jquery-latest.min.js
// @grant        GM_xmlhttpRequest
// ==/UserScript==

// Please replace your gitlab url to @match

var hasExact = false;

String.prototype.format = function () {
  var args = arguments;
  return this.replace(/\{(\d+)\}/g, function (m, n) { return args[n]; });
};


function getTitle(issueId, url) {
    var details = GM_xmlhttpRequest({
        method:"GET",
        url:url,
        onload: function (res) {
            var text = res.responseText;
            var dom = $(text);
            var titleNode = dom[124];
            var titleText = "";
            if (titleNode.nodeName == 'TITLE') {
                titleText = titleNode.innerText;
            } else { // if not the 124th one
                for (var node of dom) {
                    if (node.nodeName == 'TITILE') {
                        titleText = node.innerText;
                    }
                }
            }
            //console.log("issueId:" + issueId +  ", title: " + titleText);
            var title = titleText.trim();
            var end = titleText.lastIndexOf('-');
            if (end > 0) {
                title = titleText.substring(0, end).trim();
            }
            var nodeId = "JIRA-ISSUE-" + issueId;
            $("#"+nodeId).append(", " + title);
        }
    });
}


(function() {
    'use strict';

    var btn = '';
    var mrClass = '.merge-request-details > .detail-page-description';
    var diffClass = '.commits-compare-btn';

    var resultBtnDom = ".not.exist.class";
    if ($(mrClass).length > 0) {
        resultBtnDom = $(mrClass);
        btn = '<div style="display:block"><button id="extractBtn" class="btn btn-success" style="margin-left:0px;">Extract Issues</button></div><hr/>';
    } else if ($(diffClass).length > 0) {
        resultBtnDom = $(diffClass).parent();
        btn = '<div style="display:block"><button id="extractBtn" class="btn btn-success" style="margin-left:20px;">Extract Issues</button></div><hr/>';
    } else {
        return;
    }
    var resultDiv = '<ul id="jira-issue-extractor-result"></ul>'

    resultBtnDom.append(btn + resultDiv);

    $('#extractBtn').click(function() {
        if (hasExact === true) return;
        var issues = new Map();
        $('[data-external-issue]').map(function() {
            var link = $(this).attr('href');
            var issueId = this.text;
            issues.set(issueId, {'link': link, 'issue_id': issueId});
        });

        var uniqueItems = [];
        issues.forEach(function(obj) {
            getTitle(obj.issue_id, obj.link);

            uniqueItems += '<li><a href="{0}" id="JIRA-ISSUE-{1}">{0}</a></li>'.format(obj.link, obj.issue_id);
        });
        uniqueItems += "<hr/>"
        console.log("uniqueItems:" + uniqueItems);
        // $('textarea').val(uniqueItems);
        if (hasExact === false) {
            $('#jira-issue-extractor-result').append(uniqueItems);
            hasExact = true;
            $('#extractBtn').prop('disabled', true);
        }
    });


})();