iPhone/Androidåãã®selector-based libraryãå®è£ ãã¦ã®è²ã (3) - pluginã¨ãtestã¨ãdocumentã¨ã
ååã®ç¶ãã
pluginæ©æ§ã¨ã
Riddle.jsã«ã¯pluginæ©æ§ãããã¾ããã¨æ¸ãã¨ãªãã ãã«ãã³ãããã«èãããããããã¯çµå±å¤é¨ã«ã¨ã¯ã¹ãã¼ãããã¦ããã·ã³ãã«ã®ãã¡ï¼ã¤(rã¨r.fn)ã«é¢æ°ãçããã¨pluginã£ã½ããã¨ãåºæ¥ã¾ãããã¨ããã ãã®è©±ã«ãããªããr.fnã¯ãã»ã¬ã¯ã¿ã§è¿ã£ã¦ããçµæã»ãããç¶æ¿ããå ã®éå½¢ã¨ãªã£ã¦ãããªãã¸ã§ã¯ãã§ãjQuery.fnã¿ãããªããã§ããã(ä»ãããæ¸ãã¦ã¦æã£ããã©ãProperty Descriptorsã使ã£ã¦å¤é¨pluginããæ¢åAPIã®æ¸ãæããªã©ãé²ããã¨ããã®ã¯ã¢ãªãããããªãããããããããã¾ã§ããªãã¦ãããé¡ã®ãã®ã ãã©â¦)
coreãåºæ¥ãéãå°ããä¿ã¡ããã¨ããçç±ããã常ã«å¿ è¦ã§ã¯ãªãè¦ç´ or å®é¨çãªè¦ç´ ã¯pluginã¨ä»å±ããããã¨ã«ãããZeptoã¨åãæ¹æ³ãæ¡ç¨ãã¦ããããã ããZeptoã¨ã®éãã¯ãevent bindingå¨ãã®APIãcoreã«å ¥ãã¦ãããã¨ãselector-basedãªã©ã¤ãã©ãªä½¿ãããã·ã¼ã³ã§ãeventã®bind/unbindãããªãå ´åã¨ãããã®ãï¼ã£ã¦æã£ãã®ã§ã
ã¢ãã¡ã¼ã·ã§ã³ãã常ã«å¿ è¦ãªãã®ã§ã¯ãªãã¨æãããã®ã§pluginã®æ¹ã«å«ãã¦ãããã¢ãã¡ã¼ã·ã§ã³ã«ã¤ãã¦ã¯è²ã èãä¸ã§ãç¾å¨è©¦é¨çã«å®è£ ãã¦ããã®ã¯ãCSS3ã®transitionãè¨å®ããããããåã«cssã®ããããã£ã夿´ãããã¨ããæ¹æ³ã
JSã®ã©ã¤ãã©ãªã§DOMè¦ç´ ã«å¯¾ããã¢ãã¡ã¼ã·ã§ã³ããµãã¼ãããæ¹æ³ã¯ã大ããåããã¨2ã¤ããã¨æã£ã¦ãã¦
- setTimeoutã¨easing颿°ãçµã¿åããã¦é å¼µãæ¹æ³
- CSS3ã®animationå¨ãã®æ©è½ãã©ããããæ¹æ³
1. ã¯ç¾å¨ä¸»æµã¨ãªã£ã¦ããå¤ãã®ã©ã¤ãã©ãªã§å®è£ ããã¦ããï¼ã§ãããï¼æ¹å¼ã§ãos0xãããgihyoã§é£è¼ããã¦ããè¨äºã®ãã¡ã¢ãã¡ã¼ã·ã§ã³ã«é¢ãããã® (http://gihyo.jp/dev/serial/01/crossbrowser-javascript/0017, http://gihyo.jp/dev/serial/01/crossbrowser-javascript/0018) ãã¡ããã¨èªãã§ãããç¨åº¦å®è£ è½åãããã°ãã¨ããããåããã®ãã¯æ¸ããããã«æãããããã ããã®å ´åãJavaScriptã§ãã³ããªã³ã°ããé¨åãå¤ããã¨ã«å ãã¦ãããæè»ï¼ä¾¿å©ãªæ©è½ãæä¾ãããã¨ããã°ããã»ã©ã³ã¼ãéãå¢å ï¼è¤éåãããã¨ãäºæ³ã§ããã
2. ã¯CSS3ã¾ãããå®è£ ããã¦ãããã©ã¦ã¶ã«ç°å¢ãéå®ãã¦ãã¾ããã¨ã«ãªãããJSã®ã³ã¼ãéãå°ãªããªãã¾ãç°¡æ½ã«å®è£ ã§ããããã ãCSSã¾ãããã§ãããæ ã«æè»ãªæ©è½ï¼ã¢ãã¡ã¼ã·ã§ã³ãéä¸ã§æ¢ããã¨ããå·»ãæ»ãã¨ãï¼ã¯å®è£ ãã«ãããã·ã³ãã«ãªåçºã®ã¢ãã¡ã¼ã·ã§ã³åãã®APIããæä¾ã§ããªãå¯è½æ§ãããã
åºæ¬çã«1.ã®æ¹ãæ©è½ãå¤ãæè»ãªã¢ãã¡ã¼ã·ã§ã³ãå®ç¾ã§ããå ¬ç®ãé«ãã®ã ããå¥ã«å ¨ã¦ã®å ´åã«æè»ãªã¢ãã¡ã¼ã·ã§ã³ãå¿ è¦ãªããã§ããªããã¨ããèãæ¹ããããä¾ã«ãã£ã¦ã³ã¼ããã§ããã ãå°ããã¾ã¨ãããRiddle.jsã§ã¯2ã®æ¹åã§ãããããªã¼ãã¨æã£ã¦ããï¼Zeptoã¯ãªããtransition + transformã®çµã¿åããããæä¾ãã¦ããªãï¼ããã ã1.ã®çé¢ç®ãªã¢ãã¡ã¼ã·ã§ã³ãèªåèªèº«ã§ä¸åº¦å®è£ ãã¦ã¿ãããªããã¨æã£ã¦ããã®ã§å¥éæ¸ãã¦ã¿ããããããªãã
testã«ã¤ãã¦
testã¯QUnitã使ã£ã¦ãããJasmine使ã£ã¦ã¿ããããªããã¨ãæã£ããã·ã³ã¿ãã¯ã¹ã®ãªã·ã£ã¬ã以å¤ã«ç¹ã«ç©æ¥µçãªæ¡ç¨çç±ãè¦å½ããããç¹ã«å¦ç¿ã³ã¹ãããããé¨åã§ããªãã®ã§ä½¿ãæ £ãã¦ããQUnitã«ããã
JavaScriptã®ãã¹ããã¬ã¼ã ã¯ã¼ã¯ã«ã¯ç©¶æ¥µãéåæãªæä½ã®ãã¹ããè¡ãæ©è½ã¨ããç¨åº¦ã®ãããã£ï¼ä¾ãã°equal, deepEqual, throwã¿ãããªãã®ï¼ãããã°ååã ã¨æã£ã¦ãããJavaScriptã«éã£ã話ã§ã¯ãªãããæã«å¤§éã®ãããã£ãç¨æããã¦ãããã¹ããã¬ã¼ã ã¯ã¼ã¯ãè¦ãããããããªå¤§éã®ãããã£ã¨ãé ã®ã¡ã¢ãªã«è¼ãã¦ãããªããä¸ã 使ãåããã®ãé¢åã ãããã¹ããã¬ã¼ã ã¯ã¼ã¯ã®æ©è½ã¨ãã«å¤ã«è©³ãããªã£ã¦ãæè¡çãªæå³ã§ããã¾ã§å¬ãããªãã®ã§ãåã®æè¿ã®å¥½ã¿ã¯ã·ã³ãã«ãªãã¹ããã¬ã¼ã ã¯ã¼ã¯ã®æ¹ã«å¾ãã¦ããããã£ã¨ãããã¯Perlã使ã£ã¦ããå½±é¿ããç¥ããªããããªã·ã£ã¬ãªãã¹ããã¬ã¼ã ã¯ã¼ã¯å ¨ã¦ãå¦å®ããæ°ããªãã®ã ãâ¦
è¦ã¯èªç¶è¨èªé¢¨ãªãªã·ã£ã¬ãªã·ã³ã¿ãã¯ã¹ã¨ãããå®è¡ã§ããããã¥ã¡ã³ãã¨ãã¦ã®ãã¹ããã¨ãã¯é£¾ãã«éããªãã®ã§ãèªåãå¿ è¦ã¨ãã¦ããæ©è½ã¨å¦ç¿ã³ã¹ããè¦æ¥µããä¸ã§é¸ãã ãããããããªãããããã¨ãã話ããã®ä¸ã®é¸æã§ããã°ãxUnitå½¢å¼ã§ããã¨ãspecå½¢å¼ã§ããã¨ãã¯å¤§ããåé¡ã§ã¯ãªãã
以åã«åã¯ãJavaScriptã®ãã¹ãã«ã¤ãã¦æ¬æ°ã ãã¦ãªãã¨ããã¿ãããªè¨äº (http://d.hatena.ne.jp/zentoo/20110123/1295796341) ã§ãèªååï¼èªååï¼ããHeadless! Headless!ãã¿ãããªãã¨ãæ¸ãã¦ããé¢ä¿ããã£ã¦ããtestãå ¨é¨headlessã§èµ°ãããã«ãããããªã¼ãã¨ãæã£ãããããããçç±ã¯ãheadlessã«ãã©ã¦ã¶å¨ãã®testãããã½ãªã¥ã¼ã·ã§ã³ã«ã¯æªã 決å®çããªããé¸å®ã«ãããæéããªãããããã¾ã§èªååããå¿ è¦ãä»ã®ã¨ãããªãããæçµçã«iPhone/Androidã®å®æ©ã§åãããªãã¨ãã¡ã ããã
ãã¹ãã£ã³ã°ãã¬ã¼ã ã¯ã¼ã¯ã¨ã¯å¥ã«ããã¹ããè£å©ããããã«Sinon.jsã¨JSDeferredã使ã£ã¦ããããããã¯ããã¤ãã®testãæ¸ãã¨ãã«ã¨ã¦ãå½¹ã«ç«ã£ããSinon.jsã«ã¤ãã¦ã¯å¥éè¨äºã«ãããããããªãã
documentã«ã¤ãã¦
documentã«ã¤ãã¦ã¯ãã¡ãã®è¨äº (http://efcl.info/2011/0226/res2291/) ãåèã«è²ã 試ããã®ã ãã©ã決å®ççãªãã¼ã«ã®ãªããåã¾ããã£ããã¿ããªã©ããã£ã¦ããã¥ã¡ã³ãçæãã¦ããã ãããï¼
ãªãã ããã ã§ä¸çªæ¯ãã¦ããããªjsdoc-toolkit (http://code.google.com/p/jsdoc-toolkit/) ãé¸ãã ã®ã ããããã©ã«ãã§åºåãããhtmlãããµãããããã³ãã¬ã¼ããcssãèªåã§ãããã°ããã®ãããããªããããããªé¨åãèªåã§é å¼µãããã¯ãªãã®ã§ãããã©ã«ãã®ãã¶ã¤ã³ãããã¡ãã£ã¨ä½ã¨ãç¥ãã¦ã»ããã¨ããã
jsdocã®ææ³ãã¼ã¹ã§ãclosure compilerã®ãã¼ã¸ã«æ¸ãã¦ããã¬ã¤ã (http://code.google.com/intl/ja/closure/compiler/docs/js-for-compiler.html) ã«åã£ã¦ããã¥ã¡ã³ãã³ã¡ã³ããæ¸ãã¦ããããããããã¢ããã¼ã·ã§ã³æ¸ãã¨closure compilerã¸ã®ãã³ãã«ãªã£ã¦ããããæé©åãã§ãã¾ããã¿ãããªãã¨ãæ¸ãã¦ãããã©ãããã¤ã試ããæãã§ã¯ç¹ã«optimizationãè¡ããã¦ãã形跡ã¯ãªãã£ããã³ã³ãã¤ã«ãªãã·ã§ã³ã«ãã£ã¦éãã®ãããããªããã©ãã
æå¥ã°ã£ãã§æç¸®ã ããjsdocã¯javadocç±æ¥ã®ãããJavaScriptã®ä¸è¬çãªã³ã¼ãã«ãã¾ãããããªãã¢ããã¼ã·ã§ã³ãå¤ãæ°ããããå¾®å¦ã«ãããæã«æãå±ããªããã¨ããããã§ãããã ãã®ããã«ãªã¬ãªã¬ãã©ã¼ãããä½ã£ã¦ããªããªã®ã§ãé£ããã¨ããã
çµããã§ã
ãªããè²ã ãã¡ããã¡ãæ¸ãã¾ããããRiddle.jsã«ã¤ãã¦ã¯çæããè¦å®ã£ã¦é ããã¨å¹¸ãã§ãã