NULL::something

Login via flickr, はてな, TypeKey.

2006-03-13

taglibro の今後の予定

たぶんやらないけど、やりたいことを書いとく。

  • まず libxml-ruby を捨てて REXML を使う。もともと libxml-ruby を使おうと思ったのは REXML が名前空間をまともに処理してないからだったんだけど、名前空間とかどうでもよくなった。んで、libxml-ruby は Pure Ruby じゃないのでいちいち環境間で面倒くさい。REXML は標準添付だからその辺は心配ない。できるだけ Pure Ruby じゃない外部ライブラリを使わないようにしたい。
  • ちゃんとライブラリ化する。
  • 公開できるようにする。

Trackback URI: http://lowreal.net/logs/2006/03/13/1.trackback

Last.fm の他人へのリンクで最近のトラックを表示させる GM スクリプト

pop-up-recent-lastfm.user.js

例えば Neighbours とか Friends のリンクとか

実装がすごい汚い。

Trackback URI: http://lowreal.net/logs/2006/03/13/2.trackback

JSXPath

前々からいちいちあのクソながったらしい evaluate を書くのがだるかったのでちゃんと関数はさむようにした。

大きなバグがあります。詳細はXPath, $X function, NSResolverに書きました。以下のコードは非推奨です。

Inserted at 2006-03-16T23:19:09+09:00

$X = function (exp, context) {
    if (!context) context = document;
    var result = document.evaluate(exp, context, null, XPathResult.ANY_TYPE, null);
    switch (result.resultType) {
        case XPathResult.STRING_TYPE : return result.stringValue;
        case XPathResult.NUMBER_TYPE : return result.numberValue;
        case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
        case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: {
            result = document.evaluate(exp, context, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
            var ret = [];
            for (var i = 0, len = result.snapshotLength; i < len ; i++) {
                ret.push(result.snapshotItem(i));
            }
            return ret;
        }
    }
    return null;
}

alert($X("//p")); // Array of p elements
alert($X("count(//node())")); // => node number
alert($X("count(//body) = 1")); //=> must be true

// Firefox が嫌いになる GM スクリプト
if ($X("contains(string(/), 'Firefox')")) {
    alert("I LOVE FIREFOX!");
}

これでコピペ地獄から開放される。

Trackback URI: http://lowreal.net/logs/2006/03/13/3.trackback

簡易ビルダー

まえのとあわせて

$N = function (name, attr, childs) {
    var ret = document.createElement(name);
    for (k in attr) {
        if (!attr.hasOwnProperty(k)) continue;
        v = attr[k];
        if (k == "class") {
            ret.className = v;
        } else {
            ret.setAttribute(k, v);
        }
    }
    switch (typeof childs) {
        case "string": {
            ret.appendChild(document.createTextNode(childs));
            break;
        }
        case "object": {
            for (var i = 0, len = childs.length; i < len; i++) {
                var child = childs[i];
                if (typeof child == "string") {
                    ret.appendChild(document.createTextNode(child));
                } else {
                    ret.appendChild(child);
                }
            }
            break;
        }
    }
    return ret;
}

var pq;
document.body.appendChild($N("div", {}, [
    $N("div", {style:"font-weight:bold"}, "foobar"),
    $N("div", {}, [
        pq = $N("ol")
    ])
]));
for (var i = 0; i < 10; i++)
    pq.appendChild($N("li", {}, "hoge");

var div = $N("div");

みたいなのを使ってる。

innerHTML を使いたくない (application/xhtml+xml では一切使えない) けど、document.createElement の嵐はキモイ。中間とって GreaseMonkey のテンプレート (xyzzy の拡張 lisp を入れてる) にごちゃごちゃ書いてしのいでるます。

Trackback URI: http://lowreal.net/logs/2006/03/13/4.trackback

scroll イベントが起きたり起きなかったり

GMwindow.addEventListener("scroll", fuction (e) {}, false); とかやってみたんだけど、どうもページごとにイベントが発生したりしなかったりする。なんでだろう。全然わからない。

例えばこのサイトだと、日記のページは全てイベントが発生しない。で、/about とか /xbel とかはちゃんと発生する。

Trackback URI: http://lowreal.net/logs/2006/03/13/5.trackback

NULL

RSS feed meter for http://lowreal.net/logs/latest

Alternates

  1. RSS 1.0
  2. Atom 1.0

Generated with Taglibro

この日記は Taglibro と呼ばれる XML ベースの XSLT をテンプレートとして使ったシステムを使っています。現在の Taglibro は Ruby, ruby-xslt, libxml-ruby による実装です。ソースコードはとりあえず公開していません。