朝顔日記2007/12月 -

userChromeJS 1.0 キタ

publish
2008-12-23T16:06:17+09:00
tags
はてぶ

拡張機能にするほどでもないちょっとした改良を、スクリプトファイルを書くだけで Firefox に施すことができるけど、使うにはちょっと敷居が高いツウ向けの拡張機能、userChrome.js の後継の拡張機能を alta88 氏が発表しました。zeniko 氏の userChrome.js の最終バージョンは 0.8 だったのですが、今度は微妙に名前が変わって、ドットなしの userChromeJS になっています。拡張機能の id も変わっているので、これまで userChrome.js を使っている人がインストールすると上書きされずに、userChrome.js 0.8 と userChromeJS 1.0 が同居することになるので注意が必要です。

さて、userChromeJS の目玉ですが、ユーザファイルの管理を容易にする 'import' 機能がネイティブ実装された事です。これまでの、userChrome.js はユーザスクリプトの管理を容易にするために、いわゆるサブスクリプトローダというものを使っていました。そこらへんの事情については、以前書いた Firefox の拡張機能、userChrome.js の私の使い方 を参照していただくとして、サブスクリプトローダを使うことでユーザスクリプトを個別に記述することが可能になっていたわけです。これが、今度の userChromeJS では、この機能自体が内蔵されたということです。

ただ、プロファイルの chrome フォルダにある userChrome.js ファイルにどこにあるユーザスクリプトを読み込ませるかの指定は行う必要があります。この指定の仕方については、プロファイルの extensions フォルダの userChromeJS@mozdev.org フォルダにある、README.txt に書いてあります。ちなみに、プロファイルの chrome フォルダに userChrome.js というファイルがない場合は自動的に userChrome.js というファイルが生成されるのですが、この userChrome.js というファイルの内容は README.txt と同じものです。

何かたくさん書いてあるように見えますが、コメントで使用方法が書いてあるだけです。一から自分で userChrome.js を作成してもいいですし、自動生成された userChrome.js ファイルの末尾あたりにどこにあるユーザスクリプトを読ませるかという設定を書いておけばいいでしょう。

以下簡単に、指定の仕方を書いてみましょう。

.js や .xul なファイルを単独で指定する場合は、以下のようにします。

userChrome.import("ファイルのフルパス");

具体的には以下のような感じです。

userChrome.import("C:\\Program Files\\Mozilla\\scripts\\ほげほげ.js");

Windows の場合は、上記のように "\" をエスケープしてやる必要があります。

相対パスで指定することもできます。その場合は以下のように

userChrome.import("ファイルの相対パス", "Token");

プロファイルの chrome フォルダの scripts フォルダに格納する場合だと以下のようになります。

userChrome.import("scripts/ほげほげ.js", "UChrm");

ここでいう、Token には Getting special files に記述されているものが使えるようです。具体例で出した UChrm はプロファイルにある chrome フォルダを指します。

ファイル単独の import ではなく、フォルダ指定もできます。フルパスで指定する場合は以下のような感じ

userChrome.import("C:\\Program Files\\Mozilla\\scripts");

デスクトップにある scripts フォルダにある場合は以下のように。

userChrome.import("scripts", "Desk");

従来どおり、プロファイルの chrome フォルダ内にあるやつは全部読んでくれ、という場合は以下のように。

userChrome.import("*", "UChrm");

私の環境では、おおむねうまく動いているように見えているんですが、うまく行かない場合もあるようで、userChromeJS のインポートを使わずに、従来のサブスクリプトローダを使うこともできるようです。

おまけで、私が実際に使っている userChrome.js ファイルを書いておきましょう。これで全文です。

userChrome.import("d:\\phoenix\\scripts");

さらにおまけで、使っているユーザスクリプトのリスト。

  • AlwaysRememberPassword.uc.js
  • backforward-buttonToolTip.uc.js
  • ColorTab.uc.js
  • CopyURL+Title.uc.js
  • copyXpath.uc.js
  • DragNgoModoki5.uc.js
  • ElementInspector.uc.js
  • go30.uc.js
  • Launcher.uc.js
  • OpenChromeFolder.uc.js
  • seachbarOnDropUseTextContent.uc.js
  • SearchEngineDefault.uc.js
  • shortmenu.uc.js
  • TabContextMenu.uc.js
  • textLink.uc.js
  • viewMenuInStylishPopup.uc.js
  • conqueryModoki3.uc.xul
  • PipeliningToggle.uc.xul

[ 「userChromeJS 1.0 キタ」へコメントをつける ]

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2007/12/diary_081223a.html

rNote に Markdown を導入

publish
2008-12-30T19:05:17+09:00
tags
はてぶ

このサイトは、rNote を使って構築しているんですが、他にもいくつか管理しているサイトでも rNote を使っていたりします。このサイトの場合は自分で記事を書いて、それを自分でマークアップしているのでいいのですが、ほかのサイトの場合はお客さん(誰)が書くのでいわゆる wiki 的な記法が使えると便利です。で、自作のオンライン更新用のエディタはそれなりの記法を装備していて、それを保存する際に xml に変換して保存しています。が、再編集する場合には再度、wiki 的な記法に逆変換しているので、あまり凝った記法は使えません。

rNote は記事を xml で記述しておいて、それを見せる段になると (x)html に整形する仕組みになっているのです。メリットとしては、ひとつのエントリーがひとつの xml ファイルになっているので、それなりに汎用性が高い言えます。しかし、xml やら html やら知らない人にしてみれば、記事を xml としてマークアップするのが大変だというでもメリットもあります。そこで考えたのが、rNote 本体を改造して、wiki 的な記法で記事本文を書いておいてもそれを整形する際に自動でよしなにする方法です。記事本文を xml にするのをあきらめて、head 的な部分のみ xml という形に甘んじれば(?)、かなり扱いは簡単になるはずです。

ということで、rNote 本体を改造して、PHP Markdown Extra というライブラリを使えるようにしてみました。以下改造箇所。

rnote.php の16行目辺りで、markdown を使うようにします。


require("rnote_config.php");
include_once("markdown.php");

rnote.php の255行目付近の get_XMLTag 関数をちょっといじって、以下のように。


function get_XMLTag($tag,&$str){
  if(preg_match("/<$tag.*?>[[:space:]]*(.*)[[:space:]]*<\/$tag>/s",$str,$buf)) {
    if($tag == TAG_TEXT) {                 // 本文用要素であれば
      $buf[1] = markdown($buf[1]);         // markdown の処理
    }
    return $buf[1];
  }
  return '';
}

これで、本文を Markdown 記法で書いても表示する際には、なんとかなっているはずです。

さて、あとは使いやすいオンラインエディタを作るだけです。(それが問題

[ 「rNote に Markdown を導入」へコメントをつける ]

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2007/12/diary_081230a.html