<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
{% extends "experimentpage.html" %}

{% block content %}

<h1>Dataset details for {{dataset.name}}</h1>

<form method="POST" action="{% url 'exp_portal:edit_dataset' datasetpk=dataset.id %}">
	<div class="form-group">
		<label for="id_dataset_name">Dataset Name</label>
		<input class="form-control" name="dataset_name" id='id_product_name' value="{{ dataset.name }}" size="60" required/>
	</div>
	<div class="form-group">
		<label for="id_version">Version</label>
		<input class="form-control" name="dataset_version" id="id_dataset_version" value="{{ dataset.version }}" required/>
	</div>
	<div class="checkbox">
		<label>
			<input type="checkbox" name="dataset_active" id="id_dataset_active" {% if dataset.is_active %}checked{% endif %}/>Active
		</label>
	</div>
	<button class="btn btn-primary" type="submit">Save Changes</button>
	{% csrf_token %}
</form>

{% endblock %}