{% extends "bases/bootstrap-with-nav.html" %} {% load staticfiles %} {% load bootstrap3 %} {% block content %} <!-- The following UI was ported from the Election Authority UI in DEMOS1 by Vincent de Almeida --> <!-- The DEMOS1 repository can be found at: https://github.com/mlevogiannis/demos-voting --> <!-- TODO: look into i18n translations as this was a feature implemented in DEMOS1 --> <hr/> <div class="container"> <div class="page-header"> <h2>Create New Event with Polls</h2> </div> <div class="row"> <div class="col-xs-12"> <form id="election-form" class="form-horizontal" method="POST" novalidate> {% csrf_token %} <!-- TODO: Have not imported the if form not valid template code as this needs further investigating --> <!-- Name --> <div class="form-group"> <!-- Excluded class(missing %s): { if election_form.name.errors }has-error{ endif } --> <label for="name-input" class="col-sm-3 col-md-2 control-label">Name:</label> <!-- This text can be a template variable --> <div class="col-sm-9 col-md-10"> <input type="text" class="form-control" id="name-input" placeholder="Example: My poll" name="name-input" maxlength="255"> <span id="name-input-help-block" class="help-block"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> A short and clear name. <!-- TODO: Alignment is potentially slightly too much to the left --> </span> </div> </div> <!-- Slug / Identifier --> <div class="form-group"> <!-- Excluded class(missing %s): { if election_form.slug.errors }has-error{ endif } --> <label for="identifier-input" class="col-sm-3 col-md-2 control-label">Identifier:</label> <!-- This text can be a template variable --> <div class="col-sm-9 col-md-10"> <input type="text" class="form-control" id="identifier-input" placeholder="Example: My-poll" name="identifier-input" maxlength="255"> <span id="identifier-input-help-block" class="help-block"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> Used in the election URL, it must only consist of letters, numbers, underscores or hyphens; no whitespace is permitted. <!-- TODO: Alignment is potentially slightly too much to the left --> </span> </div> </div> <!-- Voting start time --> <div class="form-group "> <!-- Excluded class(missing %s): { if election_form.voting_starts_at.errors }has-error{ endif } --> <label for="vote-start-input" class="col-sm-3 col-md-2 control-label">Voting starts at:</label> <div class="col-sm-9 col-md-10"> <div class="input-group date"> <input type="text" class="form-control" data-date-format="YYYY-MM-DD H:mm" id="vote-start-input" name="vote-start-input"> <span class="input-group-addon btn"> <i class="fa fa-calendar" aria-hidden="true"></i> / <i class="fa fa-clock-o" aria-hidden="true"></i> </span> </div> <span id="vote-start-input-help-block" class="help-block"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> Date and time when registered voters can commence voting. </span> </div> </div> <!-- Voting end time --> <div class="form-group "> <!-- Excluded class(missing %s): { if election_form.voting_ends_at.errors }has-error{ endif } --> <label for="vote-end-input" class="col-sm-3 col-md-2 control-label">Voting ends at:</label> <div class="col-sm-9 col-md-10"> <div class="input-group date"> <input type="text" class="form-control" data-date-format="YYYY-MM-DD H:mm" id="vote-end-input" name="vote-end-input"> <span class="input-group-addon btn"> <i class="fa fa-calendar" aria-hidden="true"></i> / <i class="fa fa-clock-o" aria-hidden="true"></i> </span> </div> <span id="vote-end-input-help-block" class="help-block"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> Date and time when registered voters can no longer vote. </span> </div> </div> <!-- Question / Statement --> <div class="form-group"> <label for="question-input" class="col-sm-3 col-md-2 control-label">Question / Statement:</label> <!-- This text can be a template variable --> <div class="col-sm-9 col-md-10"> <input type="text" class="form-control" id="question-input" placeholder="Example: Elections for the European Parliament" name="question-input" maxlength="200"> <span id="question-input-help-block" class="help-block"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> Question / Statement that will be put forward to voters along with the below options. <!-- TODO: Alignment is potentially slightly too much to the left --> </span> </div> </div> <!-- Options --> <div class="form-group"> <label for="options-input" class="col-sm-3 col-md-2 control-label">Options:</label> <!-- This text can be a template variable --> <div class="col-sm-9 col-md-10"> <div class="form-group"> <!-- Excluded class(missing %s): { if option_formset.non_form_errors }has-error{ endif }--> <table id="options-input-table" class="table table-hover"> <thead> <tr> <th class="text-center">#</th> <th>Option</th> <th class="text-center">Actions</th> <!--Not sure what this does so disabling it: <th class="hidden">{ option_formset.management_form }</th> --> </tr> </thead> <tbody id="sort" class="formset option-formset" data-formset-prefix="questions" data-formset-type="inline"> <!-- Option --> <tr class="formset-form sorting-row" data-formset-form-prefix="question"> <!-- # --> <th class="formset-form-index text-center" scope=row> 1 </th> <!-- Option Label --> <td> <div> <!-- Has error conditional class removed --> <!-- TODO: Add an invisible screen reader label to associate with this and other inputs --> <input type="text" class="form-control input-sm" placeholder="Example: Candidate 1" id="option-name-input" name="option-name-input" maxlength="200"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> </div> </td> <!-- Delete Action --> <td class="formset-form-actions text-center"> <button type="button" class="btn btn-sm btn-default formset-form-remove" aria-label="Remove"> <i class="fa fa-trash-o" aria-hidden="true"></i> </button> </td> </tr> <!-- Option --> <tr class="formset-form sorting-row" data-formset-form-prefix="question"> <!-- # --> <th class="formset-form-index text-center" scope=row> 2 </th> <!-- Option Label --> <td> <div> <!-- Has error conditional class removed --> <!-- TODO: Add an invisible screen reader label to associate with this and other inputs --> <input type="text" class="form-control input-sm" placeholder="Example: Candidate 2" id="option-name-input" name="option-name-input" maxlength="200"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> </div> </td> <!-- Delete Action --> <td class="formset-form-actions text-center"> <button type="button" class="btn btn-sm btn-default formset-form-remove" aria-label="Remove"> <i class="fa fa-trash-o" aria-hidden="true"></i> </button> </td> </tr> <!-- Option --> <tr class="formset-form sorting-row formset-form-empty hidden" data-formset-form-prefix="question"> <!-- # --> <th class="formset-form-index text-center" scope=row> X </th> <!-- Option Label --> <td> <div> <!-- Has error conditional class removed --> <!-- TODO: Add an invisible screen reader label to associate with this and other inputs --> <input type="text" class="form-control input-sm" placeholder="Example: Candidate X" id="option-name-input" name="option-name-input" maxlength="200"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> </div> </td> <!-- Delete Action --> <td class="formset-form-actions text-center"> <button type="button" class="btn btn-sm btn-default formset-form-remove" aria-label="Remove"> <i class="fa fa-trash-o" aria-hidden="true"></i> </button> </td> </tr> </tbody> </table> <div class="clearfix"> <button type="button" class="btn btn-primary formset-add" data-formset-prefix="questions"> <i class="fa fa-plus-circle" aria-hidden="true"></i> Add Question Option </button> </div> <span id="question-input-help-block" class="help-block"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> Drag and drop to re-order options. </span> </div> </div> </div> <!-- Number of option selections --> <div class="form-group"> <label for="selections-input" class="col-sm-3 col-md-2 control-label">Number of Selections:</label> <!-- This text can be a template variable --> <div class="col-sm-9 col-md-10"> <div class="row"> <div class="col-xs-6"> <label class="sr-only" for="minimum-input">Minimum</label> <input type="number" class="form-control" id="minimum-input" placeholder="Minimum" value="" name="minimum-input" min="0"> <!-- TODO: Max should be set to the number of options --> <!-- Error handling / input validation has been removed temporarily and would be placed here --> </div> <div class="col-xs-6"> <label class="sr-only" for="maximum-input">Maximum</label> <input type="number" class="form-control" id="maximum-input" placeholder="Maximum" value="" name="maximum-input" min="1"> <!-- TODO: Max should be set to the number of options --> <!-- Error handling / input validation has been removed temporarily and would be placed here --> </div> </div> <span id="question-input-help-block" class="help-block"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> Minimum and maximum number of option selections that a voter can make for the specified question / statement. <!-- TODO: Alignment is potentially slightly too much to the left --> </span> </div> </div> <!-- Organisers --> <div class="form-group"> <label for="organisers-input" class="col-sm-3 col-md-2 control-label">Organisers:</label> <!-- This text can be a template variable --> <div class="col-sm-9 col-md-10"> <div class="form-group"> <table id="organisers-input-table" class="table table-hover"> <thead> <tr> <th class="text-center">#</th> <th>Email</th> <th class="text-center">Actions</th> <!--Not sure what this does so disabling it: <th class="hidden">{ option_formset.management_form }</th> --> </tr> </thead> <tbody class="formset organiser-formset" data-formset-prefix="organisers" data-formset-type="inline"> <!-- Organiser --> <tr class="formset-form sorting-row" data-formset-form-prefix="organiser"> <th class="formset-form-index text-center" scope=row> <!-- # --> 1 </th> <td> <!-- Email --> <div> <!-- Has error conditional class removed --> <!-- TODO: Add an invisible screen reader label to associate with this and other inputs --> <input type="text" class="form-control input-sm" placeholder="Example: organiser@example.com" id="organiser-email-input" name="organiser-email-input" value="{{ user_email }}" maxlength="255"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> </div> </td> <td class="formset-form-actions text-center"> <!-- Action --> <button type="button" class="btn btn-sm btn-default formset-form-remove" aria-label="Remove"> <i class="fa fa-trash-o" aria-hidden="true"></i> </button> </td> </tr> <!-- Organiser --> <tr class="formset-form sorting-row" data-formset-form-prefix="question"> <th class="formset-form-index text-center" scope=row> <!-- # --> 2 </th> <td> <!-- Email --> <div> <!-- Has error conditional class removed --> <!-- TODO: Add an invisible screen reader label to associate with this and other inputs --> <input type="text" class="form-control input-sm" placeholder="Example: organiser@example.com" id="organiser-email-input" name="organiser-email-input" maxlength="255"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> </div> </td> <td class="formset-form-actions text-center"> <button type="button" class="btn btn-sm btn-default formset-form-remove" aria-label="Remove"> <i class="fa fa-trash-o" aria-hidden="true"></i> </button> </td> </tr> <!-- Organiser --> <tr class="formset-form sorting-row formset-form-empty hidden" data-formset-form-prefix="question"> <th class="formset-form-index text-center" scope=row> <!-- # --> X </th> <td> <!-- Email --> <div> <!-- Has error conditional class removed --> <!-- TODO: Add an invisible screen reader label to associate with this and other inputs --> <input type="text" class="form-control input-sm" placeholder="Example: organiser@example.com" id="organiser-email-input" name="organiser-email-input" maxlength="255"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> </div> </td> <td class="formset-form-actions text-center"> <button type="button" class="btn btn-sm btn-default formset-form-remove" aria-label="Remove"> <i class="fa fa-trash-o" aria-hidden="true"></i> </button> </td> </tr> </tbody> </table> <div class="clearfix"> <button type="button" class="btn btn-primary formset-add" data-formset-prefix="organisers"> <i class="fa fa-plus-circle" aria-hidden="true"></i> Add Organiser Email </button> </div> <span id="question-input-help-block" class="help-block"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> Drag and drop to re-order emails. </span> </div> </div> </div> <!-- Trustees --> <div class="form-group"> <label for="trustees-input" class="col-sm-3 col-md-2 control-label">Trustees:</label> <!-- This text can be a template variable --> <div class="col-sm-9 col-md-10"> <div class="form-group"> <table id="trustees-input-table" class="table table-hover"> <thead> <tr> <th class="text-center">#</th> <th>Email</th> <th class="text-center">Actions</th> <!--Not sure what this does so disabling it: <th class="hidden">{ option_formset.management_form }</th> --> </tr> </thead> <tbody class="formset trustee-formset" data-formset-prefix="trustees" data-formset-type="inline"> <!-- Trustee --> <tr class="formset-form sorting-row" data-formset-form-prefix="trustee"> <th class="formset-form-index text-center" scope=row> <!-- # --> 1 </th> <td> <!-- Email --> <div> <!-- Has error conditional class removed --> <!-- TODO: Add an invisible screen reader label to associate with this and other inputs --> <input type="text" class="form-control input-sm" placeholder="Example: trustee@example.com" id="trustee-email-input" name="trustee-email-input" value="{{ user_email }}" maxlength="255"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> </div> </td> <td class="formset-form-actions text-center"> <!-- Action --> <button type="button" class="btn btn-sm btn-default formset-form-remove" aria-label="Remove"> <i class="fa fa-trash-o" aria-hidden="true"></i> </button> </td> </tr> <!-- Trustee --> <tr class="formset-form sorting-row" data-formset-form-prefix="trustee"> <th class="formset-form-index text-center" scope=row> <!-- # --> 2 </th> <td> <!-- Email --> <div> <!-- Has error conditional class removed --> <!-- TODO: Add an invisible screen reader label to associate with this and other inputs --> <input type="text" class="form-control input-sm" placeholder="Example: trustee@example.com" id="trustee-email-input" name="trustee-email-input" maxlength="255"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> </div> </td> <td class="formset-form-actions text-center"> <button type="button" class="btn btn-sm btn-default formset-form-remove" aria-label="Remove"> <i class="fa fa-trash-o" aria-hidden="true"></i> </button> </td> </tr> <!-- Trustee --> <tr class="formset-form sorting-row formset-form-empty hidden" data-formset-form-prefix="trustee"> <th class="formset-form-index text-center" scope=row> <!-- # --> X </th> <td> <!-- Email --> <div> <!-- Has error conditional class removed --> <!-- TODO: Add an invisible screen reader label to associate with this and other inputs --> <input type="text" class="form-control input-sm" placeholder="Example: trustee@example.com" id="trustee-email-input" name="trustee-email-input" maxlength="255"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> </div> </td> <td class="formset-form-actions text-center"> <button type="button" class="btn btn-sm btn-default formset-form-remove" aria-label="Remove"> <i class="fa fa-trash-o" aria-hidden="true"></i> </button> </td> </tr> </tbody> </table> <div class="clearfix"> <button type="button" class="btn btn-primary formset-add" data-formset-prefix="trustees"> <i class="fa fa-plus-circle" aria-hidden="true"></i> Add Trustee Email </button> </div> <span id="question-input-help-block" class="help-block"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> Drag and drop to re-order emails. </span> </div> </div> </div> <!-- Voters List --> <div class="form-group"> <label for="voters-list-input" class="col-sm-3 col-md-2 control-label">Voters List:</label> <!-- This text can be a template variable --> <div class="col-sm-9 col-md-10"> <textarea class="form-control" id="voters-list-input" placeholder="alice@example.com, bob@example.com..." name="voters-list-input" rows="4"></textarea> <span id="voters-list-input-help-block" class="help-block"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> Manually enter email addresses separated with commas. Alternatively, you can also upload a CSV file: <!-- TODO: Alignment is potentially slightly too much to the left --> </span> <label for="files" class="btn btn-primary"> Upload CSV </label> <input type="file" id="files" name="file" class="btn-info"> <h4 id="result" class="hidden"></h4> </div> </div> <!-- reCAPTCHA --> <div class="form-group"> <label for="recaptcha-input" class="col-sm-3 col-md-2 control-label">reCAPTCHA:</label> <!-- This text can be a template variable --> <div class="col-sm-9 col-md-10"> <div class="g-recaptcha" data-callback="recaptchaCallback" data-sitekey="{{ G_R_SITE_KEY }}"></div> <!-- Need to finish server implementation and import key from settings --> <span id="recaptcha-input-help-block" class="help-block"> <!-- Error handling / input validation has been removed temporarily and would be placed here --> Tick the box to prove that you're not a robot. <!-- TODO: Alignment is potentially slightly too much to the left --> </span> </div> </div> <hr> <input class="btn btn-success" type="submit" value="Create Event" id="submit-event-create" disabled/> <input class="btn btn-danger" type="button" value="Cancel" onclick="location.href='{% url 'polls:index' %}'" /> </form> </div> </div> </div> {% endblock %}