Traffic People Greasemonkey
I wrote this script for Nalin, he maintains the Traffic People Shop, and I thought it would be nice to jump from the shop to the back-end.
// ==UserScript==
// @name Traffic People - Products
// @namespace nickthecoder.co.uk
// @include http://www.trafficpeople.co.uk/shop/products/*
// ==/UserScript==
var productDetails = document.getElementById( "ProductDetails" ); // Finds the div that holds info about the product
var h2s = productDetails.getElementsByTagName( "h2" ); // Get all of the "h2s" - there should only be 1
if ( h2s.length > 0 ) {
var h2 = h2s[ 0 ]; // We are only interested in the zeroth "<h2>" tag.
var productId = getFormElement( "product_id" ).value;
// Build the html we want to display
var html = '<div style="position: absolute; right: 0px;">';
html += '<a href="http://www.trafficpeople.co.uk/shop/admin/index.php?ToDo=editProduct&productId=' + productId + '">Edit</a>';
html += ' ';
html += '<a href="http://nickthecoder.co.uk/pinkwino/view/Traffic+People+Greasemonkey" title="Greasemonkey Extension"><img src="http://nickthecoder.co.uk/pinkwino/media/greasemonkey.png" alt="greasemonkey"/></a>';
html += '</div>';
// Create a div to put this html into. Note we have 2 divs, an "position: absolute" inside a "position: relative", a common css trick ;-)
var div = document.createElement("div");
div.innerHTML = html;
h2.parentNode.insertBefore( div, h2 ); // This is where the html document is actually altered (by inserting the new div)
div.style.position = "relative"; // Not sure, but I don't think I can set style.position until it has been added to the document.
}
// Its annoying when web sites don't use ids for form or data inside the forms.
// Because we have to resort to using the form elements names instead.
function getFormElement( name ) {
var forms = document.getElementsByTagName( "form" );
var i, j;
for (i = 0; i < forms.length; i ++ ) {
for (j = 0; j < forms[i].elements.length; j ++ ) {
if (forms[i].elements[j].name == name) {
return forms[i].elements[j];
}
}
}
return null;
}