Inventur/templates/table.html.tera
Johannes Randerath c06ddc9498 First release
2024-08-27 18:25:04 +02:00

234 lines
8.7 KiB
HTML

{# vim: set filetype=html: #}
{% extends "base" %}
{% block pagename %}Table{% endblock pagename %}
{% block script %}
<script type="text/javascript">
let ncol = 1;
let edit_mode = false;
document.addEventListener("DOMContentLoaded", (event) => {
for (let row of document.getElementById("content_table").getElementsByTagName('tbody')[0].rows) {
let createClickHandler = function(r) {
return function() {
$('#edit_item').modal('show');
};
};
row.onclick = createClickHandler(row);
}
});
function add_column() {
ncol += 1;
document.getElementById('dynamic_columns').innerHTML += `
<div class='row mt-3' id='columns'>
<div class='col-auto align-bottom'>
<div class='form-text me-1' id='field_index'>
<strong>${ncol}</strong>
</div>
</div>
<div class='col-auto'>
<input type='text' class='form-control' name='fields' id='field_name' aria-describedby='field_name_label'>
</div>
<div class='col-auto'>
<select class='form-select' aria-label='data type'>
<option value='text' selected>Text</option>
<option value='number'>Number</option>
<option value='date'>Date</option>
</select>
</div>
</div>`;
}
function toggle_edit_tname() {
let span = document.getElementById('tname');
if (!edit_mode) {
span.innerHTML = `
<div class='row'>
<div class='col-auto ml-1 p-2'>
<form id='form_edit_tname' action='/table/name/edit' method='post'>
<input name='tblid' value='{{ tblid }}' hidden />
<input type='text' class='form-control' id='tname_edit' name='new_name' value='{{ tblname }}' />
</form>
</div>
<div class='col-auto mt-0 pt-0 pr-1'>
<button class='btn btn-success' type='button' onclick='toggle_edit_tname()'>
<i class='bi bi-check'></i>
</button>
</div>
</div>`;
edit_mode = true;
} else {
document.getElementById('form_edit_tname').submit().clear();
span.innerHTML = '{{ tblname }}';
edit_mode = false;
}
}
function add_entry() {
document.getElementById('form_add_entry').submit().clear();
}
</script>
{% endblock script %}
{% block body %}
<div class="row justify-content-between">
<div class="col-auto">
<h1><div class='input-group'><span id="tname">{{ tblname }}</span><button class="btn" type="button" onclick="toggle_edit_tname();"><i class="bi bi-pencil"></i></button></div></h1>
</div>
<div class="col-auto">
<div class="btn-toolbar mt-2" role="toolbar">
<div class="btn-group me-2">
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#new_item"><i class="bi bi-plus-lg"></i></button>
</div>
<form method="get" action="/table/{{ tblid }}">
<div class="input-group">
<div class="input-group-text dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="bi bi-table"></i>
</div>
<input id="input_search_value" name="search_value" type="text" placeholder="Search" value="{{ search_value }}" class="form-control">
<button class="btn btn-outline-primary" type="submit"><i class="bi bi-search"></i></button>
<ul class="dropdown-menu">
<select name="search_fields" class="form-select" multiple>
<li><option disabled class="dropdown-header">Search in</option></li>
{% for column in columns %}
<li><option class="dropdown-option" value="{{ loop.index - 1 }}" {% if (loop.index - 1) in search_fields %}selected{% endif %}>{{ column }}</option></li>
{% endfor %}
</select>
</ul>
</div>
</div>
</div>
</div>
<br>
<table id="content_table" class="table table-striped table-hover table-responsive table-bordered mt-2">
<thead>
<tr>
<th style="width:7%">
<div class="row justify-content-between">
<div class="col-auto">
#
</div>
<div class="col-auto">
<div class="btn-toolbar">
<button class="btn p-0 me-2 mdl" type="button" data-bs-toggle="modal" data-bs-target="#filter"><i class="bi bi-filter"></i></button>
<form method="GET" action="/table/{{ tblid }}">
<input value="0" name="sort_field" hidden />
<input value="{% if sort_field == 0 %}{{ (sort_dir + 1) % 2}}{% else %}0{% endif %}" name="sort_dir" hidden />
{% if sort_field == 0 and sort_dir == 0 %}
{% set dir='up' %}
{% else %}
{% set dir='down' %}
{% endif %}
<button class="btn p-0" type="submit"><i class="bi bi-sort-{{ dir }}"></i></button>
</form>
</div>
</div>
</div>
</th>
{% for column in columns %}
<th>
<div class="row justify-content-between">
<div class="col-auto">
{{ column }}
</div>
<div class="col-auto">
<div class="btn-toolbar">
<button class="btn p-0 me-2" type="button" data-bs-toggle="modal" data-bs-target="#filter" onclick="set_modal_target('{{ column }}');"><i class="bi bi-filter"></i></button>
<form method="GET" action="/table/{{ tblid }}">
<input value="{{ loop.index }}" name="sort_field" hidden />
<input value="{% if sort_field == loop.index %}{{ (sort_dir + 1) % 2}}{% else %}0{% endif %}" name="sort_dir" hidden />
{% if sort_field == loop.index and sort_dir == 0 %}
{% set dir='up' %}
{% else %}
{% set dir='down'%}
{% endif %}
<button class="btn p-0" type="submit"><i class="bi bi-sort-{{ dir }}"></i></button>
</form>
</div>
</div>
</div>
</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for row in rows %}
<tr>
{% for column in row %}
<td>{{ column }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock body %}
{% block more_modals %}
<!-- Add new item -->
<div class="modal fade" id="new_item" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5">Add entry</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<h5>Cell values:</h5>
<br>
<form id="form_add_entry" action="/entry/new" method="post">
<input name="tblid" value="{{ tblid }}" hidden />
{% for column in columns %}
<div class="mb-3">
<div class="row">
<div class="col-auto">
<label for="entry_value_{{ column }}" class="form-label" >{{ column }}:</label>
</div>
<div class="col-auto">
<input type="text" class="form-control" name="cells" id="entry_value_{{column}}" />
</div>
</div>
</div>
{% endfor %}
</form>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-bs-dismiss="modal" type="button">Close</button>
<button class="btn btn-primary" type="button" onclick="add_entry()">Add</button>
</div>
</div>
</div>
</div>
<!-- Edit item -->
<div class="modal fade" id="edit_item" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5">Edit entry</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-bs-dismiss="modal" type="button">Close</button>
<button class="btn btn-primary" type="button">Save</button>
</div>
</div>
</div>
</div>
<!-- Filter column -->
<div class="modal fade" id="filter" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5">Edit filter on <span id="modal_caller"></span></h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-bs-dismiss="modal" type="button">Close</button>
<button class="btn btn-primary" type="button">Filter</button>
</div>
</div>
</div>
</div>
{% endblock more_modals %}