Gossamer Forum Direct Post Links

By mr 2 Last update Aug 5, 2006 — Installed 253 times.
// ==UserScript==
// @name         Gossamer Forum Direct Post Links
// @namespace    tag:Eule@dropzone.com,2006-08-05:greasemonkey-scripts
// @description  Adds direct links to each post in a Gossamer Forum web forum.
// @include      http://*.dropzone.com/*
// ==/UserScript==

// v0.1  2006-08-06
// First public version.  NO WARRANTY.  If it breaks you get to keep
// all the pieces.  Tested on dropzone.com and gossamer-threads.com .

(function()
  {
  var selectAllNodes = function(doc, context, xpath)
    {
    var nodes = doc.evaluate(xpath, context, null,
      XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    var result = new Array( nodes.snapshotLength );
    for (var x=0; x<result.length; x++)
      {
      result[x] = nodes.snapshotItem(x);
      }
    return result;
    }

  var gossamerForumDirectLinkToPost =
    {
    addLinks: function()
      {
      // look for "Quote" links
      var quotelinks = selectAllNodes(document, document.body,
        "//a[contains(@href, 'gforum.cgi\?do=post_reply_write;quote=1;parent_post_id=')]");
      // GM_log("found " + quotelinks.length + " quote links\n");

      // for each quote link...
      for (var x=0; x<quotelinks.length; x++)
        {
        // use quote link URL to build direct link
        var numberplustrash = quotelinks[x].href.split("parent_post_id=")[1];
        var postnumber = numberplustrash.split(";")[0];

        var directurl = "http://" + quotelinks[x].host +
          quotelinks[x].pathname + "?post=" + postnumber + ";#" + postnumber;
        // GM_log("built direct URL '" + directurl + "'\n");

        // create the <a> for the direct link
        var newa = document.createElement('a');
        newa.setAttribute("href", directurl);
        var newtext = document.createTextNode('Direct Link');
        newa.appendChild(newtext);

        // insert the <a> into the document
        var parent = quotelinks[x].parentNode;
        parent.insertBefore(newa, quotelinks[x]);

        // insert the separator bar into the document
        var separator = document.createTextNode(' | ');
        parent.insertBefore(separator, quotelinks[x]);

        // GM_log("appended a\n");
        }
      }
    }

  gossamerForumDirectLinkToPost.addLinks();
  }
)();