はてなハイクからアメーバなうに投稿
by
wakabatan
2011-03-24 [2011/03/24 12:19:11]
はてなハイクの各投稿にアメーバなうに投稿するためのボタンを付けます。
/*
* @title はてなハイクからアメーバなうに投稿
* @description はてなハイクの各投稿にアメーバなうに投稿するためのボタンを付けます。
* @license MIT License
*/
Hatena.Haiku.Pager.addEventListener('loadedEntries', addButtonsToFragment);
addButtonsToFragment(document.body);
void(0);
function addButtonsToFragment (root) {
var aStarURLs = Ten.DOM.getElementsByClassName('star-url', root);
for (var i = 0; i < aStarURLs.length; i++) {
var aStarURL = aStarURLs[i];
appendButton(aStarURL);
}
}
function appendButton (aStarURL) {
var starURL = aStarURL.href;
var m = starURL.match(/(\d+)/);
var eid = m[1];
if (!eid) return;
var iContainer = aStarURL;
var bContainer = null;
while (iContainer.parentNode && iContainer.parentNode.nodeType == 1) {
iContainer = iContainer.parentNode;
if (iContainer.className.match(/\b(?:list-body|entry)\b/)) {
break;
} else if (iContainer.className.match(/\binfo\b/)) {
bContainer = iContainer;
}
}
bContainer = bContainer || iContainer;
var img = document.createElement('img');
img.src = 'http://stat001.ameba.jp/user_images/20100525/10/now-api/3c/22/p/o0079005110557906632.png';
img.style.height = '16px';
img.style.cursor = 'pointer';
img.style.verticalAlign = 'bottom';
img.onclick = function () {
var apiURL = '/api/statuses/show/' + m[1] + '.json?body_formats=api';
var xhr = new XMLHttpRequest();
xhr.open('GET', apiURL, true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status < 400) {
var json = JSON.parse(xhr.responseText);
processJSON(json, iContainer);
img.parentNode.removeChild(img);
}
}
};
xhr.send(null);
};
bContainer.appendChild(img);
if (iContainer.hatenaHaikuNowButton && iContainer.hatenaHaikuNowButton.parentNode) {
iContainer.hatenaHaikuNowButton.parentNode.removeChild(iContainer.hatenaHaikuNowButton);
}
iContainer.hatenaHaikuNowButton = img;
}
function processJSON (json, iContainer) {
var body = json.text;
var target = json.target.title;
if (body.substring(0, json.target.word.length + 1) == json.target.word + '=') {
body = body.substring(json.target.word.length + 1);
}
if (/^id:[0-9A-Za-z_@-]+$/.test(json.target.word)) {
target = null;
}
var url = json.link;
var nowText = (target ? '[' + target + '] ' : '') + body + ' ' + url;
if (window.Hatena && Hatena.Visitor && Hatena.Visitor.name == json.user.screen_name) {
//
} else {
nowText = 'RH id:' + json.user.screen_name + ' ' + nowText;
}
var url = 'http://now.ameba.jp/?entryText=' + encodeURIComponent(nowText);
var iframe = document.createElement('iframe');
iframe.src = url;
iframe.style.width = '100%';
iframe.style.height = '8em';
iframe.style.border = '1px solid #EEEEEE';
iframe.style.borderStyle = 'solid none';
iContainer.appendChild(iframe);
}
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。