Co-authored-by: Graham Christensen <graham@grahamc.com> … but just fixing up merge conflicts from the introduction of flakes and the removal of the Jobs table.
SWXX2O4AFLEPD3N5BOYBHDRU5IRIIQHFDKNEJ3LVWOFL6NOOZVMAC YGJ55WLBENN6H5RTW37ULXXQFVL2CJ6B4JKGOD6UXQTQCEACW7AAC YUMW25WR2T4OSNCQM3IXJBYG2KRPC3NMPKGLW2FGFMI4NIQSWJFQC HZWLTEXCPFQ5MS5CJEQYZWMAYX7M26XJ3VA4KICCZKJUEK4OIBYAC YM6HYHOKPDIVGRDA6ILILRZMEBVUOOZVHHLTIRZCMXLDFD4DIFVQC IMA3HWYCJ6WMFVGSQILZWSWO7QXDVDTWAQFNCKI4QO5JL3QX4ZZAC HU6Z5NS5LRRXKVHL3364WV26UF4PKT25LFDVW5X32OHMOF2JHJHQC HDBH7TDQRNKDW7F3AD4RSKI42OHSUOI4S7MS65646OAZANQZIKFAC CLBOP44WGI6B47PRPPLKOQODTLDXEZRT7SXLSDS6I42DGFNI2SLQC PVDN6PEWFU2LJAZNQ5LJULB3ZLO3BHBOBDTAYEEIO7KQ5UAF2QAAC GXRKOXQJWOBXNHUYT5D7NX2JHEOY2CWZFLSFOW2BLG6GGNM2SRZAC UANT7MOVK62YKFDQ5AJU2XETFKPUAEMJ4WJPRNJ7OJXN2E6DOFLQC VHPLIGHUXBMVV5KUO2CBLUMNCKQSCWBDGC7KV2YRQZ3DCYT2SDQAC ROFVACRAB6SZ2RDWKLMOXBB2BHEWPXBD2ZRYZL3QGBRTNUMO5NZQC GLIPWYWLW6JNCIPMAXPKU64RHO2WDIFYZ5ZNGMYUJKX5Y7ZPSVJQC D5QIOJGPKQJIYBUCSC3MFJ3TXLPNZ2XMI37GXMFRVRFWWR2VMTFAC 64IV56HILJR5IXOACLM33OBLS4MQ4L65FMM33GD3L4AKBUFP7WLAC FV2M6MOTAP4BJMEKU5XUDVEACWEJGEIRCCE2MRY3F6SF2SFOE3MQC S5GCSCNSR43NZ23DR22G7E7ZWNCSQ44WUPXLESYHJCM7XBKED3SQC UMEKGOSYZ25A6HEBRYGA6Z74MUBCAT2AQH7CJQAW2Z6KEJVPTFDQC OEPUOUNBNTHTFZVDXREGBQCKFRCWMVP2MDVK4OA47VK2DBKEWVYAC 3QWDDLBR5DGFK5Y3TDMK55R2SCHRHFVO2KW2BMZGIYRTIQEZC45AC 2GUAKGTBTNFFER343SQWSLFYIXXHJLDSGH5JHF7QMC3AVZB7Q3TQC JIJDYWPYMZZNFBCWYSYR72RNEW5MSI26MJ5UXXIU7DDX25IBR3CQC J5UVLXOK6EDIL5I7VKWH4V2QDS4DPD7FHRK6XBWSXFRQS4JKXFZQC JATC3WQYHNS3QQ6XFDRJHC3JHNHKAJM5RAXC32EX7PDQSEYE6WLAC MB5INTIQWM5VXEEWFNX46SWVNTORXWZGKZDOYZEORQ5T5ZM7XI2QC 3LEGFJFPEUE7RLBS2GYULCKIOPGI3UNGC6FYGAF7F2HZ2TDHKVUAC WE5Q2NVIIK4R2DUUZYLJFQVYK5O26EDEJRPK3CPGWHU3SEAC2DQAC D7PL2VWUCRIFGFPFXTB466NIUYU4FECAQPHF4TDFVMOK23VEHDEAC T5BIOVJEMBIASP7EKQVV2N3VD6I56UXH6LCD5I33BDQEVHJAMGKQC HN3V252LIH47SV655UM22DJUWEXVFAT265A7AGKLG6W73E3FE3ZAC K22TMPH534XFKE6MWYRZSOCRWB7MCBKTMUBIBDF36FJR5DF5UE3AC JJHVQGELU4HADD7VGKJMIXFK4WU6PSLPWTRQV365LO5OO7X66J6AC R7MDDCB2Y5KQVSRQR6FISMVYUIED5SHXTHZGKWCRQTX7NOAEPRDQC TPNHTE5VJ36IPKMFENDERDBFBHLYFXOVNDLV2QSC4G5STPPMBLMAC VBWHG272ASPCVRBVSR7B2VXAPSSYXTWFMAN6ZV2KEQUHWLRRPYYQC 36M6DGITWMQQGZ7VROEHUOY4FP7OHPJ5DXMQMHHISBIAJLQE24YAC XTKCALUAJ2EKYO6ZQDLRDCDLCM5NAMUJ5BB3N6XIY32Q6YOJTB5QC JARRBLZDQ2JZWY7IUVPTOT7WJMBPMLFLF2MGLVGOYROAAISYGLSAC LUYDIGYMZFHTN2SU76XUK76E2FMXY6LXH2MYOPBCPI4AOI2RB2SQC IK53RV4VGOHLCZGQCCIKPB45M3C7M7YMNBOJFBGZJ4LWIZNU4QNQC 4WZQW2N6NJSIKSK7DCOV2YVEG5C45LLUM2FCCZRLISUXUGMBGF6QC XGNERX6C5VDBUJFN3OIQISHPLIST7SZTU6SEH5TCVPWNIF25AQDQC UM73XPLKNQ6PAN75UGSHAOCL7RGVEHURP56YEANPJD3T2FORHS6QC QCGCX2BRDJ3MECT45M6KUQDSTVXWRHGLD4KKNG5UOCOTNAW7L3TQC GS4SFHCPF76AX2U4NLLJGUISF6Y4AHYWEW3GLTDCKVDDXLSIGXUQC GTXYNFUKUWXM5KO2FOJ5RHAMT7GMHABIVMERLA36COZ4ZZ4S2NKQC 4NTIBJ74F2QUMISJPB4DGM7VPYFVZDS6ZDITVIAQCSWO6C3UIQ6QC KSBB33RE2PK5SFN7ZMOTZJQHZB4JYIIUUKWDSD3LSZ5GD465AJHQC PF72JKWQ2CLEQUNOSCKQ3ETVDOZ5VQBZEHVZU2YVZCS4WZX5DSTQC ZB3JV52WEKVFX4XGSQUX6PCM4XGF62MCQRZAAOKNK4JNGYO2P7QAC OX6NYJDVCDX2UCJ4QQMTRJVZ535NOMCJGYCHDLCADJPQI7RMCXPQC TQVKZQUGCFYNH5P56LXMXRXZNTD56MH5T5GX2BMQ5YSRPGHAUYMAC C3AG65SWAGDSML5MBD4ZPRCHI2LNNDN6IQZOI3HLYRJRPAW3QPAAC PVIRRARJJC2Z3PYC6XPHJUZPT5IS4IKXUUDGMXXV57PFVVFCUUMAC 2G63HKCHG7S6DGWDOHSDF7PXFPD6H4TRKDKIIFCXXAKET6FCWN2AC UQA4FMUAWSGCX33ZN5R5UC25QZTJ2X6DMP4L7XDFNMHC5QYHR2CQC ZFEN2MAOJRRQEIORSK2N6PNAWGBEN2WNAWA6IWUVOHP5I5PQC6JAC QUMWPGCUBMAPWLUPRSISK7PNU5LIHKHKCAZYE4XXQCJ5E4L74VSQC QLOLZHRXOUSNVLJG2SWVC5EISFUOUKJIT32XN6DNW4VFFJMN5PMAC GEADFVZ5LXXFIE3VIP4UJ4AEI2VX57DXER47JA4IHH5BG3QNPAEAC OGLMBJSCE2LO2QDB6H6Z6L5YIO354XVK5DYWC3R4UK6HCNIDSKLQC I3X25POIIRIY47QTN2PA3WMDVROM6TLFJAV3Q5W6AU526TFPNHKAC VJFLX7B6DEYXQRS3T5LHOM4POSGMEBQSJJVBHAQV3U4LRPF4KVBAC ZRRPBEI4ZSISCMWV62JGB35QNRJVA7SZUR4F52WTQRECCG2GCEAQC JY7BXXOP3EZCDT5RSMVE4Y6IECXGYL4GEBJOZHR7H3Z35XZ3NIVQC A6XVP6FE3CO7BVZR23HQS2GFDNF3FK7KBDSOB4YIPRISZHEWQJKAC DAPOSS44WRFQZ7XUWSMYCCORY4POKD42DGAIXMGP4ZRBOEPNNRGAC 6WRGCITDYP7JIBYP25QIWCHWRJWFPDP2D3TJS3WO3KUHQQJAWHMQC WGUKOIQZOQ64I6OJHGR4RSRI2HPH4RXADNSPFBWRETKO7OWCET4QC ODNCGFQ5FPKFI624BVMLW7PJ2EFJOR3TY66OCZM42UNNTWBCF2TQC CQQSJLONTAKIWT4AEEDZFLFAFCSIPEGWLBJDJIS7VJK6FJ3LZ2RAC XAJFR6SR6Q56FCL3VYQTP534HD7JFZAMCYY376Y7DVZY4BXM2UWQC 5GRW5XU4PXOROJYRVOSNP3KMQMEVEQWHJD26AVCBADW7IF72NI7QC U4TD3AIQXBJFFUORTMIC4IHZTVBORRKL2TZ2FSP4G665ECZOEMNAC 4QCXGR4WEQHBUNOKGLH7VOUF7RWGZJHVSQDZB3I7ZXQX2DRSHLGAC 6HWHYPSW4Y2QBY3OWAJYEOOVICFFIWSL5OEAU2ZMLD3H4NXXKBOAC MZ63OVKPTSGREE3JSDCJVJY2VQ7FU76ZMTQBBJSRAUOYFJA6UPIAC AR5EHCUFCQJERDWBVZAJ6WZCDFWZPLH2UNDSLPXM7BSSMV3DQMBAC UOINKJ2JBCRTZPFTAXDPRJOEUWWPJ43IGVWLRIRLIGHLBMWDOGDQC VHV6GI4L2GEV2PV3AEV4C22O3JB4XUS6WPEBFINYD5CJOBMAESAAC RHUAFTJAKUW654TNYHQYSSQ4PXFEEMDRRTLEPKCP3MOE7TWMTICQC 2CYHINKGDCSPJL33Z6X7FUBUJCWNU36KDDUDOUWRLVYCGUXJHPVAC W74RIXTJSDGUC4Q7NAUCS7TNC6YIR6KZST5ALO5DV7OPUEADZK3AC CMBTR3KDWTFILHFG6CP3NSMQDWBJW7L4IJ24L6YT2T4GWRMVWRAQC D7X6XTKQVG7SQTAIQ24SOVT6YHBHFKXDXB5GBPII6VK3CB4MYNTQC QTC3SYBMNNTPZHQGXRMV5GU5KDODGXPIM3TIGWBAF7HDKNDKTCXQC TFK74CQRYCOR2RAUZ6LATA3IJVR7QCWSPCMTXCJPPDPIRS7D5UTQC SS4TZXNUWXSEJC3XYHGVS3IBZ2D7GPIPELODVQOHRRGYADI2L72AC AK2UZDS2IRVBZP3GRNZS2SIKMKEFUBPIVSA45EZBH4UYFKWI2HCAC 225GEK4NN53NJ6EBDAJNECR76FILAHV7KNEG23TDQ2KYMG7NFEUAC NGYZCZYXZUS6ZWAQCI7QD5PON7LHUTLMJ3KHZTPKI355RRMBJCPAC RX7USXWQTA3K7KJJZKBEJ5XVCNA6DO7XCDGXNB2LMZ24BEWYKHKQC KKJNJHO5SJBDWHW5X3N53DOFQPI7W7VB3KZ47E5WUEYCQFXM5PVQC HRAFVVOEGQJQS4XQNZSMNYN2SUZGKEGPSJUDZUBMI2IN32WFNQ4QC QBT7FA7R53OSJS7GNF7UXOJJWCT3CVOQO3R3J22EGHBLKRL6L5SQC UICHT2PSN2QOCHP6MGY5QQJUDU4IF6FBIOJLBA55QBJDK6ST566AC G4X5IUYJHZSEXAGFG5DRIJEHFBSQDQ2UTIJ4FCILIPZAUHGQ3GTQC JINQDKLIBKGZLGFFJDTFDHCZXFNETNSTETZQOZPW7PKMGKL7AOTAC F6LBAQMLWE26DMNHKBQ7IRMZIIPPTFMPGIPRLCNH7LWDB2XSUAEAC SBMOICGVH2B2FBFHL2D767XC4LC2Y6SF4TYGY3I6TSNMLYV27GUQC TQKGQ5R36VOLLJ3SR2WWIQ6VSN245N3QG4JHI2ZCP5T6RXN3PJWAC ZWCTAZGLJZQNTYWTC2XQUKMILJF6JGDL5IND6QNYWK4FIGMLRFXAC 7YBYT2LQML2PKEO6UO4444AGSASS664UCDXW2YO3ALB7THQHCEBQC 77BG3TYKSKVV6C6VDJH7JDRJRPRNNBAO2OH4YZ6JY5Q5OP3VGXFQC AJVCB6K6HUX44WYO7PQGKCK6BMEYDYPCN4HYEFBYGATCVJO7BN3QC 2CFO2MHSLCE4SKY5N3ROLIOBEQAFR6WRYLGGJ5AP3HZVDEC6YGWAC QXMZNOC6ZBU434QQGKPIPE5GKFTLN4L4HLDHJU4X3PVJVMSBXJDQC WUCOEIFANBM3WXZ2IWEITZ6FKBKXASVWH2LCYRXB4C22H5ADLWVAC GGT2BLPFPPEXHVJTQHTE6LE3JNLHWRK6KGW7SKGITBFTF24KQTQQC 44AGCSXKHYKMY7FRKKMWI67OWY2VKKAR3KCACM4K7SX4W6VARVHQC 2P7VNAACFSXMH42JCXQZ7GDAAEIFDGDWJOK6XD6G36AGEYQSRO2AC 6Q2JPSWGL4KKQEBYB3TNZIHAFHGOA47OH7MQM3RMKM72HIZSFCAQC QL55ECJ6KMMBUOWQ6LKSOVN7L43CH4S6SPE2AQ3VX3KSGC32RP4AC JATZRMWWP6ENJRULJ2PFW6NT35C4N3WVWACAFFNI5DKF2H6AY7FAC TLJC6BJ3W4IGAKOG65VHAR2YICD63W3VELJBBWTIKDJ7FCMFAUPAC 2DHE2ZAKR4AU7OE6E5CYNFWVGQXLHEX5LFKVU43PMBVX3QW6RHFAC FAUCW4NHW33VMQIEIZQFUKOEKQDR33HX3ETI2PF7X4LCV2CFV53QC LZVO64YG43JD7YMZSCTZNOBS5ROZA4FMPKJW2YOMHX2V5PTGBVWQC NRSKJPP4FYTEKWNLVRK2QZDL6P24VJAC6R6NUBVX77JSUEBVRISAC NZXX6PLDWEDQHXFF5JCZWGB22VA3WSDYLX65K6BQ5GNWPOE43N7QC I4K2UPCWTK4EEPPQYBZ6UEGLF2HIUR5X6GJH34JEKPVKRBVWFCVAC DV43UILUJNNU4DJMQ5NIZ2TY5Y4NOPQZXXQQJNKINUKA2VBAJ2QAC 36ZTCZ4FDV6ILURQEIGFHCP57ALZH6OWYNN3MBXG2QXZSBULBPMAC GNQYRBAGAODY5KQX4E5AZMBGA4KFMNKFALL2Y3CVRJ6NS3EFE3TAC JFW656FT5JSDCA5NBNFGTJABIR2LR5VRDRYI7KF54PYNFDSL4DMAC VVRM3EGCPCYA3GQEGZUEMOGEEYTMMUZK46UFU3R46AKZC62ZEMRQC D44B24QC6NCED6DVUYP2IJJEVBG2JNBKPBRRSLI5UXQTKA23DJQQC WDKFN4B2M7BUF4S7X6YA5AKHOJKHLG65LWNQVOSIBTKFEZELBMKAC SZYDW2DG5Z7BR3ICKWDXVUNSMCDSXMYZUB6FQ4W2B2FVZJD6PULQC 4AKMU4ZB2RYJWUDM4H2WW42MVMDWZZ4YD45FJ64DIS77TO56THZAC XJRJ4J7M6BC433TBLWHHKX7UYYCFX6M7ZQLUEYYTREPCSM6M3RDQC 3PNG7NIBQQURUUPRVQXYL342OT7JUUYOMY2JJNP6YDX7SYJDZMYAC MQMF2LBWWPW2SOZKC3O7P4TBJJ3V6RBVQ52OYA4KCGXS7G6SHWQAC XUKHBDR5HJKYJ7GEWTL4YLQEW2S4ERU2WVQZU3INIJB34B4CTUKAC BKMQXGBOQIANQGBI3JMMVE3CA32SJF2MI4XMXAJA3EWZ2MYPZDTQC CGVKJQPIAS6R6BIJWH32MSEEOWS5SFM7TEBGW26LSAMMZFT273CQC LCLCU6FNQHHR5KORSS5Y5CT7QJJGVGCGGJTKXFXWIIDU5P72JAHQC XZKO4FNRR6EVKG72Z7GCESDEGWEKDAX7HRCIY7JO7PRJAQUVE3HQC JO75HQLOPQKFJ4PGB4R3RMOR5A4XG3QDKLKYI7IV2HUQ347MCARAC 6DMDTQ7MVNBUFZLF6F3N2TCJH3VALH3T56DOOSOR53LXYSLBNHFQC LSZLZHJYGXZTCNH4JUXU7W23MW5PBVM4OBMWRRVNEDROMIBUVQNAC <form class="form-horizontal"><div class="modal-body"><div class="control-group"><label class="control-label">User name</label><div class="controls"><input type="text" class="span3" name="username" value=""/>
<div class="modal-dialog" role="document"><div class="modal-content"><form><div class="modal-body"><div class="form-group"><label for="username" class="col-form-label">User name</label><input type="text" class="form-control" name="username"/></div><div class="form-group"><label for="password" class="col-form-label">Password</label><input type="password" class="form-control" name="password"/></div>
</div><div class="control-group"><label class="control-label">Password</label><div class="controls"><input type="password" class="span3" name="password" value=""/>
<div class="modal-footer"><button id="do-signin" type="button" class="btn btn-primary">Sign in</button><button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
<li class="dropdown"><a class="dropdown-toggle actions" data-toggle="dropdown" href="#">Actions<b class="caret"></b></a><ul class="dropdown-menu">
<li class="nav-item dropdown"><a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" area-haspopup="true" aria-expanded="false">Actions</a><div class="dropdown-menu">
<li><a href="[% c.uri_for('/build' build.id 'cancel') %]">Cancel</a></li><li><a href="[% c.uri_for('/build' build.id 'bump') %]">Bump up</a></li>
<a class="dropdown-item" href="[% c.uri_for('/build' build.id 'cancel') %]">Cancel</a><a class="dropdown-item" href="[% c.uri_for('/build' build.id 'bump') %]">Bump up</a>
<li class="active"><a href="#tabs-summary" data-toggle="tab">Summary</a></li>[% IF isAggregate %]<li><a href="#tabs-constituents" data-toggle="tab">Constituents</a></li>[% END %]<li><a href="#tabs-details" data-toggle="tab">Details</a></li><li><a href="#tabs-buildinputs" data-toggle="tab">Inputs</a></li>[% IF steps.size() > 0 %]<li><a href="#tabs-buildsteps" data-toggle="tab">Build steps</a></li>[% END %][% IF build.dependents %]<li><a href="#tabs-usedby" data-toggle="tab">Used by</a></li>[% END%][% IF drvAvailable %]<li><a href="#tabs-build-deps" data-toggle="tab">Build dependencies</a></li>[% END %][% IF localStore && available %]<li><a href="#tabs-runtime-deps" data-toggle="tab">Runtime dependencies</a></li>[% END %]
<li class="nav-item"><a class="nav-link active" href="#tabs-summary" data-toggle="tab">Summary</a></li>[% IF isAggregate %]<li class="nav-item"><a class="nav-link" href="#tabs-constituents" data-toggle="tab">Constituents</a></li>[% END %]<li class="nav-item"><a class="nav-link" href="#tabs-details" data-toggle="tab">Details</a></li><li class="nav-item"><a class="nav-link" href="#tabs-buildinputs" data-toggle="tab">Inputs</a></li>[% IF steps.size() > 0 %]<li class="nav-item"><a class="nav-link" href="#tabs-buildsteps" data-toggle="tab">Build steps</a></li>[% END %][% IF build.dependents %]<li class="nav-item"><a class="nav-link" href="#tabs-usedby" data-toggle="tab">Used by</a></li>[% END%][% IF drvAvailable %]<li class="nav-item"><a class="nav-link" href="#tabs-build-deps" data-toggle="tab">Build dependencies</a></li>[% END %][% IF localStore && available %]<li class="nav-item"><a class="nav-link" href="#tabs-runtime-deps" data-toggle="tab">Runtime dependencies</a></li>[% END %]
<div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button><h3>Reproduce this build</h3></div>
<div class="modal-header"><h3>Reproduce this build</h3><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button></div>
<p>If you have <a href='https://nixos.org/nix/download.html'>Nixinstalled</a>, you can reproduce this build on your own machine byrunning the following command:</p>
<p>If you have <a href='https://nixos.org/nix/download.html'>Nixinstalled</a>, you can reproduce this build on your own machine byrunning the following command:</p>
<p>If you have <a href='https://nixos.org/nix/download.html'>Nixinstalled</a>, you can reproduce this build on your own machine bydownloading <a [% HTML.attributes(href => url) %]>a script</a>that checks out all inputs of the build and then invokes Nix toperform the build.</p>
<p>If you have <a href='https://nixos.org/nix/download.html'>Nixinstalled</a>, you can reproduce this build on your own machine bydownloading <a [% HTML.attributes(href => url) %]>a script</a>that checks out all inputs of the build and then invokes Nix toperform the build.</p>
<ul class="pager"><li [% IF page == 1 %]class="disabled"[% END %]><a href="[% "$baseUri?page=1" %]">« First</a></li><li [% IF page == 1 %]class="disabled"[% END %]><a href="[% "$baseUri?page="; (page - 1) %]">‹ Previous</a></li><li [% IF page * resultsPerPage >= total %]class="disabled"[% END %]><a href="[% "$baseUri?page="; (page + 1) %]">Next ›</a></li><li [% IF page * resultsPerPage >= total %]class="disabled"[% END %]><a href="[% "$baseUri?page="; (total - 1) div resultsPerPage + 1 %]">Last »</a></li>
<ul class="pagination"><li class="page-item[% IF page == 1 %] disabled[% END %]"><a class="page-link" href="[% "$baseUri?page=1" %]">« First</a></li><li class="page-item[% IF page == 1 %] disabled[% END %]"><a class="page-link" href="[% "$baseUri?page="; (page - 1) %]">‹ Previous</a></li><li class="page-item[% IF page * resultsPerPage >= total %] disabled[% END %]"><a class="page-link" href="[% "$baseUri?page="; (page + 1) %]">Next ›</a></li><li class="page-item[% IF page * resultsPerPage >= total %] disabled[% END %]"><a class="page-link" href="[% "$baseUri?page="; (total - 1) div resultsPerPage + 1 %]">Last »</a></li>
<li class="[% IF "${root}${curUri}" == uri %]active[% END %]" [% IF confirmmsg %]onclick="javascript:return confirm('[% confirmmsg %]')"[% END %]><a [% HTML.attributes(href => uri) %] [%+ IF modal %]data-toggle="modal"[% END %]>[% IF icon %]<i class="[% icon %] icon-black"></i> [%+ END %]
<a class="dropdown-item[% IF "${root}${curUri}" == uri %] active[% END %]"[% HTML.attributes(href => uri) %] [%+ IF modal %]data-toggle="modal"[% END %][% IF confirmmsg %]onclick="javascript:return confirm('[% confirmmsg %]')"[% END %]>[% IF icon %]<i class="[% icon %] icon-black"></i> [%+ END %][% title %]</a>[% END;BLOCK navItem %]<li class="nav-item"><a class="nav-link[% IF "${root}${curUri}" == uri %] active[% END %]"[% HTML.attributes(href => uri) %]>
<li class="active"><a href="#tabs-starred-jobs" data-toggle="tab">Starred jobs</a></li><li><a href="#tabs-my-jobs" data-toggle="tab">My jobs</a></li><li><a href="#tabs-my-jobsets" data-toggle="tab">My jobsets</a></li>
<li class="nav-item"><a class="nav-link active" href="#tabs-starred-jobs" data-toggle="tab">Starred jobs</a></li><li class="nav-item"><a class="nav-link" href="#tabs-my-jobs" data-toggle="tab">My jobs</a></li><li class="nav-item"><a class="nav-link" href="#tabs-my-jobsets" data-toggle="tab">My jobsets</a></li>
<div class="control-group"><label class="control-label">State</label><div class="controls"><div class="btn-group" data-toggle="buttons-radio"><input type="hidden" name="enabled" value="[% jobset.enabled %]" /><button type="button" class="btn" value="1">Enabled</button><button type="button" class="btn" value="2">One-shot</button><button type="button" class="btn" value="3">One-at-a-time</button><button type="button" class="btn" value="0">Disabled</button></div></div></div><div class="control-group"><div class="controls"><label class="checkbox"><input type="checkbox" name="visible" [% IF !jobset.hidden; 'checked="checked"'; END %]/>Visible</label></div>
<div class="form-group row"><label class="col-sm-3" for="editjobsetenabled">State</label><div class="btn-group btn-group-toggle col-sm-9" data-toggle="buttons"><label class="btn btn-secondary[% IF jobset.enabled == 1 %] active[% END %]"><input type="radio" id="editjobsetenabled" name="enabled" value="1" [% IF jobset.enabled == 1 %]checked[% END %]>Enabled</button></label><label class="btn btn-secondary[% IF jobset.enabled == 2 %] active[% END %]"><input type="radio" name="enabled" value="2" [% IF jobset.enabled == 2 %]checked[% END %]>One-shot</button></label><label class="btn btn-secondary[% IF jobset.enabled == 3 %] active[% END %]"><input type="radio" name="enabled" value="3" [% IF jobset.enabled == 3 %]checked[% END %]>One-at-a-time</button></label><label class="btn btn-secondary[% IF jobset.enabled == 0 %] active[% END %]"><input type="radio" name="enabled" value="0" [% IF jobset.enabled == 0 %]checked[% END %]>Disabled</button></label>
<div class="control-group"><label class="control-label">Identifier</label><div class="controls"><input type="text" class="span3" name="name" [% HTML.attributes(value => edit ? jobset.name : "") %]/></div>
<div class="form-group row"><label class="col-form-label col-sm-3" for="editjobsetvisible">Visible</label><div class="col-sm-9"><input type="checkbox" id="editjobsetvisible" name="visible" [% IF !jobset.hidden; 'checked="checked"'; END %]/>
<div class="control-group"><label class="control-label">Description</label><div class="controls"><input type="text" class="span3" name="description" [% HTML.attributes(value => jobset.description) %]/></div>
<div class="form-group row"><label class="col-form-label col-sm-3" for="editjobsetname">Identifier</label><div class="col-sm-9"><input type="text" class="form-control" id="editjobsetname" name="name" [% HTML.attributes(value => edit ? jobset.name : "") %]/>
<div class="control-group"><label class="control-label">Type</label><div class="controls"><div class="btn-group" data-toggle="buttons-radio"><input type="hidden" id="type" name="type" value="[% jobset.type %]" /><button type="button" class="btn" value="1" id="type-flake">Flake</button><button type="button" class="btn" value="0" id="type-legacy">Legacy</button></div></div>
<div class="form-group row"><label class="col-sm-3" for="editjobsettype">Type</label><div class="btn-group btn-group-toggle col-sm-9" data-toggle="buttons"><label class="btn btn-secondary[% IF jobset.type == 1 %] active[% END %]"><input type="radio" id="type-flake" name="enabled" value="1" [% IF jobset.type == 1 %]checked[% END %]>Flake</button></label><label class="btn btn-secondary[% IF jobset.type == 0 %] active[% END %]"><input type="radio" id="type-legacy" name="enabled" value="0" [% IF jobset.type == 0 %]checked[% END %]>Legacy</button></label>
<div class="control-group show-on-flake"><label class="control-label">Flake URI</label><div class="controls"><input type="text" class="span3" name="flakeref" [% HTML.attributes(value => jobset.flake) %]/></div>
<div class="form-group row"><label class="col-form-label col-sm-3" for="editjobsetdescription">Description</label><div class="col-sm-9"><input type="text" class="form-control" id="editjobsetdescription" name="description" [% HTML.attributes(value => jobset.description) %]/>
<div class="control-group show-on-legacy"><label class="control-label">Nix expression</label><div class="controls"><input type="text" class="span3" name="nixexprpath" [% HTML.attributes(value => jobset.nixexprpath) %]/>in<input type="text" class="span3" name="nixexprinput" [% HTML.attributes(value => jobset.nixexprinput) %]/>
<div class="form-group row show-on-flake"><label class="col-form-label col-sm-3" for="editjobsetflakeref">Flake URI</label><div class="col-sm-9"><div class="input-group"><input type="text" class="form-control" id="editjobsetflakeref" name="flakeref" [% HTML.attributes(value => jobset.flake) %]/>
<div class="control-group"><label class="control-label">Check interval</label><div class="controls"><div class="input-append"><input type="number" class="span3" name="checkinterval" [% HTML.attributes(value => jobset.checkinterval) %]/><span class="add-on">sec</span>
<div class="form-group row show-on-legacy"><label class="col-form-label col-sm-3" for="editjobsetnixexpr">Nix expression</label><div class="col-sm-9"><div class="input-group"><input type="text" class="form-control" id="editjobsetnixexpr" name="nixexprpath" [% HTML.attributes(value => jobset.nixexprpath) %]/><div class="input-group-append input-group-prepend"><span class="input-group-text">in</span>
<div class="control-group"><label class="control-label">Scheduling shares</label><div class="controls"><div class="input-append"><input type="number" class="span3" name="schedulingshares" [% HTML.attributes(value => jobset.schedulingshares) %]/>
<div class="form-group row"><label class="col-sm-3" for="editjobsetcheckinterval">Check interval<small class="form-text text-muted">(0 to disable polling)</small></label><div class="col-sm-9"><div class="input-group"><input type="number" class="form-control" id="editjobsetcheckinterval" name="checkinterval" [% HTML.attributes(value => jobset.checkinterval) %]/><div class="input-group-append"><span class="input-group-text">sec</span>
<div class="control-group"><div class="controls"><label class="checkbox"><input type="checkbox" name="enableemail" [% IF jobset.enableemail; 'checked="checked"'; END %] [%IF !emailNotification%]disabled=1[%END%] />Email notification</label></div>
<div class="form-group row"><label class="col-sm-3" for="editjobsetschedulingshares">Scheduling shares[% IF totalShares %]<small class="form-text text-muted">([% f = format("%.2f"); f(jobset.schedulingshares / totalShares * 100) %]% out of [% totalShares %] shares)</small>[% END %]</label><div class="col-sm-9"><input type="number" class="form-control" id="editjobschedulingshares" name="schedulingshares" [% HTML.attributes(value => jobset.schedulingshares) %]/>
<div class="control-group"><label class="control-label">Email override</label><div class="controls"><input type="text" class="span3" name="emailoverride" [% HTML.attributes(value => jobset.emailoverride) %] [%IF !emailNotification%]disabled=1[%END%] /></div>
<div class="form-group row"><label class="col-sm-3" for="editjobsetenableemail">Email notification</label><div class="col-sm-9"><input type="checkbox" id="editjobsetenableemail" name="enableemail" [% IF jobset.enableemail %]checked[% END %] [% IF !emailNotification %]disabled[% END %]/>
<div class="control-group"><label class="control-label">Number of evaluations to keep</label><div class="controls"><input type="number" class="span3" name="keepnr" [% HTML.attributes(value => jobset.keepnr) %]/></div>
<div class="form-group row"><label class="col-sm-3" for="editjobsetemailoverride">Email override</label><div class="col-sm-9"><input type="text" class="form-control" id="editjobsetemailoverride" name="emailoverride" [% HTML.attributes(value => jobset.emailoverride) %] [% IF !emailNotification %]disabled[% END %]/>
[% INCLUDE renderJobsetInputs %]
<div class="form-group row"><label class="col-sm-3" for="editjobsetkeepnumber">Number of evaluations to keep</label><div class="col-sm-9"><input type="number" class="form-control" id="editjobsetkeepnumber" name="keepnr" [% HTML.attributes(value => jobset.keepnr) %]/></div></div>
<div class="form-actions"><button id="submit-jobset" type="submit" class="btn btn-primary"><i class="icon-ok icon-white"></i> [%IF !edit %]Create jobset[% ELSE %]Apply changes[% END %]</button></div>
[% INCLUDE renderJobsetInputs %]
<div class="control-group"><div class="controls"><label class="checkbox"><input type="checkbox" name="enabled" [% IF create || project.enabled; 'checked="checked"'; END %]/>Enabled</label></div><div class="controls"><label class="checkbox"><input type="checkbox" name="visible" [% IF !project.hidden; 'checked="checked"'; END %]/>Visible in the list of projects</label></div>
<div class="form-group row"><label class="col-sm-3" for="editprojectenabled">Enabled</label><div class="col-sm-9"><input type="checkbox" id="editprojectenabled" name="enabled" [% IF project.enabled %] checked="checked" [% END %]/>
<div class="control-group"><label class="control-label">Identifier</label><div class="controls"><input type="text" class="span3" name="name" [% HTML.attributes(value => project.name) %]/></div>
<div class="form-group row"><label class="col-sm-3" for="editprojectvisible">Visible in projects list</label><div class="col-sm-9"><input type="checkbox" id="editprojectvisible" name="visible" [% IF !project.hidden %] checked="checked" [% END %]/>
<div class="control-group"><label class="control-label">Display name</label><div class="controls"><input type="text" class="span3" name="displayname" [% HTML.attributes(value => project.displayname) %]/></div>
<div class="form-group row"><label class="col-sm-3" for="editprojectidentifier">Identifier</label><div class="col-sm-9"><input type="text" class="form-control" id="editprojectidentifier" name="name" [% HTML.attributes(value => project.name) %]/>
<div class="control-group"><label class="control-label">Description</label><div class="controls"><input type="text" class="span3" name="description" [% HTML.attributes(value => project.description) %]/></div>
<div class="form-group row"><label class="col-sm-3" for="editprojectdisplayname">Display name</label><div class="col-sm-9"><input type="text" class="form-control" id="editprojectdisplayname" name="displayname" [% HTML.attributes(value => project.displayname) %]/>
<div class="control-group"><label class="control-label">Homepage</label><div class="controls"><input type="text" class="span3" name="homepage" [% HTML.attributes(value => project.homepage) %]/></div>
<div class="form-group row"><label class="col-sm-3" for="editprojectdescription">Description</label><div class="col-sm-9"><input type="text" class="form-control" id="editprojectdescription" name="description" [% HTML.attributes(value => project.description) %]/>
<div class="control-group"><label class="control-label">Owner</label><div class="controls"><input type="text" class="span3" name="owner" [% HTML.attributes(value => project.owner.username || c.user.username) %]/></div>
<div class="form-group row"><label class="col-sm-3" for="editprojecthomepage">Homepage</label><div class="col-sm-9"><input type="text" class="form-control" id="editprojecthomepage" name="homepage" [% HTML.attributes(value => project.homepage) %]/>
<div class="control-group"><label class="control-label">Declarative spec file</label><div class="controls"><div class="input-append"><input type="text" class="span3" name="declfile" [% HTML.attributes(value => project.declfile) %]/></div><span class="help-inline">(Leave blank for non-declarative project configuration)</span></div>
<div class="form-group row"><label class="col-sm-3" for="editprojectowner">Owner</label><div class="col-sm-9"><input type="text" class="form-control" id="editprojectowner" name="owner" [% HTML.attributes(value => project.owner.username || c.user.username) %]/>
<div class="control-group"><label class="control-label">Declarative input type</label><div class="controls">[% INCLUDE renderSelection param="decltype" options=inputTypes edit=1 curValue=project.decltype %]value<input style="width: 70%" type="text" [% HTML.attributes(value => project.declvalue, name => "declvalue") %]/></div>
<div class="form-group row"><label class="col-sm-3" for="editprojectdeclfile">Declarative spec file<small class="form-text text-muted">(Leave blank for non-declarative project configuration)</small></label><div class="col-sm-9"><input type="text" class="form-control" id="editprojectdeclfile" name="declfile" [% HTML.attributes(value => project.declfile) %]/>
<div class="form-actions"><button id="submit-project" type="submit" class="btn btn-primary"><i class="icon-ok icon-white"></i>[%IF create %]Create project[% ELSE %]Apply changes[% END %]</button>
<div class="form-group row"><label class="col-sm-3" for="editprojectdeclvalue">Declarative input type</label><div class="col-sm-9">[% INCLUDE renderSelection param="decltype" options=inputTypes edit=1 curValue=project.decltype %]<input type="text" class="form-control" id="editprojectdeclvalue" name="declvalue" [% HTML.attributes(value => project.declvalue) %]/>
<li><a href="#tabs-charts" data-toggle="tab">Charts</a></li><li><a href="#tabs-links" data-toggle="tab">Links</a></li>
<li class="nav-item"><a class="nav-link" href="#tabs-charts" data-toggle="tab">Charts</a></li><li class="nav-item"><a class="nav-link" href="#tabs-links" data-toggle="tab">Links</a></li>
<form class="form-search"><input name="filter" type="text" class="input-large search-query" placeholder="Search jobs by name..." [% HTML.attributes(value => filter) %]/>
<form><input name="filter" type="text" class="form-control" type="search" placeholder="Search jobs by name..." [% HTML.attributes(value => filter) %]/>
<li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Actions<b class="caret"></b></a><ul class="dropdown-menu"><li><a href="[% c.uri_for(c.controller('JobsetEval').action_for('create_jobset'), [eval.id]) %]">Create a jobset from this evaluation</a></li>
<li class="nav-item dropdown"><a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#">Actions</a><div class="dropdown-menu"><a class="dropdown-item" href="[% c.uri_for(c.controller('JobsetEval').action_for('create_jobset'), [eval.id]) %]">Create a jobset from this evaluation</a>
<li><a href="[% c.uri_for(c.controller('JobsetEval').action_for('cancel'), [eval.id]) %]">Cancel all scheduled builds</a></li>
<a class="dropdown-item" href="[% c.uri_for(c.controller('JobsetEval').action_for('cancel'), [eval.id]) %]">Cancel all scheduled builds</a>
<li><a href="[% c.uri_for(c.controller('JobsetEval').action_for('restart_failed'), [eval.id]) %]">Restart all failed builds</a></li>
<a class="dropdown-item" href="[% c.uri_for(c.controller('JobsetEval').action_for('restart_failed'), [eval.id]) %]">Restart all failed builds</a>
<li><a href="[% c.uri_for(c.controller('JobsetEval').action_for('restart_aborted'), [eval.id]) %]">Restart all aborted builds</a></li>
<a class="dropdown-item" href="[% c.uri_for(c.controller('JobsetEval').action_for('restart_aborted'), [eval.id]) %]">Restart all aborted builds</a>
<li><a href="[% c.uri_for(c.controller('JobsetEval').action_for('bump'), [eval.id]) %]">Bump builds to front of queue</a></li>
<a class="dropdown-item" href="[% c.uri_for(c.controller('JobsetEval').action_for('bump'), [eval.id]) %]">Bump builds to front of queue</a>
<li><a href="#tabs-aborted" data-toggle="tab"><span class="text-warning">Aborted jobs ([% aborted.size %])</span></a></li>
<li class="nav-item"><a class="nav-link" href="#tabs-aborted" data-toggle="tab"><span class="text-warning">Aborted jobs ([% aborted.size %])</span></a></li>
<li><a href="#tabs-now-fail" data-toggle="tab"><span class="text-warning">Newly failing jobs ([% nowFail.size %])</span></a></li>
<li class="nav-item"><a class="nav-link" href="#tabs-now-fail" data-toggle="tab"><span class="text-warning">Newly failing jobs ([% nowFail.size %])</span></a></li>
<li><a href="#tabs-now-succeed" data-toggle="tab"><span class="text-success">Newly succeeding jobs ([% nowSucceed.size %])</span></a></li>
<li class="nav-item"><a class="nav-link" href="#tabs-now-succeed" data-toggle="tab"><span class="text-success">Newly succeeding jobs ([% nowSucceed.size %])</span></a></li>
<li><a href="#tabs-errors" data-toggle="tab"><span class="text-warning">Evaluation errors</span></a></li>
<li class="nav-item"><a class="nav-link" href="#tabs-errors" data-toggle="tab"><span class="text-warning">Evaluation errors</span></a></li>
<form class="form-search" id="filter-jobs"><div class="input-append"><input name="filter" type="text" class="input-large search-query" placeholder="Search jobs by name..." [% HTML.attributes(value => filter) %]/><button type="button" class="btn btn-info [% IF showInactive %]active[% END %]" id="active-toggle">Show inactive jobs</button>
<form id="filter-jobs"><div class="input-group"><input name="filter" type="search" class="form-control" placeholder="Search jobs by name..." [% HTML.attributes(value => filter) %]/><div class="input-group-prepend"><button type="button" class="btn btn-info [% IF showInactive %]active[% END %]" id="active-toggle"><span class="spinner-border spinner-border-sm" id="filter-loading" style="display:none"/>Show inactive jobs</button></div>
<li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Actions<b class="caret"></b></a><ul class="dropdown-menu">
<li class="nav-item dropdown"><a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#">Actions</a><div class="dropdown-menu">
<li><a href="#tabs-errors" data-toggle="tab"><span class="text-warning">Evaluation errors</span></a></li>
<li class="nav-item"><a class="nav-link" href="#tabs-errors" data-toggle="tab"><span class="text-warning">Evaluation errors</span></a></li>
<li><a href="#tabs-jobs" data-toggle="tab">Jobs</a></li><li><a href="#tabs-configuration" data-toggle="tab">Configuration</a></li><li><a href="#tabs-links" data-toggle="tab">Links</a></li><li><a href="#tabs-channels" data-toggle="tab">Channels</a></li>
<li class="nav-item"><a class="nav-link" href="#tabs-jobs" data-toggle="tab">Jobs</a></li><li class="nav-item"><a class="nav-link" href="#tabs-configuration" data-toggle="tab">Configuration</a></li><li class="nav-item"><a class="nav-link" href="#tabs-links" data-toggle="tab">Links</a></li><li class="nav-item"><a class="nav-link" href="#tabs-channels" data-toggle="tab">Channels</a></li>
<div class="navbar navbar-fixed-top"><div class="navbar-inner"><div class="container"><button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="brand" href="[% c.uri_for(c.controller('Root').action_for('index')) %]">[% IF logo == "" %]Hydra[% ELSE %]<img src="[% c.uri_for(logo) %]" alt="Hydra Logo" class="logo" />[% END %]</a><div class="nav-collapse collapse">[% PROCESS topbar.tt %]</div></div>
<nav class="navbar navbar-expand-md navbar-light bg-light"><a class="navbar-brand" href="[% c.uri_for(c.controller('Root').action_for('index')) %]">[% IF logo == "" %]Hydra[% ELSE %]<img src="[% c.uri_for(logo) %]" alt="Hydra Logo" class="logo" />[% END %]</a><button type="button" class="navbar-toggler" data-toggle="collapse" data-target="#navbarSupportedContent"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbarSupportedContent">[% PROCESS topbar.tt %]
<form class="form-horizontal" action="[% c.uri_for('/admin/news/submit') %]" method="post"><fieldset><legend>Add news item</legend><div class="control-group"><label class="control-label">News text (HTML)</label><div class="controls"><textarea class="span9" name="contents"></textarea></div></div></fieldset><div class="form-actions"><button type="submit" class="btn btn-primary"><i class="icon-ok icon-white"></i>Post</button>
<form action="[% c.uri_for('/admin/news/submit') %]" method="post"><div class="page-header">Add news item</div><div class="form-group"><label for="newscontents">News text (HTML)</label><textarea class="form-control" id="newscontents" name="contents"></textarea>
<li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Actions<b class="caret"></b></a><ul class="dropdown-menu">
<li class="nav-item dropdown"><a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#">Actions</a><div class="dropdown-menu">
[% INCLUDE menuItem title="Create jobset" icon="icon-plus" uri=c.uri_for(c.controller('Project').action_for('create_jobset'), c.req.captures) %]
[% INCLUDE menuItem title="Create jobset" icon="icon-plus" uri=c.uri_for(c.controller('Project').action_for('create_jobset'), c.req.captures) %]
<li class="active"><a href="#tabs-project" data-toggle="tab">Jobsets</a></li><li><a href="#tabs-configuration" data-toggle="tab">Configuration</a></li>
<li class="nav-item active"><a class="nav-link" href="#tabs-project" data-toggle="tab">Jobsets</a></li><li class="nav-item"><a class="nav-link" href="#tabs-configuration" data-toggle="tab">Configuration</a></li>
<p>This project has the following jobsets:<label id="show-disabled" class="btn btn-small pull-right" data-toggle="button">Show disabled jobsets</label>[% IF isProjectOwner %]<label id="show-hidden" class="btn btn-small pull-right" data-toggle="button">Show hidden jobsets</label>[% END %]</p>
<div class="row"><div class="col">This project has the following jobsets:</div><div class="col-auto"><label id="show-disabled" class="btn btn-secondary" data-toggle="button">Show disabled jobsets</label>[% IF isProjectOwner %]<label id="show-hidden" class="btn btn-secondary" data-toggle="button">Show hidden jobsets</label>[% END %]</div></div>
<li class="dropdown" [% IF id; HTML.attributes(id => id); END %] ><a class="dropdown-toggle" href="#" data-toggle="dropdown">[% title %]<b class="caret"></b></a><ul class="dropdown-menu">
<li class="nav-item dropdown" [% IF id; HTML.attributes(id => id); END %] ><a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown">[% title %]<b class="caret"></b></a><div class="dropdown-menu[% IF align == 'right' %] dropdown-menu-right[% END %]">
<ul class="nav pull-right">
[% IF showPrivate %]<form class="form-inline" action="[% c.uri_for('/search') %]"><input name="query" type="text" class="form-control" placeholder="Search" [% HTML.attributes(value => c.req.params.query) %]/></form>[% END %]
[% IF showPrivate %]<form class="navbar-search" action="[% c.uri_for('/search') %]"><input name="query" type="text" class="search-query span2" placeholder="Search" [% HTML.attributes(value => c.req.params.query) %]/></form>[% END %]
<ul class="navbar-nav">
[% INCLUDE menuItem uri = c.uri_for(c.controller('User').action_for('edit'), [c.user.username]) title = "Preferences" %]<li><a href="#" onclick="signOut();">Sign out</a>
[% INCLUDE navItem uri = c.uri_for(c.controller('User').action_for('edit'), [c.user.username]) title = "Preferences" %]<li class="nav-item"><a class="nav-link" href="#" onclick="signOut();">Sign out</a>
<div style="display: none" class="g-signin2" data-onsuccess="onGoogleSignIn" data-theme="dark"></div></a><li><a href="#" id="google-signin">Sign in with Google</a></li><li class="divider"></li>
<div style="display: none" class="g-signin2" data-onsuccess="onGoogleSignIn" data-theme="dark"></div><a class="dropdown-item" href="#" id="google-signin">Sign in with Google</a><div class="dropdown-divider"></div>
<li><a href="/github-redirect?after=[% c.req.path %]">Sign in with GitHub</a></li><li class="divider"></li>
<a class="dropdown-item" href="/github-redirect?after=[% c.req.path %]">Sign in with GitHub</a><div class="dropdown-divider"></div>
<li><a href="#hydra-signin" data-toggle="modal">Sign in with a Hydra account</a></li>
<a class="dropdown-item" href="#hydra-signin" data-toggle="modal">Sign in with a Hydra account</a>
<fieldset>[% IF create %]<div class="control-group"><label class="control-label">User name</label><div class="controls"><input type="text" class="span3" name="username" [% HTML.attributes(value => username) %]/></div>
[% IF create %]<div class="form-group row"><label class="col-sm-3" for="userusername">User name</label><div class="col-sm-9"><input type="text" class="form-control" id="userusername" name="username" [% HTML.attributes(value => username) %]/>
<div class="control-group"><label class="control-label">Full name</label><div class="controls"><input type="text" class="span3" name="fullname" [% HTML.attributes(value => create ? '' : user.fullname) %]/></div>
<div class="form-group row"><label class="col-sm-3" for="userfullname">Full name</label><div class="col-sm-9"><input type="text" class="form-control" id="userfullname" name="fullname" [% HTML.attributes(value => create ? '' : user.fullname) %]/>
[% IF create || user.type == 'hydra' %]<div class="control-group"><label class="control-label">Password</label><div class="controls"><input type="password" class="span3" name="password" value=""/></div>
[% IF create || user.type == 'hydra' %]<div class="form-group row"><label class="col-sm-3" for="userpassword">Password</label><div class="col-sm-9"><input type="password" class="form-control" id="userpassword" name="password" value=""/>
<div class="control-group"><label class="control-label">Confirm password</label><div class="controls"><input type="password" class="span3" name="password2" value=""/></div>
<div class="form-group row"><label class="col-sm-3" for="userpassword2">Confirm password</label><div class="col-sm-9"><input type="password" class="form-control" id="userpassword2" name="password2" value=""/>
<div class="control-group"><label class="control-label">Email</label><div class="controls"><input type="text" class="span3" name="emailaddress" [% IF !create && user.username.search('@') %]disabled="disabled"[% END %] [%+ HTML.attributes(value => user.emailaddress) %]/></div>
<div class="form-group row"><label class="col-sm-3" for="useremailaddress">Email</label><div class="col-sm-9"><input type="text" class="form-control" id="useremailaddress" name="emailaddress" [% IF !create && user.username.search('@') %]disabled="disabled"[% END %] [%+ HTML.attributes(value => user.emailaddress) %]/>
<div class="control-group"><div class="controls"><label class="checkbox"><input type="checkbox" name="emailonerror" [% IF !create && user.emailonerror; 'checked="checked"'; END %]/>Receive evaluation error notifications</label></div>
<div class="form-group row"><label class="col-sm-3" for="useremailonerror">Receive evaluation error notifications</label><div class="col-sm-9"><input type="checkbox" name="emailonerror" [% IF !create && user.emailonerror; 'checked="checked"'; END %]/>
<div class="control-group"><div class="controls"><label class="checkbox"><input type="checkbox" name="publicdashboard" [% IF !create && user.publicdashboard; 'checked="checked"'; END %]/>Public dashboard</label></div>
<div class="form-group row"><label class="col-sm-3" for="userpublicdashboard">Public dashboard</label><div class="col-sm-9"><input type="checkbox" name="publicdashboard" [% IF !create && user.publicdashboard; 'checked="checked"'; END %]/>
[% IF !create || c.check_user_roles('admin') %]<div class="control-group"><label class="control-label">Roles</label><div class="controls"><select multiple="multiple" name="roles" class="span3" [% IF !c.check_user_roles('admin') %]disabled="disabled"[% END %]>[% INCLUDE roleoption role="admin" %][% INCLUDE roleoption role="create-projects" %][% INCLUDE roleoption role="restart-jobs" %][% INCLUDE roleoption role="bump-to-front" %][% INCLUDE roleoption role="cancel-build" %]</select></div>
[% IF !create || c.check_user_roles('admin') %]<div class="form-group row"><label class="col-sm-3">Roles</label><div class="col-sm-9"><select multiple="multiple" name="roles" class="form-control" [% IF !c.check_user_roles('admin') %]disabled="disabled"[% END %]>[% INCLUDE roleoption role="admin" %][% INCLUDE roleoption role="create-projects" %][% INCLUDE roleoption role="restart-jobs" %][% INCLUDE roleoption role="bump-to-front" %][% INCLUDE roleoption role="cancel-build" %]</select>
[% IF create && !c.check_user_roles('admin') %]<div class="control-group"><div class="controls"><img src="[% c.uri_for('/captcha') %]" alt="CAPTCHA"/></div>
[% IF create && !c.check_user_roles('admin') %]<div class="form-group row"><label class="col-sm-3"></label><div class="col-sm-9"><img src="[% c.uri_for('/captcha') %]" alt="CAPTCHA">
<div class="control-group"><label class="control-label">Type the digits shown in the image above</label><div class="controls"><input type="text" class="span3" name="captcha" value=""/></div>
</div><div class="form-group row"><label class="col-sm-3" for="usercaptcha">Type the digits shown in the image above</label><div class="col-sm-9"><input type="text" class="form-control" id="usercaptcha" name="captcha" value="">
[% END %]<div class="form-actions"><button id="submit-user" class="btn btn-primary"><i class="icon-ok icon-white"></i>[%IF create %]Create[% ELSE %]Apply changes[% END %]</button>[% IF !create && c.check_user_roles('admin') && user.type == 'hydra' %]<button id="reset-password" class="btn btn-warning"><i class="icon-trash icon-white"></i>Reset password</button>[% END %][% IF !create %]<button id="delete-user" class="btn btn-danger"><i class="icon-trash icon-white"></i>Delete this user</button>[% END %]
</fieldset>
<button id="submit-user" class="btn btn-primary"><i class="icon-ok icon-white"></i>[%IF create %]Create[% ELSE %]Apply changes[% END %]</button>[% IF !create && c.check_user_roles('admin') && user.type == 'hydra' %]<button id="reset-password" class="btn btn-warning"><i class="icon-trash icon-white"></i>Reset password</button>[% END %][% IF !create %]<button id="delete-user" class="btn btn-danger"><i class="icon-trash icon-white"></i>Delete this user</button>[% END %]