Update boostrap to latest 4.3.1

[?]
Jul 30, 2019, 9:51 PM
SWXX2O4AFLEPD3N5BOYBHDRU5IRIIQHFDKNEJ3LVWOFL6NOOZVMAC

Dependencies

  • [2] YGJ55WLB Use the default navbar style for readability
  • [3] YUMW25WR Add correct bootstrap-2.3.1.zip
  • [4] HZWLTEXC Spelling fix
  • [5] YM6HYHOK Consistent terminology: "Clear" -> "Cancel"
  • [6] IMA3HWYC Fix link to cached build log
  • [7] HU6Z5NS5 Hide some things that require a local store
  • [8] HDBH7TDQ hide disabled jobsets by default.
  • [9] CLBOP44W Add a hydra.conf option to enable email notification
  • [10] PVDN6PEW Support $X-Request-Base for the Logo
  • [11] GXRKOXQJ Add cancel-build role
  • [12] UANT7MOV hydra-evaluator: add a 'ONE_AT_A_TIME' evaluator style
  • [13] VHPLIGHU Create projects in enabled state
  • [14] ROFVACRA Don't use enable_github_login option after all
  • [15] GLIPWYWL Move evaluation errors from evaluations to EvaluationErrors, a new table
  • [16] TQVKZQUG Use the REST API in the web interface for editing jobsets
  • [17] JATZRMWW Lazy load Google and Persona login stuff
  • [18] XJRJ4J7M Add user registration
  • [19] YPDYBK5G Show dependencies as a tree rather than a list
  • [20] DAGSOQW3 use newer icons consistently
  • [21] U72VNKRU Remove unused file
  • [22] CMBTR3KD jobset page: render error labels per eval
  • [23] NEQ4BISO Add bootstrap.zip
  • [24] GTXYNFUK Merge branch 'master' into persona
  • [25] SMTMFEKE hydra: add missing templates
  • [26] VCG6KNUX Remove the "clone build" feature
  • [27] VB6DJ5R4 Fix reproduction instructions
  • [28] VBWHG272 Re-add the history tab (store size and build time), now as lazy-loaded tab on build page.
  • [29] FAUCW4NH Remove project/jobset/job/build id from the navbar
  • [30] DV43UILU Don't float the search bar to the right in collapsed mode
  • [31] SBMOICGV Evil CSS hackery to prevent link targets from being under the navbar
  • [32] PVIRRARJ Turn hiding/unhiding a jobset into a checkbox
  • [33] JFW656FT Add a flag to enable Persona support
  • [34] JPTXSWBO Show whether a job still exists
  • [35] OIBSCXGI Use a popover to show how to use the build reproduction script
  • [36] YU6CND7C Remove support for views
  • [37] BPXMGUMQ topbar: Include "Create project" in menu.
  • [38] 3PNG7NIB Remove trailing whitespace
  • [39] RHUAFTJA Show aborted/cancelled builds separately in jobset eval pages
  • [40] 3LEGFJFP "Reproduce" action: Support flakes
  • [41] MB5INTIQ Normalize nixexpr{input,path} from builds to jobsetevals.
  • [42] T2LI6BMH Revive release button on eval page
  • [43] WDKFN4B2 Make sign in a modal dialog box rather than a separate page
  • [44] LFVXESGI Remove already disabled jobstatus code
  • [45] PZL3SZM3 Give every page a consistent title
  • [46] F6LBAQML Fix logo size
  • [47] ZRRPBEI4 Make jobset deletion consistent with project deletion
  • [48] JJHVQGEL Show aggregate members
  • [49] D44B24QC Store the account type ("hydra" or "persona") explicitly in the database
  • [50] RSEGBU6C Hydra/20: Jobset clone feature
  • [51] I4K2UPCW Tweaks
  • [52] KKJNJHO5 Update bootstrap to 2.0.3
  • [53] 4NTIBJ74 Implement DELETE for jobsets and use it in the web interface
  • [54] ELABMHJI * hydra: layout changes
  • [55] BIVZGPUT Optimise clickable rows
  • [56] LUYDIGYM Make input value wider
  • [57] XGNERX6C Use bootstrap's pager (instead of pagination) class
  • [58] OEPUOUNB Using twitter bootstrap for more consistent looks for Hydra
  • [59] 225GEK4N After editing a project/jobset, redirect back to the config tab
  • [60] JO75HQLO Add a restart-jobs role
  • [61] 6DMDTQ7M Add bump-to-front role
  • [62] 36M6DGIT Show the runtime/build dependencies in the build page
  • [63] NZXX6PLD Remove the Jobs table
  • [64] 63A26BM2 Unpack jQuery etc. in the build tree for easier testing
  • [65] ZI535LI6 * hydra: 'new' UI for project/jobset/job/build
  • [66] 74VYRQ6W Add an icon for binary distributions
  • [67] GGT2BLPF Set mouse pointer to indicate you can click on rows
  • [68] N2ZF5JUL Use a different icon for aborted builds
  • [69] TRDGNILT Remove unused file
  • [70] 6FRLEP4P first try for timeline of last 24 hours in hydra
  • [71] NOSDBMWD Remove comments, re-add logo.
  • [72] 44AGCSXK Use a proper spinning wheel icon
  • [73] DAPOSS44 Use the REST API in the web interface for editing projects
  • [74] DE2DNCOI Allow comparing an evaluation with an arbitrary other evaluation
  • [75] OPUHSVJF Remove "bashism"
  • [76] 2GUW2QBC Fix adding jobset inputs
  • [77] A6XVP6FE Make the hide/unhide actions a checkbox in the project settings
  • [78] N74SRHS6 Remove the "releases" feature
  • [79] VG4QG336 Remove tablesorter
  • [80] NRSKJPP4 makeLink -> menuItem
  • [81] LCLCU6FN Don't show a password reset button for Persona accounts
  • [82] JREZM2S2 Add channel as a product type.
  • [83] 2GUAKGTB Fix indentation of build.tt
  • [84] OX6NYJDV Split viewing and editing a jobset
  • [85] BB2KXLXZ Move the build time chart to the job page
  • [86] EYAA7MJY hydra-server: Support logs in S3
  • [87] HZWUT4YN Allow users to reproduce builds on their own systems
  • [88] P5X4P6VK * Renaming "release sets" to "views" (not finished yet). Having
  • [89] TFK74CQR Put job status on a separate tab
  • [90] 4WZQW2N6 Fix indentation and get rid of some unnecessary whitespace in the output
  • [91] 2CYHINKG Jobset eval page: Show the number of builds in each tab
  • [92] IWUYFG5T Controllers: allows lazy tabs to return custom errors.
  • [93] GMIKEXTA * Forgot to commit.
  • [94] 2CFO2MHS Hide hidden jobsets for project admins by default
  • [95] 3TL5XENE Different icons (darker red) for cancelled builds. Fixes #25.
  • [96] YBUGFKLE Use a distinct icon for cancelled builds
  • [97] CGVKJQPI Show a user's roles in the preferences page
  • [98] 4AKMU4ZB Clean up user editing
  • [99] Y46VPWXP Remove dead link
  • [100] CQQSJLON On aggregate job pages, show a matrix showing all the constituent builds
  • [101] K3HODXGH Check all inputs for blame but only email selected inputs
  • [102] BKMQXGBO Allow public dashboards
  • [103] VVRM3EGC Link to both the Persona and legacy sign in
  • [104] VH5ZABDR Add a page to show the latest evaluations for the entire server
  • [105] F26JXTLN Trailing whitespace
  • [106] J5UVLXOK * Start of a basic Catalyst web interface.
  • [107] WUCOEIFA Search: Limit the number of results
  • [108] G4X5IUYJ Remove default logo, replaced by text for now. Hide template in jobset edit.
  • [109] 2G63HKCH Fix some wellformedness issues
  • [110] MZ63OVKP Allow bumping an entire evaluation to the front of the queue
  • [111] SYAIW23X Add missing file
  • [112] 2DHE2ZAK Allow Hydra to run as a private instance by requiring a login.
  • [113] W74RIXTJ Show inputs and input changes on the jobset eval page
  • [114] TQKGQ5R3
  • [115] QLOLZHRX Allow a per-jobset check interval
  • [116] LZVO64YG Merge in the first bits of the API work
  • [117] T5BIOVJE Add support for tracking custom metrics
  • [118] AR5EHCUF Add action to restart all failed builds in an eval
  • [119] S5GCSCNS Update bootstrap to 2.3.1
  • [120] JOVVHIJX Remove all entry points to modify machines
  • [121] UMEKGOSY Update flot to 0.8.3
  • [122] VJFLX7B6 Fix rendering of jobset inputs
  • [123] D7PL2VWU Move more actions from the top bar
  • [124] ZB3JV52W Add a "My jobsets" tab to the dashboard
  • [125] 22JB5HNE make changes section more compact/readable
  • [126] HRAFVVOE make logo configurable via HYDRA_LOGO env var
  • [127] 2P7VNAAC Move common Javascript code into a separate file
  • [128] XUKHBDR5 Prevent 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] XZJFZSCJ User 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] QCGCX2BR Generalize lazy tabs
  • [134] UOINKJ2J Add an action to cancel all builds in a jobset eval
  • [135] WRIU3S5E * UI for cloning builds (not functional yet).
  • [136] IZEXRZWT Replace old logo with Nix/NixOS logo.
  • [137] QTC3SYBM Jobset page: Load the jobs and status tabs on demand
  • [138] WYMEG4VP Make some more tables clickable
  • [139] I3X25POI hydra-update-gc-roots: Keep the most recent evaluations
  • [140] JARRBLZD Bootstrapify 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] 3ZAJ2ZRP Use popovers for the product list help/details
  • [144] ZFEN2MAO Simplify jobset cloning
  • [145] SZYDW2DG hydra: added some user admin
  • [146] QBT7FA7R Compatibility with latest bootstrap
  • [147] HN3V252L On the build page, show how many aggregate constituents failed
  • [148] 5QE3TIHP hydra: add status icon per jobset on project page
  • [149] 6Q2JPSWG Fix lazy tab loading
  • [150] TLJC6BJ3 Add a menu item for deleting jobsets
  • [151] PBE5A44I Remove blank lines, consistent attribute quoting, use svg for delta header, column sizes.
  • [152] AK2UZDS2 Jobset page: Add a new tab to show job status in a matrix
  • [153] KXGOUX7P * Creating releases.
  • [154] UQA4FMUA Allow a jobset to be created from an evaluation
  • [155] QAUDQPWG Add a more concise queue page
  • [156] JY7BXXOP Split viewing and editing a project
  • [157] 4GU5Y2XZ Add some margin about h3 elements
  • [158] R2PON6R7 Allow non-admin users to see the machine status page
  • [159] 3QWDDLBR Add support for logging in via a Google account
  • [160] WNQRX7QB Doh
  • [161] GS4SFHCP templates: Use uri_for to reference static paths.
  • [162] OR5SJ42Y Show releases in a tab on the project page
  • [163] XDDCO6CH * hydra: add dependency list with links to logfiles
  • [164] 6HWHYPSW Add an action menu to evaluations
  • [165] C3AG65SW Add one-shot jobsets
  • [166] A52HEFHQ * Allow builds to be restarted (if they failed with a transient error,
  • [167] 7ZQAHJQM Fix indentation
  • [168] R7MDDCB2 Some unnecessary job names
  • [169] BW6TYQJS Use local copy of the Persona sign in button
  • [170] ODNCGFQ5 * Improved the navigation bar: don't include all projects (since that
  • [171] 6KIJX24R Get rid of unnecessary [%- and -%] tags
  • [172] JIJDYWPY Remove the Build menu from the top bar
  • [173] NGYZCZYX Add a link to the latest finished eval of a jobset
  • [174] MFHM3RLC * Add an icon for PDFs.
  • [175] 4QCXGR4W Tabify the eval page
  • [176] E4DESS7G Fixes NixOS/hydra#402 (#424)
  • [177] QUMWPGCU Add flake configuration to the web interface
  • [178] 5DSDXORD hydra: missing plain.tt
  • [179] PF72JKWQ Add a "My jobs" tab to the dashboard
  • [180] 64IV56HI Replace bootstrap tarball
  • [181] D5QIOJGP * Move everything up one directory.
  • [182] 3JBUMW3E forgot to commit a file
  • [183] UICHT2PS Add a search feature
  • [184] N4ODPYP7 Job page: Remove channel tab
  • [185] JINQDKLI Don't always include "Hydra" in the logo part.
  • [186] J3RYO2CU Remove the jobs status page
  • [187] XZKO4FNR user: Fix spelling of create-projects role.
  • [188] UDS5VIT6 Lazy load the metrics tab
  • [189] GEADFVZ5 hydra-queue-runner: Improved scheduling
  • [190] 6WRGCITD Enable declarative projects.
  • [191] LSZLZHJY Allow users to edit their own settings
  • [192] GNQYRBAG Implement GitHub logins
  • [193] G2WXEQHE Remove the Errors page
  • [194] OGLMBJSC Enable setting emailresponsible in the edit jobset form
  • [195] 5GRW5XU4 Job page: Put latest builds on top
  • [196] K22TMPH5 Make the info tables less compressed
  • [197] AS2OXLRM * Editing releases.
  • [198] XTKCALUA Make "Add to release" a modal dialog
  • [199] AJVCB6K6 Fix a "Argument isn't numeric" warning if there are not jobsets
  • [200] KSBB33RE Add a dashboard
  • [201] MQMF2LBW Re-enable adding new users via the web interface
  • [202] W3XAFDK6 Remove obsolete/broken timeline feature
  • [203] TX7Q4RAS Add page showing latest build steps
  • [204] BPT4WJ7U Remove Persona support
  • [205] RQI3GRC6 Enable setting checkresponsible in the edit jobset form
  • [206] WGUKOIQZ Fix indentation
  • [207] ZWCTAZGL added newsitems, added some admin options to clear various caches.
  • [208] QXMZNOC6 Also hide disabled projects on the overview page by default
  • [209] U4TD3AIQ Add support for viewing jobset evaluations
  • [210] LRU7K5MW Update build images to be more friendly to users with color blindness.
  • [211] VHV6GI4L Add a jobset eval action to restart all aborted/cancelled builds
  • [212] 36ZTCZ4F Add basic Persona support
  • [213] DGHAIZTO Make cloning of jobsets work again.
  • [214] D7X6XTKQ Integrate the "Job status" and "All jobs" tabs
  • [215] 6IBR72RW Clean up unused images (#404)
  • [216] 77BG3TYK Use c.req.captures
  • [217] TPNHTE5V Remove obsolete Builds columns and provide accurate "Running builds"
  • [218] JZVRK5QJ Group some menu items together under a "Status" menu
  • [219] RX7USXWQ jobset: Add a new "channels" tab.
  • [220] JATC3WQY Make actions dropdown easier to find by making the dropdown title bold
  • [221] FV2M6MOT hydra: use autoconf/-make
  • [222] WE5Q2NVI Allow build to be bumped to the front of the queue via the web interface
  • [223] SS4TZXNU Distinguish between permanent evaluation errors and transient input errors
  • [224] XAJFR6SR Add a chart to the job pages showing the closure size over time
  • [225] UM73XPLK Fix some XML wellformedness issues
  • [*] IK53RV4V
  • [*] 7YBYT2LQ

Change contents

  • file deletion: bootstrap-2.3.1.zip (----------)
    [16.1486][16.125:168](),[16.168][16.1:1]()
  • replacement in src/root/Makefile.am at line 11
    [16.18732][16.0:32]()
    BOOTSTRAP = bootstrap-2.3.1.zip
    [16.22]
    [16.18732]
    BOOTSTRAP = bootstrap-4.3.1-dist.zip
  • replacement in src/root/Makefile.am at line 29
    [16.164][16.164:232]()
    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
    [16.4356][16.4356:4620]()
    <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=""/>
    [16.4356]
    [16.4620]
    <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
    [16.4637][16.4637:4853]()
    </div>
    <div class="control-group">
    <label class="control-label">Password</label>
    <div class="controls">
    <input type="password" class="span3" name="password" value=""/>
    [16.4637]
    [16.4853]
    <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
    [16.4870][16.4870:5087]()
    </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>
    [16.4870]
    [16.5087]
    </form>
  • replacement in src/root/auth.tt at line 53
    [16.5100][16.5100:5112]()
    </form>
    [16.5100]
    [16.5112]
    </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">
    [16.1530]
    [16.816]
    <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
    [16.48][16.260:340](),[16.863][16.260:340](),[16.260][16.260:340]()
    <li><a href="#reproduce" data-toggle="modal">Reproduce locally</a></li>
    [16.863]
    [16.340]
    <a class="dropdown-item" href="#reproduce" data-toggle="modal">Reproduce locally</a>
  • replacement in src/root/build.tt at line 126
    [16.522][16.522:608]()
    <li><a href="[% c.uri_for('/build' build.id 'keep' 0) %]">Unkeep</a></li>
    [16.522]
    [16.608]
    <a class="dropdown-item" href="[% c.uri_for('/build' build.id 'keep' 0) %]">Unkeep</a>
  • replacement in src/root/build.tt at line 128
    [16.629][16.629:713]()
    <li><a href="[% c.uri_for('/build' build.id 'keep' 1) %]">Keep</a></li>
    [16.629]
    [16.713]
    <a class="dropdown-item" href="[% c.uri_for('/build' build.id 'keep' 1) %]">Keep</a>
  • replacement in src/root/build.tt at line 132
    [16.783][16.783:869]()
    <li><a href="[% c.uri_for('/build' build.id 'restart') %]">Restart</a></li>
    [16.783]
    [16.869]
    <a class="dropdown-item" href="[% c.uri_for('/build' build.id 'restart') %]">Restart</a>
  • replacement in src/root/build.tt at line 134
    [16.888][16.888:972](),[16.972][16.3266:3349]()
    <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>
    [16.888]
    [16.1165]
    <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
    [16.1199][16.1199:1209]()
    </ul>
    [16.1199]
    [16.1209]
    </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 %]
    [16.7893]
    [16.2164]
    <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
    [16.861][16.861:862]()
  • replacement in src/root/build.tt at line 490
    [16.1310][16.1310:1365]()
    [% url = c.uri_for('/build' build.id 'reproduce') %]
    [16.1310]
    [16.1365]
    <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
    [16.1366][16.1366:1535]()
    <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
    <h3>Reproduce this build</h3>
    </div>
    [16.1366]
    [16.1535]
    <div class="modal-header">
    <h3>Reproduce this build</h3>
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
    </div>
  • replacement in src/root/build.tt at line 499
    [16.1536][16.1536:1563]()
    <div class="modal-body">
    [16.1536]
    [16.49]
    <div class="modal-body">
  • replacement in src/root/build.tt at line 503
    [16.75][16.75:254]()
    <p>If you have <a href='https://nixos.org/nix/download.html'>Nix
    installed</a>, you can reproduce this build on your own machine by
    running the following command:</p>
    [16.75]
    [16.1563]
    <p>If you have <a href='https://nixos.org/nix/download.html'>Nix
    installed</a>, you can reproduce this build on your own machine by
    running the following command:</p>
  • replacement in src/root/build.tt at line 513
    [16.399][16.399:701]()
    <p>If you have <a href='https://nixos.org/nix/download.html'>Nix
    installed</a>, you can reproduce this build on your own machine by
    downloading <a [% HTML.attributes(href => url) %]>a script</a>
    that checks out all inputs of the build and then invokes Nix to
    perform the build.</p>
    [16.399]
    [16.1840]
    <p>If you have <a href='https://nixos.org/nix/download.html'>Nix
    installed</a>, you can reproduce this build on your own machine by
    downloading <a [% HTML.attributes(href => url) %]>a script</a>
    that checks out all inputs of the build and then invokes Nix to
    perform the build.</p>
  • replacement in src/root/build.tt at line 519
    [16.1841][16.1841:1941]()
    <p>To download and execute the script from the command line, run the
    following command:</p>
    [16.1841]
    [16.1941]
    <p>To download and execute the script from the command line, run the
    following command:</p>
  • replacement in src/root/build.tt at line 528
    [16.831][16.2070:2079](),[16.2070][16.2070:2079]()
    </div>
    [16.831]
    [16.2079]
    </div>
  • replacement in src/root/build.tt at line 530
    [16.2080][16.2080:2109](),[16.2109][16.4:75]()
    <div class="modal-footer">
    <a href="#" class="btn btn-primary" data-dismiss="modal">Close</a>
    [16.2080]
    [16.2186]
    <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
    [16.2893][16.0:86]()
    <select style='width: 15em;' [% HTML.attributes(id => param, name => param) %]>
    [16.2893]
    [16.2958]
    <select class="custom-select" [% HTML.attributes(id => param, name => param) %]>
  • replacement in src/root/common.tt at line 408
    [16.9472][16.27:48](),[16.48][16.99:617]()
    <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>
    [16.9472]
    [16.586]
    <ul class="pagination">
    <li class="page-item[% IF page == 1 %] disabled[% END %]"><a class="page-link" href="[% "$baseUri?page=1" %]">&laquo; First</a></li>
    <li class="page-item[% IF page == 1 %] disabled[% END %]"><a class="page-link" href="[% "$baseUri?page="; (page - 1) %]">&lsaquo; Previous</a></li>
    <li class="page-item[% IF page * resultsPerPage >= total %] disabled[% END %]"><a class="page-link" href="[% "$baseUri?page="; (page + 1) %]">Next &rsaquo;</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 &raquo;</a></li>
  • replacement in src/root/common.tt at line 520
    [16.285][16.1156:1258]()
    <center><img src="[% c.uri_for("/static/images/ajax-loader.gif") %]" alt="Loading..." /></center>
    [16.285]
    [16.368]
    <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 %]
    [16.2225]
    [16.608]
    <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
    [16.5718][16.5718:5808](),[16.5808][16.506:571](),[16.571][16.3722:3793]()
    <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>
    [16.5718]
    [16.5808]
    <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
    [16.2262][16.2262:2263](),[16.2263][16.1795:1826]()
    <form class="form-horizontal">
  • replacement in src/root/edit-jobset.tt at line 60
    [16.2476][16.2476:2489]()
    <fieldset>
    [16.2476]
    [16.2489]
    <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>
    [16.2490]
    [16.2728]
    <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
    [16.2739]
    [16.2739]
    </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>
    [16.2740]
    [16.2974]
    <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
    [16.2985]
    [16.2985]
    </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>
    [16.2986]
    [16.3235]
    <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
    [16.3246]
    [16.3246]
    </div>
  • replacement in src/root/edit-jobset.tt at line 94
    [16.3247][16.3247:3279](),[16.3279][16.2410:2829]()
    <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>
    [16.3247]
    [16.2829]
    <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
    [16.2840]
    [16.2840]
    </div>
  • replacement in src/root/edit-jobset.tt at line 106
    [16.2841][16.2841:3086]()
    <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>
    [16.2841]
    [16.3086]
    <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
    [16.3097]
    [16.3097]
    </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) %]/>
    [16.3098]
    [16.3619]
    <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
    [16.3643]
    [16.3643]
    </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>
    [16.3644]
    [16.724]
    <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
    [16.739][16.739:803]()
    <span class="help-inline">(0 to disable polling)</span>
    [16.739]
    [16.803]
    <input type="text" class="form-control" name="nixexprinput" [% HTML.attributes(value => jobset.nixexprinput) %]/>
  • edit in src/root/edit-jobset.tt at line 133
    [16.827]
    [16.827]
    </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) %]/>
    [16.828]
    [16.2411]
    <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
    [16.2426][16.2426:2624]()
    [% 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
    [16.2648]
    [16.2648]
    </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>
    [16.2649]
    [16.3901]
    <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
    [16.3912]
    [16.3912]
    </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>
    [16.3913]
    [16.4169]
    <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
    [16.4180]
    [16.4180]
    </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>
    [16.4181]
    [16.4435]
    <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
    [16.4446]
    [16.4446]
    </div>
  • replacement in src/root/edit-jobset.tt at line 176
    [16.4447][16.257:294]()
    [% INCLUDE renderJobsetInputs %]
    [16.4447]
    [16.4478]
    <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>
    [16.4479]
    [16.4670]
    [% INCLUDE renderJobsetInputs %]
  • replacement in src/root/edit-jobset.tt at line 185
    [16.4671][16.4671:4685]()
    </fieldset>
    [16.4671]
    [16.4685]
    <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
    [16.399][16.136:137](),[16.137][16.1103:1134]()
    <form class="form-horizontal">
  • replacement in src/root/edit-project.tt at line 4
    [16.317][16.317:330]()
    <fieldset>
    [16.317]
    [16.399]
    <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>
    [16.400]
    [16.833]
    <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
    [16.844]
    [16.555]
    </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>
    [16.556]
    [16.1080]
    <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
    [16.1091]
    [16.1091]
    </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>
    [16.1092]
    [16.1343]
    <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
    [16.1354]
    [16.1354]
    </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>
    [16.1355]
    [16.1605]
    <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
    [16.1616]
    [16.1616]
    </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>
    [16.1617]
    [16.1858]
    <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
    [16.1869]
    [16.1869]
    </div>
  • replacement in src/root/edit-project.tt at line 41
    [16.1870][16.1870:1980](),[16.1980][16.2965:3095](),[16.3095][16.3476:3489]()
    <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>
    [16.1870]
    [16.3489]
    <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
    [16.3500]
    [16.3500]
    </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>
    [16.3501]
    [16.2130]
    <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
    [16.2141]
    [16.1479]
    </div>
  • replacement in src/root/edit-project.tt at line 55
    [16.1480][16.3885:4265]()
    <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>
    [16.1480]
    [16.4265]
    <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
    [16.4276]
    [16.4276]
    </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>
    [16.4277]
    [16.2768]
    <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
    [16.2779]
    [16.2098]
    </div>
  • replacement in src/root/edit-project.tt at line 73
    [16.2099][16.2780:2794]()
    </fieldset>
    [16.2099]
    [16.2794]
    <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
    [16.27][16.27:105]()
    <li class="active"><a href="#tabs-status" data-toggle="tab">Status</a></li>
    [16.27]
    [16.970]
    <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
    [16.1006][16.1006:1083]()
    <li><a href="#tabs-constituents" data-toggle="tab">Constituents</a></li>
    [16.1006]
    [16.1083]
    <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>
    [16.1095]
    [16.248]
    <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
    [16.5046][16.0:173]()
    <form class="form-search">
    <input name="filter" type="text" class="input-large search-query" placeholder="Search jobs by name..." [% HTML.attributes(value => filter) %]/>
    [16.5046]
    [16.173]
    <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
    [16.25][16.25:207](),[16.353][16.1754:1905]()
    <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>
    [16.25]
    [16.561]
    <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
    [16.598][16.598:735]()
    <li><a href="[% c.uri_for(c.controller('JobsetEval').action_for('cancel'), [eval.id]) %]">Cancel all scheduled builds</a></li>
    [16.598]
    [16.735]
    <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
    [16.538][16.538:681]()
    <li><a href="[% c.uri_for(c.controller('JobsetEval').action_for('restart_failed'), [eval.id]) %]">Restart all failed builds</a></li>
    [16.538]
    [16.681]
    <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
    [16.787][16.787:932]()
    <li><a href="[% c.uri_for(c.controller('JobsetEval').action_for('restart_aborted'), [eval.id]) %]">Restart all aborted builds</a></li>
    [16.787]
    [16.932]
    <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
    [16.987][16.987:1124]()
    <li><a href="[% c.uri_for(c.controller('JobsetEval').action_for('bump'), [eval.id]) %]">Bump builds to front of queue</a></li>
    [16.987]
    [16.1124]
    <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>
    [16.1142]
    [16.365]
    </div>
  • replacement in src/root/jobset-eval.tt at line 64
    [16.489][16.0:127]()
    <li><a href="#tabs-aborted" data-toggle="tab"><span class="text-warning">Aborted jobs ([% aborted.size %])</span></a></li>
    [16.489]
    [16.595]
    <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
    [16.370][4.0:134]()
    <li><a href="#tabs-now-fail" data-toggle="tab"><span class="text-warning">Newly failing jobs ([% nowFail.size %])</span></a></li>
    [16.370]
    [16.483]
    <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
    [16.526][4.135:278]()
    <li><a href="#tabs-now-succeed" data-toggle="tab"><span class="text-success">Newly succeeding jobs ([% nowSucceed.size %])</span></a></li>
    [16.526]
    [16.645]
    <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
    [16.681][16.407:488]()
    <li><a href="#tabs-new" data-toggle="tab">New jobs ([% new.size %])</a></li>
    [16.681]
    [16.745]
    <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
    [16.785][16.489:582]()
    <li><a href="#tabs-removed" data-toggle="tab">Removed jobs ([% removed.size %])</a></li>
    [16.785]
    [16.857]
    <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
    [16.899][4.279:383]()
    <li><a href="#tabs-still-fail" data-toggle="tab">Still failing jobs ([% stillFail.size %])</a></li>
    [16.899]
    [16.980]
    <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
    [16.1025][4.384:497]()
    <li><a href="#tabs-still-succeed" data-toggle="tab">Still succeeding jobs ([% stillSucceed.size %])</a></li>
    [16.1025]
    [16.1112]
    <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
    [16.1155][16.802:900]()
    <li><a href="#tabs-unfinished" data-toggle="tab">Queued jobs ([% unfinished.size %])</a></li>
    [16.1155]
    [16.1229]
    <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
    [16.1241][16.1618:1681](),[16.1618][16.1618:1681]()
    <li><a href="#tabs-inputs" data-toggle="tab">Inputs</a></li>
    [16.1241]
    [16.125]
    <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
    [15.2493][16.151:261](),[16.151][16.151:261]()
    <li><a href="#tabs-errors" data-toggle="tab"><span class="text-warning">Evaluation errors</span></a></li>
    [15.2493]
    [16.261]
    <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
    [16.273][16.273:274]()
  • 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>
    [16.421]
    [16.780]
    <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
    [16.789][16.789:798](),[16.798][16.1259:1385]()
    &nbsp;
    <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
    [16.101][16.101:283]()
    <li class="dropdown">
    <a class="dropdown-toggle" data-toggle="dropdown" href="#">
    Actions
    <b class="caret"></b>
    </a>
    <ul class="dropdown-menu">
    [16.101]
    [16.4278]
    <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
    [16.1121][16.620:632](),[16.620][16.620:632]()
    </ul>
    [16.1121]
    [16.632]
    </div>
  • replacement in src/root/jobset.tt at line 61
    [16.655][16.54:142](),[16.6589][16.54:142]()
    <li class="active"><a href="#tabs-evaluations" data-toggle="tab">Evaluations</a></li>
    [16.655]
    [16.357]
    <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
    [16.408][16.3578:3688](),[16.6699][16.3578:3688]()
    <li><a href="#tabs-errors" data-toggle="tab"><span class="text-warning">Evaluation errors</span></a></li>
    [16.408]
    [16.6817]
    <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>
    [16.6829]
    [16.6981]
    <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
    [16.72643][16.72643:72750]()
    <!-- hydra.css must be included before bootstrap-responsive to
    make the @media rule work. -->
    [16.72643]
    [16.1591]
    <!-- 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
    [16.1784][16.1784:1891]()
    <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>
    [16.649]
    [16.4730]
    <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
    [16.4743][16.7313:7324]()
    </div>
    [16.4743]
    [16.4743]
    </nav>
  • replacement in src/root/news.tt at line 24
    [16.10778][16.13984:14489]()
    <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>
    [16.10778]
    [16.14489]
    <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
    [16.14498]
    [16.10778]
    <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
    [16.1354][16.1354:1536]()
    <li class="dropdown">
    <a class="dropdown-toggle" data-toggle="dropdown" href="#">
    Actions
    <b class="caret"></b>
    </a>
    <ul class="dropdown-menu">
    [16.1354]
    [16.392]
    <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
    [16.4374][16.542:695](),[16.1993][16.542:695]()
    [% INCLUDE menuItem title="Create jobset" icon="icon-plus" uri=c.uri_for(c.controller('Project').action_for('create_jobset'), c.req.captures) %]
    [16.4374]
    [16.4375]
    [% 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
    [16.850][16.1896:1908](),[16.2301][16.1896:1908](),[16.1896][16.1896:1908]()
    </ul>
    [16.4393]
    [16.1908]
    </div>
  • replacement in src/root/project.tt at line 18
    [16.1931][16.2566:2646](),[16.2566][16.2566:2646](),[16.2646][16.338:415]()
    <li class="active"><a href="#tabs-project" data-toggle="tab">Jobsets</a></li>
    <li><a href="#tabs-configuration" data-toggle="tab">Configuration</a></li>
    [16.1931]
    [16.2779]
    <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>
    [16.29]
    [16.3931]
    <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
    [16.224][16.224:273](),[16.273][16.0:23]()
    /* Missing in bootstrap 2.0.2 */
    .text-warning {
    color: #c09853;
    }
  • file deletion: ajax-loader.gif (----------)
    [16.2196][16.3503:3529](),[16.3529][16.293:293]()
  • replacement in src/root/static/js/common.js at line 49
    [16.1615][16.1615:1643]()
    bootbox.animate(false);
    [16.1615]
    [16.1643]
    bootbox.setDefaults({ animate: false });
  • replacement in src/root/static/js/common.js at line 134
    [16.3630][16.133:179](),[16.133][16.133:179]()
    $('.nav-tabs').bind('show', function(e) {
    [16.3630]
    [16.179]
    $('.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">
    [16.6929]
    [16.5794]
    <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
    [16.5814][16.5814:5824]()
    </ul>
    [16.5814]
    [16.10887]
    </div>
  • replacement in src/root/topbar.tt at line 12
    [16.480][16.4115:4142](),[16.11122][16.4115:4142]()
    <ul class="nav pull-left">
    [16.480]
    [16.7713]
    <ul class="navbar-nav mr-auto">
  • replacement in src/root/topbar.tt at line 15
    [16.7739][16.7739:7867]()
    [% INCLUDE menuItem uri = c.uri_for(c.controller('User').action_for('dashboard'), [c.user.username]) title = "Dashboard" %]
    [16.7739]
    [16.7867]
    [% 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
    [16.47][16.47:145]()
    <li class="nav-header">[% HTML.escape(project.name) %]</li>
    <li class="divider"></li>
    [16.47]
    [16.35657]
    <h6 class="dropdown-header">[% HTML.escape(project.name) %]</h6>
    <div class="dropdown-divider"></div>
  • replacement in src/root/topbar.tt at line 51
    [16.191][16.191:288]()
    <li class="nav-header">[% HTML.escape(jobset.name) %]</li>
    <li class="divider"></li>
    [16.191]
    [16.125]
    <h6 class="dropdown-header">[% HTML.escape(jobset.name) %]</h6>
    <div class="dropdown-divider"></div>
  • replacement in src/root/topbar.tt at line 68
    [16.331][16.5647:5704](),[16.5704][16.393:425](),[16.393][16.393:425]()
    <li class="nav-header">[% HTML.escape(job) %]</li>
    <li class="divider"></li>
    [16.331]
    [16.260]
    <h6 class="dropdown-header">[% HTML.escape(job) %]</h6>
    <div class="dropdown-divider"></div>
  • replacement in src/root/topbar.tt at line 85
    [16.589][16.589:623]()
    <li class="divider"></li>
    [16.589]
    [16.623]
    <div class="dropdown-divider"></div>
  • replacement in src/root/topbar.tt at line 97
    [16.15110][16.15110:15142]()
    <li class="divider"></li>
    [16.15110]
    [5.0]
    <div class="dropdown-divider"></div>
  • replacement in src/root/topbar.tt at line 120
    [16.15872][16.4273:4301]()
    <ul class="nav pull-right">
    [16.15872]
    [16.3253]
    [% 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
    [16.3254][16.492:747]()
    [% 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 %]
    [16.3254]
    [16.43]
    <ul class="navbar-nav">
  • replacement in src/root/topbar.tt at line 129
    [16.68][16.68:193](),[16.193][16.2432:2441](),[16.2441][16.6990:7042]()
    [% 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>
    [16.68]
    [16.2493]
    [% 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
    [16.311][16.1309:1373]()
    [% WRAPPER makeSubMenu title="Sign in" id="sign-in-menu" %]
    [16.311]
    [16.7089]
    [% WRAPPER makeSubMenu title="Sign in" id="sign-in-menu" align="right" %]
  • replacement in src/root/topbar.tt at line 136
    [16.7133][16.1374:1560](),[16.1560][16.2284:2318]()
    <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>
    [16.7133]
    [16.2318]
    <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>
    [14.41]
    [16.1044]
    <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>
    [16.1060]
    [16.430]
    <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
    [16.5207][16.2502:2533]()
    <form class="form-horizontal">
    [16.5207]
    [16.4906]
    <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>
    [16.4907]
    [16.17707]
    [% 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
    [16.17718][16.5176:5190]()
    [% END %]
    [16.17718]
    [16.5190]
    </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>
    [16.5191]
    [16.5425]
    <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
    [16.5436]
    [16.5436]
    </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>
    [16.5437]
    [16.17946]
    [% 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
    [16.17957]
    [16.5643]
    </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>
    [16.5644]
    [16.18188]
    <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
    [16.18199][16.386:400]()
    [% END %]
    [16.18199]
    [16.5859]
    </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>
    [16.5860]
    [16.18722]
    <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
    [16.18733]
    [16.6137]
    </div>
  • replacement in src/root/user.tt at line 58
    [16.6138][16.1936:2030](),[16.2030][16.2654:2811](),[16.2811][16.1273:1303]()
    <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>
    [16.6138]
    [16.1303]
    <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
    [16.1314]
    [16.1314]
    </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>
    [16.1315]
    [16.2189]
    <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
    [16.2200]
    [16.6417]
    </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>
    [16.6418]
    [16.6785]
    [% 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
    [16.6798][16.6798:6812]()
    [% END %]
    [16.6798]
    [16.6812]
    </div>
    [% END %]
  • replacement in src/root/user.tt at line 87
    [16.6813][16.2254:2306](),[16.2306][16.6833:6978](),[16.6833][16.6833:6978]()
    [% IF create && !c.check_user_roles('admin') %]
    <div class="control-group">
    <div class="controls">
    <img src="[% c.uri_for('/captcha') %]" alt="CAPTCHA"/>
    </div>
    [16.6813]
    [16.6978]
    [% 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>
    [16.6991]
    [16.7234]
    </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
    [16.5222]
    [16.5222]
    [% END %]
  • replacement in src/root/user.tt at line 102
    [16.5223][16.5223:5237]()
    </fieldset>
    [16.5223]
    [16.6269]
    <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
    [16.7793][16.6854:6941]()
    <p><a class="btn" href="[% c.uri_for(c.controller('Root').action_for('register')) %]">
    [16.7793]
    [16.19877]
    <a class="btn btn-primary" href="[% c.uri_for(c.controller('Root').action_for('register')) %]">
  • replacement in src/root/users.tt at line 29
    [16.19920][16.19920:19929]()
    </a></p>
    [16.19920]
    [16.7898]
    </a>