Google Reader To Ma.gnolia

By John Keyes Last update May 22, 2008 — Installed 58 times.
// Author:   John Keyes 
// Website:  http://keyes.ie/johnnyk/
// Version:  0.1
// 
// ==UserScript==
// @name           Google Reader To Ma.gnolia
// @namespace      http://keyes.ie
// @description    Opens window to bookmark feed entries in ma.gnolia.
// @include        https://google.com/reader/*
// @include        https://*.google.com/reader/*
// @include        http://google.com/reader/*
// @include        http://*.google.com/reader/*
// ==/UserScript==

document.getElementById("entries").addEventListener('DOMNodeInserted',  function (event) {
    var node = event.target;
    if (node.tagName.toLowerCase() == 'div') {
        var entryactions;

        if (hasClass(node, "entry-actions")) {
            entryactions = node;
        }
        else if (hasClass(node, "entry") && hasClass(node.firstChild, "card")) {
            entryactions = node.firstChild.firstChild.childNodes[2].childNodes[1].firstChild;
        }

        if (entryactions) {
            var action = document.createElement("span");
            action.className = "tag link";
            action.innerHTML = "ma.gnolia";
            action.addEventListener("click", bookmark, false);
            entryactions.appendChild(action);
        }
    }
}, true);

 
function bookmark(event){
    var node = event.target;
    var entry = findEntry(node);
    var h2 = entry.getElementsByTagName("h2");
    var link = h2[h2.length > 1 ? 1 : 0].firstChild;
    var url = link.getAttribute('href');
    var title = link.textContent;
    var tags = getTags(node.parentNode);
    window.open('http://ma.gnolia.com/bookmarklet/popup/add?url='+encodeURIComponent(url)+'&title='+encodeURIComponent(title)+'&tags='+encodeURIComponent(tags),'magnolia','scrollbars=1,status=0,location=0,toolbar=0');
}

function getTags(linkbar) {
    var lists = linkbar.getElementsByTagName("ul");
    var tags = [];
    for (var j = 0; j < lists.length; j++) { 
        var list = lists[j];
        if (list.className == 'user-tags-list') {
            var links = list.getElementsByTagName("a");
            for (var k = 0; k < links.length; k++) {
                tags.push(links[k].textContent);
            }
        }
    }
    return tags.join(',')
}

function findEntry(node) { 
    if (hasClass(node, "entry")) {
        return node;
    } else {
        return findEntry(node.parentNode);
    }
}

function hasClass(node, className) {
    if (node && node.className) {
        var classnames = node.className.split(/\s+/);
        for (var i = 0, length = classnames.length; i < length; i++) {
            if (classnames[i] == className) {
                return true;
            }
        }
    }
    return false;
}