<!--
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>Task details for {{ task.name }}</h1>

<form method="POST" action="{% url 'exp_portal:edit_task' taskpk=task.id %}">
	<div class="form-group">
		<label for="id_task_name">Task Name</label>
		<input class="form-control" name="task_name" id="id_task_name" value="{{task.name}}" size="60" required/>
	</div>
	<div class="form-group">
		<label for="id_task_url">Task URL</label>
		<input class="form-control" name="task_url" id="id_task_url" value="{{task.survey_url}}" size="60" required/>
	</div>
	<div class="form-group">
		<label for="id_task_dataset">Challenge Problem</label>
		<select class="form-control" name="task_dataset" id="id_task_dataset" required>
			{% for dataset in datasets %}
			<option value="{{dataset.name}}">{{dataset.name}}</option>
			{% endfor %}
		</select>
	</div>
	<div class="form-group">
		<label for="id_task_exit_url">Task Exit Survey URL</label>
		<input class="form-control" name="task_exit_url" id="id_task_exit_url" value="{{task.exit_url}}" required/>
	</div>
	<div class="form-group">
		<label for="id_task_instructions">Task Instructions</label>
		<input class="form-control" name="task_instructions" id="id_task_instructions" value="{{task.instructions}}" required/>
	</div>
	<div class="checkbox">
		<label>
			<input type="checkbox" name="task_active" id="id_task_active" {% if task.is_active %}checked{% endif %}/>Active
		</label>
	</div>

	<input class="btn btn-primary" type="submit">Save Changes</button>
	{% csrf_token %}
</form>


<script>
	document.getElementById("id_task_dataset").value = "{{task.dataset.name}}";
</script>

{% endblock %}