Update boostrap to latest 4.3.1
[?]
Jul 30, 2019, 9:51 PM
SWXX2O4AFLEPD3N5BOYBHDRU5IRIIQHFDKNEJ3LVWOFL6NOOZVMACDependencies
- [2]
YGJ55WLBUse the default navbar style for readability - [3]
YUMW25WRAdd correct bootstrap-2.3.1.zip - [4]
HZWLTEXCSpelling fix - [5]
YM6HYHOKConsistent terminology: "Clear" -> "Cancel" - [6]
IMA3HWYCFix link to cached build log - [7]
HU6Z5NS5Hide some things that require a local store - [8]
HDBH7TDQhide disabled jobsets by default. - [9]
CLBOP44WAdd a hydra.conf option to enable email notification - [10]
PVDN6PEWSupport $X-Request-Base for the Logo - [11]
GXRKOXQJAdd cancel-build role - [12]
UANT7MOVhydra-evaluator: add a 'ONE_AT_A_TIME' evaluator style - [13]
VHPLIGHUCreate projects in enabled state - [14]
ROFVACRADon't use enable_github_login option after all - [15]
GLIPWYWLMove evaluation errors from evaluations to EvaluationErrors, a new table - [16]
TQVKZQUGUse the REST API in the web interface for editing jobsets - [17]
JATZRMWWLazy load Google and Persona login stuff - [18]
XJRJ4J7MAdd user registration - [19]
YPDYBK5GShow dependencies as a tree rather than a list - [20]
DAGSOQW3use newer icons consistently - [21]
U72VNKRURemove unused file - [22]
CMBTR3KDjobset page: render error labels per eval - [23]
NEQ4BISOAdd bootstrap.zip - [24]
GTXYNFUKMerge branch 'master' into persona - [25]
SMTMFEKEhydra: add missing templates - [26]
VCG6KNUXRemove the "clone build" feature - [27]
VB6DJ5R4Fix reproduction instructions - [28]
VBWHG272Re-add the history tab (store size and build time), now as lazy-loaded tab on build page. - [29]
FAUCW4NHRemove project/jobset/job/build id from the navbar - [30]
DV43UILUDon't float the search bar to the right in collapsed mode - [31]
SBMOICGVEvil CSS hackery to prevent link targets from being under the navbar - [32]
PVIRRARJTurn hiding/unhiding a jobset into a checkbox - [33]
JFW656FTAdd a flag to enable Persona support - [34]
JPTXSWBOShow whether a job still exists - [35]
OIBSCXGIUse a popover to show how to use the build reproduction script - [36]
YU6CND7CRemove support for views - [37]
BPXMGUMQtopbar: Include "Create project" in menu. - [38]
3PNG7NIBRemove trailing whitespace - [39]
RHUAFTJAShow aborted/cancelled builds separately in jobset eval pages - [40]
3LEGFJFP"Reproduce" action: Support flakes - [41]
MB5INTIQNormalize nixexpr{input,path} from builds to jobsetevals. - [42]
T2LI6BMHRevive release button on eval page - [43]
WDKFN4B2Make sign in a modal dialog box rather than a separate page - [44]
LFVXESGIRemove already disabled jobstatus code - [45]
PZL3SZM3Give every page a consistent title - [46]
F6LBAQMLFix logo size - [47]
ZRRPBEI4Make jobset deletion consistent with project deletion - [48]
JJHVQGELShow aggregate members - [49]
D44B24QCStore the account type ("hydra" or "persona") explicitly in the database - [50]
RSEGBU6CHydra/20: Jobset clone feature - [51]
I4K2UPCWTweaks - [52]
KKJNJHO5Update bootstrap to 2.0.3 - [53]
4NTIBJ74Implement DELETE for jobsets and use it in the web interface - [54]
ELABMHJI* hydra: layout changes - [55]
BIVZGPUTOptimise clickable rows - [56]
LUYDIGYMMake input value wider - [57]
XGNERX6CUse bootstrap's pager (instead of pagination) class - [58]
OEPUOUNBUsing twitter bootstrap for more consistent looks for Hydra - [59]
225GEK4NAfter editing a project/jobset, redirect back to the config tab - [60]
JO75HQLOAdd a restart-jobs role - [61]
6DMDTQ7MAdd bump-to-front role - [62]
36M6DGITShow the runtime/build dependencies in the build page - [63]
NZXX6PLDRemove the Jobs table - [64]
63A26BM2Unpack jQuery etc. in the build tree for easier testing - [65]
ZI535LI6* hydra: 'new' UI for project/jobset/job/build - [66]
74VYRQ6WAdd an icon for binary distributions - [67]
GGT2BLPFSet mouse pointer to indicate you can click on rows - [68]
N2ZF5JULUse a different icon for aborted builds - [69]
TRDGNILTRemove unused file - [70]
6FRLEP4Pfirst try for timeline of last 24 hours in hydra - [71]
NOSDBMWDRemove comments, re-add logo. - [72]
44AGCSXKUse a proper spinning wheel icon - [73]
DAPOSS44Use the REST API in the web interface for editing projects - [74]
DE2DNCOIAllow comparing an evaluation with an arbitrary other evaluation - [75]
OPUHSVJFRemove "bashism" - [76]
2GUW2QBCFix adding jobset inputs - [77]
A6XVP6FEMake the hide/unhide actions a checkbox in the project settings - [78]
N74SRHS6Remove the "releases" feature - [79]
VG4QG336Remove tablesorter - [80]
NRSKJPP4makeLink -> menuItem - [81]
LCLCU6FNDon't show a password reset button for Persona accounts - [82]
JREZM2S2Add channel as a product type. - [83]
2GUAKGTBFix indentation of build.tt - [84]
OX6NYJDVSplit viewing and editing a jobset - [85]
BB2KXLXZMove the build time chart to the job page - [86]
EYAA7MJYhydra-server: Support logs in S3 - [87]
HZWUT4YNAllow users to reproduce builds on their own systems - [88]
P5X4P6VK* Renaming "release sets" to "views" (not finished yet). Having - [89]
TFK74CQRPut job status on a separate tab - [90]
4WZQW2N6Fix indentation and get rid of some unnecessary whitespace in the output - [91]
2CYHINKGJobset eval page: Show the number of builds in each tab - [92]
IWUYFG5TControllers: allows lazy tabs to return custom errors. - [93]
GMIKEXTA* Forgot to commit. - [94]
2CFO2MHSHide hidden jobsets for project admins by default - [95]
3TL5XENEDifferent icons (darker red) for cancelled builds. Fixes #25. - [96]
YBUGFKLEUse a distinct icon for cancelled builds - [97]
CGVKJQPIShow a user's roles in the preferences page - [98]
4AKMU4ZBClean up user editing - [99]
Y46VPWXPRemove dead link - [100]
CQQSJLONOn aggregate job pages, show a matrix showing all the constituent builds - [101]
K3HODXGHCheck all inputs for blame but only email selected inputs - [102]
BKMQXGBOAllow public dashboards - [103]
VVRM3EGCLink to both the Persona and legacy sign in - [104]
VH5ZABDRAdd a page to show the latest evaluations for the entire server - [105]
F26JXTLNTrailing whitespace - [106]
J5UVLXOK* Start of a basic Catalyst web interface. - [107]
WUCOEIFASearch: Limit the number of results - [108]
G4X5IUYJRemove default logo, replaced by text for now. Hide template in jobset edit. - [109]
2G63HKCHFix some wellformedness issues - [110]
MZ63OVKPAllow bumping an entire evaluation to the front of the queue - [111]
SYAIW23XAdd missing file - [112]
2DHE2ZAKAllow Hydra to run as a private instance by requiring a login. - [113]
W74RIXTJShow inputs and input changes on the jobset eval page - [114]
TQKGQ5R3 - [115]
QLOLZHRXAllow a per-jobset check interval - [116]
LZVO64YGMerge in the first bits of the API work - [117]
T5BIOVJEAdd support for tracking custom metrics - [118]
AR5EHCUFAdd action to restart all failed builds in an eval - [119]
S5GCSCNSUpdate bootstrap to 2.3.1 - [120]
JOVVHIJXRemove all entry points to modify machines - [121]
UMEKGOSYUpdate flot to 0.8.3 - [122]
VJFLX7B6Fix rendering of jobset inputs - [123]
D7PL2VWUMove more actions from the top bar - [124]
ZB3JV52WAdd a "My jobsets" tab to the dashboard - [125]
22JB5HNEmake changes section more compact/readable - [126]
HRAFVVOEmake logo configurable via HYDRA_LOGO env var - [127]
2P7VNAACMove common Javascript code into a separate file - [128]
XUKHBDR5Prevent Persona users from setting a password - [129]
2BUX775I* More release -> view. - [130]
75XUS62Y* Added a page to quickly see all failed builds and failed evaluations - [131]
XZJFZSCJUser color instead of a big animated GIF to indicate whether a build is running - [132]
RBNQKATL* Adding persistant releases. A release is a named set of builds. - [133]
QCGCX2BRGeneralize lazy tabs - [134]
UOINKJ2JAdd an action to cancel all builds in a jobset eval - [135]
WRIU3S5E* UI for cloning builds (not functional yet). - [136]
IZEXRZWTReplace old logo with Nix/NixOS logo. - [137]
QTC3SYBMJobset page: Load the jobs and status tabs on demand - [138]
WYMEG4VPMake some more tables clickable - [139]
I3X25POIhydra-update-gc-roots: Keep the most recent evaluations - [140]
JARRBLZDBootstrapify the Hydra forms (except the project and jobset edit pages) - [141]
EFWN7JBV* Added a status page that shows all the currently executing build steps. - [142]
QL55ECJ6- adapted ui for hydra, more in line with nixos.org website - [143]
3ZAJ2ZRPUse popovers for the product list help/details - [144]
ZFEN2MAOSimplify jobset cloning - [145]
SZYDW2DGhydra: added some user admin - [146]
QBT7FA7RCompatibility with latest bootstrap - [147]
HN3V252LOn the build page, show how many aggregate constituents failed - [148]
5QE3TIHPhydra: add status icon per jobset on project page - [149]
6Q2JPSWGFix lazy tab loading - [150]
TLJC6BJ3Add a menu item for deleting jobsets - [151]
PBE5A44IRemove blank lines, consistent attribute quoting, use svg for delta header, column sizes. - [152]
AK2UZDS2Jobset page: Add a new tab to show job status in a matrix - [153]
KXGOUX7P* Creating releases. - [154]
UQA4FMUAAllow a jobset to be created from an evaluation - [155]
QAUDQPWGAdd a more concise queue page - [156]
JY7BXXOPSplit viewing and editing a project - [157]
4GU5Y2XZAdd some margin about h3 elements - [158]
R2PON6R7Allow non-admin users to see the machine status page - [159]
3QWDDLBRAdd support for logging in via a Google account - [160]
WNQRX7QBDoh - [161]
GS4SFHCPtemplates: Use uri_for to reference static paths. - [162]
OR5SJ42YShow releases in a tab on the project page - [163]
XDDCO6CH* hydra: add dependency list with links to logfiles - [164]
6HWHYPSWAdd an action menu to evaluations - [165]
C3AG65SWAdd one-shot jobsets - [166]
A52HEFHQ* Allow builds to be restarted (if they failed with a transient error, - [167]
7ZQAHJQMFix indentation - [168]
R7MDDCB2Some unnecessary job names - [169]
BW6TYQJSUse local copy of the Persona sign in button - [170]
ODNCGFQ5* Improved the navigation bar: don't include all projects (since that - [171]
6KIJX24RGet rid of unnecessary [%- and -%] tags - [172]
JIJDYWPYRemove the Build menu from the top bar - [173]
NGYZCZYXAdd a link to the latest finished eval of a jobset - [174]
MFHM3RLC* Add an icon for PDFs. - [175]
4QCXGR4WTabify the eval page - [176]
E4DESS7GFixes NixOS/hydra#402 (#424) - [177]
QUMWPGCUAdd flake configuration to the web interface - [178]
5DSDXORDhydra: missing plain.tt - [179]
PF72JKWQAdd a "My jobs" tab to the dashboard - [180]
64IV56HIReplace bootstrap tarball - [181]
D5QIOJGP* Move everything up one directory. - [182]
3JBUMW3Eforgot to commit a file - [183]
UICHT2PSAdd a search feature - [184]
N4ODPYP7Job page: Remove channel tab - [185]
JINQDKLIDon't always include "Hydra" in the logo part. - [186]
J3RYO2CURemove the jobs status page - [187]
XZKO4FNRuser: Fix spelling of create-projects role. - [188]
UDS5VIT6Lazy load the metrics tab - [189]
GEADFVZ5hydra-queue-runner: Improved scheduling - [190]
6WRGCITDEnable declarative projects. - [191]
LSZLZHJYAllow users to edit their own settings - [192]
GNQYRBAGImplement GitHub logins - [193]
G2WXEQHERemove the Errors page - [194]
OGLMBJSCEnable setting emailresponsible in the edit jobset form - [195]
5GRW5XU4Job page: Put latest builds on top - [196]
K22TMPH5Make the info tables less compressed - [197]
AS2OXLRM* Editing releases. - [198]
XTKCALUAMake "Add to release" a modal dialog - [199]
AJVCB6K6Fix a "Argument isn't numeric" warning if there are not jobsets - [200]
KSBB33REAdd a dashboard - [201]
MQMF2LBWRe-enable adding new users via the web interface - [202]
W3XAFDK6Remove obsolete/broken timeline feature - [203]
TX7Q4RASAdd page showing latest build steps - [204]
BPT4WJ7URemove Persona support - [205]
RQI3GRC6Enable setting checkresponsible in the edit jobset form - [206]
WGUKOIQZFix indentation - [207]
ZWCTAZGLadded newsitems, added some admin options to clear various caches. - [208]
QXMZNOC6Also hide disabled projects on the overview page by default - [209]
U4TD3AIQAdd support for viewing jobset evaluations - [210]
LRU7K5MWUpdate build images to be more friendly to users with color blindness. - [211]
VHV6GI4LAdd a jobset eval action to restart all aborted/cancelled builds - [212]
36ZTCZ4FAdd basic Persona support - [213]
DGHAIZTOMake cloning of jobsets work again. - [214]
D7X6XTKQIntegrate the "Job status" and "All jobs" tabs - [215]
6IBR72RWClean up unused images (#404) - [216]
77BG3TYKUse c.req.captures - [217]
TPNHTE5VRemove obsolete Builds columns and provide accurate "Running builds" - [218]
JZVRK5QJGroup some menu items together under a "Status" menu - [219]
RX7USXWQjobset: Add a new "channels" tab. - [220]
JATC3WQYMake actions dropdown easier to find by making the dropdown title bold - [221]
FV2M6MOThydra: use autoconf/-make - [222]
WE5Q2NVIAllow build to be bumped to the front of the queue via the web interface - [223]
SS4TZXNUDistinguish between permanent evaluation errors and transient input errors - [224]
XAJFR6SRAdd a chart to the job pages showing the closure size over time - [225]
UM73XPLKFix some XML wellformedness issues - [*]
IK53RV4V - [*]
7YBYT2LQ
Change contents
- file deletion: bootstrap-2.3.1.zip
- replacement in src/root/Makefile.am at line 11
BOOTSTRAP = bootstrap-2.3.1.zipBOOTSTRAP = bootstrap-4.3.1-dist.zip - replacement in src/root/Makefile.am at line 29
cp -prvd $(srcdir)/static/bootstrap/* $(hydradir)/static/bootstrap[16.164]cp -prvd $(srcdir)/static/$(basename $(BOOTSTRAP))/* $(hydradir)/static/bootstrap - replacement in src/root/auth.tt at line 34
<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> - replacement in src/root/auth.tt at line 47
</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> - replacement in src/root/auth.tt at line 51
</div></div><div class="modal-footer"><button id="do-signin" class="btn btn-primary">Sign in</button><button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button></form> - replacement in src/root/auth.tt at line 53
</form></div> - file addition: bootstrap-4.3.1-dist.zip[16.1486]
- replacement in src/root/build.tt at line 117[16.1530]→[16.56:80](∅→∅),[16.80]→[16.0:72](∅→∅),[16.72]→[16.144:226](∅→∅),[16.144]→[16.144:226](∅→∅)
<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"> - replacement in src/root/build.tt at line 121
<li><a href="#reproduce" data-toggle="modal">Reproduce locally</a></li><a class="dropdown-item" href="#reproduce" data-toggle="modal">Reproduce locally</a> - replacement in src/root/build.tt at line 126
<li><a href="[% c.uri_for('/build' build.id 'keep' 0) %]">Unkeep</a></li><a class="dropdown-item" href="[% c.uri_for('/build' build.id 'keep' 0) %]">Unkeep</a> - replacement in src/root/build.tt at line 128
<li><a href="[% c.uri_for('/build' build.id 'keep' 1) %]">Keep</a></li><a class="dropdown-item" href="[% c.uri_for('/build' build.id 'keep' 1) %]">Keep</a> - replacement in src/root/build.tt at line 132
<li><a href="[% c.uri_for('/build' build.id 'restart') %]">Restart</a></li><a class="dropdown-item" href="[% c.uri_for('/build' build.id 'restart') %]">Restart</a> - replacement in src/root/build.tt at line 134
<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> - replacement in src/root/build.tt at line 138
</ul></div> - replacement in src/root/build.tt at line 141[16.3]→[16.1530:1610](∅→∅),[16.1217]→[16.1530:1610](∅→∅),[16.7893]→[16.1530:1610](∅→∅),[16.1530]→[16.1530:1610](∅→∅),[16.1610]→[16.44:148](∅→∅),[16.148]→[16.0:65](∅→∅),[16.179]→[16.0:65](∅→∅),[16.1610]→[16.0:65](∅→∅),[16.65]→[16.0:68](∅→∅),[16.68]→[6.176:282](∅→∅),[6.282]→[16.1968:2065](∅→∅),[16.2229]→[16.1968:2065](∅→∅),[16.1968]→[16.1968:2065](∅→∅),[16.6015]→[16.830:939](∅→∅),[16.2164]→[16.830:939](∅→∅),[16.939]→[7.84:208](∅→∅)
<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 %] - edit in src/root/build.tt at line 489
- replacement in src/root/build.tt at line 490
[% url = c.uri_for('/build' build.id 'reproduce') %]<div class="modal-dialog" role="document"><div class="modal-content">[% url = c.uri_for('/build' build.id 'reproduce') %] - replacement in src/root/build.tt at line 494
<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> - replacement in src/root/build.tt at line 499
<div class="modal-body"><div class="modal-body"> - replacement in src/root/build.tt at line 503
<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> - replacement in src/root/build.tt at line 513
<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> - replacement in src/root/build.tt at line 519
<p>To download and execute the script from the command line, run thefollowing command:</p><p>To download and execute the script from the command line, run thefollowing command:</p> - replacement in src/root/build.tt at line 528
</div></div> - replacement in src/root/build.tt at line 530
<div class="modal-footer"><a href="#" class="btn btn-primary" data-dismiss="modal">Close</a><div class="modal-footer"><a href="#" class="btn btn-primary" data-dismiss="modal">Close</a></div></div> - replacement in src/root/common.tt at line 185
<select style='width: 15em;' [% HTML.attributes(id => param, name => param) %]><select class="custom-select" [% HTML.attributes(id => param, name => param) %]> - replacement in src/root/common.tt at line 408
<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> - replacement in src/root/common.tt at line 520
<center><img src="[% c.uri_for("/static/images/ajax-loader.gif") %]" alt="Loading..." /></center><center><span class="spinner-border spinner-border-sm"/></center> - replacement in src/root/common.tt at line 536[16.2225]→[16.2225:2374](∅→∅),[16.2374]→[16.90:177](∅→∅),[16.177]→[16.540:608](∅→∅),[16.540]→[16.540:608](∅→∅)
<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) %]> - replacement in src/root/dashboard.tt at line 5
<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> - edit in src/root/edit-jobset.tt at line 59
<form class="form-horizontal"> - replacement in src/root/edit-jobset.tt at line 60
<fieldset><form> - replacement in src/root/edit-jobset.tt at line 62[16.2490]→[16.2490:2522](∅→∅),[16.2522]→[16.353:402](∅→∅),[16.402]→[16.2522:2551](∅→∅),[16.2522]→[16.2522:2551](∅→∅),[16.2551]→[16.403:684](∅→∅),[16.684]→[12.3662:3739](∅→∅),[12.3739]→[16.684:771](∅→∅),[16.684]→[16.684:771](∅→∅),[16.771]→[16.2715:2728](∅→∅),[16.2715]→[16.2715:2728](∅→∅),[16.2728]→[16.772:816](∅→∅),[16.816]→[16.68:130](∅→∅),[16.2728]→[16.68:130](∅→∅),[16.130]→[16.1258:1365](∅→∅),[16.1365]→[16.244:274](∅→∅),[16.244]→[16.244:274](∅→∅)
<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> - edit in src/root/edit-jobset.tt at line 78
</div> - replacement in src/root/edit-jobset.tt at line 80[16.2740]→[16.2740:2855](∅→∅),[16.2855]→[16.1445:1556](∅→∅),[16.1465]→[16.2961:2974](∅→∅),[16.1482]→[16.2961:2974](∅→∅),[16.1556]→[16.2961:2974](∅→∅),[16.2961]→[16.2961:2974](∅→∅)
<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 %]/> - edit in src/root/edit-jobset.tt at line 85
</div> - replacement in src/root/edit-jobset.tt at line 87[16.2986]→[16.2986:3102](∅→∅),[16.3102]→[16.1466:1579](∅→∅),[16.1579]→[16.3222:3235](∅→∅),[16.3222]→[16.3222:3235](∅→∅)
<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 : "") %]/> - edit in src/root/edit-jobset.tt at line 92
</div> - replacement in src/root/edit-jobset.tt at line 94
<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> - edit in src/root/edit-jobset.tt at line 104
</div> - replacement in src/root/edit-jobset.tt at line 106
<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) %]/> - edit in src/root/edit-jobset.tt at line 111
</div> - replacement in src/root/edit-jobset.tt at line 113[16.3098]→[16.3098:3145](∅→∅),[16.3145]→[16.3279:3366](∅→∅),[16.3279]→[16.3279:3366](∅→∅),[16.3366]→[16.1580:1693](∅→∅),[16.1693]→[16.3486:3497](∅→∅),[16.3486]→[16.3486:3497](∅→∅),[16.3497]→[16.1694:1809](∅→∅)
<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) %]/> - edit in src/root/edit-jobset.tt at line 120
</div> - replacement in src/root/edit-jobset.tt at line 122[16.3644]→[16.3644:3676](∅→∅),[16.3676]→[16.460:518](∅→∅),[16.518]→[16.3676:3705](∅→∅),[16.3676]→[16.3676:3705](∅→∅),[16.3705]→[16.519:554](∅→∅),[16.554]→[16.1810:1931](∅→∅),[16.1931]→[16.682:724](∅→∅),[16.682]→[16.682:724](∅→∅)
<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> - replacement in src/root/edit-jobset.tt at line 130
<span class="help-inline">(0 to disable polling)</span><input type="text" class="form-control" name="nixexprinput" [% HTML.attributes(value => jobset.nixexprinput) %]/> - edit in src/root/edit-jobset.tt at line 133
</div> - replacement in src/root/edit-jobset.tt at line 135[16.828]→[16.828:860](∅→∅),[16.860]→[16.2187:2248](∅→∅),[16.2248]→[16.860:889](∅→∅),[16.860]→[16.860:889](∅→∅),[16.889]→[16.2249:2411](∅→∅)
<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> - edit in src/root/edit-jobset.tt at line 146
[% IF totalShares %]<span class="help-inline">([% f = format("%.2f"); f(jobset.schedulingshares / totalShares * 100) %]% out of [% totalShares %] shares)</span>[% END %] - edit in src/root/edit-jobset.tt at line 148
</div> - replacement in src/root/edit-jobset.tt at line 150[16.2649]→[16.2649:2710](∅→∅),[16.889]→[16.3705:3738](∅→∅),[16.2710]→[16.3705:3738](∅→∅),[16.3705]→[16.3705:3738](∅→∅),[16.3738]→[9.219:389](∅→∅),[9.389]→[16.3871:3901](∅→∅),[16.396]→[16.3871:3901](∅→∅),[16.2058]→[16.3871:3901](∅→∅),[16.3871]→[16.3871:3901](∅→∅)
<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) %]/> - edit in src/root/edit-jobset.tt at line 160
</div> - replacement in src/root/edit-jobset.tt at line 162[16.3913]→[16.3913:4032](∅→∅),[16.4032]→[9.390:551](∅→∅),[9.551]→[16.4156:4169](∅→∅),[16.2176]→[16.4156:4169](∅→∅),[16.4156]→[16.4156:4169](∅→∅)
<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 %]/> - edit in src/root/edit-jobset.tt at line 167
</div> - replacement in src/root/edit-jobset.tt at line 169[16.4181]→[16.4181:4213](∅→∅),[16.4213]→[16.0:73](∅→∅),[16.73]→[16.4281:4310](∅→∅),[16.4281]→[16.4281:4310](∅→∅),[16.4310]→[16.2177:2282](∅→∅),[16.2282]→[16.4422:4435](∅→∅),[16.4422]→[16.4422:4435](∅→∅)
<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 %]/> - edit in src/root/edit-jobset.tt at line 174
</div> - replacement in src/root/edit-jobset.tt at line 176
[% 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> - replacement in src/root/edit-jobset.tt at line 183[16.4479]→[16.4479:4510](∅→∅),[16.4510]→[16.1557:1731](∅→∅),[16.779]→[16.4659:4670](∅→∅),[16.1667]→[16.4659:4670](∅→∅),[16.1731]→[16.4659:4670](∅→∅),[16.1995]→[16.4659:4670](∅→∅),[16.4659]→[16.4659:4670](∅→∅)
<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 %] - replacement in src/root/edit-jobset.tt at line 185
</fieldset><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> - edit in src/root/edit-project.tt at line 3
<form class="form-horizontal"> - replacement in src/root/edit-project.tt at line 4
<fieldset><form> - replacement in src/root/edit-project.tt at line 6[16.400]→[16.331:425](∅→∅),[16.425]→[13.0:118](∅→∅),[13.118]→[16.556:648](∅→∅),[16.2391]→[16.556:648](∅→∅),[16.5860]→[16.556:648](∅→∅),[16.556]→[16.556:648](∅→∅),[16.648]→[16.2392:2524](∅→∅),[16.2524]→[16.803:833](∅→∅),[16.6000]→[16.803:833](∅→∅),[16.803]→[16.803:833](∅→∅)
<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 %]/> - edit in src/root/edit-project.tt at line 11
</div> - replacement in src/root/edit-project.tt at line 13[16.556]→[16.845:960](∅→∅),[16.960]→[16.2525:2625](∅→∅),[16.2625]→[16.1067:1080](∅→∅),[16.1067]→[16.1067:1080](∅→∅)
<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 %]/> - edit in src/root/edit-project.tt at line 18
</div> - replacement in src/root/edit-project.tt at line 20[16.1092]→[16.1092:1209](∅→∅),[16.1209]→[16.2626:2740](∅→∅),[16.2740]→[16.1330:1343](∅→∅),[16.1330]→[16.1330:1343](∅→∅)
<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) %]/> - edit in src/root/edit-project.tt at line 25
</div> - replacement in src/root/edit-project.tt at line 27[16.1355]→[16.1355:1471](∅→∅),[16.1471]→[16.2741:2855](∅→∅),[16.2855]→[16.1592:1605](∅→∅),[16.1592]→[16.1592:1605](∅→∅)
<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) %]/> - edit in src/root/edit-project.tt at line 32
</div> - replacement in src/root/edit-project.tt at line 34[16.1617]→[16.1617:1730](∅→∅),[16.1730]→[16.2856:2964](∅→∅),[16.2964]→[16.1845:1858](∅→∅),[16.1845]→[16.1845:1858](∅→∅)
<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) %]/> - edit in src/root/edit-project.tt at line 39
</div> - replacement in src/root/edit-project.tt at line 41
<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) %]/> - edit in src/root/edit-project.tt at line 46
</div> - replacement in src/root/edit-project.tt at line 48[16.3501]→[16.3501:3884](∅→∅),[16.3095]→[16.2117:2130](∅→∅),[16.3884]→[16.2117:2130](∅→∅),[16.2117]→[16.2117:2130](∅→∅)
<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) %]/> - edit in src/root/edit-project.tt at line 53
</div> - replacement in src/root/edit-project.tt at line 55
<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) %]/> - edit in src/root/edit-project.tt at line 63
</div> - replacement in src/root/edit-project.tt at line 65[16.4277]→[16.2142:2173](∅→∅),[16.1480]→[16.2142:2173](∅→∅),[16.2173]→[16.1135:1208](∅→∅),[16.1208]→[16.2226:2269](∅→∅),[16.2226]→[16.2226:2269](∅→∅),[16.2269]→[16.1700:1769](∅→∅),[16.1769]→[16.1721:1737](∅→∅),[16.2752]→[16.1721:1737](∅→∅)
<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) %]/> - edit in src/root/edit-project.tt at line 71
</div> - replacement in src/root/edit-project.tt at line 73
</fieldset><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> - replacement in src/root/job.tt at line 18
<li class="active"><a href="#tabs-status" data-toggle="tab">Status</a></li><li class="nav-item active"><a class="nav-link" href="#tabs-status" data-toggle="tab">Status</a></li> - replacement in src/root/job.tt at line 20
<li><a href="#tabs-constituents" data-toggle="tab">Constituents</a></li><li class="nav-item"><a class="nav-link" href="#tabs-constituents" data-toggle="tab">Constituents</a></li> - replacement in src/root/job.tt at line 22[16.1095]→[16.696:759](∅→∅),[16.759]→[16.226:287](∅→∅),[16.1095]→[16.226:287](∅→∅),[16.105]→[16.226:287](∅→∅)
<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> - replacement in src/root/jobset-eval.tt at line 35
<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) %]/> - replacement in src/root/jobset-eval.tt at line 43
<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> - replacement in src/root/jobset-eval.tt at line 48
<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> - replacement in src/root/jobset-eval.tt at line 51
<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> - replacement in src/root/jobset-eval.tt at line 54
<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> - replacement in src/root/jobset-eval.tt at line 57
<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> - replacement in src/root/jobset-eval.tt at line 59[16.1142]→[16.353:365](∅→∅),[16.1756]→[16.353:365](∅→∅),[16.1799]→[16.353:365](∅→∅),[16.353]→[16.353:365](∅→∅)
</ul></div> - replacement in src/root/jobset-eval.tt at line 64
<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> - replacement in src/root/jobset-eval.tt at line 67
<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> - replacement in src/root/jobset-eval.tt at line 70
<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> - replacement in src/root/jobset-eval.tt at line 73
<li><a href="#tabs-new" data-toggle="tab">New jobs ([% new.size %])</a></li><li class="nav-item"><a class="nav-link" href="#tabs-new" data-toggle="tab">New jobs ([% new.size %])</a></li> - replacement in src/root/jobset-eval.tt at line 76
<li><a href="#tabs-removed" data-toggle="tab">Removed jobs ([% removed.size %])</a></li><li class="nav-item"><a class="nav-link" href="#tabs-removed" data-toggle="tab">Removed jobs ([% removed.size %])</a></li> - replacement in src/root/jobset-eval.tt at line 79
<li><a href="#tabs-still-fail" data-toggle="tab">Still failing jobs ([% stillFail.size %])</a></li><li class="nav-item"><a class="nav-link" href="#tabs-still-fail" data-toggle="tab">Still failing jobs ([% stillFail.size %])</a></li> - replacement in src/root/jobset-eval.tt at line 82
<li><a href="#tabs-still-succeed" data-toggle="tab">Still succeeding jobs ([% stillSucceed.size %])</a></li><li class="nav-item"><a class="nav-link" href="#tabs-still-succeed" data-toggle="tab">Still succeeding jobs ([% stillSucceed.size %])</a></li> - replacement in src/root/jobset-eval.tt at line 85
<li><a href="#tabs-unfinished" data-toggle="tab">Queued jobs ([% unfinished.size %])</a></li><li class="nav-item"><a class="nav-link" href="#tabs-unfinished" data-toggle="tab">Queued jobs ([% unfinished.size %])</a></li> - replacement in src/root/jobset-eval.tt at line 87
<li><a href="#tabs-inputs" data-toggle="tab">Inputs</a></li><li class="nav-item"><a class="nav-link" href="#tabs-inputs" data-toggle="tab">Inputs</a></li> - replacement in src/root/jobset-eval.tt at line 90
<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> - edit in src/root/jobset-eval.tt at line 92
- replacement in src/root/jobset-jobs-tab.tt at line 3[16.421]→[16.421:494](∅→∅),[16.494]→[16.3647:3795](∅→∅),[16.3795]→[16.649:780](∅→∅),[16.649]→[16.649:780](∅→∅)
<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> - edit in src/root/jobset-jobs-tab.tt at line 13
<img src="[% c.uri_for("/static/images/ajax-loader.gif") %]" alt="Loading..." style="display: none;" id="filter-loading" /> - replacement in src/root/jobset.tt at line 46
<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"> - replacement in src/root/jobset.tt at line 57
</ul></div> - replacement in src/root/jobset.tt at line 61
<li class="active"><a href="#tabs-evaluations" data-toggle="tab">Evaluations</a></li><li class="nav-item active"><a class="nav-link" href="#tabs-evaluations" data-toggle="tab">Evaluations</a></li> - replacement in src/root/jobset.tt at line 63
<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> - replacement in src/root/jobset.tt at line 65[16.6829]→[16.2741:2800](∅→∅),[16.2800]→[16.210:287](∅→∅),[16.3823]→[16.210:287](∅→∅),[16.3889]→[16.210:287](∅→∅),[16.287]→[16.0:61](∅→∅),[16.61]→[16.2329:2396](∅→∅)
<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> - replacement in src/root/layout.tt at line 23
<!-- hydra.css must be included before bootstrap-responsive tomake the @media rule work. --><!-- hydra.css may need to be moved to before boostrap to make the @media rule work. --> - edit in src/root/layout.tt at line 26
<link href="[% c.uri_for("/static/bootstrap/css/bootstrap-responsive.min.css") %]" rel="stylesheet" /> - replacement in src/root/layout.tt at line 47[16.649]→[2.0:42](∅→∅),[2.42]→[16.6786:6851](∅→∅),[16.516]→[16.6786:6851](∅→∅),[16.6786]→[16.6786:6851](∅→∅),[16.6851]→[16.72826:72933](∅→∅),[16.1008]→[16.6939:7068](∅→∅),[16.72933]→[16.6939:7068](∅→∅),[16.6939]→[16.6939:7068](∅→∅),[16.7068]→[16.72934:72954](∅→∅),[16.72954]→[16.440:533](∅→∅),[16.7083]→[16.440:533](∅→∅),[16.533]→[16.0:75](∅→∅),[16.75]→[10.0:80](∅→∅),[10.80]→[16.33:55](∅→∅),[16.673]→[16.33:55](∅→∅),[16.73]→[16.693:708](∅→∅),[16.693]→[16.693:708](∅→∅),[16.708]→[16.72955:73001](∅→∅),[16.568]→[16.7222:7258](∅→∅),[16.1082]→[16.7222:7258](∅→∅),[16.73001]→[16.7222:7258](∅→∅),[16.7222]→[16.7222:7258](∅→∅),[16.7258]→[16.569:586](∅→∅),[16.586]→[16.7297:7312](∅→∅),[16.7297]→[16.7297:7312](∅→∅)
<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 %] - replacement in src/root/layout.tt at line 61
</div></nav> - replacement in src/root/news.tt at line 24
<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> - edit in src/root/news.tt at line 31
<button type="submit" class="btn btn-primary"><i class="icon-ok icon-white"></i>Post</button> - replacement in src/root/project.tt at line 6
<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"> - replacement in src/root/project.tt at line 12
[% 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) %] - replacement in src/root/project.tt at line 14
</ul></div> - replacement in src/root/project.tt at line 18
<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> - replacement in src/root/project.tt at line 50[16.29]→[16.805:854](∅→∅),[16.854]→[8.0:116](∅→∅),[8.116]→[16.993:1023](∅→∅),[16.992]→[16.993:1023](∅→∅),[16.993]→[16.993:1023](∅→∅),[16.1023]→[16.993:1107](∅→∅),[16.1107]→[16.1153:1180](∅→∅),[16.1153]→[16.1153:1180](∅→∅)
<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> - edit in src/root/static/css/hydra.css at line 55
/* Missing in bootstrap 2.0.2 */.text-warning {color: #c09853;} - file deletion: ajax-loader.gif
- replacement in src/root/static/js/common.js at line 49
bootbox.animate(false);bootbox.setDefaults({ animate: false }); - replacement in src/root/static/js/common.js at line 134
$('.nav-tabs').bind('show', function(e) {$('.nav-tabs').bind('show.bs.tab', function(e) { - replacement in src/root/topbar.tt at line 2[16.6929]→[16.1239:1308](∅→∅),[16.1308]→[16.5648:5748](∅→∅),[16.10561]→[16.5648:5748](∅→∅),[16.5748]→[16.4083:4114](∅→∅)
<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 %]"> - replacement in src/root/topbar.tt at line 6
</ul></div> - replacement in src/root/topbar.tt at line 12
<ul class="nav pull-left"><ul class="navbar-nav mr-auto"> - replacement in src/root/topbar.tt at line 15
[% INCLUDE menuItem uri = c.uri_for(c.controller('User').action_for('dashboard'), [c.user.username]) title = "Dashboard" %][% INCLUDE navItem uri = c.uri_for(c.controller('User').action_for('dashboard'), [c.user.username]) title = "Dashboard" %] - replacement in src/root/topbar.tt at line 41
<li class="nav-header">[% HTML.escape(project.name) %]</li><li class="divider"></li><h6 class="dropdown-header">[% HTML.escape(project.name) %]</h6><div class="dropdown-divider"></div> - replacement in src/root/topbar.tt at line 51
<li class="nav-header">[% HTML.escape(jobset.name) %]</li><li class="divider"></li><h6 class="dropdown-header">[% HTML.escape(jobset.name) %]</h6><div class="dropdown-divider"></div> - replacement in src/root/topbar.tt at line 68
<li class="nav-header">[% HTML.escape(job) %]</li><li class="divider"></li><h6 class="dropdown-header">[% HTML.escape(job) %]</h6><div class="dropdown-divider"></div> - replacement in src/root/topbar.tt at line 85
<li class="divider"></li><div class="dropdown-divider"></div> - replacement in src/root/topbar.tt at line 97
<li class="divider"></li><div class="dropdown-divider"></div> - replacement in src/root/topbar.tt at line 120
<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 %] - replacement in src/root/topbar.tt at line 126
[% 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"> - replacement in src/root/topbar.tt at line 129
[% 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> - replacement in src/root/topbar.tt at line 134
[% WRAPPER makeSubMenu title="Sign in" id="sign-in-menu" %][% WRAPPER makeSubMenu title="Sign in" id="sign-in-menu" align="right" %] - replacement in src/root/topbar.tt at line 136
<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> - replacement in src/root/topbar.tt at line 141[14.41]→[16.2378:2469](∅→∅),[16.2378]→[16.2378:2469](∅→∅),[16.1635]→[16.896:930](∅→∅),[16.2469]→[16.896:930](∅→∅),[16.896]→[16.896:930](∅→∅)
<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> - replacement in src/root/topbar.tt at line 144[16.1075]→[16.328:339](∅→∅),[16.328]→[16.328:339](∅→∅),[16.339]→[16.7347:7432](∅→∅),[16.773]→[16.418:430](∅→∅),[16.1140]→[16.418:430](∅→∅),[16.1891]→[16.418:430](∅→∅),[16.7432]→[16.418:430](∅→∅),[16.418]→[16.418:430](∅→∅)
<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> - replacement in src/root/user.tt at line 17
<form class="form-horizontal"><form> - replacement in src/root/user.tt at line 19[16.4907]→[16.4907:4920](∅→∅),[16.4920]→[16.37554:37555](∅→∅),[16.17511]→[16.37554:37555](∅→∅),[16.37555]→[16.4921:5055](∅→∅),[16.5055]→[16.4467:4567](∅→∅),[16.4567]→[16.5162:5175](∅→∅),[16.5162]→[16.5162:5175](∅→∅)
<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) %]/> - replacement in src/root/user.tt at line 25
[% END %]</div>[% END %] - replacement in src/root/user.tt at line 28[16.5191]→[16.5191:5305](∅→∅),[16.5305]→[16.2534:2653](∅→∅),[16.2653]→[16.5412:5425](∅→∅),[16.4668]→[16.5412:5425](∅→∅),[16.5412]→[16.5412:5425](∅→∅)
<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) %]/> - edit in src/root/user.tt at line 33
</div> - replacement in src/root/user.tt at line 35[16.5437]→[16.1705:1749](∅→∅),[16.385]→[16.5437:5550](∅→∅),[16.819]→[16.5437:5550](∅→∅),[16.1749]→[16.5437:5550](∅→∅),[16.5437]→[16.5437:5550](∅→∅),[16.5550]→[16.4669:4741](∅→∅),[16.4741]→[16.5629:5642](∅→∅),[16.5629]→[16.5629:5642](∅→∅)
[% 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=""/> - edit in src/root/user.tt at line 41
</div> - replacement in src/root/user.tt at line 43[16.5644]→[16.5644:5765](∅→∅),[16.5765]→[16.4742:4815](∅→∅),[16.4815]→[16.5845:5858](∅→∅),[16.5845]→[16.5845:5858](∅→∅)
<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=""/> - replacement in src/root/user.tt at line 48
[% END %]</div>[% END %] - replacement in src/root/user.tt at line 51[16.5869]→[16.5869:5979](∅→∅),[16.5979]→[16.7433:7621](∅→∅),[16.1935]→[16.6099:6112](∅→∅),[16.4929]→[16.6099:6112](∅→∅),[16.7621]→[16.6099:6112](∅→∅),[16.6099]→[16.6099:6112](∅→∅)
<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) %]/> - edit in src/root/user.tt at line 56
</div> - replacement in src/root/user.tt at line 58
<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 %]/> - edit in src/root/user.tt at line 63
</div> - replacement in src/root/user.tt at line 65[16.1315]→[16.1315:1550](∅→∅),[16.1550]→[16.2171:2188](∅→∅),[16.2811]→[16.2171:2188](∅→∅),[16.2171]→[16.2171:2188](∅→∅),[16.2188]→[16.6390:6403](∅→∅),[16.6390]→[16.6390:6403](∅→∅)
<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 %]/> - edit in src/root/user.tt at line 70
</div> - replacement in src/root/user.tt at line 72[16.6418]→[16.2201:2253](∅→∅),[16.21]→[16.6470:6586](∅→∅),[16.2253]→[16.6470:6586](∅→∅),[16.6470]→[16.6470:6586](∅→∅),[16.6586]→[16.0:132](∅→∅),[16.132]→[16.6641:6691](∅→∅),[16.136]→[16.6641:6691](∅→∅),[16.491]→[16.6641:6691](∅→∅),[16.5140]→[16.6641:6691](∅→∅),[16.6641]→[16.6641:6691](∅→∅),[16.6691]→[16.0:60](∅→∅),[16.60]→[16.752:809](∅→∅),[16.809]→[16.716:774](∅→∅),[16.774]→[11.730:787](∅→∅),[16.60]→[16.6750:6785](∅→∅),[16.774]→[16.6750:6785](∅→∅),[11.787]→[16.6750:6785](∅→∅),[16.809]→[16.6750:6785](∅→∅),[16.6750]→[16.6750:6785](∅→∅)
[% 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> - replacement in src/root/user.tt at line 84
[% END %]</div>[% END %] - replacement in src/root/user.tt at line 87
[% 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"> - replacement in src/root/user.tt at line 93[16.6991]→[16.6991:7143](∅→∅),[16.7143]→[16.5141:5210](∅→∅),[16.5210]→[16.7219:7234](∅→∅),[16.7219]→[16.7219:7234](∅→∅)
<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=""> - edit in src/root/user.tt at line 99[16.7247]→[16.19326:19340](∅→∅),[16.19326]→[16.19326:19340](∅→∅),[16.19340]→[16.7248:7280](∅→∅),[16.7280]→[16.2812:2868](∅→∅),[16.2868]→[16.7333:7453](∅→∅),[16.7333]→[16.7333:7453](∅→∅),[16.7453]→[16.820:898](∅→∅),[16.898]→[16.2869:2930](∅→∅),[16.2930]→[16.5759:5850](∅→∅),[16.5759]→[16.5759:5850](∅→∅),[16.6700]→[16.6700:6716](∅→∅),[16.6716]→[16.7453:7476](∅→∅),[16.7453]→[16.7453:7476](∅→∅),[16.7476]→[16.2931:2988](∅→∅),[16.2988]→[16.7576:7669](∅→∅),[16.7576]→[16.7576:7669](∅→∅),[16.7862]→[16.7862:7878](∅→∅)
[% 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 %] - edit in src/root/user.tt at line 100
[% END %] - replacement in src/root/user.tt at line 102
</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 %] - replacement in src/root/users.tt at line 27
<p><a class="btn" href="[% c.uri_for(c.controller('Root').action_for('register')) %]"><a class="btn btn-primary" href="[% c.uri_for(c.controller('Root').action_for('register')) %]"> - replacement in src/root/users.tt at line 29
</a></p></a>