MyMiniCityを楽しむためのGMスクリプト+α
書いた人: noriaki 2007,12月19日(水) 20:00
to-Rさんで公開されている MyMiniCity のコメントユーザ名をそのユーザの街へのリンクに変更するぐりもんを改良してみました.
コメントとかもらっても、相手の街に行くのにコピペしないといけないのでめんどくさい。
そこで、コメントの名前を自動的にリンクに変更するグレースモンキースクリプトを作りました。
MyMiniCityを楽しむためのGMスクリプト[to-R]
to-Rさんで公開されているぐりもんは,ユーザ名からURLへの置換方法が不十分だったで正規表現で設定しなおしました. 具体的には,_(アンダスコア)とか:(コロン)とか,URLに使える文字として許されているのに,MyMiniCityのURLでは削られる文字をユーザ名に含むときにうまくいってませんでした.
また,ついでなのでコメント投稿時間も時差を考慮して国際対応にしてみました.このぐりもんを使う人の国の時間で表示しなおします.
追記(2007/12/21 18:30):以前のスクリプトにはクロス・サイト・スクリプティングの脆弱性が存在しました.現在はエスケープ関数の導入により解消されています.
ついでに,月の表示も[日/月]から日本人にとって自然な[月/日]の表示に変更しました.
機能
MyMiniCityの各街で,以下の機能を発揮します.
- コメント欄のユーザ名を街へのリンクに変換
- コメント時刻を時差を考慮して変換
- コメント月日を[日/月]から[月/日]に変換
インストール

minicityauthorlinkalpha.user.js
インストールしたら,試しに私の創った街のコメントに書き込んでみてください.
ソースコード
ソースは以下のとおりです.
// ==UserScript==
// @name minicityauthorLink+alpha
// @author noriaki
// @namespace http://blog.fulltext-search.biz/
// @description Auto link on MyMiniCity
// @released 2007-12-19 20:00:00
// @include http://*.myminicity.com/
// ==/UserScript==
/*
* Based on minicityauthorLink
* http://blog.webcreativepark.net/2007/12/19-184341.html
*/
(function() {
var objAll = document.getElementsByTagName("*");
var td = (new Date()).getTimezoneOffset() / 60 + 1;
for (var i=0,len=objAll.length; i"+escapeHTML(author)+": ";
} else if(objAll[i].className=="date"){
var times = objAll[i].textContent.replace(/[\[\]]/g,"")
if(times.indexOf(':') != -1) {
times = times.split(':');
times[0] = (parseInt(times[0], 10) - td) % 24;
if(times[0] < 10) times[0] = '0' + times[0];
while ( objAll[i].firstChild )
objAll[i].removeChild( objAll[i].firstChild );
objAll[i].appendChild(document.createTextNode(times[0] + ":" + times[1]));
} else if(times.indexOf('/') != -1) {
times = times.split('/');
while ( objAll[i].firstChild )
objAll[i].removeChild( objAll[i].firstChild );
objAll[i].appendChild(document.createTextNode(times[1] + "/" + times[0]));
}
}
}
})();
// Utility
// - Escape HTML Tags
var ESCAPE = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
}
var ESCAPE_EXP = /[&<>"']/;
function escapeHTML(txt) {
return txt.replace(ESCAPE_EXP, function(match) {
return ESCAPE[match];
});
}

