cxxの日記

2008-07-20

[]僕がtombloo/scriptに入れているもの 01:11 はてなブックマーク - 僕がtombloo/scriptに入れているもの - cxxの日記

Tombloo 0.3ではFirefoxのプロファイルフォルダにあるtombloo/scriptフォルダに拡張子がjsのファイル(パッチ)を置いておくことで、Tomblooを拡張したり、細かい変更を加えることができます。下のリストは僕が実際にtombloo/scriptに入れているものです。

addBefore、addAroundについては

を参考にしました。

(2008-10-30更新、Tombloo 0.3.25がTwitterの仕様変更に対応したので該当部分を削除)

quote postをダブルクオートでくくる

addBefore(Tombloo.Service, 'post', function(ps) {
	if (ps.type == 'quote' && (!ps.favorite || ps.favorite.name != 'Tumblr'))
		ps.body = '"' + ps.body + '"';
});

addAround(Tumblr, 'post', function(proceed, args) {
	if (args[0].type == 'quote') {
		var ps = args[0] = update({}, args[0]);
		ps.body = ps.body.slice(1, -1);
	}
	return proceed(args);
});

Twitterの省略URIを補完する

addAround(
	Tombloo.Service.extractors['Quote - Twitter'], 'extract',
	function(proceed, args) {
		var ps = proceed(args);
		ps.body = ps.body.replace(
			/<a href="([^"]*)">[^<]*\.{3}<\/a>/g, '<a href="$1">$1</a>');
		return ps;
    });

photo postの画像クリック時のリンク先を元画像に

addAround(Tumblr.Photo, 'convertToForm', function(proceed, args) {
	var form = proceed(args);
	if (args[0].itemUrl)
		form['post[three]'] = args[0].itemUrl;
	return form;
});

video postの埋め込み用コードをTumblr以外に送らない

addBefore(Tombloo.Service, 'post', function(ps) {
	if (ps.type == 'video' && ps.body) {
		ps.embed = ps.body;
		delete ps.body;
	}
});

addAround(Tumblr.Video, 'convertToForm', function(proceed, args) {
	if (args[0].embed) {
		var ps = args[0] = update({}, args[0]);
		ps.body = ps.embed;
	}
	return proceed(args);
});

選択部分のソースをquoteする

Tombloo.Service.extractors.register({
	name : 'Quote - Selection Source',
	ICON : 'chrome://tombloo/skin/quote.png',
	check : function(ctx){
		return ctx.selection;
	},
	extract : function(ctx){
		var docFragment = ctx.window.getSelection().getRangeAt(0).cloneContents();
		var elem = ctx.document.createElement('div');
		elem.appendChild(docFragment);
		$x('.//a[@href]', elem, true).forEach(function(l){l.href = l.href;});
		return {
			type    : 'quote',
			item    : ctx.title,
			itemUrl : ctx.href,
			body    : elem.innerHTML.trim(),
		};
	},
});

タイトルが空のページをpostするときにURIをタイトル代わりにする

addBefore(Tombloo.Service, 'share', function(ctx) {
	if (ctx.title == '') ctx.title = ctx.href;
});

ごく一部のページでタイトルが正常に取得できないのを回避する

addBefore(Tombloo.Service, 'share', function(ctx) {
	if (ctx.document.title && typeof ctx.document.title != 'string') {
		var element = $x('//title', ctx.document);
		ctx.title = element? element.innerHTML.trim() : '';
	}
});

brazilbrazil2008/07/23 03:27いつも、ありがとうございます。修正してコミットしました。はやくgitに移りたいす。

brazilbrazil2008/07/23 03:30上記はtypoの件です。ほかニコニコ動画いただきました、パクパク。

cxxcxx2008/07/23 22:15ニコニコ動画の対応、ありがとうございます。scriptフォルダとaddBefore / addAroundのおかげで細かい改変が簡単になって嬉しいです。