140字以内ブックマークレット
個人的にハマってる140字以内のブックマークレット。"javascript:" で既に11字使ってるのが痛い。
その1。
今月のカレンダー。
javascript:d=new Date;d.setDate(1);w=d.getDay();c=[];i=0;while(w--)c[i++]='\t';for(n=1;n<32;n++)c[i++]=n+(i%7?'\t':'\n');alert(c.join(''));
139字。
30日までの月と31日までの月と2月を分けようと思うと160字超えてしまう。閏年を判定すると180字ぐらいになってしまう。どうにかならんかなー。
119字でできた。
javascript:d=new Date;d.setDate(1);w=i=d.getDay();for(c='';w--;c+='\t');for(n=1;n<32;c+=n+++(++i%7?'\t':'\n'));alert(c)
それでも月判定は難しい。。
その2。
今見てる URL を twitter に投稿。
javascript:'<body onload=f.submit()><form action=//twitter.com/statuses/update.xml id=f method=post><input name=status value='+location+'>'
139字。
最初見たときは、こんなブックマークレットがあるの!? って思った。
その前までは document.body.innerHTML で書いてたんだけど、そういえばブックマークレットの最後に返す値は document.write っぽくなるよなあ、と↑の方法を os0x さんに教えてもらった後に気付いた。
action=//twitter.com/ というのも os0x さんのアイデア。http: って省略できるのね。
// から始まる URI は RFC2396 などに書かれているけど、「めったに使われない」とあるのでどれほど使えるのかわからない。scheme についても定義されていないし、ブラウザのサポートもよくわからない。
net_path = "//" authority [ abs_path ]
140字以内で何ができるかな?
今月の日数
javascript:d=new Date;m=d.getMonth();y=d.getFullYear();s={3:1,5:1,8:1,10:1};alert(m==2?(y%4?28:y% 100?29:28):s[m]?30:31)
120文字。こんなに書かないといけないのか。
%100 のところにスペースを入れないと Unicode に変換されてしまう可能性がある。
- m_satyr さんによる回答 http://twitter.com/m_satyr/status/5907203056 だと65文字。
id:Koonies さん、カレンダー&日数判定で149文字まで下がりましたが限界気味…
javascript:with(new Date)setMonth(getMonth()+1),setDate(0),d=getDate(),i=getDay()-d%7+1;c='';for(n=-i;n++<d;)c+=n>0?n+(++i%7?'\t':'\n'):'\t';alert(c)
140文字以内のカレンダー
コメント欄の id:nanto_vi さんの回答が一番乗りと思ってましたが、それより前に id:murky-satyr さんから twitter で回答が寄せられていたのを見落としていました。
130文字で、nanto_vi さんのものよりは魔術めいてないかなーという気がします。
javascript:with(new Date)for(c=i=0;setDate(++i),!c|getDate()>1;)c=c?c+(w++%7?t:'\n')+i:Array(w=1+getDay()).join(t='\t')+1;alert(c)http://twitter.com/m_satyr/status/5909908800
お二方には、お見事と言いたいです。
まだまだ減る
うーぱーさんの
javascript:with(new Date)for(a=[],i=j=0;setDate(++i),j=j?j:getDay(),getDate()==i;a[j+1]=i+(++j%7?"":"\n"));alert(a.join("\t"))今月のカレンダー126文字
http://twitter.com/uupaa/status/5991517401
や murky-satyr さんの
@uupaa 成程。その方針なら余裕ですね
javascript:with(new Date)for(a=i=[];getDate(setDate(++i))==i;a[++j]=j%7?i:i+"\n")i-1?0:j=getDay();alert(a.join("\t"))http://twitter.com/m_satyr/status/5993593005
だともっと減ります。i=0 しておいて getDate(setDate(++i))==i でループするのがミソ。