psicofrenia / eZ Service Desk UserScript

// ==UserScript==
// @name           eZ Service Desk UserScript
// @version        1.0
// @namespace      https://jira.ez.no/servicedesk
// @description    eZ Service Desk UserScript
// @include        https://jira.ez.no/servicedesk/agent/CS/*
// @include        https://jira.ez.no/browse/CS*
// @require        https://code.jquery.com/jquery-2.1.4.js
// @require        https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant          none
// ==/UserScript==

// This is needed to prevent conflicts between webpage and GM's jquery
this.$ = this.jQuery = jQuery.noConflict(true);



var signature = {
    name: "Eduardo Fernandes",
    position: "Product Support Engineer",
    extra: "\neZ Enterprise v1.4 is now available, Easier to Build a Solid Content Business\n[ezstudio.com|http://ezstudio.com]"
}

// extend with setCursorPosition() func, (allows moving carrot to top)
$.fn.setCursorPosition = function(pos) {
    this.each(function(index, elem) {
        if (elem.setSelectionRange) {
            elem.setSelectionRange(pos, pos);
        } else if (elem.createTextRange) {
            var range = elem.createTextRange();
            range.collapse(true);
            range.moveEnd('character', pos);
            range.moveStart('character', pos);
            range.select();
        }
    });
    return this;
};    

// pre-fill signature when clicking to add a new comment.
function prefillSignature(){
    var input = $('.sd-comment-textarea');
    if ( input.val() == "" ) {
        var sigText = "\n\n--\n" + signature.name + "\n" + signature.position + signature.extra;
        input.html( sigText );
        input.setCursorPosition(0);
    }
};

// format date to relative "nn minutes/hours/days ago"
function relativeDateFormat(datetime, fallback) 
{
    var msPerMinute = 60 * 1000;
    var msPerHour = msPerMinute * 60;
    var msPerDay = msPerHour * 24;
    var msPerWeek = msPerDay * 7;
    var msPerMonth = msPerDay * 30;
    var msPerYear = msPerDay * 365;

    var current = new Date();
    var elapsed = current - datetime;

    if (elapsed < msPerMinute) {
        return Math.round(elapsed/1000) + ' seconds ago';   
    }    
    else if (elapsed < msPerHour) {
        return Math.round(elapsed/msPerMinute) + ' minutes ago';   
    }
    else if (elapsed < msPerDay ) {
        return Math.round(elapsed/msPerHour ) + ' hours ago';   
    }
    else if (elapsed < msPerMonth) {
        return Math.round(elapsed/msPerDay) + ' days ago';   
    } else {
        return fallback;
    }
}

$('#sd-comment-collapsed-textarea').focus( prefillSignature );
waitForKeyElements(
    '.sd-comment-textarea',
    prefillSignature
);

waitForKeyElements(
    '#issuetable',
    function() {
        $('#issuetable .issuerow .updated').each( function() {
            var label = $('span', this);
            var time = $('time', this);

            // get readable datetime from tooltip
            var readable = label.attr('title');
            // get date from time attribute
            var dtime = new Date( time.attr('datetime') );

            time.html( relativeDateFormat( dtime, time.html() ) );
        });
    }
);