WindowsにあるようなToggleDesktopをROX用に作ってみました。
http://rox.sourceforge.net/desktop/node/243
ソースはわずか17ステップ...。苦笑
2008/01/31
MinibufferからTomblooを操作してTumblrにポストする
追記1
タイトルがうまく取れていないっぽい。
あとリンクも見付けれてない...orz
時間見つけて直します。
一応、現在見ているページならポスト出来るみたい。
追記2
直した。
Tomblooが良く出来てて素晴らしい。
Tomblooは現在のコンテンツに合わせてポストする形式を集約し、コンテキストメニューから集約したアイテムをポスト先へ送信する、すばらしい拡張です。
現状、標準のポスト先としてFlickr、Tumblr等がポスト先として選択出来る様になっています。
Minibufferフリークとしては、これをMinibufferから使えないのは物悲しい!
ってことで適当にハックしてMinibufferからpostする方法をご紹介します。
とは言っても今日ご紹介する方法は、ブックマークレットでもなければグリースモンキーでもありません。Firefoxの拡張を弄る事になりますので自己責任でお願い致します。
まずTomblooの拡張が格納されているフォルダ、
現状はTomblooが扱えるコンテンツの中でも、リンクのポストにしか対応していませんが、selection等を弄ればQuote、画像を選択させれば画像ポスト(Tumblr以外からのReblog)がMinibufferから可能になるかと思います。
今後やる気が続行すれば、作者殿にTomblooをプラガブルにする為の提案をさせて頂きたい...と思っています。
※やる気が続行すれば...の話です。
ただ、やっぱり特権のある部分からMinibufferを操作する行為は幾らevalInSandboxとは言え怖い...苦笑
リンク:Tombloo 0.1.0
タイトルがうまく取れていないっぽい。
あとリンクも見付けれてない...orz
時間見つけて直します。
一応、現在見ているページならポスト出来るみたい。
追記2
直した。
Tomblooが良く出来てて素晴らしい。
Tomblooは現在のコンテンツに合わせてポストする形式を集約し、コンテキストメニューから集約したアイテムをポスト先へ送信する、すばらしい拡張です。
現状、標準のポスト先としてFlickr、Tumblr等がポスト先として選択出来る様になっています。
Minibufferフリークとしては、これをMinibufferから使えないのは物悲しい!
ってことで適当にハックしてMinibufferからpostする方法をご紹介します。
とは言っても今日ご紹介する方法は、ブックマークレットでもなければグリースモンキーでもありません。Firefoxの拡張を弄る事になりますので自己責任でお願い致します。
まずTomblooの拡張が格納されているフォルダ、
${FIREFOX_PROFILE}/extensions/tombloo@brasil.to/chrome/content/library/Mozaic.htmlを開き
<script type="text/javascript" src="../library/20_Tumblr.js"></script>
<script type="text/javascript" src="../library/30_Tombloo.Service.js"></script>
<style>
となっている部分に
<script type="text/javascript" src="../library/20_Tumblr.js"></script>
<script type="text/javascript" src="../library/30_Tombloo.Service.js"></script>
<script type="text/javascript" src="../library/32_Minibuffer.js"></script>
<style>
と32_Minibuffer.jsを追加します。次に
${FIREFOX_PROFILE}/extensions/tombloo@brasil.to/chrome/content/library/32_Minibuffer.jsを作成し、以下のソースをペーストして保存します。
var GreasemonkeyServiceClass = Components.classes["@greasemonkey.mozdev.org/greasemonkey-service;1"];
log(GreasemonkeyServiceClass);
if (GreasemonkeyServiceClass) {
function update(target, src){
for(var key in src)
target[key] = src[key];
return target;
}
function addBefore(target, name, before) {
var original = target[name];
target[name] = function() {
before.apply(target, arguments);
return original.apply(target, arguments);
}
}
var GreasemonkeyService = GreasemonkeyServiceClass.getService().wrappedJSObject;
addBefore(GreasemonkeyService, 'evalInSandbox', function(code, codebase, sandbox){
if (sandbox.Minibuffer && sandbox.LDRize) {
sandbox.Minibuffer.addCommand({
name: 'tombloo',
command: function(stdin) {
var view = sandbox.LDRize.getSiteinfo()['view'];
var xpath_link = sandbox.LDRize.getSiteinfo()['link'];
var xpath_title = view || 'descendant::text()[normalize-space(self::text()) != ""]';
var nodes = sandbox.Minibuffer.execute('pinned-or-current-node');
forEach(nodes, function(node){
try {
var context = update(update({
document : sandbox.unsafeWindow.document,
window : sandbox.unsafeWindow,
title : sandbox.unsafeWindow.document.title,
selection : '',
event : {},
mouse : {x:0,y:0},
menu : null,
}, null), sandbox.unsafeWindow.location);
var text = '', url = '';
with(sandbox.unsafeWindow) {
var nodesSnapshot;
nodesSnapshot = document.evaluate(xpath_link, node, null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
if (nodesSnapshot.snapshotLength > 0)
context.href = nodesSnapshot.snapshotItem(0).href;
nodesSnapshot = document.evaluate(xpath_title, node, null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var allstringlength = 0;
var ypos = 0;
for(var n = 0; n < nodesSnapshot.snapshotLength; n++) {
var item = nodesSnapshot.snapshotItem(n);
var str = item.nodeValue.replace(/\s/g,'');
allstringlength += str.length;
if(allstringlength > 30){
text += str.slice(0, 30) + '...';
break;
}else{
text += item.nodeValue;
}
}
}
if (text.length) context.title = text;
var exts = Tombloo.Service.check(context);
var service = Tombloo.Service;
forEach(exts, function(ext){
service.share(context, service.extracters[ext.name]);
});
} catch(e) {alert(e)}
});
}
});
}
});
}
あとはブラウザを再起動すれば、Minibufferにtomblooというコマンドが追加され、pinを付けて
:tombloo
と実行すれば、Tumblrにリンクがポスト出来る様になっています。現状はTomblooが扱えるコンテンツの中でも、リンクのポストにしか対応していませんが、selection等を弄ればQuote、画像を選択させれば画像ポスト(Tumblr以外からのReblog)がMinibufferから可能になるかと思います。
今後やる気が続行すれば、作者殿にTomblooをプラガブルにする為の提案をさせて頂きたい...と思っています。
※やる気が続行すれば...の話です。
ただ、やっぱり特権のある部分からMinibufferを操作する行為は幾らevalInSandboxとは言え怖い...苦笑
リンク:Tombloo 0.1.0
FirefoxのブックマークツールバーでYahooヘッドラインニュースを流す方法
しげふみさんのサイトでmicrosummaryという言葉を初めて目にしました。
しばらくしたら私のサイトでもmicrosummaryに対応したいと思いますが、とりあえず遊びも兼ねて...
Yahooヘッドラインニュースの最新1件をFirefoxのライブタイトルで表示出来る物を作ってみました。
インストールには、Microsummary Buddyが必要です。
Microsummary Buddyをインストールした後、以下のリンクをクリックして下さい。
※Firefox限定です。
すると、ブックマークツールバーに以下の様なブックマークが登場します。
ライブタイトルの更新はデフォルトで30分おきという事なので、30分おきにYahooのヘッドラインニュース最新1件がブックマークツールバーに表示される事になります。
さて、このMicrosummary Buddyの拡張XMLですが中身は以下の様になっています。
XSLTで「//li...なんちゃら」とやっている部分がYahooヘッドラインニュースのトップ記事1件を取得しているXPathになります。
面白いですね。twitterの最新発言や、自分のサイトはてなブックマーク数をライブタイトルにしても面白いかも知れませんね。
livedoor Reader購読者数のライブタイトルこれはFirefoxだけの拡張で置いておくのは勿体無い。
しばらくしたら私のサイトでもmicrosummaryに対応したいと思いますが、とりあえず遊びも兼ねて...
Yahooヘッドラインニュースの最新1件をFirefoxのライブタイトルで表示出来る物を作ってみました。
インストールには、Microsummary Buddyが必要です。
Microsummary Buddyをインストールした後、以下のリンクをクリックして下さい。
※Firefox限定です。
YahooヘッドラインニュースのMicrosummary Generatorをインストールこれを入れた後Yahooヘッドラインニュースに移動し、ブックマーク追加を行います。
1段目のプルダウンメニューを広げると以下の様な項目が現れます。
ブックマークの登録先は、「個人用ツールバーフォルダ」に行います
すると、ブックマークツールバーに以下の様なブックマークが登場します。
※microsummaryが見つかるとアドレスバーに青いアイコンが現れます。
ライブタイトルの更新はデフォルトで30分おきという事なので、30分おきにYahooのヘッドラインニュース最新1件がブックマークツールバーに表示される事になります。
さて、このMicrosummary Buddyの拡張XMLですが中身は以下の様になっています。
<?xml version="1.0" encoding="UTF-8"?>
<generator xmlns="http://www.mozilla.org/microsummaries/0.1" name="Yahoo Headline News">
<template>
<transform xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0">
<output method="text"/>
<template match="/">
<text>News:</text>
<value-of select="//h1[@class='yjXL'][1]/a[1]/text()"/>
</template>
</transform>
</template>
<pages>
<include>^http://headlines\.yahoo\.co\.jp/hl$</include>
</pages>
</generator>
"generator/pages/include"でmicrosummaryを生成するURLのパターンを定義し、"generator/template/transform"でライブタイトルとなるmicrosummaryの変換式を書きます。XSLTで「//li...なんちゃら」とやっている部分がYahooヘッドラインニュースのトップ記事1件を取得しているXPathになります。
面白いですね。twitterの最新発言や、自分のサイトはてなブックマーク数をライブタイトルにしても面白いかも知れませんね。