// ==UserScript==
// @name           BBC A&Mi svn/trac cross linking
// @namespace      http://djce.org.uk/greasemonkey
// @description    Add links from svn to trac and vice versa
// @include        http://svn.ips.radio.bbc.co.uk/rmi_svn/*
// @include        http://devtools.ips.radio.bbc.co.uk/ips_toolkit/*
// ==/UserScript==

try {
	var m;

	// XXX: the /!svn/bc/REV interface is undocumented & unsupported
	
	m = window.location.href.match(/^http:\/\/svn\.ips\.radio\.bbc\.co\.uk\/rmi_svn(\/!svn\/bc\/(\d+))?\/(.*)$/);
	if (m)
	{
		var rev = m[2];
		var path = m[3];

		var add_link = function(href, text) {
			var a = document.createElement("a");
			a.setAttribute("href", href);
			a.appendChild(document.createTextNode(text));
			var p = document.createElement("p");
			p.appendChild(a);
			document.body.appendChild(p);
		};

		var t = path;
		if (rev) { t = t + "?rev="+rev; }
		add_link("http://devtools.ips.radio.bbc.co.uk/ips_toolkit/browser/" + t, "browse in trac");
		add_link("http://devtools.ips.radio.bbc.co.uk/ips_toolkit/log/" + t, "view log in trac");

		if (rev) {
			add_link("http://svn.ips.radio.bbc.co.uk/rmi_svn/"+path, "HEAD");
		}
	}

	m = window.location.href.match(/^http:\/\/devtools\.ips\.radio\.bbc\.co\.uk\/ips_toolkit\/(log|browser)\/([^?]*)/);
	if (m)
	{
		var current_view = m[1];
		var path = m[2];
		var rev;
		if (m = window.location.href.match(/\?rev=(\d+)(&|$)/))
		{
			rev = m[1];
		}

		var nav_list;
		{
			var e = document.getElementById("ctxtnav");
			if (e)
			{
				for (var c = e.firstChild; c; c=c.nextSibling)
				{
					if (c.nodeName == "UL")
					{
						nav_list = c;
						break;
					}
				}
			}
		}

		var add_link = function(href, text) {
			var a = document.createElement("a");
			a.setAttribute("href", href);
			a.appendChild(document.createTextNode(text));

			if (nav_list)
			{
				var li = document.createElement("li");
				li.appendChild(a);
				nav_list.appendChild(li);
			}
		};

		var t = "";
		if (rev) { t = "!svn/bc/"+rev+"/"; }
		add_link("http://svn.ips.radio.bbc.co.uk/rmi_svn/"+t+path, "Go to SVN");

		if (current_view == "log")
		{
			add_link("http://devtools.ips.radio.bbc.co.uk/ips_toolkit/browser/"+path, "Browse HEAD");
		}

		if (nav_list)
		{
			var lis = [];
			for (var c = nav_list.firstChild; c; c=c.nextSibling)
			{
				if (c.nodeName == "LI") lis.push(c);
			}
			for (var i=0; i<lis.length; ++i)
			{
				var c = "";
				if (i==0) c=c+" first";
				if (i==lis.length-1) c=c+" last";
				lis[i].setAttribute("class", c);
			}
		}
	}


} catch(err) {
	alert("Error: "+err);
} 

