[% WRAPPER layout.tt title="Hydra Overview" %] [% USE HTML %] [% BLOCK maybeEditString %] [% IF edit %] <input type="text" class="string [% extraClass %]" [% HTML.attributes(id => param, name => param, value => value) %] /> [% ELSE %] [% HTML.escape(value) %] [% END %] [% END %] [% BLOCK renderInputType %] [% SWITCH type %] [% CASE "svn" %]Subversion checkout [% CASE "cvs" %]CVS checkout [% CASE "tarball" %]Download of a tarball [% CASE "string" %]String value [% CASE "path" %]Local path [% END %] [% END %] [% BLOCK renderInputTypeOption %] <option value="[% type %]" [% IF value == type %]selected="selected"[%END %]>[% INCLUDE renderInputType %]</option> [% END %] [% BLOCK renderInput %] <tr class="input [% extraClass %]" id="[% id %]"> [% IF edit %] <td> [% IF edit %]<a href="javascript:" onclick='$(this).parents(".input").remove()'>[X]</a>[% END -%] </td> [% END %] <td> <tt>[% INCLUDE maybeEditString param="$baseName-name" value=input.name extraClass="shortString" %]</tt> </td> <td> [% IF edit %] <select id="[% "$baseName-type" %]" name="[% "$baseName-type" %]"> [% INCLUDE renderInputTypeOption value=input.type type="svn" %] [% INCLUDE renderInputTypeOption value=input.type type="cvs" %] [% INCLUDE renderInputTypeOption value=input.type type="tarball" %] [% INCLUDE renderInputTypeOption value=input.type type="string" %] [% INCLUDE renderInputTypeOption value=input.type type="path" %] </select> [% ELSE %] [% INCLUDE renderInputType type=input.type %] [% END %] </td> <td class="inputalts" id="[% baseName %]"> [% FOREACH alt IN input.jobsetinputalts -%] <tt class="inputalt"> [% IF input.type == "string" && !edit %] "[% HTML.escape(alt.value) %]" [% ELSE %] [% INCLUDE maybeEditString param="$baseName-values" value=alt.value %] [% IF edit %]<a href="javascript:" onclick='$(this).parents(".inputalt").remove()'>[X]</a>[% END %] [% END %] </tt> [% END %] [% IF edit %]<a href="javascript:" class="add-inputalt">[+]</a>[% END %] </td> </tr> [% END %] [% BLOCK renderJobset %] <div class="jobset[% IF edit %] jobset-edit[% END %]" id="[% "jobset-$baseName" %]"> <h3>[% IF jobset %]Jobset <tt>[% jobset.name %]</tt>[% ELSE %]New jobset[% END %]</h3> <h4>Information</h4> <table> [% IF edit %] <tr> <th>Identifier:</th> <td>[% INCLUDE maybeEditString param="jobset-$baseName-name" value=jobset.name %]</td> </tr> [% END %] <tr> <th>Description:</th> <td>[% INCLUDE maybeEditString param="jobset-$baseName-description" value=jobset.description %]</td> </tr> <tr> <th>Nix expression:</th> <td> <tt>[% INCLUDE maybeEditString param="jobset-$baseName-nixexprpath" value=jobset.nixexprpath extraClass="shortString" %]</tt> in input <tt>[% INCLUDE maybeEditString param="jobset-$baseName-nixexprinput" value=jobset.nixexprinput extraClass="shortString" %]</tt> </td> </tr> </table> <h4>Inputs</h4> [% IF edit %] <p><button class="add-input">Add a new input</button></p> [% END %] <table class="tablesorter"> <thead> <tr>[% IF edit %]<th></th>[% END %]<th>Input name</th><th>Type</th><th>Values</th></tr> </thead> <tbody class="inputs"> [% FOREACH input IN jobset.jobsetinputs -%] [% INCLUDE renderInput input=input baseName="jobset-$baseName-input-$input.name" %] [% END %] </tbody> </table> [% IF edit %] <hr /> <p><button onclick='$(this).parents(".jobset").remove()'>Delete this jobset</button></p> [% END %] </div> [% END %] [% IF edit %] <form action="[% IF create %][% c.uri_for('/createproject/submit') %][% ELSE %][% c.uri_for('/project' curProject.name 'submit') %][% END %]" method="post"> [% END %] [% IF create %] <h1>New Project</h1> [% ELSE %] <h1>Project <tt>[% curProject.name %]</tt></h1> [% END %] <h2>General information</h2> <table> [% IF edit %] <tr> <th>Identifier:</th> <td><tt>[% INCLUDE maybeEditString param="name" value=curProject.name %]</tt></td> </tr> [% END %] <tr> <th>Display name:</th> <td>[% INCLUDE maybeEditString param="displayname" value=curProject.displayname %]</td> </tr> <tr> <th>Description:</th> <td>[% INCLUDE maybeEditString param="description" value=curProject.description %]</td> </tr> </table> <h2>Jobsets</h2> [% IF curProject.jobsets && curProject.jobsets.size > 0 || edit %] [% IF edit %] <p><button id="add-jobset">Add a new jobset</button></p> <div id="jobset-template" class="template"> [% INCLUDE renderJobset jobset="" baseName="template" %] </div> <table class="template"> <!-- dummy wrapper needed because “hidden” trs are visible anyway --> [% INCLUDE renderInput input="" extraClass="template" id="input-template" baseName="input-template" %] </table> <tt id="inputalt-template" class="inputalt template"> <input type="text" class="string" /> <a href="javascript:" onclick='$(this).parents(".inputalt").remove()'>[X]</a> </tt> <script> $(document).ready(function() { var id = 0; $("#add-jobset").click(function() { var newid = "jobset-" + id++; var x = $("#jobset-template").clone(true).attr("id", newid).insertAfter($("#jobset-template")).slideDown("fast"); $("#jobset-template", x).attr("id", newid); $("#jobset-template-name", x).attr("name", newid + "-name"); $("#jobset-template-description", x).attr("name", newid + "-description"); $("#jobset-template-nixexprpath", x).attr("name", newid + "-nixexprpath"); $("#jobset-template-nixexprinput", x).attr("name", newid + "-nixexprinput"); return false; }); $(".add-input").click(function() { var jobset = $(this).parents(".jobset"); var inputid = jobset.attr("id"); var newid = inputid + "-input-" + id++; var x = $("#input-template").clone(true).attr("id", "").appendTo($(".inputs", jobset)).show(); $("#input-template-name", x).attr("name", newid + "-name"); $("#input-template-type", x).attr("name", newid + "-type"); $("#input-template", x).attr("id", newid); return false; }); $(".add-inputalt").click(function() { var x = $("#inputalt-template").clone(true).insertBefore($(this)).attr("id", "").show(); $("input", x).attr("name", x.parents(".inputalts").attr("id") + "-values"); }); }); </script> [% END %] [% FOREACH jobset IN curProject.jobsets -%] [% INCLUDE renderJobset jobset=jobset baseName=jobset.name %] [% END -%] [% ELSE %] <p>No jobsets have been defined yet.</p> [% END %] [% IF !edit %] <h2>Jobs</h2> [% IF jobName && jobNames.size > 0 %] <ul> [% FOREACH jobName IN jobNames -%] <li><a href="[% c.uri_for('/job' curProject.name jobName.attrname) %]"><tt>[% jobName.attrname %]</tt></a></li> [% END %] </ul> [% ELSE %] <p>No builds have been performed or scheduled.</p> [% END %] <h2>Statistics</h2> <table> <tr> <th>Finished builds:</th> <td>[% finishedBuilds %]</td> </tr> <tr> <th><img src="/static/images/success.gif" /> Succeeded builds:</th> <td>[% succeededBuilds %]</td> </tr> <tr> <th><img src="/static/images/failure.gif" /> Failed builds:</th> <td>[% finishedBuilds - succeededBuilds %]</td> </tr> <tr> <th>Total build time:</th> <td>[% totalBuildTime %]s</td> </tr> <tr> <th>Scheduled builds:</th> <td>[% scheduledBuilds %]</td> </tr> <tr> <th>Currently executing builds:</th> <td>[% busyBuilds %]</td> </tr> </table> [% END %] [% IF edit %] <hr /> <p><input type="submit" value="[% IF create %]Create[% ELSE %]Apply changes[% END %]" /></p> </form> [% IF !create %] <form action="[% c.uri_for('/project' curProject.name 'delete') %]" method="post"> <p><input id="delete-project" type="submit" value="Delete this project" /></p> </form> <script> $("#delete-project").click(function() { return confirm("Are you sure you want to delete this project?"); }); </script> [% END %] [% END %] [% END %]