theonedemon / Redmine link task export ( for Sprint planning )

// ==UserScript==
// @name         Redmine link task export ( for Sprint planning )
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       nomedeno.netpeak@gmail.com
// @match        https://redmine.netpeak.net/projects/netpeak_pup/issues*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    var requester_class = 'cf_20';
    var sp_class = 'cf_24';

    var sp_value_regexp = /^[+-]?\d+(\.\d+)?/;

    var table = '';

    if (jQuery('table.issues').length) {
        $('table.issues').find('tr.issue').each(function (i, el) {
            var row = [];

            var task_link = jQuery(el).find('td.subject a').attr('href');
            var task_name = jQuery(el).find('td.subject a').html().replace(/"|'/g, '');

            var tracker = jQuery(el).find('td.tracker').text();
            var requester = jQuery(el).find('td.' + requester_class).text();
            var priority = jQuery(el).find('td.priority').text();
            var assigned_user = jQuery(el).find('td.assigned_to').text();
            var status = jQuery(el).find('td.status').text();
            var sp = jQuery(el).find('td.' + sp_class).text();
            var sp_value = sp_value_regexp.exec(sp)[0];

            row = [
                '=HYPERLINK("' + window.location.origin + task_link + '"; "' + task_name + '")',
                tracker,
                requester,
                priority,
                assigned_user,
                status,
                sp_value
            ];
            table = table + row.join("\t") + "\n";
        });
        var export_link = jQuery('<a>').addClass('icon').addClass('icon-projects').click(function(e) {
            e.preventDefault();
            prompt('', table);
        });
        jQuery('table.issues').before(export_link);
    }
})();