ワンランク上のおっさんは,CopyAllUrls を "ttp://" に対応させたいー!

動機

Firefox のアドオンであるCopyAllUrlsには大変お世話になっています。
しかし,

ttp://www.google.co.jp
ttp://www.yahoo.co.jp

みたいなんを,どっかからコピーして,'h'を頭につけて,
貼り付けるのは,めんどい。
テキストリンクというアドオンを見つけたけど,
これって,Firefox内のお話だから,ほしいものとは違いまんた。


というわけで,javascriptを知らない私がソースを見てみて,
できそうだったら改造してしまおうという英雄譚。どこがやねん!!

結果

で,なんかすごい対症療法的な気がするけど,できちゃったみたい。ぽっ。
以下,diff 結果。

--- copyallurls.js.org	2009-01-14 20:13:11.783497600 +0900
+++ copyallurls.js	2009-01-14 20:13:54.494913600 +0900
@@ -325,11 +325,15 @@
 		var sUrl	= pastetext;
                 
 		// the following regex is extracting urls from any text
-		myRe=/((https?):\/\/((?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)|(?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)))(?::((?:[0-9]*)))?(\/(((?:(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*)(?:\/(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*))*))(?:[?]((?:(?:[;\/?:@&=+$,a-zA-Z0-9\-_.!~*'()]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)))?))?)/ig;
+		myRe=/((h?ttps?):\/\/((?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)|(?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)))(?::((?:[0-9]*)))?(\/(((?:(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*)(?:\/(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*))*))(?:[?]((?:(?:[;\/?:@&=+$,a-zA-Z0-9\-_.!~*'()]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)))?))?)/ig;
                 myArray = myRe.exec(sUrl);
                 while (myArray) {
                     newUrl = String(myArray[0]);
-                    
+
+                    if (newUrl.match(/^ttp/)) {
+                        newUrl = "h" + newUrl;
+                    }
+
                     // if current tab does not have any open url we can use it as first tab
                     if (tabcounter == 0){
                         tabcounter++;

作成手順みたいなん(WindowsXP環境)。

  • アドオンが保存されている場所

c:\Documents and Settings\ユーザー名\Application Data\Mozilla\Firefox\Profiles\xxxx.default\extensions\{xxxx}\chrome\content\copyallurls.jar

ま,検索かければ見つかるはず。


このjarファイルは,fileコマンドで見てみると,zipファイルらしいので,
拡張子をzipに変えて伸張しちゃうぞー。
jarコマンドでもいいんだろうけど,CRCエラーとか出た記憶があるので,WinRar使いまんた。


で,でてきた copyallurls.js に上記の変更を加える。
一応バックアップとっておいた方がいいかも。
ほいで,

% jar cvf copyallurls.js content

で,作成完了。
あー,今見たら,Java入れてればjarは入っているみたいなんで,
コマンドプロンプトからでもできるみたいです。


で,Firefoxを起動して確認して,オーケーと。

ソース眺めてみてわかったこととやったこと(間違っているかもしれまへんでぇ)

まず,paste で grep -i してみてそれっぽい関数copyallurls_paste()を見つける。
処理の流れは,クリップボードの中身から,正規表現で,URLとってきて,
それを,newUrlに入れて,ページを開くみたいな。彼氏? ほしい,みたいな。


なので,正規表現でURLを抽出する際,「ttp://」ではじまるのも対象としてほしいので,
https?」を「h?ttps?」に変更。
このままFirefoxに渡すと,ttpなんちゅうプロトコル知らんぞゴラァ,と
怒られた。
そこで,マッチしたURLが,newUrlに入った段階で,ttpで始まっていたら,
頭に'h'をつけちゃおう作戦。


これでできちゃったっぽいので,よしとします。
他に,dialogs/openurls.js というファイルがあるのが気にはなるが,
今のところ不具合でてないので,このままでいいかなぁと。

まとめ

こういうのって勝手にいじっていいのかな?
あと再配布とか。
ま,お疲れっしたー。