FireGestures

「次のページ (リンク自動検出)」のスクリプトを少し改良
デフォルトの方法で検出できない場合に、
数字がついたURLのリンク先を抽出して含まれる数字を元に判断するようにした。

08/02/08

修正&改良した↓
http://d.hatena.ne.jp/nokturnalmortum/20080208#1202421887

以下、古いコード

// derived from All-in-One Gestures created by Marc Boullet

////////////////////////////////////////////////////////////////
// OPTIONS

// "prev" or "next"
// const PREV_NEXT = "prev";
const PREV_NEXT = "next";

// part of string which the link should contain
// const KEYWORDS = ["prev", "前へ"];
const KEYWORDS = ["next", "NEXT", "next", "Next", "次", "つづく", "続"];


////////////////////////////////////////////////////////////////
// PROGRAM

// first, we search for LINK tags
var doc = FireGestures.sourceNode.ownerDocument;
var links = doc.getElementsByTagName("link");
for (var i = 0; i < links.length; i++) {
  if (links[i].href &&
      links[i].hasAttribute("rel") &&
      links[i].getAttribute("rel").toLowerCase().indexOf(PREV_NEXT) == 0) {
    loadURI(links[i].href);
    return;
  }
}

// second, we search for A tags
var regexp = new RegExp("(?:" + KEYWORDS.join("|") + ")", "i");
links = doc.links;
for (i = 0; i < links.length; i++) {
  if (links[i].href &&
      links[i].textContent &&
      links[i].textContent.match(regexp)) {
    loadURI(links[i].href);
    return;
  }
}

var nlinks = [];
var regexp = /\/[^\/\d]*(\d+)[^\/]*$/;
for (i = 0; i < links.length; i++) {
	var url = links[i].href;
	var m;
	if (url && (m = url.match(regexp))) {
		nlinks.push([parseInt(m[1]), url]);
	}
}


if (nlinks.length) {
	nlinks.sort(function(a,b){return (a[0] - b[0]) * (PREV_NEXT == "next" ? -1 : 1 )});
	loadURI(nlinks[0][1]);
	return;
}