b2r/chaikaスキンのsmorgas-lego-exをイメぴたに対応させる方法の覚書
必要なことは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); } },
以上。