<!--
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>Please enter your task information:</h1>

<form method="POST" action="{% url 'exp_portal:new_task' %}">
	<div class="form-group">
		<label for="id_task_name">Task Name</label>
		<input class="form-control" name="task_name" id="id_task_name" placeholder='Enter the 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" placeholder='Enter the task 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" placeholder='Select 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" placeholder='Enter the exit survey 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" placeholder='Enter the url for the task instructions' required/>
	</div>
	<div class="checkbox">
		<label>
			<input type="checkbox" name="is_active" id="id_is_active" {% if task.is_active %}checked{% endif %}/>Active
		</label>
	</div>

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

{% endblock %}