2006-03-13
taglibro の今後の予定
- Reference URI
- http://lowreal.net/logs/2006/03/13/1
- Written Time
- 2006-03-13T02:12:06+09:00
- Tags
-
- taglibro
- site
たぶんやらないけど、やりたいことを書いとく。
- まず 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 スクリプト
- Reference URI
- http://lowreal.net/logs/2006/03/13/2
- Written Time
- 2006-03-13T13:10:16+09:00
- Tags
-
- js
- net
例えば Neighbours とか Friends のリンクとか
実装がすごい汚い。
Trackback URI: http://lowreal.net/logs/2006/03/13/2.trackback
JS の XPath
- Reference URI
- http://lowreal.net/logs/2006/03/13/3
- Written Time
- 2006-03-13T14:21:48+09:00
- Tags
-
- xpath
- js
前々からいちいちあのクソながったらしい 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
簡易ビルダー
- Reference URI
- http://lowreal.net/logs/2006/03/13/4
- Written Time
- 2006-03-13T14:39:41+09:00
- Tags
-
- js
まえのとあわせて
$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 イベントが起きたり起きなかったり
- Reference URI
- http://lowreal.net/logs/2006/03/13/5
- Written Time
- 2006-03-13T20:53:19+09:00
- Tags
-
- js
GM で window.addEventListener("scroll", fuction (e) {}, false); とかやってみたんだけど、どうもページごとにイベントが発生したりしなかったりする。なんでだろう。全然わからない。
例えばこのサイトだと、日記のページは全てイベントが発生しない。で、/about とか /xbel とかはちゃんと発生する。
Trackback URI: http://lowreal.net/logs/2006/03/13/5.trackback
NULL
Generated with Taglibro
この日記は Taglibro と呼ばれる XML ベースの XSLT をテンプレートとして使ったシステムを使っています。現在の Taglibro は Ruby, ruby-xslt, libxml-ruby による実装です。ソースコードはとりあえず公開していません。
Comments (0)