http://ireblog.libelabo.jp/
http://ireblog.libelabo.jp/#random

j で進んで u で reblog かな?

http://ireblog.libelabo.jp/javascripts/ireblog.js

var THRESHOLD = 10;
var INTERVAL  = 300;
var SUMMER    = 5000;
var RANDOM    = false;

var page      = 1;
var minimum   = 1000000000;
var lock      = false;

var postArray = [];

$(document).ready(function() {
  if(location.href.match(/#random/)) RANDOM = true;

  $(window).keydown(function(e) {
    var keyCode = e.keyCode;
    if(keyCode == 74) pass();   // j
    //if(keyCode == 79) _open();  // o
    if(keyCode == 85) reblog(); // u
  });
  load();

  $(&#39;#posts&#39;).empty().append($(&#39;<div />&#39;).addClass(&#39;films&#39;)
                     .append($(&#39;<div />&#39;).attr(&#39;id&#39;,&#39;reblog&#39;).addClass(&#39;film&#39;).height(500).css({&#39;left&#39;:  0}).click(reblog))
                     .append($(&#39;<div />&#39;).attr(&#39;id&#39;,&#39;pass&#39;).addClass(&#39;film&#39;).height(500).css({&#39;right&#39;: 0}).click(pass))
                    );
});

function pass() {
  var firstPost = postArray.shift();
  $(&#39;.pass&#39;,firstPost).fadeTo(&#39;fast&#39;, 0.2);
  next(firstPost,postArray[0]);
}

function reblog() {
  var firstPost = postArray.shift();
  var reblogImg = $(&#39;.reblog&#39;, firstPost);
  reblogImg.fadeTo(&#39;fast&#39;, 0.2);
  var reblogId = reblogImg.attr(&#39;id&#39;).replace(/^reblog_/, &#39;&#39;);
  var permalink = $(&#39;#post_&#39; + reblogId + &#39; a.permalink&#39;).attr(&#39;href&#39;);
  $.post(&#39;./api/reblog/&#39;, {url: permalink});
  next(firstPost, postArray[0]);
}

function next(firstPost,secondPost) {
  setTimeout(function() {
    firstPost.remove();
    if(secondPost) secondPost.removeClass(&#39;standby&#39;);
    load();
    document.body.scrollTop = 0;
  }, INTERVAL);
}

function appendPost(li, d) {
  var posts = $(&#39;#posts&#39;);

  switch(d[&#39;post_type&#39;]) {
  case &#39;regular&#39;:
    posts.append(
      li.append($(&#39;<div />&#39;).addClass(&#39;post&#39;).addClass(&#39;chat_post&#39;)
                .html(&#39;<div class="title">&#39; +  d[&#39;title&#39;] + &#39;</div>&#39; + d[&#39;body&#39;])
               )
    );
    break;
  case &#39;photo&#39;:
    posts.append(
      li.append($(&#39;<div />&#39;).addClass(&#39;post&#39;).addClass(&#39;photo_post&#39;)
                .append($(&#39;<a />&#39;).attr(&#39;href&#39;, d[&#39;permalink&#39;])
                        .append($(&#39;<img />&#39;).attr(&#39;src&#39;, d[&#39;body&#39;]).width(400).addClass(&#39;photo&#39;))
                       )
                .append($(&#39;<div />&#39;).addClass(&#39;caption&#39;).html(d[&#39;caption&#39;]))
               )
    );
    break;
  case &#39;quote&#39;:
    posts.append(
      li.append($(&#39;<div />&#39;).addClass(&#39;post&#39;).addClass(&#39;quote_post&#39;)
                .append($(&#39;<div />&#39;).addClass(&#39;quote&#39;)
                        .append($(&#39;<span />&#39;).addClass(&#39;quote&#39;).html(d[&#39;body&#39;]))
                       )
                .append($(&#39;<div />&#39;).addClass(&#39;source&#39;).html(d[&#39;caption&#39;]))
               )
    );
    break;
  case &#39;link&#39;:
    posts.append(
      li.append($(&#39;<div />&#39;).addClass(&#39;post&#39;).addClass(&#39;link_post&#39;)
                .append($(&#39;<div />&#39;).addClass(&#39;link&#39;).html(d[&#39;title&#39;]))
               )
    );
    break;
  case &#39;conversation&#39;:
    posts.append(
      li.append($(&#39;<div />&#39;).addClass(&#39;post&#39;).addClass(&#39;chat_post&#39;)
                .append($(&#39;<div />&#39;).addClass(&#39;title&#39;).html(d[&#39;title&#39;]))
                .append($(&#39;<div />&#39;).addClass(&#39;chat&#39;).html(d[&#39;body&#39;]))
               )
    );
    break;
  }
}

function load() {
  if(postArray.length < THRESHOLD && !lock) {
    lock = true;
    var num = RANDOM ? Math.ceil(Math.random() * SUMMER) : page;
    $.getJSON(&#39;./api/dashboard/&#39;, {page: num}, function(data) {
      lock = false;
      page++;
      $(&#39;#loading&#39;).remove();

      for(var i = 0, len = data.length; i < len; ++i) {
        var d = data[i];
        var postId = parseInt(d[&#39;id&#39;]);

        if(!RANDOM && minimum <= postId) {
          if(i == (len - 1)) load();
          break;
        }
        minimum = postId;

        var li = $(&#39;<li />&#39;).attr(&#39;id&#39;, &#39;post_&#39; + d[&#39;id&#39;]).addClass(&#39;post&#39;).addClass(&#39;standby&#39;);
        postArray.push(li);

        li.append($(&#39;<div />&#39;).addClass(&#39;post_info&#39;)
                  .append($(&#39;<a />&#39;).addClass(&#39;author&#39;).attr(&#39;href&#39;, d[&#39;user&#39;][&#39;url&#39;]).text(d[&#39;user&#39;][&#39;id&#39;]))
                  .append($(&#39;<a />&#39;).addClass(&#39;permalink&#39;).attr(&#39;href&#39;, d[&#39;permalink&#39;]).text(&#39;(permalink)&#39;))
                  .append($(&#39;<img />&#39;).addClass(&#39;reblog&#39;).attr({&#39;src&#39;: &#39;./images/reblog.gif&#39;, &#39;id&#39;: &#39;reblog_&#39; + d[&#39;id&#39;]}))
                  .append($(&#39;<img />&#39;).addClass(&#39;pass&#39;).attr(&#39;src&#39;, &#39;./images/pass.gif&#39;))
                 );

        appendPost(li, d);
      }

      if(postArray[0]) postArray[0].removeClass(&#39;standby&#39;);
    });
  }
}