javascriptもよく分からず LDRize を読むという横暴

ちゃんとやってなかったけど、グレモン関係でちょこっと調べたいので autopager/ldrize を読んでみる:

クラス定義

http://d.hatena.ne.jp/amachang/20060516/1147778600
ふむ、いろいろやり方があるらしいが、

function Test() {}
Test.prototype.hello = function(){ alert("hoge");};

ってなかんじでクラスを作っていけばいいらしい。コンストラクタを使うときは、

function Test() {
	this.initialize.apply(this, arguments);
}
Test.prototype.initialize = function(v){ this.v = v; };
Test.prototype.hello = function(){ alert(this.v);};

var t = new Test("asdf");
t.hello();

あるいは JSON 的に、

function Test() {
	this.initialize.apply(this, arguments);
};
Test.prototype = {
	initialize: function(v) { this.v = v;},
	hello: function() { alert(this.v);}
};

ldrize

このぐらいの知識で読もうとするとはなんたる横暴。

設定

まず const:

  • SITEINFO = []; 個々のサイトの情報:パラグラフ認識とか
  • KEYBIND = {'j': 'Next'....} キーアサイ
  • SITEINFO_URLS = [] siteinfo を読んでくる url たち
LDRize
var LDRize = new Class();
LDRize.prototype = {
 ...: ...

Class はすぐ上で initialize.apply() をやるように定義してある。
JSON 式に paragraphes: {}, siteinfo_all: , keybinds: , html: {} などを宣言。

LDRize::initialize()

コンストラクタ。

  • 最初に this.siteinfo_all に arguments[0] を代入?
  • window.LDRize に get/setSiteinfo, get/setinfoByName をセット。外から呼べるようにするため?
  • initSiteinfo(), initParagraph(), initLDRize(), initShortcutkey() などで初期化
    • initShortcutkey(): KEYBIND{} に従い window.Minibuffer.addShortcutkey({key: key, command: cmd, description: de}) でminibuffer のショートカットに登録
    • initMinibuffer(): pinned-link, current-node などのコマンドを window.Minibuffer.addCommand に登録。
    • initParagraph: xpath を this.getSiteinfo()['paragraph'] でとってきてthis.paragraphs[xpath].setContext(pages).collect() する。。。。このところがよく分からん。どうやら xpath に対応するParagraphsインスタンスが入っている(入る)らしい
    • initHTML: ...$N() って何?
commands
  • bindNext, bindPrev, bindPin, bindOpen
Paragraphes class
    • collect
    • setContext
    • select
    • getNext/Prev
Paragraph class
Siteinfo class


長い、、、疲れたのでまた今度。
多分、最初に init のところで html よんで解析して LDRize::paragraphes{} に xpath ごとに(?)paragraph インスタントぶちこんでおいて、あとはkeybind でコールバック登録しておいて、下いくんだったら次のパラグラフ探して移動、、ってなかんじかと。