気のせいかな?
こんな感じで逃げる。
RGB2HTML : function ( r, g, b ) {
r = '00' + this.dec2hex( r );
g = '00' + this.dec2hex( g );
b = '00' + this.dec2hex( b );
r = r.substr( r.length - 2 );
g = g.substr( g.length - 2 );
b = b.substr( b.length - 2 );
return r + g + b;
},
dec2hex : function ( dec ) {
var hex = "";
while( dec ) {
var last = dec & 15;
hex = String.fromCharCode( ( ( last > 9 ) ? 55 : 48 ) + last ) + hex;
dec >>= 4;
}
return hex;
},
sortableのstopで内部element取ってきて、その値で内部変数を再処理しようとした。
$( '#sortable_target' ).sortable( { 'stop' : function () {
//一番下に存在しないelementが追加されているので無視
$( '#sortable_target' ).find( '.sortable_target_item:not(:last)' ).each( rebuild );
} } );
なんか「:not(:last)」を使いしないと変なの入る。
(drag対象のelementが一番最後に追加されてるっぽい)
あと、sortable対象の内容を再構築した場合、「'refresh'」を呼ぶ。
$( '#sortable_target' ).sortable( 'refresh' );
Dashboard Widgetにこんなコード書いたら動かなかった。
$( [ 'element_id1', 'element_id2' ] ).each( function () {
var val = widget.preferenceForKey( this );
if ( !val ) return;
$( '#' + this ).val( val ).change();
} );
「var val = widget.preferenceForKey( this );」を「var val = widget.preferenceForKey( this + '' );」にしたら動く。
ほんとーに、primitiveなstringしかだめなんだね。
一時的に各種オブジェクトのprototypeを標準的な動作に戻すjsほしい。
最初に呼び出すと普通の状態になって、最後に元に戻せるような。
prototype.jsとかricoとか同時に読んでても問題にならない方法がほしい。。。
if ( !console ) {
var console = {};
console.log = function () {
alert( arguments[0] );
};
};
// for debug
var p = console.log;
これでちょと楽になる。ついでにCtrl-無変換で「var = function () {}」を入力できるようにした。
keyseq $FUNC_DEF = &SetImeStatus(off) v a r Space Space S-Hyphen Space f u n c t i o n Space S-_8 S-_9 Space S-OpenBracket S-CloseBracket &Variable( 17, 0 ) &Repeat( ( Left ), 17 )
key C-*NonConvert = $FUNC_DEF
よし。
http://mayu.sourceforge.net/mayu/doc/CUSTOMIZE-ja.html
var foo = function () {};
foo.prototype = {};
var bar new foo();
したときにbarからfooの名前(?)を取るほうほうってないのかな?
デバッグするときに「このObjectって何?」って時があるんだけど、
せめてconstractorの定義行だけでも取れないかなー
jsの仕様上無理なきがするけど、これができればデバッグだいぶ楽だな。
classとか作ってそこで一緒に持たせるようにでもしないとだめかな。
したくていくつかライブラリあたったけど、全部「Maximum call stack size exceeded」で落ちる。
と言っても検証したのは以下の二つだけだけど。
http://www.jdempster.com/wp-content/uploads/2007/08/jquery.json.js
http://www.json.org/json2.js
やむなく手解析。
データ形式簡単でよかった。。。
http://d.hatena.ne.jp/amachang/20080208/1202448348
前に結構悩んでそのままほってたけど
(function() {})()
と
var hoge = function () {}()
が動いて
function () {}()
が動かない理由がようやくわかった。。。
やっぱりJSの言語仕様微妙
非常に紛らわしい。
var hoge = function () {};
hoge.prototype = {
add_click : function () {$( '#hoge' ).click( this.hoge_click );$( '#hoge' ).click()}
hoge_click : function () { alert( this ) }
}
var huga = new hoge();
とかやると「hoge.hoge_click()」内のthisはhtml elementになる。
(hoge objectじゃない)
こうなると「hoge.hoge_click()」内でthisを見たいときはhugaを直接見るしかない気がする。。。
こういうコードは書くなってことかな。。。
(「hoge.hoge_click()」内で「return function () {nnn}」しろってこと?)
なるほど。
jQueryのあれば「流れるようなインターフェイス」っていうのか。
(あとJava由来なんだ)
確かにjQueryのインターフェイスは非常に読みやすい。
これは元々の構造があって、それとコードのマッピングするときとかはかなり自然な記述になる気がする。
(DOMとかSQLとか)
ただ、「流れるようなインターフェイス」って名前は微妙。。。
widgetのデータ保存APIは「値,キー」の順でセットする。
普通と逆なので要注意。
widget.setPreferenceForKey( this.id, 'lastmode' );
それにしてもsetは「setPreferenceForKey」なのに
getは「preferenceForKey」ってmethod名なのはなぞ。
なんで「getPreferenceForKey」にしなかったんだろう?
読み込み完了時のUAがおかしい。
ちゃんと検証してないけど、DomReady時はnavigator.userAgent.match( /Media\s*Center/i );が正しく一致しない。
setTimeout( function () {}, 1000 )後は正常に一致した。
MacのDashboard Widgetを作る。
Yahoo! Widgetで動いているものの移植。
う~ん。Yahoo! Widgetが異常すぎて結構面倒かも。
Dashboard Widget自体はかなりまとも。
Vista Sidebar Gadgetよりまともだな。
設定ファイルでlocaol systemへのアクセス範囲とか、
ネットワークへの接続可否が設定できるので
「elem.innerHTML = '悪意あるサーバデータ'」とかされても
Sidebar Gadgetよりましな可能性が高い。
(悪意あるWidgetを入れたらおしまいなのは一緒だけど)
基本常に右端に出てるSidebar Gadgetの方が見せ方はうまいけど、
1Gadget = 1Windowで作られてるDashboard Widgetの方が自由度が高いし、
作りやすいな。
ただ、HTMLInputElementが微妙におかしい。
Macインターフェイスと合わないから純正使えよってことだと思うけど、
この辺はかなりめんどくさい。
(スクロールとか独自品使わないといけないので)
結局makeがなかったのが原因でしたorz
installしながら気がついたので入れてたけど、
Config.pmに反映させるの忘れてた。
o config initで再修正。手動じゃないと必須項目なくてもわからん。
まともにinstallできたためしがないんだが。。。
debian標準の$CPAN::VERSION = 1.7602から
install Bundle::CPANしてもNOT OKの嵐。
別にコンパイルしなくていいよ。バイナリくれよ。
オブジェクトからすべてのkeyを取得する。
(from サイ本)
var keys = function ( obj ) {
var result = new Array();
var i = 0;
for ( result[ i++ ] in obj );
return result;
}
uncaught exception: Permission denied to get property HTMLDocument.implementation
ってエラーが出る。
たぶんJSが原因だけど、理由不明。
なんかやばいもの触ってるのかなー
FFでscript scr="hogehoge.js"して、
その中で自分の上にscript scr="hugahuga.js"をinsertBeforeした中で
document.writeするとページを延々読み込んだまま帰ってこない。
まあ、そんなことするなって話だね。
>writeの後にdocument.close();すればいいのか。
(その後はwriteできなくなるらしいけど)
jsでnewすると、指定されたfunction objectのconstructorが{}付で呼ばれる。
つまりこんな感じ。
//hoge_classのconstructor
var hoge_class = function () {
this.a=1;
};
var hoge_instance = {};
//hoge_instanceをthisとして、hoge_classを呼び出す。
hoge_class.call( hoge_instance );
hoge_instance.a // -> 1
FFで「戻る」を押した場合にJSが実行されない。
(globalのコードも、onloadも走らない)
flashは初期化されてるっぽいので、
flashからcallbackしてもらえればいいのかな?
何で「jQuery.noConflict();」のサンプルは
「jQuery.noConflict();」と「var $j = jQuery;」を分けて書くんだろう?
「var $j = jQuery.noConflict();」と一行で書けるのに。
下位互換?最初の紹介記事が分けて書かれてたから?
rico.js(1.1.2)を先に読むとjQuery(1.1.2)が読めない。
jQuery.noConflict()以前に読み込んだときにエラーになる。
ricoがprototypeいじってるから?
ざっくりソース見た感じでは
そんなにやばいことやってるようには
見えなかったんだけど。。。