sidewiki

By 2x Last update Mar 25, 2010 — Installed 301 times.

There are 11 previous versions of this script.

// ==UserScript==
// @name           sidewiki
// @namespace      http://localhost/
// @include        http://*
// @exclude        http://www.google.com/sidewiki/entry/*
// @exclude        http://www.google.com/sidewiki/feeds/entries/*
// ==/UserScript==

(function()
{
var $w = window.top;
var $d = null;
if ($w != null)
  $d = $w.top.document;
if (!$d) {
  $w = window;
  $d = $w.document;
}
if ($d.body.tagName == 'FRAMESET') {
  // try show at least something, somehow
  $w = window;
  $d = document;
}
if ($w == null)
  $w = window;

// It does not seem to work in exclude. Probably because the main document
// is opened in a frame right next to the sidewiki panel.
if (RegExp('^http://www\.google\.com/sidewiki/entry/').test($d.location.href))
  return;

function sidewiki(re,rq)
{
  var sw = $d.createElement("div");
  sw.id = 'sidewiki-annotations';
  sw.className = 'sidewiki';
  sw.style.opacity = "0.85";
  //sw.style.filter = "alpha(opacity=80)";
  sw.style.position = "absolute";
  sw.style.zIndex = "10000";
  sw.style.left = ($w.scrollX + 10) + "px";
  sw.style.top = ($w.scrollY + 20) + "px";
  sw.style.background = '#dfdfdf';
  sw.style.styleFloat = "right";
  sw.style.padding = "3px 4px";
  sw.style.color = "#000000";
  sw.style.textDecoration = "none";
  sw.style.textAlign = "left";
  sw.style.MozBorderRadius = "2px";
  sw.style.WebkitBorderRadius = "2px";
  sw.style.WebkitBoxShadow = "2px 2px 2px #bfbfbf";
  sw.style.MozBoxShadow = "2px 2px 2px #bfbfbf";
  sw.style.fontSize = '8pt';
  sw.style.fontFamily = 'Helvetica';

  if (re && re.feed.entry && re.feed.entry.length) {

    sw.innerHTML = ' <span style="font-size: 8pt; margin: 0">'+
      'Sidewikis: ' + re.feed.entry.length + ' of '
      + re.feed.openSearch$totalResults.$t + '</span>';
    var ent0 = $d.createElement('div');
    ent0.style.display = 'none';
    ent0.style.fontSize = '10pt';
    var entries = '';
    for (var i = 0; i < re.feed.entry.length; ++i) {
      entries +=
        '<div style="margin-bottom: 1em">' +
        '<div style="font-weight: bold; background: #afdfaf">' +
        '<a target="sidewiki-by-author" '+
        'href="http://www.google.com/sidewiki/feeds/entries/author/' +
        re.feed.entry[i].author[0].gd$resourceId.$t +
        '/full">' + re.feed.entry[i].author[0].name.$t + '</a> ' +
        '<a target=_top href="http://www.google.com/sidewiki/entry/' +
          re.feed.entry[i].author[0].gd$resourceId.$t + '/id/' +
          re.feed.entry[i].gd$resourceId.$t + '">' +
        re.feed.entry[i].title.$t  + '</a> '+
        '</div>'+
        re.feed.entry[i].content.$t +
        '</div>';
    }
    ent0.innerHTML = entries;
    sw.appendChild(ent0);

    var ticker_counter_start = 30;
    var ticker_counter = ticker_counter_start;
    var ticker_timer = null;
    var ticker = $d.createElement('span');
    ticker.style.fontSize = 'xx-small';

    sw.addEventListener('mouseover',
      function(e) {
        ent0.style.display = 'inline';
        sw.style.width = '70%';
        ticker.style.display = 'none';
        $w.clearTimeout(ticker_timer);
      },
      false);
    sw.addEventListener('mouseout',
      function(e) {
        ent0.style.display = 'none';
        sw.style.width = null;
        ticker_counter = ticker_counter_start;
        ticker_timer = $w.setTimeout(countdown, 1000);
      },
      false);

    sw.insertBefore(ticker, sw.firstChild);
    function countdown()
    {
      --ticker_counter;
      if (ticker_counter) {
        ticker.innerHTML = '(Closing in ' + ticker_counter + ' sec)';
        ticker.style.display = 'inline';
        ticker_timer = $w.setTimeout(countdown, 1000);
      } else
        $d.body.removeChild(sw);
    }
    ticker_timer = $w.setTimeout(countdown, 1000);
  }
  else if (rq.status == 200) {
    return;
    // just for debugging
    sw.innerHTML = 'No sidewiki annotations';
    $w.setTimeout(function(){ $d.body.removeChild(sw); }, 5000);
  }
  else { // status != 200
    var hdrs = rq.responseHeaders;
    /* hdrs = rq.getAllResponseHeaders(); */
    sw.innerHTML = '' + rq.status + ' ' + rq.statusText +
      '<br>Headers:<pre>' + hdrs + '</pre>';
    $w.setTimeout(function(){ $d.body.removeChild(sw); }, 5000);
  }
  $d.body.appendChild(sw);
}

var rq = 'http://www.google.com/sidewiki/feeds/entries/webpage/' +
  encodeURIComponent($d.location.href) +
  '/default?alt=json&sortorder=quality';
//GM_log("Requesting sidewikies for "+rq);

/*
var siderq = new XMLHttpRequest();
siderq.open('GET', rq, true);
siderq.onreadystatechange = function() {
  if (this.readyState == 4) {
    var re = null;
    if (this.status == 200) {
      re = JSON.parse(this.responseText);
    }
    sidewiki(re,this);
  }
};
siderq.send('');
*/
// Can't do a cross-domain request with XMLHttpRequest
GM_xmlhttpRequest({

  method: 'GET',

  url: rq,

  onload: function(details) {
    var re = null;
    if (details.status == 200) {
      re = JSON.parse(details.responseText);
    }
    if (details.status == 400)
      return; // google started returning 400 for impossible requests recently
    sidewiki(re,details);
  }
});

})();
// vim: sw=2 et