// ==UserScript== // @name TechCrunch Image Gallery // @namespace http://mschade.me/userscripts // @description Adds image gallery capabilities to TechCrunch by Michael Schade (@michaelschade, http://mschade.me/) // @match http://techcrunch.com/* // @include http://techcrunch.com/* // ==/UserScript== // via http://erikvold.com/blog/index.cfm/2010/6/14/using-jquery-with-a-user-script function addJQuery(callback) { var script = document.createElement("script"); script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"); script.addEventListener('load', function() { var script = document.createElement("script"); script.textContent = "(" + callback.toString() + ")();"; document.body.appendChild(script); }, false); document.body.appendChild(script); } function main() { // Basic init var gitem = ".gallery-item" , firstItem = false , gallery = $("#gallery-1") ; gallery.prepend('
'); var preview = $("#gallery-1-preview"); // Sets the navigation elements function setGNav(container, item) { $("#gallery-1-" + item).unbind('click').click(function() { var nav, wrap; // Find next/prev accordingly if (item == 'prev') { wrap = ":last"; nav = container.prevAll(gitem + ":first"); } else { wrap = ":first"; nav = container.nextAll(gitem + ":first"); } // Wrap to other side if no next/previous if (!nav.length) { nav = gallery.find(gitem + wrap); } nav.click(); }); } $(gitem).click(function() { // Add previous and next if necessary if (firstItem == false) { preview.parent().append('
<< Prev Next >>
'); firstItem = true; } // Get image and update gallery preview var container = $(this) , img = container.find("img").first() , src = img.attr('src').replace(/\?.*$/, '') ; $("#gallery-1-preview").attr('src', src); // Set next/previous setGNav(container, 'prev'); setGNav(container, 'next'); return false; }); } addJQuery(main);