連番URLの移動について

ここで何度か取り上げているmammo.tvのインタビューもそうですが、以前からURLに連番が含まれている場合にはそれを元に移動したいなと感じていました。もちろんFirefoxだとFastPrevNextや、ChromeだとIncrementor等アドオンやエクステンションでの対応も可能なのですが、アドレスバーへのスクロール操作やキーボードでのショートカットが邪魔くさいのですね。


一般的と言えば一般的なことなので誰かがやっていると思うのですが、せっかくなので自分なりにGreasemonkeyスクリプトを書いてみました。
http://jigendaddy.web.fc2.com/greasemonkey/rpage.user.js
ソースも貼っておきます。

// ==UserScript==
// @name        rpage
// @namespace   jigendaddy
// @include     *
// @version     1
// ==/UserScript==
if(RegExp(/(\d+)\.(htm|html|php)/).test(document.URL)){
	var okey=RegExp.$1;
	var kaku=RegExp.$2;
	var nkey=parseInt(okey);
	pkey=nkey-1;
	nkey++;
	
	okey=okey+"."+kaku;
	pkey=pkey+"."+kaku;
	nkey=nkey+"."+kaku;

	
	var ourl=document.URL;
	var purl=ourl.replace(okey, pkey);
	var nurl=ourl.replace(okey, nkey);
	
	var anchor = document.createElement("a");
	anchor.href = purl;
	anchor.name="purl";
	var img = document.createElement("img");
	img.src = "http://jigendaddy.web.fc2.com/arrow_left_2.ico";
	anchor.appendChild(img);
	document.body.appendChild(anchor);

	var anchor2 = document.createElement("a");
	anchor2.href = nurl;
	anchor2.name="nurl";
	var img2 = document.createElement("img");
	img2.src = "http://jigendaddy.web.fc2.com/arrow_right_2.ico";
	anchor2.appendChild(img2);
	document.body.appendChild(anchor2);
}

矢印のアイコンに、次のページのリンクを貼るようにしました。左が一つ減少で、右が一つ増加です。
連番の数値と拡張子がxxx.htmlのような形で、繋がっている場合にのみ対応しています。


これだと、mammo.tvのインタビューのように桁合わせにゼロが付加されるパターン(00x.htmlとか)に対応できないので、また考えてみました。
http://jigendaddy.web.fc2.com/greasemonkey/zerotest2.user.js

// ==UserScript==
// @name        zerotest2
// @namespace   jigendaddy
// @include     *
// @version     1
// ==/UserScript==
if(RegExp(/(\d+)\.(html|htm|php)/).test(document.URL)){
	var skey=RegExp.$1;
	var kaku=RegExp.$2;
	var zflag=0;

	for(var i=0;i<skey.length;i++)
	{
		if(skey.charAt(i)=="0")
		{
			zflag++;
		}
		else
		{
			break;
		}
	}
	
	var okey=parseInt(skey,10);
	var pkey=okey-1;
	var nkey=okey+1;
	
	var kagari=0;
	var ksagari=0;

	for(var j=1;j<=skey.length;j++)
	{
		if(okey==Math.pow(10,j))
		{
			ksagari++;
		}
		else if(okey==Math.pow(10,j)-1)
		{
			kagari++;
		}
	}
	
	if(nkey==1)
	{
		var pkey=0;
	}
	/*alert(zflag-kagari);
	alert(zflag+ksagari);
	alert(megane.substring(0,zflag));*/

	var megane="0000000000";
	pkey=megane.substring(0,zflag+ksagari)+pkey;
	nkey=megane.substring(0,zflag-kagari)+nkey;
	okey=megane.substring(0,zflag)+okey;

	/*alert(pkey+"\t"+nkey+"\t"+okey);*/

	okey=okey+"."+kaku;
	pkey=pkey+"."+kaku;
	nkey=nkey+"."+kaku;

	var ourl=document.URL;
	var purl=ourl.replace(okey, pkey);
	var nurl=ourl.replace(okey, nkey);
	
	var anchor = document.createElement("a");
	anchor.href = purl;
	anchor.name="purl";
	var img = document.createElement("img");
	img.src = "http://jigendaddy.web.fc2.com/arrow_left_2.ico";
	anchor.appendChild(img);
	document.body.appendChild(anchor);

	var anchor2 = document.createElement("a");
	anchor2.href = nurl;
	anchor2.name="nurl";
	var img2 = document.createElement("img");
	img2.src = "http://jigendaddy.web.fc2.com/arrow_right_2.ico";
	anchor2.appendChild(img2);
	document.body.appendChild(anchor2);
	
}

ビットシフトの発想で、左からゼロを取り出してチェックしています。ほとんどURLの数字に1足してリダイレクトするブックマークレットのパクリと言われても仕方ない出来ですが、10から9で桁下がり、9から10で桁が上がるのも考えてゼロを付加するようにしました。


wedataの利用等でもう少しなんとかしたい部分もあるのですが、私の技術だとこの辺が限界のようです。興味のある方は是非。