Skip navigation.

Kuruman Log

かつて自分のカスタムログを書きためていたこともあった

Posts tagged with "bookmarklet"

opera:cacheでインクリメンタルサーチを実現するためのBookmarklet

edvakfさんのエントリーを通じて知ったopera:cacheにadvanced searchを追加する方法が素晴らしいのでBookmarkletとして覚え書きしておきます。

原典では言語ファイルを書き換える方法が紹介されています。こちらの方が圧倒的に使いやすいのですが、如何せん言語ファイルは適宜更新されるのが問題です。書き換えを忘れてしまいますからね。

何があろうとブックマークは引き継ぐので忘れませんから、私はブックマークレットで利用することにします。

javascript:(function(){for(var i=0;document.links[i];i++){document.links[i].target='_blank'};var l=document.getElementsByTagName('tr');var sf=document.createElement('input');sf.type='text';sf.defaultValue='Search';sf.style='margin:0 4px;float:right';sf.addEventListener('focus',function(){if(this.value==this.defaultValue){this.value='';}},false);sf.addEventListener('blur',function(){if(!this.value){this.value=this.defaultValue;}},false);sf.addEventListener('keyup',function(){var v=this.value;for(var i=0,li;li=l[i];i++){var p=li.lastChild.firstChild.innerText;if(p&&p.indexOf(v)==-1){li.style='display:none'}else{li.style='display:table-row'};}},false);var inp=document.createElement('input');inp.type='button';inp.value='Thumbnails';inp.style='float:right;';inp.addEventListener('click',function(){var b=/\.(jpe?g|bmp|gif|png|ico|swf|flv)$/i;var f=/\.(swf|flv)$/i;for(var i=0,li;li=l[i];i++){var p=li.lastChild.firstChild;var c=li.lastChild.firstChild.innerText;if(li.offsetHeight!=0&&p.childNodes.length<2){if(b.test(c)){var stl='float:right;border:1px dotted black;margin:1px;padding:1px;';if(f.test(c)){var dv=document.createElement('div');p.appendChild(dv);dv.innerHTML='<embed src='+p.href+'>';var fh=dv.firstChild;fh.setAttribute('height',100);fh.setAttribute('width',100);fh.setAttribute('style',stl+'content:normal;outline:none;color:inherit');}else{var image=document.createElement('img');image.setAttribute('src',p.href);if(!image.height||image.height>100){image.height='100'};if(!image.width||image.width>100){image.width='100'};image.setAttribute('style',stl);p.appendChild(image);}}}};},false);var th=document.getElementsByTagName('th')[2];th.appendChild(inp);th.appendChild(sf);})();


原典を数文字書き換えてBookmarklet化しただけです。あとは、何故か残っていたい不要な空白を取り除いたりとか、そのくらい。

Docufarmをもっと活用するためのUserJS

,


現在Docufarmはサービスを終了しています。PDFについてはlevaさんの提供するツールを代わりに使用することができます。涼崎さんがブックマークレットを公開していますのでこちらも併せてご覧下さい。


Hidetoさんのエントリーを見て感動したのでUserJSにしてみた。Docufarm素晴らしい。

導入すると概ね良い具合にリンクをDocufarmへ飛ばすようになるはずです。トリッキーなことはしていないので、Greasemonkeyとしても動作するかと思いますが、こちらは未確認。
redirectToDocufarm.user.js
よく考えたらこれってブックマークレットで良いよね、という事に気づいた。で、できたのがこんなブックマークレット。
javascript:(function(){var e=new Array('pdf','ppt','doc','rtf','ps');var l;for(var i=0;l=document.links[i];i++){if (l.href.indexOf('www.docufarm.com')<0){for(var j=0;j<e.length;j++){if(l.href.lastIndexOf(e[j])>=1){l.href='http://www.docufarm.com/view.jsp?url='+l.href;break;}}}}})();

残念ながらブックマークレットをそのままmy.operaには書けないようなので別の場所に作っておく。

以下に一応古い内容も残しておく。


一般的にはこれを使うのがよいでしょう。が、常時リンクをスキャンするのはレスポンスの低下を招く。そんなわけで僕は以下のUserJSを導入している。
redirectToDocufarm_manual.user.js
こちらはグローバル変数を汚染するのであまり美しくはない。けれど、こちらのUserJSでは任意のタイミングでリンクの書き換えを行えるようになる。具体的には、javascript:kurumanorg_redirectToDocufarm();を読み込んだとき。毎度毎度PDFやPPTを見るわけではないので、こういった方法の方がスマートな気がするのです。

ところで、これ書いてるときにこんな風にソースを書きたい衝動に駆られた。
if (typeof(kurumanorg) == 'undefined') {
  function kurumanorg() {};
}

要するに複数のUserJSで定義するメソッドをすべて一つの変数の下に置きたいなぁ、と。すべてのUserJSの冒頭で未定義の時にのみkurumanorgとか云う謎関数をさっきのコードのような雰囲気で定義して、そのほかはすべてprototypeでぶら下げれば何となくきれいな気がする。けど、良い方法が浮かばなかった。

フォームサイズ

,

フォームサイズを変えたい時ってのもあるかな、という事で Experiments > FormTextResizer">FormTextResizerとかいうブックマークレットを仕込んでみた。

[Application]
x alt, s, i, z, e=Go to page, "javascript:TxtRsz={formEl:null,adEv:function(t,ev,fn){if(typeof document.addEventListener!='undefined'){t.addEventListener(ev,fn,false)}else{t.attachEvent('on'+ev,fn)}},rmEv:function(t,ev,fn){if(typeof document.removeEventListener!='undefined'){t.removeEventListener(ev,fn,false)}else{t.detachEvent('on'+ev,fn)}},init:function(){var textareas=document.getElementsByTagName('textarea');for(var i=0;i<textareas.length;i++){textareas.style.cursor='se-resize'}var inputs=document.getElementsByTagName('input');for(var i=0;i<inputs.length;i++){if(inputs.type=='text'){inputs.style.cursor='e-resize'}}TxtRsz.adEv(document,'mousedown',TxtRsz.initResize)},initResize:function(event){if(typeof event=='undefined'){event=window.event}var target=event.target||event.srcElement;if(target.nodeName.toLowerCase()=='textarea'||(target.nodeName.toLowerCase()=='input'&&target.type=='text')){TxtRsz.formEl=target;TxtRsz.formEl.startWidth=TxtRsz.formEl.clientWidth;TxtRsz.formEl.startHeight=TxtRsz.formEl.clientHeight;TxtRsz.formEl.startX=event.clientX;TxtRsz.formEl.startY=event.clientY;TxtRsz.adEv(document,'mousemove',TxtRsz.resize);TxtRsz.adEv(document,'mouseup',TxtRsz.stopResize);try{event.preventDefault()}catch(e){}}},resize:function(event){if(typeof event=='undefined'){event=window.event}try{TxtRsz.formEl.style.width=event.clientX-TxtRsz.formEl.startX+TxtRsz.formEl.startWidth+'px'}catch(e){}if(TxtRsz.formEl.nodeName.toLowerCase()=='textarea'){TxtRsz.formEl.style.height=event.clientY-TxtRsz.formEl.startY+TxtRsz.formEl.startHeight+'px'}},stopResize:function(event){TxtRsz.rmEv(document,'mousedown',TxtRsz.initResize);TxtRsz.rmEv(document,'mousemove',TxtRsz.resize);var textareas=document.getElementsByTagName('textarea');for(var i=0;i<textareas.length;i++){textareas.style.cursor='text'}var inputs=document.getElementsByTagName('input');for(var i=0;i<inputs.length;i++){if(inputs.type=='text'){inputs.style.cursor='text'}}}};TxtRsz.init();"

UTF-8によるアドレスバーのエンコード絡み

, ,

usopionさんがUTF-8でURLエンコードされたURLを取得するブックマークレットを作成された。普段すべてのアドレスをUTF-8でエンコードするのチェックボックスを外して使っていたが、そうしているとUTF-8で記述されていないウェブページ上に全角文字を含むリンクが在った場合に問題が発生するようだ。ブログなどに投稿するためにエンコードされていない状態のURLを取得する機会と全角文字の含まれるURLへのリンクを踏む機会。どちらが多いと問われれば、私の場合間違いなく後者だ。

……ということで、x alt, u, r, lGo to page, "javascript:prompt('現在の URI',encodeURI(location.href).replace(new RegExp('%2525([\\da-f])','gi'),'%25$1'));void(0);"を割り当ててみた。これで必要な時にはエンコード前のURLを取得できる。若干opera_exが不便になるが致し方あるまい。どうにかならないかといくらか試行錯誤してみたが、僕の手ではどうにもならなかった。

追記。ソース中のスマイル君(仮称)も僕の手ではどうにもならなかった。
Download Opera, the fastest and most secure browser