好き勝手に・げーあにん?

ファミコンと同い年の社会人ヌルオタの日記

はてブに日付別表示のリンクを表示するGreasemonkey

こうなります。

設定変えたり、アドレスバーに日付を入力するのがめんどくさかったので作ったのを置いとく。。例によって例の如く手抜き。閏年をまったく考えて無かったりとか、その他もろもろ。UTF-8 で保存しないと日本語が化ける。

// ==UserScript==
// @name           b_hatena_daily
// @namespace      http://d.hatena.ne.jp/tanku/
// @include        http://b.hatena.ne.jp/*
// ==/UserScript==

var DISP_YEARS_OLD = 1

function create_a_href(href, text) {
  var a = document.createElement('a')
  a.setAttribute('href', href)
  a.appendChild(document.createTextNode(text))
  return a
}

function create_years_element(disp_years_old) {
  var date = new Date()
  var day = (date.getDate()).toString()
  if (day.length < 2) {day = '0'+day}
  var mon = (date.getMonth()+1).toString()
  if (mon.length < 2) {mon = '0'+mon}
  var monday = mon+day
  
  var year = date.getFullYear()
  
  var add_elem = document.createElement('span')
  add_elem.appendChild(document.createTextNode(' '))
  add_elem.appendChild(create_a_href(year+monday, '今日'))

  // location.href が日付だったら location.href の i 年前にする
  var iSep = location.href.lastIndexOf('/')
  var iPrm = location.href.lastIndexOf('?')
  var str = iPrm >= 0 ? location.href.substring(iSep+1, iPrm)
                      : location.href.substring(iSep+1)
  if (str.length == 8) {
    var num = parseInt(str)
    if (num >= 19000000) { // 日付っぽい文字列かチェック(手抜き)
      year = Math.floor(num / 10000)
      monday = (num % 10000).toString()
      if (monday.length < 4) {monday = '0'+monday}
    }
  }

  for (var i = 1; i <= disp_years_old; ++i) {
    add_elem.appendChild(document.createTextNode(' '))
    add_elem.appendChild(create_a_href((year-i)+monday, i+'年前'))
  }
  return add_elem
}

var add_elem = null
var elems = document.getElementsByTagName('div')
for (var i = 0; i < elems.length; ++i) {
  if (elems[i].className == 'pager') {
    if (!add_elem) {add_elem = create_years_element(DISP_YEARS_OLD)}
    elems[i].appendChild(add_elem)
  }
}