| Project Home(Google Code)
| DEMO
| ChangeLog
| License |
| Index
| Document
| Selector
| Module
| Glossary
|
オブジェクトに別のオブジェクトを混ぜ込みます。
uu.mix は uupaa.js で最も多用される関数です。
uu.mix(base, flavor, aroma = undefined) は、 base に flavor と aroma を混ぜ込み、base を返します。
base と flavor, base と aromaに同じ index がある場合は、base の値を flavor や aroma の値で上書きします。
@param Hash/Array base - ベース要素の指定です。
@param Hash/Array flavor - baseに混ぜ込む要素の指定です。
@param Hash/Array [aroma] - baseに混ぜ込む要素の指定です。デフォルトはundefinedです。
@return Hash/Array - ミックス後のbaseを返します。
uu.mix はオブジェクトの継承や、Hash の結合で活躍します。
Run
var base = uu.mix({ a: 0 }, { a: "a", b: 1 }); // { a: 0 } が { a: "a" } で上書きされる
uu.log(base); // { a: "a", b: 1 };
Hash のクローンを作成することもできます。
var org = { a: 1, b: 2 };
var clone = uu.mix({}, org);
uu.log(org === clone); // false
org.a = 2828
clone.a = 2929
uu.log(org.a); // { a: 2828, b: 2 }
uu.log(clone.a); // { a: 2929, b: 2 }
uu.mix.param(base, flavor, aroma = undefined) は、 base に flavor と aroma を混ぜ込み、base を返します。
base と flavor, base と aroma に同じ index がある場合は、base の値を flavor や aroma の値で上書きしません。
@param Hash/Array base - ベース要素の指定です。
@param Hash/Array flavor - baseに混ぜ込む要素の指定です。
@param Hash/Array [aroma] - baseに混ぜ込む要素の指定です。デフォルトはundefinedです。
@return Hash/Array - ミックス後のbaseを返します。
uu.mix.param は与えられた引数と、デフォルト引数を結合する処理で活躍します。
Run
var base = uu.mix.param({ a: 0 }, { a: "a", b: 1 }); // { a: 0 } が { a: "a" } で上書きされない
uu.log(base); // { a: 0, b: 1 }
ブラウザの判別や、微調整に必要な情報を提供します。
uu.ua(info = "")は、ブラウザの判別と、機能の有効/無効情報を返します。
@param String info - ブラウザ名, ブラウザの描画エンジン名, 機能名の指定です。
大小文字を区別しません。
@return Boolean/String - infoで指定したブラウザで動作しているか、機能が使用可能な場合にtrueを返します。
infoを省略した場合は、ユーザエージェント文字列を返します。
versionを指定するとバージョン番号を返します。
| info | Return 戻り値 |
|---|---|
| uu.ua("") | ユーザエージェント文字列を返す |
| uu.ua("opear") | Opera9+ で true |
| uu.ua("ie") | Internet Explorer6+ で true |
| uu.ua("ie6") | Internet Explorer 6 で true |
| uu.ua("ie8") | Internet Explorer 8 で true |
| uu.ua("gecko") | Firefox 2+ で true |
| uu.ua("webkit") | ![]() Webkit(Safari3+, Konqueror, Chrome) で true |
| uu.ua("ipod") | iPod/iPhone(Safari) で true |
| uu.ua("wii") | Wii Internet channel(Opera9.5) で true |
| uu.ua("air") | Adobe AIR で true |
| uu.ua("std") | 描画モードがスタンダードモードならtrue, IE6ではDTDを指定するとtrueになる |
| uu.ua("firefox3") | Firefox 3 で true |
| uu.ua("opera95") | Opera 9.5+ で true |
| uu.ua("v8") | Google Chrome で true |
| uu.ua("minclock") | setInterval(), setTimeout() 最小分解能(単位ms), GeckoとV8は10ms, その他は16msとなる |
| uu.ua("domrange") | DOM Level2 Range Module が使用可能で true |
| uu.ua("display:table") | Safari3, Firefox2, Opera9, IE8 で true, それ以外で false |
| uu.ua("version") | ブラウザ(描画エンジン)のバージョンやビルド番号 |
if (uu.ua.gecko) { ... } のようにuu.ua以下のプロパティを直接参照しても、同様の情報を取得可能です。
| Browser | uu.ua("version") |
|---|---|
| Firefox 2.0.0.14 | 20080404 |
| Firefox 3.01 | 20080702 |
| Safari 3.1 | 525.13 |
| Opera 9.5 | 10048 |
| Opera 9.51 | 10081 |
| IE 8 | 8 |
| IE 7 | 7 |
| IE 6 | 6 |
| IE 5.5 | 5.5 |
Array/Hash/FakeArrayの各要素を取り出し評価します。
uu.forEach(mix, fn, me = undefined) は、 mixの各要素に対し、fn.call(me, 要素の値, index, mix) を実行します。
Array.forEach は Array専用ですが、 uu.forEachは、Hash, Array, FakeArrayに使用可能です。
@param Hash/Array/FakeArray mix - Hash, Array, FakeArrayを指定します。
@param Function fn - 各要素を評価する関数を指定します。
@param this [me] - fn実行時のthisを指定します。デフォルトはundefinedです。
Run
uu.forEach({ a: "a", b: 1 }, function(v, i) {
uu.log(i + ":" + v); // "a:a", "b:1"
});
uu.forEach(["a", 1], function(v, i) {
uu.log(i + ":" + v); // "0:a", "1:1"
});
uu.forEach(uu.tag("*"), function(v, i) {
uu.log(i + ":" + v); // "0:[object HTMLHtmlElement]", "1:[object HTMLHeadElement]", ...
});
uu.filter(mix, fn, me) は、 mixの各要素に対し、fn.call(me, 要素の値, index, mix) を実行し、 結果が真の要素を Array で返します。
Array.filter は Array専用ですが、 uu.filterは、Hash, Array, FakeArrayに使用可能です。
@param Hash/Array/FakeArray mix - Hash, Array, FakeArrayを指定します。
@param Function fn - 各要素を評価する関数を指定します。
@param this [me] - thisオブジェクトを指定します。デフォルトはundefinedです。
@return Array - Array([ 要素, ... ])を返します。
Run
var rv = uu.filter(["a", 2, "3"], uu.isS);
uu.log(rv); // ["a", "3"]
rv = uu.filter({ a: "a", b: 2, c: "3" }, uu.isS);
uu.log(rv); // [ a: "a", c: "3" ]
rv = uu.filter(uu.tag("*"), function(v) {
return (v.tagName === "HTML" || v.tagName === "BODY");
});
uu.log(rv.length); // 2
Array.forEach(fn, me = undefined) は、Arrayの各要素に対し、fn.call(me, 要素の値, 数値index, this) を実行します。
Array.forEachはJavaScript1.5の機能です。
@param Function fn - 各要素を評価する関数を指定します。
@param this [me] - thisオブジェクトを指定します。デフォルトはundefinedです。
Run
["a", 1].forEach(function(v, i) {
uu.log(i + ":" + v); // "0:a", "1:1"
});
Array.filter(fn, me = undefined) は、Arrayの各要素に対し、fn.call(me, 要素の値, 数値index, this) を実行し、結果が真の要素をArrayで返します。
Array.filterはJavaScript1.5の機能です。
@param Function fn - 各要素を評価する関数を指定します。
@param this [me] - thisオブジェクトを指定します。デフォルトはundefinedです。
@return Array - Array([ 要素, ... ])を返します。
Run
var rv = ["a", 2, "3"].filter(function(v, i) {
return uu.isS(v); // typeof v === "string" と同じ
});
uu.log(rv); // ["a", "3"]
Array.filter(fn, me = undefined) は、Arrayの各要素に対し、fn.call(me, 要素の値, 数値index, this) を実行し、結果が偽ならループを中断しfalseを返します。結果が全て真ならtrueを返します。
Array.filterはJavaScript1.5の機能です。
@param Function fn - 各要素を評価する関数を指定します。
@param this [me] - thisオブジェクトを指定します。デフォルトはundefinedです。
@return Boolean - 全て真ならtrue, 偽があればfalseを返します。
Run
var rv = ["a", 2, "3"].every(function(v, i) {
return uu.isS(v); // typeof v === "string" と同じ
});
uu.log(rv); // false (数値要素(2)が含まれているためfalse)
Array.some(fn, me = undefined) は、Arrayの各要素に対し、fn.call(me, 要素の値, 数値index, this) を実行し、結果が真ならループを中断しtrueを返します。結果が全て偽ならfalseを返します。
Array.someはJavaScript1.5の機能です。
@param Function fn - 各要素を評価する関数を指定します。
@param this [me] - thisオブジェクトを指定します。デフォルトはundefinedです。
@return Boolean - 全て偽ならfalse, 真があればtrueを返します。
Run
var rv = [1, 2, 3].some(function(v, i) {
return uu.isS(v); // typeof v === "string" と同じ
});
uu.log(rv); // false (全要素は数値なのでfalse)
Array.map(fn, me = undefined) は、Arrayの各要素に対し、fn.call(me, 要素の値, 数値index, this) を実行し、結果をArrayで返します。
Array.mapはJavaScript1.5の機能です。
@param Function fn - 各要素を評価する関数を指定します。
@param this [me] - thisオブジェクトを指定します。デフォルトはundefinedです。
@return Array - 結果をArrayで返します。
Run
var rv = [1, 2, 4].map(function(v, i) {
return i * v;
});
uu.log(rv); // [0, 2, 8]
ノードの取り扱いを簡単にします。
uu.node.insert や uu.dom.insertText では、基準ノード(context)と位置(pos)により挿入する位置が決まります。
以下は、context と pos の関係表です。
context の一つ前の兄弟ノード(ThirdSibling)にアクセスするには、pos に UU.PREV を指定します。
/DOCUMENT_NODE (root)
|
+- /parentNode.parentNode....
| |
: +- /parentNode.parentNode
: | |
: +- /parentNode - contextの親
: | |
: +- /FirstSibling (親から見て長女) - pos = UU.FIRST
: +- /SecondSibling (親から見て次女)
+- /ThirdSibling (親から見て三女) - pos = UU.PREV
|
+- /FourthSibling (親から見て四女) - context - 基準ノード
| |
| +- /FirstChild (親から見て四女の長男) - pos = UU.FIRST_CHILD
| +- /SecondChild (親から見て四女の次男)
| +- /ThirdChild (親から見て四女の三男) - pos = UU.LAST_CHILD
|
+- /FifthSibling (親から見て五女) - pos = UU.NEXT
+- /SixthSibling (親から見て六女)
+- /SeventhSibling (親から見て七女) - pos = UU.LAST
uu.node.insert(html, context = document.body, pos = UU.LAST_CHILD) は、 context 以下の pos で指定された位置に、html ノードの断片を挿入します。
html がHTML文字列なら、uu.node.substance で HTMLを実体化し、ノードを挿入します。
@param Element/String html - ノードを指定します。
ノードの代りにHTML文字列も指定できます。
HTML文字列には、複数ノードやテキスト,スタイル属性等が含まれた複雑なHTMLを指定可能です。
@param Element [context] - 挿入の基準位置(コンテキスト)を指定します。デフォルトはdocument.bodyです。
@param Number [pos] - 挿入位置を指定します。デフォルトはUU.LAST_CHILDです。
<div id="parentNode1">
<div id="girl1">girl1</div>
<div id="girl2">girl2</div>
<div id="girl3">girl3</div>
<div id="girl4">girl4
<div id="girl4_boy1">girl4_boy1</div>
<div id="girl4_boy2">girl4_boy2</div>
<div id="girl4_boy3">girl4_boy3</div>
</div>
<div id="girl5">girl5</div>
<div id="girl6">girl6</div>
<div id="girl7">girl7</div>
</div>
上のようなDOMツリーに対し、uu.node.insert("<p>hoge</p>", uu.id("girl4"), UU.NEXT) を実行すると、下のようになります。
Run
<div id="parentNode1">
<div id="girl1">girl1</div>
<div id="girl2">girl2</div>
<div id="girl3">girl3</div>
<div id="girl4">girl4
<div id="girl4_boy1">girl4_boy1</div>
<div id="girl4_boy2">girl4_boy2</div>
<div id="girl4_boy3">girl4_boy3</div>
</div>
<p>hoge</p>
<div id="girl5">girl5</div>
<div id="girl6">girl6</div>
<div id="girl7">girl7</div>
</div>
uu.node.insertText(text, context = document.body, pos = UU.LAST_CHILD) は、 context 以下の pos で指定された位置に、テキストノードを挿入します。
text が文字列なら、テキスト文字列をテキストノードとして挿入します。
@param String text - テキストノードを指定します。
テキストノードの代りに、テキスト文字列も指定可能です。
@param Element [context] - 挿入の基準位置(コンテキスト)を指定します。デフォルトはdocument.bodyです。
@param Number [pos] - 挿入位置を指定します。デフォルトはUU.LAST_CHILDです。
Run
uu.node.replace(node, oldNode, context = oldNode.parentNode) は、 context 以下の oldNode と node を入れ替え、DocumentFragment に格納された oldNode を返します。
@param Element node - 新しいノードを指定します。
@param Element oldNode - 入れ替えられる古いノードを指定します。
@param Element [context] - コンテキストを指定します。省略可能です。
省略すると、oldNode.parentNode を基準に除去を行います。
通常使用では context の指定を省略します。
@return DocumentFragment - oldNode を格納した DocumentFragment を返します。
uu.node.remove(node, context = node.parentNode) は、 context 以下の node を取り除き、DocumentFragment に格納された node を返します。
@param Element node - 新しいノードを指定します。
@param Element [context] - コンテキストを指定します。省略可能です。
省略すると、node.parentNode を基準に除去を行います。
通常使用では context の指定を省略します。
@return DocumentFragment - node を格納した DocumentFragment を返します。
uu.node.diet(elm, depth = 0) は、elm以下のDOMノードツリーに含まれている不要なノードを除去します。
不要なノードとは、空白だけのテキストノード、タグとタグの間に挿入される改行用の暗黙のテキストノード, コメントノードです。
IEはDOMツリー構築時に、改行やコメントノードを含まないツリーを構築しますが、この挙動は他のブラウザと異なります。
dietを使うと、不要なノードを除去した状態(IEと同じ状態)にできるため、IEとIE以外のブラウザの挙動の違いを吸収することができます。
depthに1以上の値を指定すると、再帰的に子孫ノードを検索し、ノードの除去を行います。
depth = 0 なら、context 以下のノードについてのみ除去を行います。
全ての階層について除去を行う場合は、十分に大きな値(例: 999)を指定します。
@param Element elm - ノードを指定します。
@param Number [depth] - 到達可能な深度を指定します。
0以上の値を指定すると子孫ノードを再帰的に検索/除去します。
0を指定すると表層のみを検索/除去します。デフォルトは0です。
Run
<div id="root" style="background-color: yellow">div node 1-1
<ol>\n
<li>li node 2-1</li>\n
<li>li node 2-2<!-- comment node 2-2-1 --></li>\n
<li>li node 2-3</li>\n
<li>li node 2-4<!-- comment node 2-4-1 --></li>\n
</ol>\n
<!-- comment node 3-1 -->\n
<!-- comment node 4-1 -->\n
</div>
function enumBlankNode(elm, deep /* = false */) {
var rv = [], i, sz, re = /\S/; deep = deep || false;
F(elm);
return rv;
function F(elm) {
var i = 0, e;
for (i = elm.childNodes.length; i-- > 0;) {
e = elm.childNodes[i];
switch (e.nodeType) {
case 3: if (re.test(e.nodeValue)) { break; } // blank text node?
case 8: rv.push(e); break; // comment node
case 1: deep && F(e); // element node
}
}
}
}
uu.ready(function() {
uu.log("element node(in #root) length[%d].", uu.node(uu.id("root"), 1).length);
uu.log("before blank node(in #root) length[%d].", enumBlankNode(uu.id("root"), 1).length);
});
function diet(node, deep) {
uu.node.diet(node, deep);
uu.log("diet done.");
var blankNode = enumBlankNode(uu.id("root"), 1);
uu.log("after blank node length[%d].", blankNode.length);
uu.log.dir(2, blankNode);
}
uu.node.cutdown(context = document.body) は、 context以下の全てのノードを切り取りDocumentFragmentに格納したものを返します。
@param Element [context] - 切り取りを開始するノードを指定します。デフォルトは document.body です。
uu.node.substance(html) は、html 文字列をDOMノード化し、DocumentFragment を返します。
uu.node.substance は、uu.node.insert のオンザフライ(その場で生成)版です。
@param String html - HTMLの断片を文字列で指定します。
複数のノードやテキスト,スタイル属性を持つ複雑なHTMLなども指定可能です。
Run
uu.node.pos(node, reverse = false) は、node が、 親要素の中で何番目の ELEMENT_NODE かを返します。
ELEMENT_NODE 以外のノード(テキストノードやコメントノード等)はカウントしません(無視します)。
@param Element node - ELEMENT_NODE を指定します。
@param Boolean reverse - 逆方向から検索する場合に true を指定します。デフォルトは false です。
@return Number - ノードの順番を返します。
node が親を持たない場合は -1 を返します。
uu.node.count(node, tag = "*") は、node 以下の ELEMENET_NODE の数をカウントし返します。
tag に "*" 以外の文字列を指定すると、一致するタグ名を持つ ELEMENET_NODE だけをカウントします。
@param Element node - ELEMENT_NODE を指定します。
@param String tag - 絞込みを行うタグ名を指定します。デフォルトは "*" です。
"*" を指定すると、絞込みせず全ての ELEMENT_NODE を検索します。
@return Number - 見つかった ELEMENT_NODE の数を返します。
見つからなかった場合はゼロを返します。
オブジェクト指向的な"クラス"をJavaScriptでも使えるようにします。
uu.klass.kiss(args, ...) は、シンプルなクラスの雛形を生成します。
以下のように記述し、new myClass() を実行すると、myClass.prototype.construct() を自動的に呼び出します(constructがもしあれば)。 初期化に必要な引数も渡せます。
@param Mix [...] - constructに渡す引数をいくつでも指定できます。 @return Function - シンプルなクラスの雛形を生成するクロージャを返します。Run
var myClass = uu.klass.kiss();
myClass.prototype = {
construct: function(var1, var2 /*, ... */) {
// 初期化
this.privateVar1 = var1;
this.privateVar2 = var2;
},
myMethod: function() {
return this.privateVar1 * this.privateVar2;
}
};
var my = new myClass(10, 20); // 自動的に construct() を実行する。
uu.log(my.myMethod()); // "200"
uu.klass.generic(args, ...) は、汎用的なクラスの雛形を生成します。
以下のように記述し、new myClass() を実行すると、myClass.prototype.construct() を自動的に呼び出します。 初期化に必要な引数も渡せます。
uu.klass.kissには無い、3点の特別な機能を持っています。
これらの特徴により、面倒な手続きをせずとも、 メッセージポンプによるメッセージの送受信や、 イベントのハンドリングが可能になっています。
@param Mix [...] - constructに渡す引数をいくつでも指定できます。 @return Function - 汎用クラスの雛形を生成するクロージャを返します。Run
var files = uu.klass.generic();
files.prototype = {
construct: function(agent) {
this.agent = agent;
},
msgbox: function(msg, p1, p2) {
switch (msg) {
case "Hello":
uu.log("Agent[%s], I accepted a message [%s], from [%s]", msg, p1);
break;
}
}
};
var x1 = new files("Agent Mulder");
var x2 = new files("Agent Scully");
var x3 = new files("Smoking Man");
uu.msg.post(x2, "Hello Mulder", { from: "Scully" }); // モルダーからスカリーにご挨拶
uu.msg.post(0, "Hello All", { from: "Mulder" }); // (自分以外の)みんなにご挨拶
uu.msg.post(x1, "...", { from: "Smoking Man" }); // モルダーにお返事
uu.klass.singleton(args, ...) は、シングルトンクラスの雛形を生成します。
シングルトンクラスは何度newしても、いつも同じ(一つ)のインスタンスが返されます。
一つ存在すれば十分なものや、newする度に新しく生成できてしまうとまずいものはシングルトンクラスにします。
以下のように記述し、new myClass() を実行すると、myClass.prototype.construct を自動的に呼び出します。 初期化に必要な引数も渡せます。
uu.klass.singleton は、uu.klass.genericの特徴を受け継ぎ、さらに以下の特別な機能を持っています。
@param Mix [...] - constructに渡す引数をいくつでも指定できます。 @return Function - singletonクラスの雛形を生成するクロージャを返します。Run
function Run() {
var myClass = uu.klass.singleton();
myClass.prototype = {
construct: function(url /* = "" */, msg1 /* = "" */, msg2 /* = "" */ /*, ... */) {
// 初期化用メソッド
uu.mix(this, { url: url || "", msg1: msg1 || "", msg2: msg2 || "" }); // 引数の補完と、this.xxx = xxx の実行
// uu.ajax(this.url + "?" + this.msg1);
},
stabled: function(url /* = "" */, msg1 /* = "" */, msg2 /* = "" */ /*, ... */) {
uu.log("call stabled");
},
destruct: function() {
// 後処理用メソッド
// uu.ajax(this.url + "?" + this.msg2);
},
myMethod: function() {
return [this.msg1, this.msg2];
}
};
var my = new myClass(uu.id("url").value, "hello", "bye-bye"); // 自動的に construct を実行する。
uu.log(my.myMethod()[0]); // "hello"
var my2 = new myClass(); // 二度目のnewなので construct は呼ばれず、代わりに stabled が呼ばれる。
uu.log(my.myMethod()[1]); // "bye-bye"
uu.log(my === my2); // "true" myとmy2は同じもの(シングルトン)
if (window.confirm("jump to http://www.example.com/")) {
window.location.href = "http://www.example.com/"; // ページ遷移が発生するため、自動的に destruct を1度だけ実行する。
}
}
CSSクラス(className)の取り扱いを簡単にします。
uu.klass.has(elm, className) は elm要素のclassNameプロパティの値にclassNameが含まれていればtrueを返します。
@param Element elm - 要素を指定します。
@param String className - クラス名を指定します。
@return Boolean - 要素のclassNameプロパティの値に引数で指定したclassNameが含まれていればtrueを返します。
var e = document.body.appendChild(createElement("div"));
e.className = "hoge";
uu.log(uu.klass.has(e, "hoge")); // true
uu.klass.add(elm, className) は elm要素のclassNameプロパティの値にclassNameを追加します。
開発中の機能: クラス名が "js" で始まっている場合は、クラス名の先頭から "js" を取り除き、 uu.klass.setWidgetChainedClassName で登録されているuidがあるなら、 uidに対しメッセージ(UU.MSG_ADD_CLASSNAME)をpost(p1=elm, p2=js除去後のclassName)します。
@param Element elm - 要素を指定します。
@param String className - クラス名を指定します。複数のクラス名は指定できません。
uu.forEach(uu.klass("alpha"), function(v) {
uu.klass.add(v, "beta");
});
uu.klass.remove(elm, className) は elm要素のclassNameプロパティの値からclassNameを削除します。
該当する値が存在しなければ何もしません。
開発中の機能: クラス名が、uu.klass.setWidgetChainedClassName で登録されているuidがあるなら、 uidに対しメッセージ(UU.MSG_REMOVE_CLASSNAME)をpost(p1=elm, p2=js除去後のclassName)します。
@param Element elm - 要素を指定します。
@param String className - クラス名を指定します。複数のクラス名は指定できません。
uu.forEach(uu.klass("alpha"), function(v) {
uu.klass.remove(v, "beta");
});
uu.klass.toggle(elm, className) は elm要素のclassNameプロパティの値に、classNameを追加します。すでに存在する場合は削除します。
@param Element elm - 要素を指定します。
@param String className - クラス名を指定します。複数のクラス名は指定できません。
uu.forEach(uu.klass("alpha"), function(v) {
uu.klass.toggle(v, "beta"); // 既に存在するなら削除し、存在しないなら追加する
});
uu.klass.match(elm, expr) は elm要素のclassNameプロパティのから、exprにマッチするクラス名を検索し結果返します。
@param Element elm - 要素を指定します。
@param RegExp expr - RegExpオブジェクトを指定します。
@return Array/null - マッチ結果の配列またはnullを返します。
<style>
.imagerollover { background-image: url(../../img/roll.gif); }
</style>
<div class="imagerollover rollrect_0_0_50_20"></div>
<div class="imagerollover rollrect_0_20_50_20"></div>
var m;
uu.css("div.imagerollover").forEach(function(v) {
if ( (m = uu.klass.match(v, /^rollrect_([\d]+)_([\d]+)_([\d]+)_([\d]+)$/)) ) {
uu.log("x=%s y=%s w=%s h=%s", m[1], m[2], m[3], m[4]);
}
});
uu.klass.setWidgetChainedClassName(uid, className) は uidとクラス名の関連付けを行います。
関連付けされたクラス名が、uu.klass.add, uu.klass.remove, uu.klass.toggle で追加/削除が行われるとメッセージがpostされるようになります。
@param String uid - msgboxメソッドを持つuidを指定します。
@param String className - クラス名を指定します。複数のクラス名は指定できません。
クラス名の先頭に"js"は不要です。
var DummyClass = uu.klass.generic();
DummyClass.prototype = {
msgbox: function(msg, p1, p2) {
}
};
// widgetbutton クラスが追加/削除された場合にメッセージを飛ばす
uu.klass.setWidgetChainedClassName(DummyClass.uid, "widgetbutton");
uu.klass.unsetWidgetChainedClassName(uid, className) は uidとクラス名の関連付けを解除します。
@param String uid - msgboxメソッドを持つuidを指定します。
@param String className - クラス名を指定します。複数のクラス名は指定できません。
クラス名の先頭に"js"は不要です。
uu.klass.evalWidgetChainedClassName(elm, className) は elmにclassNameが追加された時の振る舞いをエミュレートさせます。
この関数を呼ぶ前に、uu.klass.setWidgetChainedClassNameで関連付けを行っておく必要があります。
@param Element elm - 要素を指定します。
@param String className - クラス名を指定します。複数のクラス名は指定できません。
クラス名の先頭に"js"は不要です。
属性の取り扱いを簡単にします。
uu.attr.get(elm, attr) は、 elm要素のattr属性の値を取得します。
setAttributeで設定された独自の属性があればそちらを取得しますが、 Elementノードに同名の属性値があればそちらを優先します。
@param Element elm - 属性を取得する要素を指定します。 @param Taxing attr - 属性名の指定です。 @return Hash/String - attrに複数の属性名を指定すると Hash({ attr: value })を返します。 attrに属性名を1つだけ指定すると 属性値 を文字列で返します。 存在しない属性名を指定すると、その要素の戻り値は空文字列("")になります。
| Expression | Returns | Note |
|---|---|---|
| uu.attr.get(elm, "title,href") uu.attr.get(elm, ["title","href"]) | { title: "the title", href: "http://..." } | 複数の属性名を指定するとHashを返す |
| uu.attr.get(elm, "title") | "the title" | 属性名を一つだけ指定すると文字列を返す |
| uu.attr.get(elm, "abcde") | "" | 存在しない属性名を指定すると空文字列("")を返す |
| uu.attr.get(elm, "title,abcde") | { title: "the title", abcde: "" } | 存在しない属性名の値は空文字列("")になる |
uu.attr.set(elm, hash) は、 elm要素のattr属性に値valueを設定します。
@param Element elm - 属性を設定する要素を指定します。
@param Hash hash - { attr: value, ...} を指定します。
| Expression | Note |
|---|---|
| uu.attr.set(elm, uu.toPair("title", "hoge")) uu.attr.set(elm, { title: "hoge" }) | { title: "hoge" }を設定 |
| uu.attr.set(elm, { title: "hoge" href: "http://..."} ) | { title: "hoge", href: "http://..." }を設定 |
スタイル情報の取り扱いを簡単にします。
uu.css.get(elm, cssProp = undefined)は、要素(elm)に適用されている計算済みのスタイルを取得します。
cssPropを省略すると全てのスタイル情報をHashで返します。
cssPropにプロパティを一つ指定すると値を文字列で返します。
プロパティを複数指定すると結果をHashで返します。
この関数ではpseudo elementを取得できません。
| cssProp | Result type 戻り値の型 | Returns 戻り値 |
|---|---|---|
| 指定しない | CSS2Properties (read only) | elmのスタイル情報 { 0: undefined, MozApperrance: "none", ... } |
| "backgroundColor" | string | rgb(51, 102, 153) |
| ["background-color", "float"] | Hash | { backgroundColor: "rgb(51, 102, 153)", cssFloat: "left" } |
| "border, outline, width, height" | Hash | { border: "", height: "200px", outline: "", width: "320px" } |
| "float,opacity" | Hash | IEの場合は { styleFloat: "left", opacity: "0.5" } IE以外は、{ cssFloat: "left", opacity: "0.5" } |
戻り値は、cssProp形式で、単位付の文字列(例: "200px")になります。
@param Element elm - スタイルを取得する要素を指定します。 @param Taxing [cssProp] - cssProp形式のプロパティ名("fontWeight")を指定します。省略できます。 @return Hash/String - cssPropに複数の要素を指定している場合は Hash { cssProp形式のプロパティ名: 計算済みのスタイル, ... }を返します。 cssPropが単一の要素なら、計算済みのスタイルを文字列で返します。 cssPropで指定したプロパティが存在しない場合は、その要素の値は空文字列("")になります。 cssPropを省略した場合は、全てのスタイル情報を持つ特別なオブジェクト(CSS2Properties)を返します。Run
var elm = uu.id("target");
var rv1 = uu.css.get(elm, ["backgroundColor", "float"]); // { backgroundColor: "rgb(51, 102, 153)", cssFloat: "left" }
uu.log(rv1["styleFloat"] || rv1["cssFloat"]); // "left"
var rv2 = uu.css.get(elm, "backgroundColor"); // "rgb(51, 102, 153)";
uu.log(rv2);
var rv3 = uu.css.get(elm, "border, outline, width, height"); // { border: "", height: "200px", outline: "", width: "320px" }
uu.log(rv3);
var rv4 = uu.css.get(elm, ["width", "height"]); // { height: "200px", width: "320px" }
uu.log(rv4);
// elmの全プロパティを列挙
var all = uu.css.get(elm); // { 0: undefined, 1: undefined, 2: undefined, MozApperrance: "none", ... length: 109 }
uu.log(all);
uu.css.rect(elm) は、 RectHash( { x, y, w, h } )を返します。x,yには座標の数値(単位:px), w,hには幅と高さの数値(単位:px)が格納されます。
w と h には、margin, padding, border を含みません。
uu.css.rect が margin, padding, borderを含まない情報を返すのに対し、
uu.element.rectは、それらを含んだ情報を返します。
@param Element elm - 要素を指定します。 @return RectHash - RectHash( { x, y, w, h } )を返します。
uu.css.opacity(elm) は、 不透明度を0.0~1.0の数値で取得します。
@param Element elm - 要素を指定します。
@return Number - 不透明度(0.0~1.0)を返します。
uu.css.backgroundImage(elm) は、 background-imageの値(URL)を取得します。
@param Element elm - 要素を指定します。
@return String - URLを返します。URLが指定されていない場合は "none" を返します。
返される文字列は、"http://..." の形式になります。
uu.css.set(elm, hash)は、 要素elmにhash({ cssProp: value, ... })で 指定されたスタイルを設定します。
valueには単位付きの文字列を指定します。一部のスタイルには数値や特別な値を指定できます。
| cssProp name | Value / Value Type | Note |
|---|---|---|
| opacity | Number | 不透明度を0.0から1.0の値で指定可能 |
@param Element elm - スタイルを設定する要素を指定します。
@param Hash hash - { cssProp: value, ...} を指定します。
Run
<div id="result1">change bg-color and text-color. border style copied BorderBox</div>
<div id="result2">BorderBox</div>
<script>
function boot() {
var elm1 = uu.id("result1"), elm2 = uu.id("result2");
var cssProp = "borderTopColor, borderTopWidth, borderTopStyle, " +
"borderRightColor, borderRightWidth, borderRightStyle, " +
"borderBottomColor, borderBottomWidth, borderBottomStyle, " +
"borderLeftColor, borderLeftWidth, borderLeftStyle ";
var style2 = uu.css.get(elm2, cssProp); // border系のスタイルを抽出
uu.delay(function() {
uu.effect.fade(elm1, {
begin: 1,
end: 0,
fn: function() {
uu.css.set(elm1, style2); // elm1にborder:系のスタイルを適用する
uu.css.set(elm1, { backgroundColor: "white", color: "black" });
uu.delay(function() {
uu.effect.fade(elm1, { begin: 0, end: 1 });
}, 500);
}
});
}, 500);
}
</script>
uu.css.setRect(elm, rect, autoVisible = false) は、 RectHash( { x, y, w, h } )を受け取り、要素の座標とサイズを更新します。
各要素はpx単位の数値で指定します。
x が elm.style.left, y が elm.style.top, w が elm.style.width, h が elm.style.height に相当します。
x, y, w, h のいずれも省略可能で、省略された要素については更新しません。
@param Element elm - 要素を指定します。 @param RectHash rect - RectHash( { x, y, w, h } )を指定します。x, y, w, h のいずれも省略可能です。 @param Boolean autoVisible - visibilityを自動的に制御する場合はtrueを指定します。デフォルトはfalseです。 trueを指定し、wまたはhの値がゼロに変化すると、その要素のvisibilityは"hidden"に設定されます。 trueを指定し、wとhの値がゼロから1以上の値に変化すると、その要素のvisibilityは"visible"に設定されます。
uu.css.setOpacity(elm, opa) は、
不透明度を0.0~1.0の数値で設定します。
0を指定すると透明になります。
@param Element elm - 要素を指定します。
@param Number opa - 不透明度(0.0~1.0)を指定します。0.001未満なら、0が指定されたものとして動作します。
uu.css.setBackgroundImage(elm, url) は、 background-image の値(URL)を設定します。
@param Element elm - 要素を指定します。
@param String url - URLを指定します。
uu.css.show(elm, resultRect = false) は、要素を表示します。
visibility の値を"visible"に設定し、display の値を要素の種別に合わせ自動的に"block"や"table"等に設定します。
resultRect が true ならば、要素を表示した状態でuu.css.rect(elm)を取得しRectHashを返します。
@param Element elm - 要素を指定します。
@param Boolean resultRect - 戻り値でRectHashを返す場合にtrueを指定します。
デフォルトはfalseです。
@return RectHash/0 - resultRectがtrueなら、uu.css.rect(elm)の結果を返します。
resultRectがfalseなら0を返します。
uu.css.hide(elm, resultRect = false) は、要素を非表示にします。
visibility の値は変更せず、display の値を"none"に変更します。
resultRect が true ならば、要素を非表示にした状態でuu.css.rect(elm)を取得しRectHashを返します。
@param Element elm - 要素を指定します。
@param Boolean resultRect - 戻り値でRectHashを返す場合にtrueを指定します。
デフォルトはfalseです。
@return RectHash/0 - resultRectがtrueなら、uu.css.rect(elm)の結果を返します。
resultRectがfalseなら0を返します。
uu.css.rebound(elm, inboundRect) は、要素を画面外で可視化し画面内に戻します。
まず、要素を画面外の位置(left: -3333px, top: -3333px)に移動し、表示します。
次に、uu.css.setRect(inboundRect)を実行し画面内に戻します。
この関数は、描画途中をユーザから隠したい場合や、最小化の状態でeffectを開始したい場合等に使用します。
@param Element elm - 要素を指定します。 @param RectHash inboundRect - 画面内の座標をRectHashで指定します。
uu.css.isBlock(elm) は、要素がブロック要素としてレンダリング可能ならtrueを返します。
display = "table" などをサポートしていないブラウザ(IE6など)では、
display = "table" を指定すると要素が表示されなくなるため、この関数は false を返します。
現在のdisplayの値が、"inline-block"などに設定されていたとしても、 elm で指定された要素が、本来ブロック要素としてレンダリングされるべきものなら true を返します。
@param Element elm - 要素を指定します。
@return Boolean - trueまたはfalseを返します。
uu.css.toPixel(elm, val, cssProp = "") は、単位をpxに変換した数値を返します。
@param Element elm - 要素を指定します。
@param Mix val - 数値( 3 ),
文字列化された数値( "3" ),
単位付の文字列数値( "3px" , "3pt", "3em" ) などが指定可能です。
IEなら、"auto" も指定可能です。
@param String cssProp - IEで有効な引数です。デフォルトは空文字列( "" ) です。
valに"auto", cssPropに"width" を指定すると、elm.clientWidth の値を返します。
valに"auto", cssPropに"height" を指定すると、elm.clientHeight の値を返します。
@return Number - px単位の数値を返します。
uu.css.measure(cache = true) は、相対単位(em, pt)が何pxに相当するのかを実測しPixelHash( { em, pt } )を返します。
emは現在のフォントサイズが変更されるたびに動的に変化します。
動的なフォントサイズの変更は、IE6+, Firefox2, Firefox3(ズーム:文字サイズだけ変更)で発生します。
フォントサイズの変更があった場合にこれらの値は再測定する必要があります。
@param Boolean cache - 前回測定した値を返す場合はtrueを指定します。デフォルトはtrueです。
再測定する場合はfalseを使用します。
@return PixelHash - PixelHash( { em, pt } )を返します。
uu.css.insertRule(rule, index = undefined) は、ルールを追加します。
必要に応じて、uupaa.js 専用に新しいスタイルシートを動的に生成してからルールを追加します。
@param String rule - ルールを追加します。
ルールは "div { color: black }" のような文字列で指定します。
"div, p { color: black }" のようにカンマコンビネータを使用するとIEでエラーが発生するため、
"div { color: black }" と "p { color: black }" に分けて指定します。
@param Number index - ルールの挿入位置を指定します。デフォルトは undefined です。
undefined を指定すると、ルールセットの最後に追加されます。
通常は、undefined を指定します。
@return Number - ルールの挿入位置を返します。
この番号は、uu.css.deleteRule で使用します。
@see CSSOM
uu.css.deleteRule(index) は、uupaa.js 専用に動的に生成されたスタイルシート上からルールを削除します。
@param Number index - 削除するルールを指定します
この番号は、uu.css.insertRule が返す番号を指定します。
@see CSSOM
uu.css.createStyleSheet() は、新しくスタイルシートを生成し、head要素の最後に追加します。
@return Element - 生成したスタイルシートオブジェクトを返します。 @see CSSOM
uu.css.unselectable() は、要素を選択禁止にします。
@param Element - 選択禁止にする要素を指定します。
uu.css.recalc() は、スタイルを再評価します。
特定のブラウザ上で要素を動的に追加したり、スタイルを変更した場合などにこのメソッドを呼びスタイルを再評価してください。
上記リストに無いブラウザでは、この関数は何もしません。
要素に関する情報を取り扱います。
Firefox3でcssTextに、
"margin: 5px; border: 3px solid black; padding: 2px; width: 10px; height: 10px"指定時の各プロパティの値です。
offsetXxx系は正式な仕様ではなく、IEの独自実装を他のブラウザが追従したものですが、
各ブラウザで解釈が異なっているようです。
elm.style.cssText
= "margin: 5px; border: 3px solid black; padding: 2px; width: 10px; height: 10px";
elm.offsetLeft = 5px = 5(marginLeft)
elm.offsetTop = 5px = 5(marginLeft)
elm.offsetWidth = 20px = 6(border) + 4(padding) + 10(width)
elm.offsetHeight = 20px = 6(border) + 4(padding) + 10(height)
elm.clientLeft = 3px = 3(borderLeft)
elm.clientTop = 3px = 3(borderTop)
elm.clientWidth = 14px = 4(padding) + 10(width)
elm.clientHeight = 14px = 4(padding) + 10(height)
+---------------------------------------------------- _
| □ │elm.style.marginTopWidth
| □ │elm.offsetTop
| □ │
| □ │
| □ _ │ _
| ■■■■■■■■■■■■■■■■■■■■│  ̄ │elm.style.borderTopWidth
| ■■■■■■■■■■■■■■■■■■■■│ │elm.clientTop
| ■■■■■■■■■■■■■■■■■■■■│_ _ │
| ■■■ □ ■■■││ │  ̄
| ■■■ □ ■■■││ │elm.style.paddingTopWidth
| ■■■□□+- - - - - - - - - + ■■■││  ̄
|□□□□□■■■ | ■■■││
| ■■■ | ■■■││
| ■■■ | ■■■││elm.clientHeight(= padding + height)
| ■■■ | elm ■■■││
| ■■■ | ■■■││
| ■■■ | ■■■││
| ■■■ | ■■■││
| ■■■ | ■■■││
| ■■■ + - - - - - - - - -+ ■■■││ _
| ■■■ ■■■││ │elm.style.paddingBottomWidth
| ■■■ ■■■││ │
| ■■■■■■■■■■■■■■■■■■■■│ ̄  ̄
| ■■■■■■■■■■■■■■■■■■■■│
| ■■■■■■■■■■■■■■■■■■■■│elm.offsetHeight(= margin + height)
|  ̄
| ├───────────────────┤
| elm.offsetWidth(= margin + width)
|
| ├─────────────┤
| elm.clientWidth(= padding + width)
|
| ├──┤
elm.style.borderTopWidth
elm.clientLeft
├────┤
elm.style.marginLeftWidth
elm.offsetLeft
uu.element.rect(elm) は、要素の矩形情報を取得します。
uu.css.rect が margin, padding, border を含まない情報を返すのに対し、
uu.element.rect は、それらを含んだ情報を返します。
uu.element.rect は 画面内における要素の絶対位置を取得するために使用できます。
@param Element elm - 要素を指定します。 @return RectHash - RectHash( { x, y, w, h, ow, oh } )を返します。 x: offset from viewport with scroll(abs x) - 画面左上からのオフセット(スクロール量を含む) y: offset from viewport with scroll(abs y) - 画面左上からのオフセット(スクロール量を含む) w: padding + width h: padding + height ow: border + padding + width oh: border + padding + height
uu.element.offsetFromParentHasLayout(elm) は、ParentHasLayout要素からのオフセットを取得します。
@param Element elm - 要素を指定します。 @return RectHash - RectHash( { x, y, w, h, ow, oh } )を返します。 x: offset from ParentHasLayout element(rel x) - ParentHasLayout 要素からのオフセット y: offset from ParentHasLayout element(rel y) - ParentHasLayout 要素からのオフセット w: padding + width h: padding + height ow: border + padding + width oh: border + padding + height
uu.element.offsetFromAncestor(elm, ancestor) は、先祖要素(ancestor)からのオフセットを取得します。
@param Element elm - 要素を指定します。
@param Element ancestor - 先祖要素を指定します。
@return Hash - Hash( { x, y } )を返します。
x: offset from ancestor element(rel x) - ancestor要素からのオフセット
y: offset from ancestor element(rel y) - ancestor要素からのオフセット
uu.element.toAbsolute(elm) は、要素の現在位置を保持したまま絶対座標化(position: absolute)します。
@param Element elm - 要素を指定します。
uu.element.toStatic(elm) は、要素を静的座標化(position: static)します。
@param Element elm - 要素を指定します。
ブラウザの表示領域(ViewPort)に関する情報を取り扱います。
uu.viewport.rect() は、ブラウザの表示領域の情報を取得します。
x, y, w, h の値には uu.viewport.setVirtualPadding で設定したパディング値が加味された値が返されます。
@return RectHash - RectHash( { x, y, w, h, sw, sh } )を返します。 x: virtual-padding-left y: virtual-padding-top w: browser view-port width - ブラウザの表示領域の幅 h: browser view-port height - ブラウザの表示領域の高さ sw: scroll width - スクロールの幅 sh: scroll height - スクロールの高さRun
uu.viewport.setVirtualPadding() は、ブラウザの表示領域の仮想的なpadding情報を設定します。
top, right, bottom, left のいずれも省略可能で、省略された要素については更新しません。
設定された値は uu.viewport.rect が返すx, y, w, h の値に影響を与えます。
@param PaddingHash - PaddingHash( { top, right, bottom, left } )を指定します。
top: virtual-padding-left
right: virtual-padding-right
bottom: virtual-padding-bottom
left: virtual-padding-left
uupaa.jsに最初から搭載されている機能はごくわずかですが、 機能が必要になったタイミングでモジュールと呼ばれるJavaScriptコードの塊を読み込み、機能を拡張することができます。
一つのJavaScriptファイルには、複数のモジュールを格納することができます。
以下が最小構成のモジュールの例です。これは uu.module.dummy.js として提供されています。
(function() { var /* uud = document, */ uuw = window, uu = uuw.uu;
uu.module.dummy = {};
})(); // end (function())()
この例からもわかるように、モジュールとしての最小条件は、uu.module[モジュール名] = {} を定義することです。
システムは uu.module にモジュール名が登録されることでモジュールが正常に読み込まれていることを認識します。
この定義を忘れるとモジュールの読み込み失敗やタイムアウトエラーが発生します。
以下は、全て有効なモジュールの定義方法です。
uu.module.moduleName = {}; // 基本形
uu.module.moduleName = function( ... ) { ... }; // 関数オブジェクトもOK
uu.module["effect+"] = {}; // 記号を使う場合は ["モジュール名"] とする
uu.module["skin.plasticityAngle"] = {}; // ドットでネームスペースを切ることも可能
モジュールを格納したファイル(モジュールファイル)のファイル名は "uu.module." + ModFileName + ".js" とします。
ModFileName には、英数字と一部の記号( []()_+-!., )が使用可能です。
モジュールファイルは任意のディレクトリに設置できます。
uu.module(path = "", module, fn = undefined) は、 moduleをpathで指定されたディレクトリから読み込みます。 全モジュールの読み込み完了で fn() をコールします。
pathに複数のパスを指定すると、各パスで読み込みが可能か順番に試行します。
全てのパスを試行し、それでも読み込めないモジュールがある場合は例外を発生させ処理を終了します。
pathに空文字列を指定すると、検索パスとしてuu.module.config.modulePath の値を使用します。
pathに相対パスを指定すると、 uupaa.js が設置されているディレクトリを基準としてモジュールを読み込みます。
@param Taxing [path] - 検索パスの指定です。絶対URLや相対パスを指定します。 空文字列を指定すると、uu.module.config.modulePath で指定されたURLを検索パスとして使用します。 デフォルトは空文字列("")です。 @param Taxing module - ModFileName名の指定です。 ModFileName名には、uu.module.xxx.js の xxxの部分を指定します。 @param Function [fn] - ロード完了後にコールバックするメソッドを指定します。デフォルトはundefinedです。 @throws Error "uu.module({module}) failed" ロード失敗
// http://example.com/ 以下から effect, dragモジュールのロードを試み、失敗したモジュールだけは、
// http://example.net/latest/ 以下からモジュールのロードを試みる。
uu.module("http://example.com/, http://example.net/latest/", "effect,drag");
複数の検索パスをうまく組み合わせると、本番系が接続しにくい場合に、 自動的に予備系のサーバからスクリプトをロードするといった動作の指定が可能になります。
既にロード済みのモジュールを再度読み込もうとすると、その指示は無視され、即座に fn() をコールします。
uu.moduleは非同期に読み込みを行うため高速にモジュールを読み込むことができますが、 読み込み順はブラウザに依存します。タイムアウトもしません。
読み込み順が保障されないため、読み込み順に依存するモジュールでエラーが発生する場合があります。
そのような場合は、uu.module.loadSyncを使用します。
uu.module()の代りに、<script id="uupaa.js" src="uupaa.js?module=..."> とすることで、 モジュールを自動的に読み込むこともできます。
uu.module.already(module) は、moduleに指定した全てのモジュールが読み込み済みならtrueを返します。
@param Taxing module - モジュール名を指定します。
@return Boolean - モジュールロード済みでtrueを返します。
複数モジュール指定時は、全モジュールロード済みでtrueを返します。
uu.module.loadSync(path = "", module, fn = undefined) は、 uu.moduleの同期ロード版です。
uu.module.loadSyncはモジュールを順番に(ひとつずつ)読み込むため、完了までの時間は伸びますが、読み込み順が保障されます。
読み込み順を保障する必要の無いモジュールと、保障する必要のあるモジュールに分け、
必要の無いモジュールは uu.moduleで読み込み、必要があるモジュールはuu.module.loadSync を使用します。
一定時間以内に読み込みが完了しないとタイムアウトします。
uu.module.timeoutの値を変更するとタイムアウト時間を変更できます。
既にロード済みのモジュールを再度読み込もうとすると、その指示は無視され、即座に fn() をコールします。
@param Taxing [path] - 検索パスの指定です。絶対URLや相対パスを指定します。 空文字列を指定すると、uu.module.config.modulePath で指定されたURLを検索パスとして使用します。 デフォルトは空文字列("")です。 @param Taxing module - ModFileName名の指定です。 ModFileName名には、uu.module.xxx.js の xxxの部分を指定します。 @param Function [fn] - ロード完了後にコールバックするメソッドを指定します。デフォルトはundefinedです。 @throws Error "uu.module.loadSync({module}) timeout" タイムアウト @throws Error "uu.module.loadSync({module}) failed" ロード失敗
uu.module.timeout は、uu.module.loadSyncで使用するタイムアウト時間を指定します。 1以上の数値を指定します。単位はmsです。デフォルトは500です。
イベントの取り扱いを簡単にします。
uu.event.closure(me) は、イベントシステムで使用するイベントクロージャを生成します。
この関数を明示的に使用する必要があるのは、以下のケースです。
uu.klass.generic, uu.klass.singleton でクラスを生成した場合は 自動的に処理されるため、この関数を呼び出す必要はありません。
@param this me - thisを指定します。
@return Object - イベントクロージャオブジェクトを返します。これは uu.event.set の引数に渡すことができます。
メッセージを受け取りたいクラスは msgbox という
名前のメソッドを定義しますが、
イベントを受け取りたいクラスは、handleEvent という名前のメソッドを定義しておきます。
handleEvent は DOM LEVEL2 Eventの仕様です(JavaScript第5版 420pを参考にしてください)。
以下はクリックイベントを受け取るクラスの実装例です。
Run
var MyClass = uu.klass.generic();
MyClass.prototype = {
construct: function(element) {
this.element = element;
uu.event.set(this, this.element, "click"); // イベントハンドラを設定
},
destruct: function() {
uu.event.unset(this, this.element, "click"); // constructで設定したイベントハンドラを開放
},
handleEvent: function(evt) { // 第一引数にイベントオブジェクトが渡される
var tgt = uu.event.target(evt); // イベントが発生した要素は、tgt.target で取得可能
uu.event.stop(evt); // イベントの伝播とデフォルト動作を抑止
var mpos = uu.event.mousePos(evt); // クリック時のマウス座標を取得
uu.id("result").innerText = uu.sprintf("CLICK: x:[%d], y:[%d]", mpos.x, mpos.y);
}
};
var my = new MyClass(uu.id("clicktarget"));
以下のようにすることでグローバルネームスペース(windowオブジェクト)に、作成したイベントハンドラを指定することもできます。
Run
window.myHandleEvent = function(evt) { // この場合のメソッド名は "handleEvent" 以外でもOK
uu.log("click");
var tgt = uu.event.target(evt);
uu.log(tgt.target.id);
};
uu.event.set(window.myHandleEvent, document, "click");
uu.event.target(evt) は イベント発生源に関する情報を取得します。
@param event evt - イベントオブジェクトを指定します。
@return Hash - Hash({ target, currentTarget, relatedTarget }) を返します。
uu.event.set(me, elm, type, capture = false) はイベントを設定します。
elmに、同じパラメタ(type, me, capture)でイベントを二重登録しようとしても失敗します(何もおこりません)。
@param Function/this me - イベント成立時にコールバックする関数
またはuu.event.closureの戻り値を指定します。
@param Element elm - イベントを設定する要素を指定します。
@param Taxing type - イベントタイプを指定します。
@param Boolean [capture] - イベントをキャプチャーする場合はtrueを指定します。
通常のイベントを登録する場合はfalseを指定します。
uu.event.unset(me, elm, type, capture = false) はイベントを解除します。 引数は、uu.event.setでイベントを登録する際に指定したものとまったく同じものを指定します。
@param Function/this me - イベント成立時にコールバックする関数
またはuu.event.closureの戻り値を指定します。
@param Taxing type - イベントタイプを指定します。
@param Function fn - イベント成立時にコールバックする関数を指定します。
通常は、uu.event.handler の戻り値を指定します。
@param Boolean [capture] - イベントをキャプチャーする場合はtrueを指定します。
通常のイベントを解除する場合はfalseを指定します。
uu.event.toggle(me, elm, type, capture = false) はイベントを設定または解除します。
既に登録されているイベントを指定すると解除、未登録なら登録します。
指定可能な引数は uu.event.set, uu.event.unset と同じです。
以下はイベントのset/unsetを効率的に行うドラッグandドロップ処理の実装例です。
Run | uupaaの開発日記
var elm = uu.id("drag");
uu.event.set(elm, "mousedown", F);
uu.element.toAbsolute(elm);
function F(evt) {
uu.event.stop(evt);
switch (uu.event.toType(evt)) {
case "mousemove": uu.module.drag.move(elm, evt); break;
case "mousedown": uu.module.drag.save(elm, evt);
case "mouseup": uu.event.toggle(F, uu.ua.ie ? elm : document, "mousemove,mouseup", true);
}
}
uu.event.stop(evt, cancel = true) は イベントのバブルアップ(伝播)と、可能ならデフォルトの動作を抑止します。
@param event evt - イベントオブジェクトを指定します。
@param Boolean [cancel] - ブラウザが実装しているデフォルトの動作をキャンセルする場合にtrueを指定します。
キャンセルできない場合は無視されます。
uu.event.toType(evt) は DOMイベントタイプをDOM Level 0イベントタイプに変換します。
@param event evt - イベントオブジェクトを指定します。
@return String - 変換後のイベントタイプを返します。
| Browser | evt.type | Return |
|---|---|---|
| Firefox2+ | DOMMouseScroll | mousewheel |
| IE6+ | onlosecapture | mouseup |
uu.event.toDOMType(type) は DOM Level 0イベントタイプをDOMイベントタイプに変換します。
@param String type - DOM Level 0イベントタイプを指定します。
@return String - 変換後のイベントタイプを返します。
| Browser | type | Return |
|---|---|---|
| Firefox2+ | mousewheel | DOMMouseScroll |
uu.event.keyState(evt) は キーの状態を取得します。
@param event evt - イベントオブジェクトを指定します。
@return Hash - Hash( { alt, shift, ctrl, key } ) を返します
uu.event.mousePos(evt) は マウス座標を取得します。
@param event evt - イベントオブジェクトを指定します。
@return Hash - Hash( { x, y, ox, oy, cx, cy } ) を返します
uu.event.mouseState(evt) は マウスクリック, ホイールの状態を取得します。
@param event evt - イベントオブジェクトを指定します。
@return Hash - Hash( { left, mid, right, click, wheel } ) を返します
機能が使用可能になったタイミングで、事前に登録されている関数をコールバックする仕組みを提供します。
類似機能に、uu.module.imageset が提供する ImageReady があります。
uu.ready(fn, id = "DM") は idで指定した機能が使用可能な状態(Ready状態)になると呼ばれる関数(fn)を登録します。
状態成立後に uu.ready が呼ばれた場合は、即座に fn をコールバックします。
| Expression | Function/State |
|---|---|
| uu.ready(fn, "D") | DomReady |
| uu.ready(fn, "M") | ModuleReady |
| uu.ready(fn, "W") | WindowReady |
| uu.ready(fn, "C") | CanvasReady |
| uu.ready(fn, "A") | AjaxReady |
| uu.ready(fn, "J") | JSONPReady |
@param Function fn - コールバック関数を指定します。
@param String [id] - 機能をidで指定します。デフォルトは "DM" です。
指定可能なidは、"D", "M", "W", "C", "A", "J" と、これらを組み合わせた文字列です。
複数の状態が全て成立した場合に関数をコールバックにするには、idに "D", "M", "W", "C", "A", "J" を組み合わせた文字列を指定します。
Run
function boot() { ... }
uu.module("", "drag,canvas");
uu.ready(boot, "DMC"); // DomReady + ModuleReady + CanvasReady 成立でboot関数を呼ぶ
uu.ready.already(id = "DM") は idで指定した機能が既に使用可能ならtrueを返します。
uu.unready(fn) は WindowUnready状態になると呼ばれる関数(fn)を登録します。
| Expression | Function/State |
|---|---|
| uu.unready(fn) | WindowUnready |
@param Function fn - コールバック関数を指定します。
Run
Webサーバにリクエストを発行します。 同期リクエストはサーバからレスポンスがあるまで、JavaScriptの動作が停止します。
| Function | クロスドメイン (Cross Domain) | リクエスト (Request) | メソッド (Method) | タイムアウト (Timeout) | 独自ヘッダの追加 (Add Original Headers) | 更新チェック (Update check) |
|---|---|---|---|---|---|---|
| uu.ajax | × | Async | GET, POST | ○ | ○ | × |
| uu.ajax.loadIfMod | × | Async | GET | ○ | ○ | ○ |
| uu.ajax.loadSync | × | Sync | GET, POST | × | ○ | × |
| uu.jsonp | ○ | Async | GET | ○ | × | × |
| uu.module.image.load | ○ | Async | GET | ○ | × | × |
タイムアウト機能を使用するには、uu.request.timeout に10000(10秒)~50000(50秒)を指定します。単位はmsです。0を指定するとタイムアウトしません。デフォルトは10000(10秒)です。
通信ヘッダを追加するには、uu.request.header に要素を追加します。
| Name | Value Type | Default value | Note |
|---|---|---|---|
| uu.request.callbackFilter | Number | 0x2 | コールバックフィルタのデフォルト値 |
| uu.request.timeout | Number (unit: ms) | 10000 | タイムアウト時間(単位:ms) (0でタイムアウトしない) |
| uu.request.header | Hash | { "X-Requested-With": "XMLHttpRequest" } | リクエストヘッダ |
| uu.request.jsonpFn | String | "callback" | JSONPコールバック関数名 |
uu.ajax(url, fn = undefined, data = undefined) は、Webサーバと非同期に通信を行います。
urlにはリクエストURLを、fnには各ステップ毎にコールバックする関数を、 データを送信する場合は data に encodeURIComponent でエンコード済みの文字列を指定します。
Run
@param String url - リクエストURLを指定します。
@param Function [fn] - 各ステップ毎にコールバックする関数を指定します。デフォルトはundefinedです。fnを省略するとコールバックしません。
@param String [data] - データを送信する場合に、encodeURIComponentでエンコード済みの文字列を指定します。
dataを指定するとPOSTメソッドを使用し、指定しないとGETメソッドを使用します。
デフォルトはundefinedです。
@param Number [callbackFilter] - コールバックするステップを限定する場合に指定します。
省略すると、uu.request.callbackFilter の値を使用します。
uu.ajax.loadIfMod(url, fn = undefined) は、Webサーバと非同期に通信を行います。
前回通信を行った際のURLと、その更新日時を保存しており、データが更新されていない場合は status に 304 を返します。
@param String url - リクエストURLを指定します。 @param Function [fn] - 各ステップ毎にコールバックする関数を指定します。デフォルトはundefinedです。fnを省略するとコールバックしません。 @param Number [callbackFilter] - コールバックするステップを限定する場合に指定します。 省略すると、uu.request.callbackFilter の値を使用します。
uu.ajax.loadSync(url, fn = undefined, data = undefined) は、Webサーバと同期通信を行います。
同期通信はサーバからのレスポンスがあるまで待機し続けます(ブラウザが固まったように見えます)。
@param String url - リクエストURLを指定します。
@param Function [fn] - 各ステップ毎にコールバックする関数を指定します。デフォルトはundefinedです。fnを省略するとコールバックしません。
@param String [data] - データを送信する場合に、encodeURIComponentでエンコード済みの文字列を指定します。
dataを指定するとPOSTメソッドを使用し、指定しないとGETメソッドを使用します。
デフォルトはundefinedです。
@param Number [callbackFilter] - コールバックするステップを限定する場合に指定します。
省略すると、uu.request.callbackFilter の値を使用します。
uu.jsonp(url, fn = undefined) は、Webサーバと非同期に通信を行います。
urlにはリクエストURLを、fnには 各ステップ毎にコールバックする関数を指定します。
@param String url - リクエストURLを指定します。 @param Function [fn] - 各stepで呼び出す関数を指定します。デフォルトはundefinedです。fnを省略するとコールバックしません。 @param Number [callbackFilter] - コールバックするステップを限定する場合に指定します。 省略すると、uu.request.callbackFilter の値を使用します。
uu.script.create(id = "") は script要素を生成し返します。
返されるscript要素は、<script type="text/javascript" charset="utf-8" id="..."></script> と等価です。
@param String [id] - id属性の値を指定します。デフォルトは空文字列( "" ) です。
@return Element - script要素を返します。
uu.script.exec(code) は JavaScriptコードを評価(eval)します。
戻り値はありません。
@param String code - JavaScriptコードを指定します。
uu.ajax, uu.ajax.loadIfMod, uu.ajax.loadSync, uu.jsonp, uu.request.script, uu.module.image.load の引数で指定した fn は、 通信/読み込み の各段階で fn(uid, step, response, status, url, async, more arg, ...) の形で コールバックされます。
uidにはユニークなID(文字列)が、 responseにはレスポンステキストが、 statusにはWebサーバが返すステータスコード または uuppa.jsが設定したステータスコードが格納されます。 asyncは非同期通信で1, 同期通信で0になります。
more arg, ...が渡される場合もあります。
uu.module.image.load では、response に text ではなく Image Object が渡されます。
| 状況 | uid | step | response | status | url | async |
|---|---|---|---|---|---|---|
| リクエスト開始 - REQUEST | ユニークID | 1 | "" | 0 | request URL | 1 or 0 |
| 成功 - OK | ユニークID | 2 | text or Image Object | 200 | request URL | 1 or 0 |
| 失敗 - NG | ユニークID | 4 | "" | 200以外の数値 | request URL | 1 or 0 |
引数callbackFilterに1~7の値を指定すると、コールバックするstepを限定することも可能です。
OKとNGだけを知りたい場合は、
callbackFilter に 6 を設定します( 6 = 2 + 4 )。
引数callbackFilterを指定しないと、uu.request.callbackFilter の値を使用します。
uu.request.callbackFilterのデフォルトは 2 です。
型の相互変換や、検索, 使用頻度の高い文字列操作関数などを提供します。
uu.uid(prefix = "uniqueID") は prefix + ユニークな数字(通し番号) から構成される文字列を返します。
@param String [prefix] - プリフィクスを指定します。デフォルトは"uniqueID"です。
@return String - プリフィクス + ユニークナンバー で構成される文字列を返します。
例: "uniqueID1", "uniqueID2"
uu.sprintf(format, ...) は ANSI C標準のsprintf関数に、PHPのi18n対応機能を追加したものです。
@param String format - フォーマット文字列を指定します。
@param Mix [...] - sprintfに与える引数を指定します。引数は可変個です。
@return String - 整形済みの文字列を返します。
format(書式)は、%[arg-index$][flag][width][.precision][size]type となります。
| 書式指定フィールド | 指定 | 機能 | 例 |
|---|---|---|---|
| arg-index | 数値 | 数値とダラー("$")により引数を0から始まる番号で呼び出すことができます。 | |
| flag | # | typeがo,x,Xなら文字列の先頭に"0","0x","0X"を追加します。 | |
| flag | 0 | typeがd,u,fならwidthで指定した幅に達するまで
文字列の先頭を"0"で埋めます(zero padding)。 | |
| width | 数値 | 最低限表示する桁数を指定できます。0で非表示になります。
幅を指定すると右寄せ(align right)で出力されるため、 数値や文字列の桁あわせに利用できます。 iduoxXfsで有効です。 | uu.sprintf("%2d", 2) → " 2" |
| precision | 数値 | 小数点以下の桁数や文字列の長さを指定できます。 typeがfなら小数点以下の桁数を指定します。 浮動小数点値は丸められる場合があります。0で小数点以下は非表示になります。 typeがsなら文字列の長さを指定します。 指定した長さ以上の文字は切り捨てられます。0で文字列全体が非表示になります。 | |
| type | d | 符号付き10進数値(signed decimal number)として出力します。 | |
| type | u | 符号無し10進数値(unsigned decimal number)として出力します。 | |
| type | o | 符号無し8進数値(unsigned octet number)として出力します。 | |
| type | x | 符号無し16進数値[小文字](unsigned hex number[lower case])として出力します。 | |
| type | X | 符号無し16進数値[大文字](unsigned hex number[upper case])として出力します。 | |
| type | f | 浮動小数点([-]dddd.dddd)(floating-point number)として出力します。 | |
| type | c | 文字の数値表現(the character with that ASCII value)として出力します。 | |
| type | s | 文字列(string)として出力します。 | |
| type | % | パーセント記号("%")そのものを出力します。 |
以下の書式は使用できません。
| 書式指定フィールド | 指定 | 機能 |
|---|---|---|
| flag | - | 左詰で出力します。 |
| width | * | 引数で幅を指定します。 |
| precision | * | 引数で精度を指定します。 |
| size | l | long型に変更します。 |
| size | 数値 | 数値で型の精度を指定します。 |
| type | i | 符号付き8進数値(signed octet number)として出力します。 |
| type | e | 浮動小数点([-]d.dddde[+/-]dddd)として出力します。 |
| type | g | 浮動小数点("f","e"の結果でより短い方)として出力します。 |
| type | E | 浮動小数点([-]d.ddddE[+/-]dddd)として出力します。 |
| type | G | 浮動小数点("f","E"の結果でより短い方)として出力します。 |
| type | n | 出力済みの文字数を出力します。 |
| type | p | ポインタとして処理します。 |
uu.trim(str) は 文字列(str)の左右から空白文字を除去します。 空白文字には、NULL("\0"),空白(" "),タブ("\t"),改行("\n"),垂直タブ("\v"),復帰("\d")が含まれます。
@param String str - 文字列を指定します。
@return String - トリム後の文字列を返します。
uu.trim(" hoge "); // "hoge"
uu.notax(tax, param = { sep: ",", fn: undefined, trim: true }) は Taxing型の変数をパースし、 各要素を(もし指定されていれば) fn で評価した StringArray を返します。
@param Taxing tax - 結合文字列, StringArray または 文字列を指定します。 @param Hash [param] - パラメタを指定します。 @param String [param.sep] - セパレータを指定します。デフォルトはカンマ(",")です。 @param Function [param.fn] - 各要素を評価する関数を指定します。デフォルトはundefinedです。 @param Boolean [param.trim] - カンマ結合文字列の各要素の左右の空白文字をトリムする場合はtrueを指定します。デフォルトはtrueです。 taxが文字列や、Arrayで指定されている場合はトリムしません。 @return StringArray - taxが結合文字列( " a , b " )なら、各要素をセパレタで分割、左右の空白をトリムし StringArray( [ "a", "b" ]) を返します。 taxが文字列( "ab" )なら、taxを唯一の要素とする StringArray( [ "ab" ] ) を返します。 taxがStringArray( [ "a", "b" ] )ならtaxをそのまま返します。 taxが空の文字列( "" )なら要素数ゼロの StringArray( [] ) を返します。 @throws TypeError "uu.notax(tax) bad arg" 引数が文字列でもArrayでもない
function toLower(str) { return str.toLowerCase(); }
function toUpper(str) { return str.toUpperCase(); }
var rv = uu.notax("a, b,C,d ", { fn: toLower });
uu.log(rv); // ["a", "b", "c", "d"]
var rv = uu.notax(["a", "b", "c", "d"], { fn: toUpper });
uu.log(rv); // ["A", "B", "C", "D"]
var rv = uu.notax("abcd");
uu.log(rv); // ["abcd"]
var rv = uu.notax("html/body/div[1]", { sep: "/" });
uu.log(rv); // ["html", "body", "div[1]"]
uu.toPair(key, value) は Hash({ key: value })を返します。
@param String/Number/Element key - Key(Index)を指定します。
@param Mix value - Value(値)を指定します。
@return Hash - Hash( { key: value } )を返します。
uu.log(uu.toPair("key", "value")); // { key: "value" }
uu.toHash(ary) は aryをHashに変換します。
変換するのは数値indexの要素のみで、文字列indexと関数オブジェクト(および"length"プロパティ)は無視します。
重複する数値indexは1つに纏められます。
@param Array ary - Hash化するArrayを指定します。
@return Hash - Hash化したArrayを返します。
Run
var ary = [undefined, null, 1, 1, "hoge", function(){} ];
ary["hash_index"] = "lost value";
var b = uu.toHash(ary);
uu.log(b); // { undefined: undefined, null: null, 1: 1, hoge: "hoge" }
uu.toArray(fake, idx = 0) は FakeArray(fake)の idx 番目以降を、Array化します。
この関数はFakeArray専用です。HashやオブジェクトのArray化には、 uu.indexes や uu.values を使用してください。
@param FakeArray fake - FakeArrayを指定します。
@param Number [idx] - 切り出し開始位置を指定します。デフォルトは0です。
FakeArrayの長さ以上の値を指定すると、空のArrayを返します。
@return Array - fakeがnullやlengthプロパティを持たないHashなら空のArray([])を返します。
fakeがlengthプロパティを持つFakeArrayならArray化したものを返します。
@see uupaaの開発日記
Run
uu.toArray(document.getElementsByTagName("*")).forEach(function(v) {
uu.log(v.tagName); // "HTML" "HEAD" "TITLE" "SCRIPT" "SCRIPT" "META" "STYLE" "BODY" "A" "A" "SCRIPT" "PRE"
});
uu.indexes(mix) は mix の Index のみを列挙し Array を返します。
mix が Array なら、数字Index のみを列挙し Array を返します。
mix が Hash なら、文字Index と数字Index を列挙し Array を返します。
@param Hash/Array/FakeArray mix - Hash/Array/FakeArrayを指定します。
@return Array - 要素の値ではなくindexを列挙したArrayを返します。有効な要素がなければ、空のArray([])を返します。
var array = [74, 50, 50], hash = { a: 74, b: 50, c: 50 };
array["hash_index"] = "hash";
hash[0] = "hash";
delete array[0];
uu.indexes(array); // [undefined, 1, 2]
uu.indexes(hash); // ["a", "b", "c", 0]
uu.values(mix) は mix の値のみを列挙し Array を返します。
mix が Array なら、数字Index の値のみを列挙しArray を返します。
mix が Hash なら、文字Index と数字Index の値を列挙しArray を返します。
@param Hash/Array/FakeArray mix - Hash/Array/FakeArrayを指定します。
@return Array - 要素の値だけを列挙しArrayを返します。有効な要素がなければ、空のArray([])を返します。
var array = [74, 50, 50], hash = { a: 74, b: 50, c: 50 };
array["hash_index"] = "hash";
hash[0] = "hash";
delete array[0];
uu.values(array); // [50, 50]
uu.values(hash); // [74, 50, 50, "hash"]
uu.converse(hash) は hashのIndexと値を入れ替えたHashを生成し返します。
@param Hash hash - Hashを指定します。
@return Hash - Indexと値を入れ替えたHashを返します。
var hash = { a: 1, b: 2, c: 3 };
uu.converse(hash); // { 1: "a", 2: "b", 3: "c" }
uu.size(mix) は mixの要素数を返します。
@param Hash/Array/FakeArray mix - Hash/Array/FakeArrayを指定します。
@return Number - 要素数を返します。有効な要素がなければ0を返します。
uu.first(mix, missHit = undefined) は mixの先頭の要素を返します。
@param Hash/Array/FakeArray mix - Hash/Array/FakeArrayを指定します。
@param Mix [missHit] - 有効な要素が存在しない場合に返す値を指定します。デフォルトはundefinedです。
@return Mix - 先頭の要素の値を返します。有効な要素が無ければmissHitを返します。
uu.last(mix, missHit = undefined) は mixの最後の要素を返します。
@param Hash/Array/FakeArray mix - Hash/Array/FakeArrayを指定します。
@param Mix [missHit] - 有効な要素が存在しない場合に返す値を指定します。デフォルトはundefinedです。
@return Mix - 最後の要素の値を返します。有効な要素が無ければmissHitを返します。
uu.slim(ary) は aryから重複する値を除去した新しい配列を生成し返します。
@param Array ary - 配列を指定します。
@return Array - 重複した値を除去した新しい配列を返します。
uu.diet(mix) は mixから値がundefined, nullの要素を削除した新しいArrayを生成します。
mixがArrayなら、文字列Indexと、値がundefinedとnullの要素を削除した新しいArrayを返します。
mixがHashなら、文字列Indexと数字Indexの要素のうち、値がundefinedとnullの要素を削除した新しいHashを返します。
@param Hash/Array mix - Hash/Arrayを指定します。
@return Hash/Array - 有効な要素のみを持つ新しいArrayかHashを返します。
有効な要素がなければ、空のArray([])かHash({})を返します。
var ary = [null, undefined, 3], hash = { a: null, b: undefined, c: 50 };
ary["hash_index"] = "hash";
hash[0] = "hash";
uu.diet(ary); // [3]
uu.diet(hash); // { c: 50, 0: "hash" }
uu.inRect(rect, pos) は posがrect内にある場合にtrueを返します。
@param RectHash rect - RectHash( { x, y, w, h } )を指定します。
@param PosHash pos - PosHash( { x, y } )を指定します。
@return Boolean - posがrectに含まれている場合にtrueを返します。
rect━┯━━┓ ┃ │ ┃ ┠─pos ┃ ┃ ┃ ┗━━━━┛
uu.delay(fn, delay = 0)は、delay時間経過後に、fnを呼び出します。
スタックのネストを浅くしたいケースや、スレッド間の依存関係を分断したいケースなどにも利用できます。
引数を渡す場合はクロージャでラップしてください。
@param Function fn - 遅延評価する関数を指定します。
@param Number [delay] - 遅延時間をms単位で指定します。デフォルトは0です。
@return Number - タイマーIDを返します。
// 遅延評価 + 引数
var hoge = "hoge";
uu.delay(function() {
alert(hoge);
}, 1000); // 1秒後に"hoge"を表示する
uu.time() は 現在時刻をms単位の数値で返します。
@return Number - 現在時刻を数値(単位:ms)を返します。
uu.isU(mix) は mix が Undefined 型なら true を返します。
uu.isA(mix) は mix が Array 型なら true を返します。
uu.isFA(mix) は mix が FakeArray なら true を返します。
uu.isE(mix) は mix が ノード (Element) なら true を返します。
uu.isF(mix) は mix が Function 型なら true を返します。
uu.isN(mix) は mix が Number 型なら true を返します。
uu.isB(mix) は mix が Boolean 型なら true を返します。
uu.isS(mix) は mix が String 型なら true を返します。
uu.die(type, p1, p2) は 例外を生成します。
uu.no() は 常に false を返します。
uu.echo(arg) は arg を返します。
uu.mute(mix) は何もしません。戻り値には undefined が返ります。
Log出力をサポートします。
uu.log(fmt, arg ... ) は ログを出力します。
Firebugがインストールされている環境では console.logに出力し、 uu.module.log2(devモジュール)が読み込まれている環境では 画面上のログレイヤーに出力します。
@param String/Mix [fmt] - 出力フォーマットを指定します。省略可能です。
省略すると、指定された引数を解析し、妥当な形で出力します。
以下のバリエーションがあります。詳細についてはFirebugのドキュメントを参照してください。
クロスブラウザを実現します。
Array.prototype.indexOf(value, index = 0) は
JavaScript 1.6準拠のメソッドで、
Arrayの先頭から値を検索し最初のindexを返します。
該当する値が無ければ-1を返します。
@param Mix value - 検索する値を指定します。検索は===演算子で比較します。 @param Number [index] - 検索を開始するindexを指定します。負の値はArrayの末尾からのオフセットとみなします。デフォルトは0です。 @return Number - 検索成功で0以上の値を返します。失敗で-1を返します。 @see Array:indexOf - Arrayの末尾から値を検索 - MDC
var rv = [0, 1, 1, 2];
rv["HashIndex"] = "HashIndex";
rv.indexOf(1); // 1
rv.indexOf(1, -2); // 2
rv.indexOf("1"); // -1
rv.indexOf("HashIndex"); // -1 見つからない
Array.prototype.lastIndexOf(value, index = 0) は
JavaScript 1.6準拠のメソッドで、
Arrayの後方から値を検索し最初のindexを返します。
該当する値が無ければ-1を返します。
@param Mix value - 検索する値を指定します。検索は===演算子で比較します。 @param Number [index] - 検索を開始するindexを指定します。負の値はArrayの末尾からのオフセットとみなします。デフォルトは0です。 @return Number - 検索成功で0以上の値を返します。失敗で-1を返します。 @see Array:lastIndexOf - Arrayの先頭から値を検索 - MDC
var rv = [0, 1, 1, 2];
rv["HashIndex"] = "HashIndex";
rv.lastIndexOf(1); // 2
rv.lastIndexOf(1, -2); // 2
rv.lastIndexOf("1") // -1
rv.lastIndexOf("HashIndex"); // -1 見つからない
IEの独自実装である outerHTML を Firefox2+ でエミュレートします。
IEの独自実装である innerText を Firefox2+ でエミュレートします。
システム全体で共用するグローバルなインスタンスがあります。
uupaa.js のゴールの一つには、WebOS のフロントエンド(GUI)があります。WebOS のベースとなるライブラリには高い応答性が求められます。
「セレクタで選択した要素が、各メソッド内のthisになる」というjQueryの特徴は、
ライトウエイトな用途(セレクタで検索 → スタイル変更 等)では良く使うが、
内容が高度で複雑になるほど、使用頻度の低い邪魔(モッサリする原因を作るおせっかい)な機能だということがわかりましたので、
(uupaa.js v0.4で実装しかけた) jQuery ライクな構文を解釈し実行するモジュールは一旦削除しました。
なんでも食べちゃう $(...) や $$(...) などの万能セレクタは、あれば確かに便利ですが、
最終的には document.getElementById や document.getElementsByTagName が実行されるようなケースでも、
まず RegExp で文字列をパースする処理が走り、さらに Element をラップしたオブジェクトを生成して返すような実装(アプローチ)は富豪的であり、
レスポンス悪化を招く原因になります。
uupaa.jsに実装されているセレクタは、基本的に ElementArray と呼ばれるシンプルな配列を返します。
将来(※)を見据え、携帯端末やネットブック上で動作するJavaScriptが実用的な速度を出すためには、
配列を配列のまま扱うことこそが、資源効率と実行速度を両立するベターな方法と(現時点では)考えます。
PCにフォーカスした富豪的なアプローチの製品は、Web3.0時代には通用しないかもしれません。
※ ウエアラブルなモバイル端末は、将来の日本を支える主力商品になるはずです。
「速度を計ってみたら、JavaScript::RegExp と String.toLowerCase() は同程度に早いから大丈夫」と思う人も中には居るでしょう。
しかし、モバイル環境でも同じ結果になるのでしょうか?
そのような考えは、リソースが限定された組み込み機器においても「++i と i++ は、副作用以外は同じもの」や「libc::tolower() と C++::Boost::regex() は同程度」と主張しているようにも聞こえます。
必要な道具は用意しました。後はパズルを解いてください。
uupaa.jsは多様なセレクタで要素を選択することが可能です。
uu.xpath と uu.css は、内部でXPath(document.evaluate)を使用しているため、 XPathを標準でサポートしていないブラウザ(IE等)では、XPathをエミュレーションするライブラリ(JavaScript-XPath)が必要になります。
JavaScript-XPathは、 Version 0.5以上のuupaa.jsに同梱されています。(TNX! id:amachang)
XPathライブラリが存在しない環境で、XPathに依存している関数(uu.xpath, uu.css)を呼び出すと例外が発生します。