JIRAã¯Mail.Ruã°ã«ãŒãã§åºã䜿çšãããŠããŸãã çŸåšããã®ã·ã¹ãã ã¯ãããžã§ã¯ã管çãšãšã©ãŒã®è¿œè·¡ã ãã§ãªããæ¡çšãå¥çŽäº€æžãåºåŒµãªã©ãããŸããŸãªéçšããã»ã¹ã®ç·šæã«ã䜿çšãããŠããŸãã å€ãã®ããžãã¹ããã»ã¹ãJIRAã®èª²é¡ã¢ãã«ã«å®å šã«é©åãããããããã¯äžæ¹ã§éåžžã«äŸ¿å©ã§ãã ãã ããåœç€Ÿãç¹å¥ã«äœæãããã©ã°ã€ã³ã䜿çšããŠå®è£ ãããç¹å®ã®æ©èœãå¿ èŠã«ãªãããšããããããŸãã
æ°å¹Žåãç§ãã¡ã¯ã·ã³ãã«ãªãµãŒãããŒãã£ã®JSã¹ã¯ãªãããšæ±çšãã©ã°ã€ã³ã«æºè¶³ããŠããŸããã æéãçµã€ã«ã€ããŠãJIRAã¯ããããéçšããã»ã¹ã«æ·±ã浞éãããããã®ããã»ã¹ã«ç¹åããæ©èœã®èŠä»¶ã倧ãããªããŸããã çŸåšãJIRAãšConfluenceçšã«ã«ã¹ã¿ãã€ãºãããæ©èœãéçºããããšãã¿ã¹ã¯ãšããå¥ã®éšéããããŸãã ãã®äžç°ãšããŠãåªããå°éç¥èãèç©ãããŠããŸãã
çŸåšãå€ãã®ãµãŒãããŒãã£JIRAãã©ã°ã€ã³ã¯é«å質ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèªã£ãŠããŸããã ããã¯ãäžéšã®ææãã©ã°ã€ã³ã«ãé©çšãããŸãã ãã ãã䟿å©ã§çŸããã€ã³ã¿ãŒãã§ã€ã¹ãè¿ éã«éçºããããã®ãã¹ãŠã®ããŒã«ããããŸãã ãã®èšäºã§ã¯ããã®ãã¡ã®1ã€ã§ããAUIãã¬ãŒã ã¯ãŒã¯ïŒã¢ãã©ã·ã¢ã³ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãã¬ãŒã ã¯ãŒã¯ïŒã«ã€ããŠèª¬æããŸãã
èªè ã¯ååãšããŠãã©ã°ã€ã³ã®äœææ¹æ³ã«ç²ŸéããŠããããšãåæãšãªããŸãã ããã§ãªãå Žåã¯ãããšãã°ããã§ããã«ã€ããŠèªãããšãã§ããŸã ã
1. AUIãã¬ãŒã ã¯ãŒã¯ãšã¯äœã§ããïŒ
AUIãã¬ãŒã ã¯ãŒã¯ã¯ãäžé£ã®ã¹ã¯ãªãããã¹ã¿ã€ã«ã·ãŒãããã³ãã¬ãŒããããã³ã€ã³ã¿ãŒãã§ã€ã¹ã®äœæã«äœ¿çšããããã®ä»ã®ãªãœãŒã¹ã§æ§æãããŠããŸãã ã¢ãã©ã·ã¢ã³ã«ãã£ãŠéçºããã³ä¿å®ãããŠããŸãã äžè¬ã«ãAUIãã¬ãŒã ã¯ãŒã¯ã§ã¯ãBootstrapã®ãããªä»ã®ãã¬ãŒã ã¯ãŒã¯ãšã»ãŒåããã®ãèŠã€ããããšãã§ããŸãã ãã ããAUIãã¬ãŒã ã¯ãŒã¯ãããŒãžã«è¿œå ã§åã蟌ã¿ãããŒãããå¿ èŠã¯ãããŸããããŸãããã¹ãŠã®ã³ã³ããŒãã³ãã®ã¹ã¿ã€ã«ã¯JIRAèªäœãšãŸã£ããåãã§ã-ããã¯åœŒãã®å©ããåããŠæ§ç¯ãããŠããŸãã ãããã£ãŠãçµæã®ãã©ã°ã€ã³ã¯èŠæ ãããããã·ã¹ãã ã§åäœããŸãã
ã©ã€ãã©ãªã䜿çšããŠã€ã³ã¿ãŒãã§ã€ã¹ãéçºããæ¹ãã¯ããã«é«éã§ããå¯èœæ§ããããçµæã䜿çšããããšã¯åã³ã§ãã éçºããæ©èœã䜿çšããåŸæ¥å¡ã¯éåžžã«æºè¶³ããŠããŸãã
2.ãã¬ãŒã ã¯ãŒã¯ã®äž»èŠã³ã³ããŒãã³ã
1ã€ã®èšäºã®ãã¬ãŒã ã¯ãŒã¯å ã®ãã¹ãŠã®ã³ã³ããŒãã³ããæ€èšããããšã¯äžå¯èœã§ãããå¿ èŠã§ã¯ãããŸãããããã«é¢ããããã¥ã¡ã³ãããããŸãã 代ããã«ãæã䟿å©ãªãã®ã以äžã«èª¬æããŸã-ç§ãã¡ã®ç掻ãã§ããã ãç°¡åã«ããã»ãŒãã¹ãŠã®ãããžã§ã¯ãã§äœ¿çšãããŠãããã®ã§ãã
2.1ããŒãžã®ã¬ã€ã¢ãŠããšãã³ã¬ãŒã¿
ããšãã°ãèšå®ã管çããããã«ãã©ã°ã€ã³ã«ããŒãžãå¿ èŠãªå Žåã¯ããããæ§æããå¿ èŠããããŸãã ããã«ã¯2ã€ã®ã¢ãããŒãããããŸãã
æåã®æ¹æ³ã¯ããã®ããŒãžããŒãããäœæããããšã§ãããããŒãžã³ã³ããŒãã³ãã䜿çšããŠæšæºããŒãžã®èšèšãå®å šã«ç¹°ãè¿ãããã«ããŸã ã ãã®å ŽåãããŒãžã®ããããŒãšããã¿ãŒã¯å¿ èŠã«å¿ããŠå€æŽã§ããŸãã
ãããã®å€æŽãäžèŠãªå Žåã¯ããã³ã¬ãŒã¿ã䜿çšããŠå¥ã®ã¢ãããŒããéžæããããšããå§ãããŸãã ããã¯ãæšæºã¹ã¿ã€ã«ã®1ã€ã«åŸã£ãŠããŒãžãèªåçã«ãã¬ãŒãã³ã°ããããã®ããŒã«ã®ååã§ãã
äžè¬çãªã¿ã¹ã¯ã¯ãããšãã°ã管çé åã§ããŒãžããã°ããäœæããããšã§ãã ããã¯ã
admin
ãã³ã¬ãŒã¿ã䜿çšããŠéåžžã«ç°¡åã«å®è¡ã§ããŸãã ã¹ã¯ãªãŒã³ã·ã§ããã§çŽ«è²ã§åŒ·èª¿è¡šç€ºãããŠããã³ã³ãã³ãã®ã¿ãã¬ã€ã¢ãŠãã«å¿ èŠã§ãã ããã«ãé©åãªã¡ã¿ã¿ã°ã䜿çšããŠãããŒãžãå±ããã»ã¯ã·ã§ã³ãšããã«å¯Ÿå¿ããã¿ããæå®ã§ããŸãã
ãã®ããŒãžã«å¯Ÿå¿ããHTMLã³ãŒãã¯æ¬¡ã®ãšããã§ãã
<html> <head> <title>$i18n.getText( "ru.mail.jira.plugins.recruitment.configuration.title" )</title> <meta name="decorator" content="admin" /> <meta name="admin.active.section" content="admin_plugins_menu/recruitment-admin-section"> <meta name="admin.active.tab" content="ru.mail.jira.plugins.recruitment:configuration-link"> </head> <body> <!--, , --> </body> </html>
å¯èœãªãã³ã¬ãŒã¿ã®å®å šãªãªã¹ãã¯ããã«ãããŸã ã
2.2ãã€ã¢ãã°
ããšãã°ããã€ã¢ãã°ã䜿çšããŠããŠãŒã¶ãŒãAJAXãªã¯ãšã¹ãã䜿çšããŠããŒãã«ã®ãšã³ããªãäœæãŸãã¯å€æŽã§ããããã«ããŸãã äžæ¹ã§ã¯ãããã¯ãŠãŒã¶ãŒã«ãšã£ãŠäŸ¿å©ã§ãããä»æ¹ã§ã¯ãå¥ã®ããŒãžã䜿çšãããããéãå®è£ ãããŸãã
ãã¬ãŒã ã¯ãŒã¯ã«ã¯ã DialogãšDialog 2ã®2ã€ã®ããŒãžã§ã³ã®ã¢ãŒãã«ãã€ã¢ãã°ããããŸãã ãã€ã¢ãã°2ã¯æ°ããã³ã³ããŒãã³ãã§ãããæè»æ§ãåäžããŠããŸãããå®éšæ®µéã«ãããŸãã ããã¯ããã¬ãŒã ã¯ãŒã¯ã®æ°ããããŒãžã§ã³ã§APIãå€æŽããå¯èœæ§ãããããšãæå³ããŸãã ããã«ãããããããç§ãã¡ã¯ããã䜿çšããŸãã
2.3 AUI Select2
ãã®ã³ã³ããŒãã³ãã¯ãAtlassian Design Guidelinesã«åŸã£ãŠã¹ã¿ã€ã«èšå®ãããjQuery Select2ãã©ã°ã€ã³ã§ãã å€ã«ããæ€çŽ¢ããªãã·ã§ã³ã®AJAXããŒãããªãã·ã§ã³ã®ã«ã¹ã¿ã 衚瀺ãªã©ã®åªããæ©èœãæäŸããŸãã
ãªãã·ã§ã³ãéžæããããããããã«ãã䜿çšããŸãã
2.4ãã¿ã³
ä»ã®å€ãã®ãã¬ãŒã ã¯ãŒã¯ãšåæ§ã«ãããŸããŸãªãã¿ã³ã¹ã¿ã€ã«ããµããŒããããŠããŸãã
2.5èšèšèŠçŽ
ããŒãžãæãããèªã¿ãããããããã«å©çšã§ããããŸããŸãªããŒã«ããããŸãã ãããã®1ã€ã¯ã¢ã€ã³ã³ã§ãã ããã¹ãã§çŽæ¥äœ¿çšãããããªã³ã¯ããã¿ã³ã«æ¿å ¥ã§ããŸãã
JIRAã§Gravatarãèšå®ããŸãããããã¯ãã€ã³ãã©ãããäžã®ãããã¡ã€ã«ããç»åãã¢ããããŒãããŸãã ãããã£ãŠããŠãŒã¶ãŒåã®æšªã«ã¢ãã¿ãŒã衚瀺ããããšã¯çã«ããªã£ãŠããŸãã 次ã®ããã«ãªããŸãã
匷調衚瀺ãããã©ãã«ã®åœ¢åŒã§ã¹ããŒã¿ã¹ãçºè¡ã§ããŸãã ããã«ããããŠãŒã¶ãŒã¯ãã°ããããŠããããã¹ããèªã¿åãããè²ã®ã¿ã«æ³šæãæãããšãã§ããŸãã
äžèšã®ç¹æ®ãªã³ã³ããŒãã³ãã«å ããŠããã¬ãŒã ã¯ãŒã¯ã¯èªåçã«èŠåºãã段èœãããã³ãªã¹ããäœæããŸãã
aui
ã¯ã©ã¹ãè¿œå ããããšã«ããã ããŒãã«ã«ã¬ã€ã¢ãŠããé©çšã§ããŸãã ãªãã·ã§ã³ã§ã
aui-table-rowhover
è¿œå ã§ããŸãã ãããŒãããšãè¡å šäœãèªåçã«åŒ·èª¿è¡šç€ºãããŸãã èå³æ·±ãããšã«ããã®æ©èœã¯ããã¥ã¡ã³ãã«èšèŒãããŠããŸããã ä»ã®ããã€ãã®ããšãšåæ§ã«ãAUIã䜿çšããŠJIRAããŒãžã®ã¬ã€ã¢ãŠããåæããããšã§ãããã«ã€ããŠç¥ãããšãã§ããŸãã
2.6ãã«ããŒã¹ã¯ãªãã
jQueryã©ã€ãã©ãªã¯AUIãã¬ãŒã ã¯ãŒã¯ã®äžéšã§ã¯ãããŸããããããã§ãJIRAã«çµã¿èŸŒãŸããŠããŸãã
AJS.$
ãä»ããŠã¢ã¯ã»ã¹ã§ããŸãã éåžžãã¹ã¯ãªããã¯æ¬¡ã®ããã«ã©ããããŸãã
(function ($) { AJS.toInit(function () { // Script starts here... }); })(AJS.$);
æåã®ã©ãããŒã§ã¯ãéåžžã®æ¹æ³ã§jQueryã«ã¢ã¯ã»ã¹ã§ããŸãã2çªç®ã®ã©ãããŒã§ã¯ãã¹ã¯ãªããã®å®è¡ãéå§ãããŸã§ã«ãDOMããªãŒãšAUIããã§ã«åæåãããŸãã
ãããããŒã®æäœãå®è£ ããããã®ç¹å¥ãªã³ã³ããŒãã³ãããããŸãã
AJSã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãžã®ãã«ãã¹ãååŸããããããŒã«ã©ã€ãºãããæååãããŒãããããããªã©ãããã€ãã®ä»ã®äŸ¿å©ãªãã«ããŒé¢æ°ãå«ãŸããŠããŸãã ãããã®è©³çŽ°ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã
3.ã§ããããšã®äŸ
ãã¬ãŒã ã¯ãŒã¯ã§è§£æ±ºãããå®éã®ã€ã³ã¿ãŒãã§ã€ã¹ã¿ã¹ã¯ã®äŸãããã€ãèŠãŠã¿ãŸãããã
ãããã®1ã€ã¯ãã«ãŠã³ã¿ãŒããŒãã£ã®äœæãšä¿ç®¡ã§ãããããã€ãã®ãšã³ãã£ãã£ã¯ããã©ã¡ãŒã¿ã®å°ããªã»ããã§ãã ãããã®ããŒã¿ã¯SAPããã€ã³ããŒãããããã®ã§ãå€ãã®ããŒã¿ããããŸããïŒæ°äžïŒã åé¡ãšããŠä¿åããã«ã·ã¹ãã ããªãŒããŒããŒãããã®ã§ã¯ãªããActive Objects APIã䜿çšããŠããŒã¿ããŒã¹ã«ä¿åããããšã«ããŸããã ãããã£ãŠãååŒçžæã管çããèœåãå¿ èŠã§ããã
ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¯ãããŒãžã³ã°ãæ€çŽ¢ãããã³ãããã®ãšã³ãã£ãã£ã管çããæ©èœãå®è£ ãããŸããã åæã«é¢ãããµãŒãã¹æ å ±ã¯ããŒã«ãããã«é衚瀺ã«ãªã£ãŠãããåæãããååŒçžæã«å¯ŸããŠã®ã¿è¡šç€ºãããŸãã
ãã1ã€ã®ã¿ã¹ã¯ã¯ãæŽæ°ããŒã¿ãå«ãããŒãã«ã衚瀺ããããšã§ããã®äžéšã¯ç·šéå¯èœã§ããå¿ èŠããããŸããã AJSã«ã¯ãã®ãããªã³ã³ããŒãã³ãã¯ãããŸããã§ããããã®ããããœãŒã¹ãææ¡ããã€ã³ã©ã€ã³èª²é¡ç·šéã®ã¬ã€ã¢ãŠããšã¹ã¯ãªããã調æŽããŸããã
æåŸã®äŸãšããŠããªã¹ããããŠããããéžæããŠã¿ãŸãããã éåžžã®Selectã§ä»äºãããããšã¯ã§ããŸãããéžæãç°¡çŽ åããããã«ãéšéé·ããŠãŒã¶ãŒã«èŠããããšèããŸããã ãããã£ãŠãAUI Select2ã䜿çšããŸããã èµ·ãã£ãããšã¯æ¬¡ã®ãšããã§ãã
4.ææžåãããŠããªãæ©èœ
ãã¬ãŒã ã¯ãŒã¯ã®ããã¥ã¡ã³ãããã³JIRAã®çµã¿èŸŒã¿ã©ã€ãã©ãªã«èšèŒãããŠããªãæ©èœãããã€ããããŸãã JIRAã®å°æ¥ã®ããŒãžã§ã³ã§ã¯ãããããå®å šã«å€æŽãŸãã¯æ¶å€±ããå¯èœæ§ãããããšã¯æããã§ããããŸã第äžã«ãããã¯ã»ãšãã©ãããŸããã
äŸãšããŠã
aui-table-rowhover
ã®
aui-table-rowhover
cssã¯ã©ã¹ãåŒçšããŸãããã ã»ãšãã©ãã¹ãŠã®æšæºããŒãã«ã§äœ¿çšãããŠãããããJIRAã®æ¬¡ã®ããŒãžã§ã³ã§ã¯å®å šã«æ¶ããããšã¯ãããŸããã
å¥ã®äŸã¯ãããŒãžãæãããŠãããã¯ããããšã§ãã 説æããã«ãŠã³ã¿ãŒããŒãã£ç®¡çããŒãžã§åæãåŒã³åºããšãã«ãããå®è¡ãããã£ãã®ã§ãã JIRAãœãŒã¹ãèŠããšãããã¯æ¢ã«ä»¥äžã§å®è£ ãããŠããããšãããããŸããã
AJS.dim(); JIRA.Loading.showLoadingIndicator();
ããã«å¿ããŠ
AJS.undim(); JIRA.Loading.hideLoadingIndicator();
äžè¬ã«ãç®çã®æ©èœãæ¢ã«JIRAã®ã©ãã«ãããã調ã¹ããããã©ã®ããã«å®è£ ãããŠãããããœãŒã¹ã§èª¿ã¹ãããšããå§ãããŸãã å€ãã®å Žåãããã«ãããç®çã®çµæãããç°¡åãã€è¿ éã«ååŸã§ããŸãã
5.èœãšãç©Ž
äžè¬ã«ããã¬ãŒã ã¯ãŒã¯ã¯éåžžã«å®å®ããŠåäœããŸãã éçºäžã«çºçããå¯äžã®ãã°ã¯ãã€ã³ã©ã€ã³ãã€ã¢ãã°å ã®å ¥åãã¯ãªãã¯ãããšãã«ã€ã³ã©ã€ã³ãã€ã¢ãã°ãæ¶ããããšã§ãã ç¹°ãè¿ãã«ãªããŸããããœãŒã¹ãå°ãæãäžããŠãåé¿çãèŠã€ããããšãã§ããŸãã-èŠçŽ ãã¯ãªãã¯ããã€ãã³ãããã€ã¢ãã°å ã«éä¿¡ãããªãããã«ããŸãïŒ
content.click(function(e) { e.stopPropagation(); });
å ¬åŒãã°ãã©ãã«ãŒã§æ¢ç¥ã®ãã¹ãŠã®åé¡ã«ã€ããŠèª¿ã¹ãããšãã§ããŸããããããå¿ èŠã«ãªããšã¯æããŸããã
ãã¬ãŒã ã¯ãŒã¯ã®ããŒãžã§ã³ïŒããã³ãããã«å¿ããŠã³ã³ããŒãã³ãã®ã»ããïŒã¯ããã©ã°ã€ã³ãå®è¡ãããŠããJIRAã®ããŒãžã§ã³ã«äŸåããããšãç解ããŠããå¿ èŠããããŸãã JIRAã®ããã€ãã®ããŒãžã§ã³ã®ãµããŒããå¿ èŠãªå Žåã¯ããããã®äžã§ã®ãã¹ããå¿ããªãã§ãã ããã å éšãã©ã°ã€ã³ãéçºããå ŽåãJIRAã®çŸåšã®ããŒãžã§ã³ã®ããäžã§èšè¿°ããŠããããããããè¡ããŸããã ããã§ããJIRAãæ°ããããŒãžã§ã³ã«ã¢ããã°ã¬ãŒãããåã«ãAtlassianããçºè¡ããããªãªãŒã¹ããŒããèæ ®ããå¿ èŠããããŸãã
6.次ã¯ïŒ
- AUIãã¬ãŒã ã¯ãŒã¯ã³ã³ããŒãã³ãã«é¢ããéåžžã«è©³çŽ°ãªãã¯ã€ãããŒã㌠ã
- AUIãã¬ãŒã ã¯ãŒã¯èªäœã®å ¬åŒããã¥ã¡ã³ãã¯ããããžã§ã¯ãã«å®è£ ããæ¹æ³ãéçºã«åå ããæ¹æ³ãããã³æŽæ°ã®æºåæ¹æ³ã«é¢ãããã®ã§ãã
- ã³ã³ããŒãã³ããæäœããŠããã®å€èŠ³ã確èªã§ãããµã³ãããã¯ã¹ ã
7.çµè«
質ã®é«ãã€ã³ã¿ãŒãã§ãŒã¹ã®éçºã¯å¯äžã§ã¯ãããŸããããåªãããã©ã°ã€ã³ãäœæããããã®éåžžã«éèŠãªã¹ãããã§ãã AUIãã¬ãŒã ã¯ãŒã¯ã«ããããã®éçºãããç°¡åã«ãããéããããå¹ççã«ãªããŸãã ãŸãããã¬ãŒã ã¯ãŒã¯ã®ãœãŒã¹ã³ãŒããåæããããšãæããªãã§ãã ãããããã«ããããã¬ãŒã ã¯ãŒã¯ãããããç解ãã察話ããããšãã§ããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹ã«å ããŠããŠãŒã¶ãŒã«ã¯èŠããªãä»ã®é«å質ã®éçºãã©ã¯ãã£ã¹ããããŸãã 次ã®ããããã®æçš¿ã§ãããã«ã€ããŠã話ããŸãã