First release
This commit is contained in:
@@ -10,19 +10,68 @@
|
||||
You should have received a copy of the GNU General Public License along with Inventory. If not, see <https://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<html>
|
||||
<head lang="en">
|
||||
<head lang="en">
|
||||
<meta name="author" content="Johannes Randerath" />
|
||||
<meta charset="utf-8" />
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<script src="https://unpkg.com/papaparse@latest/papaparse.min.js"></script>
|
||||
<title>Inventory - {% block pagename %}{% endblock pagename %}</title>
|
||||
<script>
|
||||
function create_table() {
|
||||
document.getElementById('create_table').submit().clear();
|
||||
document.getElementById('dynamic_columns').innerHTML = "";
|
||||
ncol = 1;
|
||||
}
|
||||
function set_modal_target(modal_target) {
|
||||
document.getElementById('modal_caller').innerHTML = modal_target;
|
||||
}
|
||||
function start_ajax(path, listener) {
|
||||
let req = new XMLHttpRequest();
|
||||
req.open('GET', path, true);
|
||||
req.send();
|
||||
req.onReadyStateChange = function() {
|
||||
if (req.readyState == XMLHttpRequest.DONE) {
|
||||
callback();
|
||||
}
|
||||
}
|
||||
}
|
||||
function import_table() {
|
||||
console.log("1");
|
||||
Papa.parse(document.getElementById('import_file').files[0], {
|
||||
complete: function process(result) {
|
||||
console.log("2");
|
||||
let csv = result.data;
|
||||
let req = new XMLHttpRequest();
|
||||
req.open("POST", "/table/import", true);
|
||||
req.responseType = 'blob';
|
||||
req.setRequestHeader('Content-Type', 'application/json');
|
||||
let cols = csv[0];
|
||||
let rows = csv.slice(1);
|
||||
if (rows[rows.length - 1].length != cols.length) {
|
||||
rows = rows.slice(0, rows.length-1);
|
||||
}
|
||||
req.send(JSON.stringify({
|
||||
name: document.getElementById('import_name').value,
|
||||
columns: cols,
|
||||
rows: rows,
|
||||
}));
|
||||
req.onload = function(resp) {
|
||||
if (this.readyState == 4) {
|
||||
window.location.href = req.responseURL;
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
{% block script %}{% endblock script %}
|
||||
</head>
|
||||
|
||||
<nav class='navbar navbar-expand-lg bg-body bg-body-tertiary'>
|
||||
<div class='container-fluid'>
|
||||
<a class='navbar-brand' href='#'>Inventory</a>
|
||||
<a class='navbar-brand' href='/'>Inventory</a>
|
||||
<button class='navbar-toggler' type='button' data-bs-toggle='collapse' data-bs-target='#navbarSupportedContent' aria-controls='navbarSupportedContent' aria-expanded='false' aria-label='Toggle navigation'>
|
||||
<span class='navbar-toggler-icon'></span>
|
||||
</button>
|
||||
@@ -32,6 +81,11 @@
|
||||
<a class='nav-link dropdown-toggle' role='button' data-bs-toggle='dropdown' aria-expanded='false'>
|
||||
Choose Table
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
{% for tid in tids %}
|
||||
<li class="dropdown-option"><a class="nav-link" href="/table/{{ tid }}">{{ tnames[loop.index0] }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" role="button" data-bs-toggle="modal" data-bs-target="#new_table">
|
||||
@@ -60,10 +114,10 @@
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="create-table" method="post">
|
||||
<form id="create_table" method="post" action="/table/create">
|
||||
<div class="mb-3">
|
||||
<label for="new_table_name" class="form-label">Name</label>
|
||||
<input type="text" class="form-control" id="name" aria-describedby="new_table_name_label">
|
||||
<input type="text" class="form-control" name="name" aria-describedby="new_table_name_label">
|
||||
<div id="new_table_name_label" class="form-text">Name of the new table</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
@@ -74,7 +128,7 @@
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<label for="fields" class="form-label">Column name</label>
|
||||
<input type="text" class="form-control" id="field_name" aria-describedby="field_name_label">
|
||||
<input type="text" class="form-control" id="field_name" aria-describedby="field_name_label" name="fields">
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<label for="field_name" class="form-label">Data type</label>
|
||||
@@ -89,12 +143,12 @@
|
||||
<div id="dynamic_columns">
|
||||
<!-- Columns added using plus button -->
|
||||
</div>
|
||||
</form>
|
||||
<div class="row justify-content-center mb-3 mt-3">
|
||||
<div class="col-auto">
|
||||
<button class="btn btn-primary" type="button" onclick="add_column()"><i class="bi bi-plus-lg"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-secondary" data-bs-dismiss="modal" type="button">Close</button>
|
||||
@@ -114,68 +168,23 @@
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form action="/table/import" method="post" id="form_import_table">
|
||||
<label for="import_name" class="form-label">Name</label>
|
||||
<input type="text" class="form-control" id="import_name" name="name">
|
||||
<label for="import_file" class="form-label">File</label>
|
||||
<input id="import_columns" name="columns" hidden>
|
||||
<input id="import_rows" name="rows" hidden>
|
||||
</form>
|
||||
<input type="file" class="form-control" id="import_file" name="name" accept="text/csv">
|
||||
</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">Import</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 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">
|
||||
</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">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>
|
||||
<button class="btn btn-primary" type="button" onclick="import_table();">Import</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% block more_modals %}{% endblock more_modals %}
|
||||
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
|
||||
@@ -1,36 +1,47 @@
|
||||
{# vim: set filetype=html: #}
|
||||
{% extends "base" %}
|
||||
{% block body %}
|
||||
<div class="accordion" id="my_tables">
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#first" aria-expanded="false" aria-controls="first">
|
||||
First
|
||||
</button>
|
||||
</h2>
|
||||
<div id="first" class="accordion-collapse collapse" data-bs-parent="#my_tables">
|
||||
<div class="accordion-body">
|
||||
<h3>Name of first table <a class="btn btn-primary" href="table.html">Open</a></h3>
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>name</th>
|
||||
<th>...</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>one</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="accordion" id="my_tables">
|
||||
{% for tname in tnames %}
|
||||
{% set clms = columns[loop.index0] %}
|
||||
{% set rws = rows[loop.index0] %}
|
||||
{% set tid = tids[loop.index0] %}
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#acc_{{ tid }}" aria-expanded="false" aria-controls="acc_{{ tid }}">
|
||||
{{ tname }}
|
||||
</button>
|
||||
</h2>
|
||||
<div id="acc_{{ tid }}" class="accordion-collapse collapse" data-bs-parent="#my_tables">
|
||||
<div class="accordion-body">
|
||||
<div class="row justify-content-between">
|
||||
<div class="col-auto"><h3>{{ tname }}</h3></div><div class="col-auto"><a class="btn btn-primary" href="/table/{{ tid }}">Open</a></div>
|
||||
</div>
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
{% for clm in clms %}
|
||||
<th>{{ clm }}</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for row in rws %}
|
||||
<tr>
|
||||
<td>{{ loop.index }}</td>
|
||||
{% for clm in clms %}
|
||||
<td>{{ row[loop.index0] }}</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% endblock body %}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
{% block script %}
|
||||
<script type="text/javascript">
|
||||
let ncol = 1;
|
||||
let edit_mode = false;
|
||||
let edit_mode = false;
|
||||
document.addEventListener("DOMContentLoaded", (event) => {
|
||||
for (let row of document.getElementById("content_table").getElementsByTagName('tbody')[0].rows) {
|
||||
let createClickHandler = function(r) {
|
||||
@@ -17,53 +17,81 @@
|
||||
}
|
||||
});
|
||||
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' 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 create_table() {
|
||||
let form = document.getElementById('create-table');
|
||||
form.submit();
|
||||
document.getElementById('dynamic_columns').innerHTML = "";
|
||||
ncol = 1;
|
||||
}
|
||||
function set_modal_target(modal_target) {
|
||||
document.getElementById('modal_caller').innerHTML = modal_target;
|
||||
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 = "<form><input type='text' class='form-control' id='tname_edit' value='{{ tname }}' /><button class='btn btn-success' type='submit'><i class='bi bi-check'></i></button></form>";
|
||||
edit_mode = true;
|
||||
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 {
|
||||
span.innerHTML = '{{ tname }}';
|
||||
edit_mode = false;
|
||||
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">{{ tname }}</span><button class="btn" type="button" onclick="toggle_edit_tname();"><i class="bi bi-pencil"></i></button></div></h1>
|
||||
<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>
|
||||
<div class="input-group">
|
||||
<div class="input-group-text dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="bi bi-search"></i>
|
||||
</div>
|
||||
<ul class="dropdown-menu">
|
||||
<select class="form-select" multiple>
|
||||
<li><option disabled class="dropdown-header">Search in</option></li>
|
||||
<li><option class="dropdown-item" value="1" selected>1</option></li>
|
||||
<li><option class="dropdown-item" value="2" selected>2</option></li>
|
||||
</select>
|
||||
</ul>
|
||||
<input type="text" placeholder="Search" class="form-control">
|
||||
</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>
|
||||
@@ -78,8 +106,17 @@
|
||||
</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>
|
||||
<button class="btn p-0" type="button" onclick="console.log('click');"><i class="bi bi-sort-down"></i></button>
|
||||
<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>
|
||||
@@ -92,8 +129,17 @@
|
||||
</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>
|
||||
<button class="btn p-0" type="button" onclick="console.log('click');"><i class="bi bi-sort-down"></i></button>
|
||||
<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>
|
||||
@@ -104,11 +150,84 @@
|
||||
<tbody>
|
||||
{% for row in rows %}
|
||||
<tr>
|
||||
{% for column in row %}
|
||||
<td>{{ column }}</td>
|
||||
{% endfor %}
|
||||
{% 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 %}
|
||||
|
||||
Reference in New Issue
Block a user