b2r/chaikaスキンのsmorgas-lego-exをイメぴたに対応させる方法の覚書

必要なことは2つ。

  1. リファラを弄ってイメピタ側から弾かれないようにする
  2. スキンのpopup.jsを書き換えてイメぴたのURLを画像ファイルと認識させる

リファラ操作

リファラの書き換えは色々方法があるが、Proxomitronで対応した。
アップローダに上がってるRefererControlフィルタを導入して、ブロックリストに以下のように記述。

### イメぴた ###
$URL([^:]+://imepita.jp/image/([0-9]+{8}/[0-9]+{6})\1)$SET(0=http://imepita.jp/\1)

popup.jsの書き換え

2ヶ所を修正。
まず、拡張子で画像ファイルを判別している正規表現の部分。エディタで開いて「jpg」で検索すれば見つかると思うけど、

regExp: /\.(jpg|jpeg|png|gif|mng|tiff|tif|bmp|pict)$/i,

の部分を

regExp: /(http:\/\/imepita\.jp\/\d{8}\/\d{6})|\.(jpg|jpeg|png|gif|mng|tiff|tif|bmp|pict)$/i,

と書き換える。
次に、画像取得のためにイメぴたのURLを直リンURLに認識し直す部分。
以下の部分を検索し、コメントアウトで「ここから」「ここまで」と示した部分を書き加える。

/** ポップアップを表示します。onMouseOver() から呼ばれます。
 * @param {element} source   トリガー元の要素
 * @param {String}  href      画像の URI
 */
show: function(source, href) {
	if (!SkinPref.getBool("enableImagePopup", Alt_enableImagePopup)) return;
	source.removeAttribute("title");
	var img = _doc.createElement("img");
	img.onerror = this.onError.bind(this);
	img.onclick = this.onClick.bind(this);
	var nodePopup = Popup.add(img, source);
	if (nodePopup) {
		nodePopup.container.className = "popupImage";
		if (SkinPref.getBool("enableImagePopupShadeOverCancel", Alt_enableImagePopupShadeOverCancel)) nodePopup.container.className = "popupImageC";
		img.className = "imgPopup";
		nodePopup.container.style.visibility = "hidden";
		nodePopup.useFade = false;
		//alert("");
/** ▽ここから▽ **/
/* イメぴた画像ポップアップ */
		if(href.match(/(http:\/\/imepita\.jp)(\/\d{8}\/\d{6})/i)){
			img.src = RegExp.$1 + '/image' + RegExp.$2 ;
		}else
/** △ここまで△ **/
		img.src = href;
		window.setTimeout(this.resize.bind(this), 50, nodePopup);
	}
},

以上。