hydra/src/root/edit-project.tt
Cole Helbling ad13d13436
Project: add declfile, decltype, declvalue to API
This makes it possible to create declarative projects via a PUT request, and
also exposes the currently-configured values to GET requests.
2021-05-02 17:45:14 -07:00

112 lines
4 KiB
Plaintext

[% WRAPPER layout.tt title=(create ? "New project" : "Editing project $project.name") %]
[% PROCESS common.tt %]
<form>
<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 create || project.enabled %] checked="checked" [% END %]/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-3" for="editprojectvisible">Visible in projects list</label>
<div class="col-sm-9">
<input type="checkbox" id="editprojectvisible" name="visible" [% IF !project.hidden %] checked="checked" [% END %]/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-3" for="editprojectidentifier">Identifier</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="editprojectidentifier" name="name" [% HTML.attributes(value => project.name) %]/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-3" for="editprojectdisplayname">Display name</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="editprojectdisplayname" name="displayname" [% HTML.attributes(value => project.displayname) %]/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-3" for="editprojectdescription">Description</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="editprojectdescription" name="description" [% HTML.attributes(value => project.description) %]/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-3" for="editprojecthomepage">Homepage</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="editprojecthomepage" name="homepage" [% HTML.attributes(value => project.homepage) %]/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-3" for="editprojectowner">Owner</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="editprojectowner" name="owner" [% HTML.attributes(value => project.owner.username || c.user.username) %]/>
</div>
</div>
<div class="form-group row">
<label class="col-sm-3" for="editprojectdeclfile">
Declarative spec file
<small class="form-text text-muted">(Leave blank for non-declarative project configuration)</small>
</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="editprojectdeclfile" name="declfile" [% HTML.attributes(value => project.declfile) %]/>
</div>
</div>
<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) %]/>
</div>
</div>
<button id="submit-project" type="submit" class="btn btn-primary">
<i class="fas fa-check"></i>
[%IF create %]Create project[% ELSE %]Apply changes[% END %]
</button>
</form>
<script type="text/javascript">
$("#submit-project").click(function() {
var formElements = $(this).parents("form").serializeArray();
var data = { 'declarative': {} };
var decl = {};
for (var i = 0; formElements.length > i; i++) {
var elem = formElements[i];
var match = elem.name.match(/^decl(file|type|value)$/);
if (match === null) {
data[elem.name] = elem.value;
} else {
var param = match[1];
decl[param] = elem.value;
}
}
data.declarative = decl;
redirectJSON({
[% IF create %]
url: "[% c.uri_for('/project' '.new') %]",
[% ELSE %]
url: "[% c.uri_for('/project' project.name) %]",
[% END %]
data: JSON.stringify(data),
contentType: 'application/json',
type: 'PUT'
});
return false;
});
</script>
[% END %]