/*
* @title うごメモはてなを拡張
* @description うごメモはてなをいろいろと拡張します。「http://www.geocities.jp/ugomemo_harimau/」ブックマークレット版です。レット版では一部うまくいかない可能性がありますので、お試し程度にどうぞ。
* @license 未定
* @include http://ugomemo.hatena.ne.jp/*
* @include http://d.hatena.ne.jp/ugomemohatena/*
* @require
*/
function init()
{
AddGoogleSearch();
StopFavorite();
ReplaceUgoPlayer();
AddDownloadLink();
//AddDowloadLink2();
CommentReloder();
PopupLetter();
AccountPopup();
}
//ベンリ関数
$id = function(id){return document.getElementById(id)};
$class = function(class){return document.getElementsByClassName(class)};
$tag = function(tag){return document.getElementsByTagName(tag)};
$e = function(XPath){ return document.evaluate(XPath,document,null,7,null);};
$e2 = function(xpath,target){ return document.evaluate(xpath,target,null,7,null); }
$create = function(tagname){ return document.createElement(tagname); }
$createFromHtml = function(html,tag) { if(tag == undefined)tag = "div"; var temporary = $create(tag);temporary.innerHTML = html;return temporary;}
$createFromElement = function(element,tag) { if(tag == undefined)tag = "div";var temporary = $create(tag);temporary.appendChild(element);return temporary;}
function GetRequest(uri,callback)
{
if(window.opera)
{
xhe = new Ten.XHR(uri,null,callback);
}else
{
GM_xmlhttpRequest({
method: 'GET',
url: uri,
headers: {},
onload: function(responseDetails) { callback(responseDetails); }
});
}
}
//パスを保持
var BaseFLVPath;
if( location.href.indexOf('my.widget.iframe') == -1 ) {
(function(){init();})();
}
//################## Google検索 ##################
function AddGoogleSearch()
{
var t = $id("global-search");
if(t == null)return false;
//aタグを作成
var a = document.createElement("a");
a.className = "search";
a.href="javascript:void()";
a.addEventListener("click", function()
{
document.location = "http://www.google.co.jp/search?q=" + encodeURI($id("global-search-input-area").value)
+ "&domains=ugomemo.hatena.ne.jp&sitesearch=ugomemo.hatena.ne.jp";
},false);
//imgタグを作成
var img = document.createElement("img");
img.style.cssText="margin-bottom:-3px"
img.src = 'data:image/gif;base64,'+
'R0lGODlhEAAQAPcAANQuJDSmJOSalDzKRJzOnAxKpGy6bOymLLzO7DSOLDSuPFSe5OySjNzu3Ex6'+
'vIRWLOTu9LTK5HzCbDSaPPS6LFy+PFSCzOw6NJy23PTivOz69OxmZESmPMw+JESyRJTClPTerHym'+
'3CRy1OzGbDyaTPSuLDySNDyiPPz+/OQ6LPTCLKzWtPze3Ey2POy2TOz2/KTGpCR61BRevOy6XESy'+
'NOz27ESaPPS+PDSK5JzKnPzmjOSyPJTSrDSKPGyu7OyWlPzy3MRWNOTy/PS+NFS+RJzC7JTCnJyy'+
'1PTWjPQ2LDR61ESuPHSiLGzKRJTSpIS6hMza/GSm5OyWjPy6xHzGfDyePPS2NFSK1PRGRPzytPz6'+
'9PRuZOw+LEy2ROzSdOyuNDySPPTCRMzi9PT6/BRezMxeNGS+RHyu5EyyPOwuHDyiNPyqtFTGRKTS'+
'nBRSrJyuZOSqLLTS7EyKLEyi5PSSjOzy5Dx6zNzq/HzCdDyaPFyKxOw+NJy65PzivPT69OxqZESq'+
'PMyejKzexFSO3MRGLPTCxBRmzCx+3CR23PTGNPz25PTetDyOPKTG7JzGnPTWdNTm9MRiNJTGlESe'+
'PPQ6LPS6NOyyNDyWPHyy5EyyRESiPOw6LPT2/OyyPOzy/Fy+RDx61EyuPBODgwB8fCAA4OkAb5QA'+
'F3wAAGAApQAA/5UAgHwAfP8AAP8AAP8AAP8AAF0AAAABAJUAAHwAAOoZAPQsAICDAHx8AAAwtADo'+
'ABYTAAAAAAD0VAAr6QCDEwB8ABgAAXgAABYAAAAAAADR6AHp6AATEwAAAAAMCwCh8wBPgAAAfPda'+
'qPQA+4AAE3wAABw02OjpmhMTgwAAfBidqHhk/xaDgAB8fABw/wC9/wBP/wAA/wCcpQDI/wBPgAAA'+
'fAoAiAIBgQAAQgAAAAAw4ADobwATFwAAAAUAAAMBAAAAAAAAABi40QBk6QCDEwB8AAABZAAAZAAA'+
'gwAAfAAA7gAAOQAAAAB8AEMYZDroZAATg4gAfEwuakpncVtpSLRmACH5BAAAAAAALAAAAAAQABAA'+
'Bwj/AFGggBDljCcUhTb8+bOl4R8WKMb4wBEDk0A6abhw2cNlkxQUL+bgQDTo4JpNmzRySfEDBacF'+
'h0TYiYMQS5IklDal+IiiCBkyoMSgkNKhTKQghAAwEOLyih0+KOq8YcJmACA5DwKFaATB0x0UDSRU'+
'aPKpRaZMCiRZkGEhgsA2ASqYqdAlFCBNBBwUcKNHYAM8aFp0QQOIgxoCR47EgSIQRQ0qgEIt4cDB'+
'hqQxKLLoeIQEiGMDaihPqiIJhZcbiVRQGOHZSZUTk/KYIKAFTqUhNyx9WYSCxwQbeWQ70rLDkiUr'+
'Xzr1QfEkwYRLl8CU7jPjwAEXi8YIImHCBBgTPWAID9RCXgsKPys+OFr/AYafgAA7';
//一番下のspan作成
var back = document.createElement("span");
back.className = "commandosearch";
//その上のspan作成
var lsp = document.createElement("span");
lsp.className = "search-left";
lsp.style.cssText = "padding-left:5px";
//それぞれ乗っけていく
lsp.appendChild(img)
a.appendChild(lsp);
back.appendChild(a);
t.appendChild(back);
t.cssText = "white-space: nowrap;";//googleChromeの表示崩れ対策
}
//################## End Google検索 ##################
//################## お気に入り誤爆防止 ##################
function StopFavorite()
{
if($class("follow-btn").length != 0)
{
for(var i = 0 ; i < $class("follow-btn").length ;i++)
{
if($class("follow-btn")[i].childNodes.item(1).getAttribute("addedevent") == null)
{
$class("follow-btn")[i].childNodes.item(1).addEventListener("click",
function(e){ if(!confirm("お気に入りに追加します。よろしいですか?")){ e.preventDefault();} },false);
$class("follow-btn")[i].childNodes.item(1).setAttribute("addedevent","true");
}
}
}
}
function ReplaceUgoPlayer()
{
if($tag("object").length != 0)
{
var path = unescape($e("//param[@name='FlashVars']").snapshotItem(0).value.split("video=")[1]);
BaseFLVPath = path;
var parent = $tag("object")[0].parentNode;
var obj = parent.removeChild($tag("object")[0]);
var player = document.createElement( "embed" );
player.setAttribute( "height", 220 );
player.setAttribute( "width", 256 );
player.setAttribute( "type", "application/x-shockwave-flash" );
player.setAttribute( "src", "http://player.longtailvideo.com/player.swf" );
player.setAttribute( "id", "UgoPlayer" );
player.setAttribute( "allowscriptaccess", "true" );
player.setAttribute( "allowfullscreen", "false" );
player.setAttribute( "flashvars", 'file=' + path + '&autostart=true');
player.style.cssText = "display:inline";
parent.appendChild( player );
var btn = document.createElement("input");
btn.type = "button";
btn.value = "元";
btn.addEventListener("click",function(){
parent.innerHTML = "";
parent.appendChild( obj );
},false);
parent.appendChild( btn );
}
}
function AddDownloadLink()
{
if(BaseFLVPath == undefined)
{
if($e("//param[@name='FlashVars']").snapshotLength != 0)
{
BaseFLVPath = unescape($e("//param[@name='FlashVars']").snapshotItem(0).value.split("video=")[1]);
}else{return;}
}
var flv = BaseFLVPath;
var path = new Array();
path["FLV"] = "http://image.ugomemo.hatena.ne.jp/flv/" + flv.split("/flv/")[1];
path["ppm"] = "http://image.ugomemo.hatena.ne.jp/ppm/" + flv.split("/flv/")[1].replace("flv","ppm");
path["3gp"] = "http://image.ugomemo.hatena.ne.jp/3gp/" + flv.split("/flv/")[1].replace("flv","3gp");
path["3g2"] = "http://image.ugomemo.hatena.ne.jp/3g2/" + flv.split("/flv/")[1].replace("flv","3g2");
path["静GIF"] = "http://image.ugomemo.hatena.ne.jp/thumbnail/" + flv.split("/flv/")[1].replace(".flv","_m.gif");
path["動GIF"] = "http://image.ugomemo.hatena.ne.jp/thumbnail/" + flv.split("/flv/")[1].replace(".flv","_as.gif");
var ul = document.createElement("ul");
ul.style.cssText = "float:right;";
for( var name in path )
{
var li = document.createElement("li");
var a = document.createElement("a");
a.href = path[name];
a.textContent = name;
li.appendChild(a);
ul.appendChild(li);
li.style.cssText = "background-color:#FFA;border:2px white dotted";
}
$e("id('main')/div[@class='box screen']/div[@class='box-container']").snapshotItem(0).appendChild(ul);
}
function AddDowloadLink2()
{
if($e("//param[@name='FlashVars']").snapshotLength != 0)
{
BaseFLVPath = unescape($e("//param[@name='FlashVars']").snapshotItem(0).value.split("video=")[1]);
var flv = BaseFLVPath;
var path = new Array();
path["FLV"] = "http://image.ugomemo.hatena.ne.jp/flv/" + flv.substring("/flv/")[1];
path["ppm"] = "http://image.ugomemo.hatena.ne.jp/ppm/" + flv.substring("/flv/")[1].replace("flv","ppm");
path["3gp"] = "http://image.ugomemo.hatena.ne.jp/3gp/" + flv.substring("/flv/")[1].replace("flv","3gp");
path["3g2"] = "http://image.ugomemo.hatena.ne.jp/3g2/" + flv.substring("/flv/")[1].replace("flv","3g2");
path["GIF"] = "http://image.ugomemo.hatena.ne.jp/thumbnail/" + flv.substring("/flv/")[1].replace(".flv","_as.gif");
var div = document.createElement("div");
div.style.cssText = "padding-top:10px";
for( var name in path )
{
var a = document.createElement("a");
a.href = path[name];
a.textContent = name;
a.style.cssText = "margin-top:20px;border:2px solid white;background-color:pink;";
div.appendChild(a);
}
$e("id('main')/div[@class='box screen']/div[@class='box-container']").snapshotItem(0).appendChild(div);
$e("//div[@id='google_afc_container_1']/div/span").snapshotItem(0).innerHTML = "";
}
}
function CommentReloder()
{
if($e("id('comment')/div[@class='box-title']").snapshotLength == 1)
{
var but = document.createElement("input");
but.type = "button";
but.value = "再読み込み";
but.addEventListener("click",function(){
var url = location.href;
url = url.replace('/movie/','/movie.comment/');
document.getElementById('comment_load_area').innerHTML = '<img src="http://ugomemo.hatena.ne.jp/images/indicator_alpha.gif" /><br>Loading';
url = url.split('#')[0];
url = url.replace(/[?&]id=\d+/,''); //?id=を取る
if (url.indexOf('?') == -1 && url.indexOf('&') > -1) url = url.replace(/&/, '?'); // 先頭が&なら?にする
url = url + ((url.indexOf('?') > -1) ? '&' : '?') + new Date().getTime();
url = url.replace(/(\?|&)\d+=(&|$)/, '$1$2').replace(/&&/, '&').replace(/\?&/, '?');
location.href = "javascript:Hatena.UgoMemo.AjaxComment.loadComment(\"" + url + "\")";
},false);
$e("id('comment')/div[@class='box-title']").snapshotItem(0).appendChild(but);
}
}
var PLRetryCount = 0;
var PLShowTimer;
var isPLShowTimer = false;
var isPLLoading = false;
function PopupLetter()
{
//メニュー判定
if($e("id('hatena-user-info')/li[contains(concat(' ', @class, ' '), 'menu-ugoletter')]").snapshotLength == 0)
{
PLRetryCount++;
if(PLRetryCount < 5)
{
if(console)console.log("PopupLetter : オブジェクトが存在しません。5秒後に再実行します");
setTimeout(PopupLetter,5000);
}else
{
if(console)console.log("PopupLetter : オブジェクトが存在しません。タイムアウト(時間切れ)しました。レターポップアップは無効です");
}
} //End メニュー判定
//ポップアップエリアの作成
var popup = $create("div");
popup.style.cssText = "visibility:hidden;position:absolute;top:0px;left:0px;width:350px;height:400px;background-color:white;border:#AAA 1px solid;box-shadow:4px 4px 5px #AAA;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px" ;
document.body.appendChild(popup);
var popupHeader = $create("div");
popupHeader.style.cssText = "width:320px;height:20px;background-color:#7F7;text-align:center;float:left;border:#7F7 solid 1px;border-top-left-radius:5px";
popupHeader.textContent = "うごレター";
popup.appendChild(popupHeader);
var close = document.createElement("a");
close.textContent = "×";
close.style.cssText = "border:1px green solid;padding:0px 5px";
close.href = "javascript:;";
close.addEventListener("click",function(){ popup.style.visibility = "hidden";},false);
popup.appendChild(close);
var popupList = $create("div");
popupList.style.cssText = "height:100px;overflow:auto;clear:both;";
popup.appendChild(popupList);
var popupPrev = $create("div");
popupPrev.style.cssText = "width:100%;height:270px;text-align:left;overflow:auto;border-top:2px green solid;";
popup.appendChild(popupPrev);
//End ポップアップエリア
//mouseOut
if($e("id('hatena-user-info')/li[contains(concat(' ', @class, ' '), 'menu-ugoletter')]").snapshotItem(0))
$e("id('hatena-user-info')/li[contains(concat(' ', @class, ' '), 'menu-ugoletter')]").snapshotItem(0).addEventListener("mouseout",
function(){
clearTimeout(PLShowTimer); //表示タイマーを解除する
},false)
//mouseOver
if($e("id('hatena-user-info')/li[contains(concat(' ', @class, ' '), 'menu-ugoletter')]").snapshotItem(0))
$e("id('hatena-user-info')/li[contains(concat(' ', @class, ' '), 'menu-ugoletter')]").snapshotItem(0).addEventListener("mouseover",
function(e){
if(isPLShowTimer == false) //表示タイマーセットされていない場合のみタイマーを仕掛ける
{
PLShowTimer = setTimeout(function(){ //表示タイマー
popup.style.top = e.pageY + "px";
popup.style.left = (e.pageX - 50) + "px";
popup.style.visibility = "visible";
if(isPLLoading == false) //Ajax通信が行われていない
{
isPLLoading = true;
popupList.textContent = "一覧を取得しています";
var ListTimeOutTimer = setTimeout(function(){
popupList.textContent = "タイムアウト(時間切れ)しました。ポップアップを一度閉じて開きなおしてください。";
isPLLoading = false;
},10000); //ListTimeOutTimer
GetRequest("http://ugomemo.hatena.ne.jp/letters",function(xhr)
{
clearTimeout(ListTimeOutTimer);
isPLLoading = false;
var tmp = $createFromHtml(xhr.responseText);
var listEle = $e2(".//div[@id='main']/ul/li/div",tmp); //メール一覧を取得
popupList.innerHTML = "";
var ul = $create("ul");
ul.style.textAlign = "left";
popupList.appendChild(ul);
for(i = 0 ; i < listEle.snapshotLength ; i++)
{
var title = $e2("./div[@class='info']/div[@class='username']",listEle.snapshotItem(i)).snapshotItem(0).textContent;
var time = $e2("./div[@class='info']/div[@class='timestamp']/time",listEle.snapshotItem(i)).snapshotItem(0);
var link = $e2("./a",listEle.snapshotItem(i)).snapshotItem(0); //アンカー取得
//Hatena.Test = listEle;
var a = $create("a");
a.textContent = title;
a.href = "javascript:;";
(function() //NoName Function(A)
{
var href = link.href;
a.addEventListener("click",function()
{
popupPrev.textContent = "レターを読み込み中・・・";
var PrevTimeOutTimer = setTimeout(function(){
popupPrev.textContent = "タイムアウト(時間切れ)しました。もう一度レターを選択してください。"
},10000) //End PrevTimeOutTimer
GetRequest(href,function(x)
{
clearTimeout(PrevTimeOutTimer);
var tmp2 = $createFromHtml( x.responseText );
//Hatena.Test = tmp2;
popupPrev.innerHTML = $e2(".//div[@id='main']/div/div/span/div[@class='container']",tmp2).snapshotItem(0).innerHTML
var head = $e2(".//div[@class='info-head' or @class='news-head']",popupPrev).snapshotItem(0);
if(head)
{
var t = head.textContent;
var tLink = $create("a");
tLink.href = href;
tLink.textContent = t;
head.innerHTML = "";
head.appendChild(tLink);
head.style.backgroundColor = "#DDF";
}
})//End Letter XHR
},false);//End AddEvent Click
})()//End NoName Function(A)
var li = document.createElement("li");
var img = document.createElement("img");
img.src = (link.firstChild.src.indexOf("unread") == -1) ? "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABlklEQVR42tXP2y+CcRzH8e7QtRubi/4BNheS07I5Xlh7lEMO1SMhaTMjSqenPAwpezY3WUTK5rzUpplxqZBx7ZL5Jxw+1FaWwx7ceV9/X9/f98fh/LtavFUM4Wmwss19WbOXZLQHSqj35Kh3kQa2+YzEyxZmMNgN17UN9JkBikArKu1BI5tLlsAD+wrMX1GYu7KA3GiDkBZAMLyVnR7qjXCqVeGT3o+Y8CwziZNn4xbMxM3Jl8sp0VP+8N07VkfIClWYedCfaiHbLBhK4yUP078rw8ylCdOXRsj9LSiz1mRi1eFsnSp0ez8V1WM+boXUr35qXl0cErmLHH07nZi6MII+16NrXYJSS1kmTtTozstR7kuhO9Zg4WYSdNSAgaAC2pAS9ug4bOfj6PSJITDnPn/CqWp9R9z2AAFtWJn85/TFBKiYDlRUh/a1JghMmpdvcXqJ44hLuBvQs90BW2wM5rMRSL0ESoxqdpyq1uHj1jmFbydL0LoiAn+i7+c4VeHoDbfCzkexwfnII3lZbPNflljyZ/zbXgEHDcz+YDjlCgAAAABJRU5ErkJggg==" : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABNklEQVR42u2RP0uCURSHLw0tjRJ9g4amPkA01NLg4tBHqNGt2ooIe09FtPTHCKI2q6WpUgqaEip4ISGxKCErG1QoU9TMJ8/7opRzowcOv8u95/ndc+41ph2m24oFMjKQU62JmXmRubc+a3cpL57PmEzcncn01ax0HlQDiaFviYy7uea3xRtXNQpTzEJoGIXJp5015TxkE/B6CfF9WOmCkzEnFSZzC6s9mIKEi1QKqIne6oDnk6iRY6hgMVPfm4JkxM3DUXh/IikjKdOE7KALNgy+Sm4Hzxdwsw0fKcjdOyDpa3gMsyN2pGngqI7S0sGxDEZZ7HANH47q4+xBtQJbvVTno76/BgpqtHTQHNPegFO/W7NgcH6h8eKqXmtzXQ9US1Ir6y9oB/2WZ1lNfFYo+LvGtON/4gedlVB9mLzL5AAAAABJRU5ErkJggg==";
li.appendChild(img);
li.appendChild(a);
time.style.cssText = "color:#AAA;font-size:10px;";
li.appendChild(time);
ul.appendChild(li);
} //End For
if(listEle.snapshotLength == 0)popupList.textContent = "うごレターはありません";
});//End GetRequest
} //End isPLLoading
},1000);//End ShowTimer
}//End isShowTimer
},false); //End MouseOver Event
}
var APRetryCount = 0;
var APShowTimer;
var isAPShowTimer = false;
var isAPLoading = false;
var clickedHref = "";
var isCommentAdded = false; //for GC
var reloadFunc;
function AccountPopup()
{
//ポップアップエリアの作成
var popup = $create("div");
popup.style.cssText = "visibility:hidden;position:absolute;top:0px;left:0px;width:430px;height:500px;background-color:white;border:#AAA 1px solid;box-shadow:4px 4px 5px #AAA;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px" ;
document.body.appendChild(popup);
var popupHeader = $create("div");
popupHeader.style.cssText = "width:370px;height:20px;background-color:#7F7;text-align:center;float:left;border:#7F7 solid 1px;border-top-left-radius:5px;-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;";
popupHeader.textContent = "ユーザー情報";
popup.appendChild(popupHeader);
var close = document.createElement("a");
close.textContent = "×";
close.style.cssText = "border:1px green solid;padding:0px 20px";
close.href = "javascript:;";
close.addEventListener("click",function(){ popup.style.visibility = "hidden";
tabProf.style.visibility = tabProf2.style.visibility = tabComment.style.visibility = tabChannel.style.visibility = "hidden";},false);
popup.appendChild(close);
var popupList = $create("div");
popupList.style.cssText = "height:72px;overflow:auto;clear:both;";
popup.appendChild(popupList);
var userProf = $create("div");
userProf.style.cssText="width:430px;height:50px;background-color:#CCC;text-align:left;";
popupList.appendChild(userProf);
var tabArea = $create("div");
tabArea.style.cssText = "clear:both;width:100%;height:20px;overflow:hidden;padding-top:1px;";
popupList.appendChild(tabArea);
var popupPrev = $create("div");
popupPrev.id = "popupPrev";
popupPrev.style.cssText = "width:100%;height:400px;text-align:left;overflow:auto;border-top:2px green solid;line-height:100% !important";
popup.appendChild(popupPrev);
/* Tabs */
var tabProf = $create("a");
tabProf.textContent = "プロフィール";
tabProf.style.cssText = "margin:5px 0px 0px 0px;padding:0px;border:1px solid green;border-top-left-radius:5px;border-top-right-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;";
tabArea.appendChild(tabProf);
tabProfDiv = $create("div");
tabProf.addEventListener("click",function(){reloadFunc = undefined;loadData(tabProfDiv,function(){ popupPrev.textContent = "読み込み中かタイムアウト(時間切れ)しました。または内部エラーです。読み込み中でない場合は一度閉じて開きなおしてください。" },false)},false);
var tabProf2 = $create("a");
tabProf2.textContent = "プロフ2";
tabProf2.style.cssText = "margin:10px 0px 0px 0px;padding:0px 2px;border:1px solid green;border-top-left-radius:5px;border-top-right-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;";
tabArea.appendChild(tabProf2);
tabProf2Div = $create("div");
tabProf2.addEventListener("click",function(){reloadFunc = undefined;loadData(tabProf2Div,function(){ popupPrev.textContent = "読み込み中かタイムアウト(時間切れ)しました。または内部エラーです。読み込み中でない場合は一度閉じて開きなおしてください。" },false)},false);
var tabMemo = $create("a");
tabMemo.textContent = "作品";
tabMemo.style.cssText = "margin:5px 0px 0px 0px;padding:0px 5px;border:1px solid green;border-top-left-radius:5px;border-top-right-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;";
tabArea.appendChild(tabMemo);
tabMemoDiv = $create("div");
var tabMemoFunc = function(){
if(clickedHref != "")
loadData(tabMemoDiv,function(loader){
GetRequest(clickedHref,function(e){ loader( MemoListCreater($createFromHtml(e.responseText)).innerHTML) ;})
reloadFunc = tabMemoFunc;
},true)
};
tabMemo.addEventListener("click",tabMemoFunc,true);
var tabStar = $create("a");
tabStar.textContent = "スター";
tabStar.style.cssText = "margin:5px 0px 0px 0px;padding:0px 3px;border:1px solid green;border-top-left-radius:5px;border-top-right-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;";
tabArea.appendChild(tabStar);
tabStarDiv = $create("div");
tabStarFunc = function(){
if(clickedHref != "")
loadData(tabStarDiv,function(loader){
GetRequest(clickedHref + "favorites",function(e){ loader(MemoListCreater($createFromHtml(e.responseText)).innerHTML) ;})
reloadFunc = tabStarFunc;
},true)
};
tabStar.addEventListener("click",tabStarFunc,true);
var tabComment = $create("a");
tabComment.textContent = "コメント";
tabComment.style.cssText = "margin:5px 0px 0px 0px;padding:0px 3px;border:1px solid green;border-top-left-radius:5px;border-top-right-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;";
tabArea.appendChild(tabComment);
tabCommentDiv = $create("div");
tabCommentFunc = function(){
if(clickedHref != "")
loadData(tabCommentDiv,function(loader){
GetRequest(clickedHref + "comments",function(e){ loader( MemoListCreater($createFromHtml(e.responseText)).innerHTML) ;})
reloadFunc = tabCommentFunc;
},true)
};
tabComment.addEventListener("click",tabCommentFunc,true);
var tabChannel = $create("a");
tabChannel.textContent = "チャンネル";
tabChannel.style.cssText = "margin:5px 0px 0px 0px;padding:0px;border:1px solid green;border-top-left-radius:5px;border-top-right-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;";
tabArea.appendChild(tabChannel);
tabChannelDiv = $create("div");
tabChannelFunc = function(){
if(clickedHref != "")
loadData(tabChannelDiv,function(loader){
GetRequest(clickedHref + "channels",function(e){ loader(MakeChannelListCreater($createFromHtml(e.responseText)).innerHTML) ;})
reloadFunc = tabChannelFunc;
},true)
};
tabChannel.addEventListener("click",tabChannelFunc,true);
var reloadButton = $create("a");
reloadButton.innerHTML = "<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACaUlEQVR42p2T3UtTcRzGDwyqPyCILiYohhaUWWC+9HJSaTqbLmdC6cgzdb4sY4jGdDq345zz5Nxs01O+TRMNM3BOaZpTdHPiypZOCOlGvEoEb8O7p1w3TpdGn8sfz/N9Lj78COIfyOk/pyDVJOek3F8RsHV+nvFUz7Eh6cwit3TaKZfY7Q7x6NTOo6EsZPfycb8jFSVvn4AaeIx4ZZYpZLlsejJB6li10S4F2r16dH81o3fVglc+I8yfXqBtWQeduwEiiwCXZGPa4OWJRW7xJGMzLGsxuN4F9ksbXvvaYfncCqO3GYyHhtZdD9W8Ahmt9xBRyGOCDhTavfL6uSr0r7Ho9pnRutSEomEx7jTFI6H+Oq5VX0amMQ3pTCoiCnLMxGHyRlYceldDYLHFTSO5JWYrSSM1HMxcKBryhxd8sBKhEFk3tgXsmT2ecfMnqfuxm6iaazycCcv/riRIgpM3cpoSDfioTFZIpRvXqbvNLEVkWF5SKUwudZveoOJqrVRsZThFzpOcivkZ5dGxyEYBy9/9M2bdS1Tpt4lQPJ27Yi2dnvIffHvQM2vIsJzdMniafltpRrX9Ga5WJTuOlGXOYbN2qRbqhecQvxMh940Awq40lI9KwLjogFK9R4OHnVmILtfIg8rlH7MZ2q3A8LfegNK+tc4gpZqFmoBSyWA+ostktghxEjfogGR8XKt0VqJvtSOgtGOlDSZvC5glLdSzNZC9L4KwnY8oaZQtjBpMIEKR079nqhgrRslIAVKYm7hFxyGuNhYxlc6dizKxI7LQJD8vnuASx7H/cUjdpp/4b9QE50adUHFSbJ9fCMBCClfUMYwAAAAASUVORK5CYII='>";
reloadButton.style.cssText = "height:18px;margin:0px 0px 0px 0px;padding:0 5px;border:1px solid green;font-size:10px;float:right;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;";
reloadButton.title = "更新";
tabArea.appendChild(reloadButton);
reloadButton.addEventListener("click",function(){
tabMemoDiv.innerHTML = tabStarDiv.innerHTML = tabCommentDiv.innerHTML = tabChannelDiv.innerHTML = "";
if(reloadFunc)reloadFunc();
},true);
/* End Tabs */
//End ポップアップエリア
AddShowButton = function()
{
var eles = $e("//*[@class='username' or @class='name authorname']/a/..");
for(i = 0 ; i < eles.snapshotLength ; i++)
{
if(eles.snapshotItem(i).children[0].className == "popupClicker")
{
eles.snapshotItem(i).removeChild(eles.snapshotItem(i).children[0]);
}
var ele = eles.snapshotItem(i);
var clicker = $create("span");
clicker.className = "popupClicker";
clicker.textContent = "▼";
clicker.style.color = "blue";
ele.insertBefore(clicker,ele.firstChild);
clicker.addEventListener("click",function(e){
tabProfDiv.innerHTML = tabProf2Div.innerHTML = tabMemoDiv.innerHTML = tabStarDiv.innerHTML = tabCommentDiv.innerHTML = tabChannelDiv.innerHTML = "";
tabProf.style.visibility = tabProf2.style.visibility = tabComment.style.visibility = tabChannel.style.visibility = "visible";
clickedHref = e.target.parentNode.children[1].href != undefined ? e.target.parentNode.children[1].href : (e.target.parentNode.children[2].href != undefined ? e.target.parentNode.children[2].href : e.target.parentNode.children[3].href);
var el = ele;
popup.style.top = e.pageY + "px";
popup.style.left = (e.pageX - 50) + "px";
popup.style.visibility = "visible";
if(isAPLoading == false)
{
popupPrev.innerHTML = "";
isAPLoading = true;
userProf.textContent = "基本プロファイルを読み込んでいます。";
var ListTimeOutTimer = setTimeout(function(){
userProf.textContent = "タイムアウト(時間切れ)しました。一度ポップアップを閉じて開きなおしてください。";
isAPLoading = false;
},15000); //ListTimeOutTimer
GetRequest(clickedHref,function(xhr)
{
isAPLoading = false;
clearTimeout(ListTimeOutTimer);
var userid = "";
var tmp = $createFromHtml(xhr.responseText);
var prof = $e2(".//div[@class='userheader-container']",tmp).snapshotItem(0);
prof.children[0].style.cssText = "float:left;display:block;height:50px;";
if($e2(".//span[@class='username']",prof).snapshotLength==1)
{
userid = $e2(".//span[@class='username']",prof).snapshotItem(0).textContent.replace("id:","");
clickedHref = "http://ugomemo.hatena.ne.jp/" + userid + "/";
}else if($e2(".//span[@class='ugomemousername']",prof).snapshotLength==1)
{
userid = $e2(".//span[@class='ugomemousername']",prof).snapshotItem(0).textContent.replace("id:","");
clickedHref = clickedHref.replace("/my","/");
}
if(userid != "")
{
var dhatena = $create("a");
dhatena.href = "http://d.hatena.ne.jp/" + userid;
dhatena.innerHTML = "<img src='http://d.hatena.ne.jp/favicon.ico'>";
prof.appendChild(dhatena);
var hhatena = $create("a");
hhatena.href = "http://h.hatena.ne.jp/" + userid;
hhatena.innerHTML = "<img src='http://h.hatena.ne.jp/favicon.ico'>";
prof.appendChild(hhatena);
var bhatena = $create("a");
bhatena.href = "http://b.hatena.ne.jp/" + userid;
bhatena.innerHTML = "<img src='http://cdn-ak.favicon.st-hatena.com/?url=http://b.hatena.ne.jp'>";
prof.appendChild(bhatena);
var ahatena = $create("a");
ahatena.href = "http://a.hatena.ne.jp/" + userid;
ahatena.innerHTML = "<img src='http://a.hatena.ne.jp/favicon.ico'>";
prof.appendChild(ahatena);
}
var a = $create("a");
if($e2(".//span[@class='ugomemoname']",prof).snapshotLength == 0) //IDのみ
{
if( $e2(".//span[@class='ugomemousername']",prof).snapshotLength != 0)
{
var a = $create("a");
var nameE2 = $e2(".//span[@class='ugomemousername']",prof).snapshotItem(0);
a.textContent = nameE2.textContent;
a.style.cssText = "font-size:small";
a.href = "http://ugomemo.hatena.ne.jp/" + $e2(".//span[@class='ugomemousername']",prof).snapshotItem(0).textContent.replace("id:","") + "/my";
nameE2.innerHTML = "";
nameE2.appendChild(a);
var a2 = $create("a");
a2.textContent = "はてなマイページ";
a2.style.cssText = "font-size:small";
a2.href = "http://www.hatena.ne.jp/" + $e2(".//span[@class='ugomemousername']",prof).snapshotItem(0).textContent.replace("id:","");
nameE2.innerHTML += " ";
nameE2.appendChild(a2);
}
}
else{
var nameE =$e2(".//span[@class='ugomemoname']",prof).snapshotItem(0);
a.textContent = nameE.textContent;
a.href = clickedHref;
nameE.innerHTML = "";
nameE.appendChild(a);
var a = $create("a");
if( $e2(".//span[@class='username']",prof).snapshotLength != 0)
{
var a2 = $create("a");
var nameE2 = $e2(".//span[@class='username']",prof).snapshotItem(0);
a2.textContent = nameE2.textContent;
a2.style.cssText = "font-size:small";
a2.href = "http://www.hatena.ne.jp/" + $e2(".//span[@class='username']",prof).snapshotItem(0).textContent.replace("id:","");
nameE2.innerHTML = "";
nameE2.appendChild(a2);
}
}
userProf.innerHTML = prof.innerHTML;
tabProf.style.cssText ="margin:10px 0px 0px 0px;padding:0px 5px;border:1px solid green;border-top-left-radius:5px;border-top-right-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;";
var prof1 = $e2(".//div[@class='freetext']",tmp).snapshotItem(0);
var prof2 = $e2(".//div[@class='more']",tmp).snapshotItem(0);
var prof3;
if($e2(".//table[@class='info']",tmp).snapshotLength != 0)
prof3 = $createFromElement($e2(".//table[@class='info']",tmp).snapshotItem(0));
else
prof3 = $createFromHtml("このユーザーの情報はありません");
var prof4 = $e2(".//div[@class='star-country']",tmp).snapshotItem(0);
if(prof4)
{
for(i = 0 ; i < prof4.children[1].children[0].children.length ; i++)
{
prof4.children[1].children[0].children[i].style.cssText = "float:left";
}
prof4.innerHTML += "<div style='clear:both'></div>";
}
var prof5;
if($e2(".//div[@id='follow-box']/div[@class='box-body']",tmp).snapshotLength != 0)
{
prof5 = $e2(".//div[@id='follow-box']/div[@class='box-body']",tmp).snapshotItem(0);
for(i = 0 ; i < prof5.children[0].children[0].children.length ; i++)
{
if(prof5.children[0].children[0].children[i].children.length != 0)
{
var elem = prof5.children[0].children[0].children[i].children[0];
if(elem.tagName != "IMG")
{
elem = elem.children[0];
}
elem.style.cssText = "width:48px;height:32px;";
}
}
}else{ prof5 = $createFromHtml("このユーザーの情報はありません") }
var prof6;
if($e2(".//div[@id='comment-box']/div[@class='box-body']",tmp).snapshotLength != 0)
{
prof6 = $e2(".//div[@id='comment-box']/div[@class='box-body']",tmp).snapshotItem(0);
for(i = 0 ; i < prof6.children[0].children.length ; i++)
{
prof6.children[0].children[i].style.cssText = "clear:both";
prof6.children[0].children[i].children[0].children[0].style.cssText = "float:left";
prof6.children[0].children[i].children[3].innerHTML = "<br>" + prof6.children[0].children[i].children[3].innerHTML ;
prof6.children[0].children[i].children[3].style.cssText = "clear:both";
}
}else{ prof6 = $createFromHtml("このユーザーの情報はありません") }
var prof7;
if( $e2(".//div[@id='channel-box']/div[@class='box-body']",tmp).snapshotLength != 0)
{
prof7 = $e2(".//div[@id='channel-box']/div[@class='box-body']",tmp).snapshotItem(0);
}else prof7 = $createFromHtml("このユーザーの情報はありません");
if($e2(".//span[@class='ugomemoname']",prof).snapshotLength != 0)
tabProf2Div.innerHTML = prof3.innerHTML + "<hr>" + (prof4 ? prof4.innerHTML : "星をつけた国リストが存在しません") + "<hr>" + prof5.innerHTML +
"<hr>" + prof6.innerHTML + "<hr style='clear:both'>" + prof7.innerHTML;
tabMemoDiv.appendChild(MemoListCreater( tmp ));
if($e2(".//span[@class='username']",prof).snapshotLength != 0)
{
tabProfDiv.innerHTML = (prof1 ? prof1.innerHTML : "このユーザーのプロフィールは書かれていません") + "<br>" + (prof2 && prof2.textContent == "Myはてなのプロフィールを見る" ? prof2.innerHTML : "");
popupPrev.innerHTML = tabProfDiv.innerHTML;
}
else
{
if($e2(".//span[@class='ugomemoname']",prof).snapshotLength != 0)
{
popupPrev.innerHTML = tabProf2Div.innerHTML;
tabProf.style.visibility = tabComment.style.visibility = tabChannel.style.visibility = "hidden";
}else{//ID Only
popupPrev.innerHTML = tabMemoDiv.innerHTML;
tabProf.style.visibility = tabProf2.style.visibility = "hidden";
}
}
StopFavorite();
});/* GetRequest */
} /* isAPLoading */
},false);/* end click */
}
}/* End AddShowButton function */
AddShowButton();
//Hatenaオブジェクトへアクセス可能 OR アンセーフウィンドウにアクセス可能
if(window.Hatena != undefined || window.wrappedJSObject != undefined)
{
if((window.wrappedJSObject || window).Hatena.UgoMemo.AjaxComment)
(window.wrappedJSObject || window).Hatena.UgoMemo.AjaxComment.addEventListener("loaded",AddShowButton);
}else //いずれにも非対応対応である たぶん、webkit
{
document.body.addEventListener('DOMNodeInserted',function(evt){
if(isCommentAdded == false)
{
if(event.target.getAttribute && event.target.getAttribute("data-author-name") != null)
{
setTimeout(function(){
AddShowButton();
isCommentAdded = false;
},200);//timeout
isCommentAdded = true;
}
}/* if isCommentAdded */
}, false); // end addEvent
}
/*
from @ ページが読み込まれているdiv
loader @ 未ロード時にページを読み込む関数
isStarLoad @ 星をセットを行う
*/
function loadData(from,loader,isStarLoad)
{
if( from.innerHTML == "")
{
popupPrev.textContent = "読み込んでいます・・・";
loader(function(e){ popupPrev.innerHTML = from.innerHTML = e;
if(isStarLoad == true)
location.href = "javascript:Hatena.UgoMemo.Star.loadThumbnailStarCount(document.getElementById('popupPrev'));Hatena.UgoMemo.watchThumbnails();";
});
}
else{
popupPrev.innerHTML = from.innerHTML;
if(isStarLoad == true)location.href = "javascript:Hatena.UgoMemo.Star.loadThumbnailStarCount(document.getElementById('popupPrev'));Hatena.UgoMemo.watchThumbnails();";
}
}
function MemoListCreater(e)
{
var main = $e2(".//ul[@class='floatlist memolist']",e).snapshotItem(0);
if(main)
{
for(var i = 0 ; i < main.children.length ; i++)
{
main.children[i].style.cssText = "border:1px solid #AAA;list-style-type:none;float:left;background-image:none;margin:0px !important;height:115px;width:130px !important;;";
main.children[i].children[0].style.cssText = "padding:0px;";
main.children[i].children[0].children[0].style.cssText = "height:96px;";
main.children[i].children[0].children[0].children[0].style.cssText = "margin:0px";
main.children[i].children[0].children[1].style.cssText = "width:100px;font-size:10px";
}
var tmp = $create("div");
tmp.appendChild(main);
return tmp;
}
else
return $createFromHtml("エラー");
}
function MakeChannelListCreater(e)
{
var div = $create("div");
var main = $e2(".//div[@id='main']",e).snapshotItem(0);
main.id = "";
main.style.cssText = "width:240px;float:left;font-color:black;margin:0px";
if(main.children[0].children[0].textContent != "作成したチャンネルはありません")
{
for(var i =0 ; i < main.children[0].children.length ; i++)
{
main.children[0].children[i].style.cssText = "width:240px;height:120px;margin:0px;padding:0px;border:1px dashed green;";
div.appendChild(main);
}
}else{
div.appendChild(document.createTextNode("作成したチャンネルはありません。"));
}
var side = $e2(".//div[@id='channelbox']/div[@class='box-body']",e).snapshotItem(0);
side.style.cssText = "width:160px;float:right;font-size:12px;";
for(var i = 0 ; i < side.children[0].children.length ; i ++)
{
side.children[0].children[i].children[0].children[0].style.cssText = "width:32px;float:left;";
side.children[0].children[i].children[0].style.cssText = "height:32px;display:block;";
side.children[0].children[i].style.cssText = "clear:both;border-bottom:1px blue dashed;overflow:hidden"
}
div.appendChild(side);
return div;
} /* ユーザー名要素列挙end */
}