Jenkins Config XML File Viewer

Add a link to view the job's XML configuration file from the job's page. This link is titled "View Config XML File."

// ==UserScript==
// @name         Jenkins Config XML File Viewer
// @namespace    http://budw.in/
// @version      0.2
// @description  Add a link to view the job's XML configuration file from the job's page.  This link is titled "View Config XML File."
// @author       Drew Budwin
// @match        http*://*/job/*
// @require      https://code.jquery.com/jquery-2.2.1.js
// @require      https://greasyfork.org/scripts/6250-waitforkeyelements/code/waitForKeyElements.js?version=23756
// ==/UserScript==
/* jshint -W097 */
/* globals $:false */
/* global waitForKeyElements */
'use strict';

waitForKeyElements(".icon-folder.icon-xlg", addConfigXMLFileLinkWithImage);

function addConfigXMLFileLinkWithImage()
{
    $('table').each(function()
    {
    	var tableToPrependRowTo = $(this);
    
        if (tableToPrependRowTo.children().is(':contains("Workspace")'))
        {
            var rowToPrepend = getRowWithLinkAndImage();
            tableToPrependRowTo.prepend(rowToPrepend);
        }
    });
}

function getRowWithLinkAndImage()
{
	return '<tr><td>' + getConfigXMLFileLinkWithImage() + '</td><td style="vertical-align:middle">' + getConfigXMLFileLink() + '</td></tr>';
}

function getConfigXMLFileLinkWithImage()
{
    return '<a href="' + getConfigXMLFileUrl() + '"><img src="' + getSettingIconUrl() + '"></a>';
}

function getConfigXMLFileLink()
{
    return '<a href="' + getConfigXMLFileUrl() + '">View Config XML File</a>';
}

function getConfigXMLFileUrl()
{
    return window.location.href + 'config.xml';
}

function getSettingIconUrl()
{
    var baseUrl = window.location.protocol + '//' + window.location.host;
    var resourceLocation = $('head').attr('resURL') + '/';
    var settingsIconName = 'images/48x48/setting.png';
    var imageUrl = baseUrl + resourceLocation + settingsIconName;
    
    return imageUrl;
}