summaryrefslogtreecommitdiff
path: root/ishtar_common/templates
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/templates')
-rw-r--r--ishtar_common/templates/actions.html26
-rw-r--r--ishtar_common/templates/base.html139
-rw-r--r--ishtar_common/templates/blocks/DataTables.html287
-rw-r--r--ishtar_common/templates/blocks/JQueryJqGrid.html38
-rw-r--r--ishtar_common/templates/blocks/action_list.html12
-rw-r--r--ishtar_common/templates/blocks/bs_form_snippet.html90
-rw-r--r--ishtar_common/templates/blocks/table_form_snippet.html (renamed from ishtar_common/templates/blocks/form_snippet.html)0
-rw-r--r--ishtar_common/templates/ishtar/blocks/sheet_creation_section.html22
-rw-r--r--ishtar_common/templates/ishtar/blocks/sheet_json.html6
-rw-r--r--ishtar_common/templates/ishtar/blocks/shortcut_menu.html75
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_field.html7
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_field_flex.html6
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_field_flex_detail.html6
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_field_flex_full.html6
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_field_flex_multiple.html8
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_field_flex_url.html7
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_nav.html106
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_tables/dynamic_documents.html95
-rw-r--r--ishtar_common/templates/ishtar/blocks/wizard_breadcrumb.html21
-rw-r--r--ishtar_common/templates/ishtar/sheet.html136
-rw-r--r--ishtar_common/templates/ishtar/wizard/confirm_wizard.html11
-rw-r--r--ishtar_common/templates/ishtar/wizard/default_wizard.html22
-rw-r--r--ishtar_common/templates/ishtar/wizard/search.html18
-rw-r--r--ishtar_common/templates/ishtar/wizard/validation_bar.html24
-rw-r--r--ishtar_common/templates/navbar.html59
-rw-r--r--ishtar_common/templates/registration/login.html52
-rw-r--r--ishtar_common/templates/sheet_ope.html146
-rw-r--r--ishtar_common/templates/welcome.html26
28 files changed, 978 insertions, 473 deletions
diff --git a/ishtar_common/templates/actions.html b/ishtar_common/templates/actions.html
new file mode 100644
index 000000000..bd70ddf15
--- /dev/null
+++ b/ishtar_common/templates/actions.html
@@ -0,0 +1,26 @@
+<ul class="navbar-nav action-menu justify-content-start">
+ {% with MENU.current_section as section_label %}
+ {% with MENU.current_sections as sections %}
+ {% include "blocks/action_list.html" %}
+ {% endwith %}{% endwith %}
+
+ {% if MENU.current_subsections %}
+ <li class="nav-item d-none d-lg-block">
+ <span class="nav-link">&gt;</span>
+ </li>
+ {% with MENU.current_subsection as section_label %}
+ {% with MENU.current_subsections as sections %}
+ {% include "blocks/action_list.html" %}
+ {% endwith %}{% endwith %}
+ {% endif %}
+
+ {% if MENU.current_subsubsections %}
+ <li class="nav-item d-none d-lg-block">
+ <span class="nav-link">&gt;</span>
+ </li>
+ {% with MENU.current_subsubsection as section_label %}
+ {% with MENU.current_subsubsections as sections %}
+ {% include "blocks/action_list.html" %}
+ {% endwith %}{% endwith %}
+ {% endif %}
+</ul>
diff --git a/ishtar_common/templates/base.html b/ishtar_common/templates/base.html
index 75e0e3740..783b1c599 100644
--- a/ishtar_common/templates/base.html
+++ b/ishtar_common/templates/base.html
@@ -1,35 +1,27 @@
-{% load i18n %}<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{LANGUAGE_CODE}}" lang="{{LANGUAGE_CODE}}">
-
+{% load i18n compress %}<!doctype html>
+<html lang="{{LANGUAGE_CODE}}">
<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="shortcut icon" href="{{STATIC_URL}}/media/images/favicon.png"/>
- <title>{% block title %}Ishtar{% if APP_NAME %} - {{APP_NAME}}{%endif%}{% endblock %}
- </title>
+ <title>{% block title %}Ishtar{% if APP_NAME %} - {{APP_NAME}}{%endif%}{% endblock %}</title>
+ {% compress js %}
<script language="javascript" type="text/javascript">
var url_path = "{{URL_PATH}}";
</script>
<script language="javascript" type="text/javascript" src="{{JQUERY_URL}}?ver={{VERSION}}"></script>
+ <script language="javascript" type="text/javascript" src="{{STATIC_URL}}popper.min.js?ver={{VERSION}}"></script>
+ <script language="javascript" type="text/javascript" src="{{STATIC_URL}}bootstrap/bootstrap.js?ver={{VERSION}}"></script>
<script language="javascript" type="text/javascript" src="{{JQUERY_UI_URL}}jquery-ui.js?ver={{VERSION}}"></script>
<script language="javascript" type="text/javascript" src="{{JQUERY_UI_URL}}ui/i18n/jquery.ui.datepicker-{{COUNTRY}}.js?ver={{VERSION}}"></script>
<script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/chosen/chosen.jquery.min.js?ver={{VERSION}}"></script>
- <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/prettyPhoto/js/jquery.prettyPhoto.js?ver={{VERSION}}"></script>
- <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/i18n/grid.locale-{{COUNTRY}}.js?ver={{VERSION}}"></script>
- <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/jquery.jqGrid.min.js?ver={{VERSION}}"></script>
- <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/grid.tbltogrid.js?ver={{VERSION}}"></script>
+ {# <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/prettyPhoto/js/jquery.prettyPhoto.js?ver={{VERSION}}"></script> #}
+ <script language="javascript" type="text/javascript"
+ src="{{STATIC_URL}}datatables/datatables.min.js?ver={{VERSION}}"></script>
+ <script language="javascript" type="text/javascript" src="{{STATIC_URL}}datatables/dataTables.bootstrap4.min.js?ver={{VERSION}}"></script>
<script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/ishtar.js?ver={{VERSION}}"></script>
- <link type="text/css" href="{{JQUERY_UI_URL}}jquery-ui.css?ver={{VERSION}}" rel="stylesheet" />
- <link type="text/css" href="{{STATIC_URL}}js/chosen/chosen.min.css?ver={{VERSION}}" rel="stylesheet" />
- <link rel="stylesheet" href="{{STATIC_URL}}font-awesome/css/font-awesome.min.css?ver={{VERSION}}" />
- <link rel="stylesheet" href="{{STATIC_URL}}js/prettyPhoto/css/prettyPhoto.css?ver={{VERSION}}" />
- <link rel="stylesheet" href="{{STATIC_URL}}media/ui.jqgrid.css?ver={{VERSION}}" />
- <link rel="stylesheet" href="{{STATIC_URL}}media/style.css?ver={{VERSION}}" />
- {% for url_css in JQGRID_CSS %}<link rel="stylesheet" href="{{url_css}}?ver={{VERSION}}" />{% endfor %}
- {% include "blocks/extra_head.html" %}
- {% block extra_head %}
- {% endblock %}
- {% if raw_css %}<style media="screen" type="text/css">{{raw_css|safe}}
- </style>{% endif %}
+ <script language="javascript" type="text/javascript"
+ src="{{STATIC_URL}}datatables/i18n/{{LANGUAGE_CODE}}.js?ver={{VERSION}}"></script>
<script type='text/javascript'>
var shortcut_url = '{% url "shortcut-menu" %}';
var get_file_url = '{% url "get-file-shortcut" %}';
@@ -41,79 +33,50 @@
var activate_all_search_msg = "{% trans 'Searches in the shortcut menu deal with all items.' %}";
var activate_own_search_msg = "{% trans 'Searches in the shortcut menu deal with only your items.' %}";
</script>
+ {% endcompress %}
+ {% compress css %}
+ <link rel="stylesheet" href="{{STATIC_URL}}bootstrap/bootstrap.css?ver={{VERSION}}">
+ <link rel="stylesheet" href="{{STATIC_URL}}js/chosen/chosen.min.css?ver={{VERSION}}">
+ <link rel="stylesheet" href="{{STATIC_URL}}font-awesome/css/font-awesome.min.css?ver={{VERSION}}">
+ <link rel="stylesheet" href="{{STATIC_URL}}js/prettyPhoto/css/prettyPhoto.css?ver={{VERSION}}">
+ <link rel="stylesheet"
+ href="{{STATIC_URL}}datatables/datatables.min.css?ver={{VERSION}}">
+ <link rel="stylesheet" href="{{STATIC_URL}}datatables/dataTables.bootstrap4.min.css?ver={{VERSION}}">
+ <link rel="stylesheet" href="{{STATIC_URL}}media/styles.css?ver={{VERSION}}">
+ {% for url_css in JQGRID_CSS %}<link rel="stylesheet" href="{{url_css}}?ver={{VERSION}}">{% endfor %}
+ {% endcompress %}
+ {% block extra_head %}
+ {% endblock %}
+ {% comment %}{% if raw_css %}<style media="screen" type="text/css">
+ {{raw_css |safe}}</style>{% endif %}{% endcomment %}
</head>
<body{% if current_theme%} id='{{current_theme}}'{%endif%}>
- <div id="header">
- {% block header %}
- {% if user.is_authenticated %}
- {% trans "Logged in" %}: {{ user.username }}
- (<a href="{% url 'auth_logout' %}">{% trans "Log out" %}</a> |
- <a href="{% url 'auth_password_change' %}">{% trans "Change password" %}</a>)
- {% else %}
- <strong><a href="{% url 'auth_login' %}">{% trans "Log in" %}</a></strong>
- {% endif %}
- {% if LANGUAGES|length > 1 %}
- <div id="language_form_div">
- <form action="/i18n/setlang/" method="post" id='language_form'>
- {% csrf_token %}
- {% comment %}<label for='language_selector'>{% trans "Lang" %}{% trans ":"%} </label>{% endcomment %}
- <select name="language" id='language_selector'>
- <option value="">----------</option>
- {% for lang in LANGUAGES %}
- <option value="{{ lang.0 }}"{% ifequal LANGUAGE_CODE lang.0 %} selected='selected'{% endifequal %}>{{ lang.1 }}</option>
- {% endfor %}
- </select>
- </form>
- </div>{% endif %}
- {% endblock %}
- </div>
- <div class="nav-button ui-state-default ui-corner-all" id="to_bottom_arrow">
- <i class="fa fa-arrow-circle-down" aria-hidden="true"></i>
- </div>
- <div class="nav-button ui-state-default ui-corner-all" id="to_top_arrow">
- <i class="fa fa-arrow-circle-up" aria-hidden="true"></i>
- </div>
- <div id="window"></div>
- <a href='{% url "start" %}' id="logo">
-{% if APP_NAME %}<p id="app_name">{{APP_NAME}}</p>{%endif%}
- </a>
- {% if not reminders %}<div id="context_menu"></div>
+ {% include "navbar.html" %}
+ {% if not reminders %}<div id="context-menu" class="navbar navbar-expand-lg"></div>
{% else %}<fieldset id='reminder'><legend>{% trans "Current items" %}</legend>
{% for lbl, value in reminders %}
<p><strong class='lbl'>{{lbl}}{% trans ":"%}</strong> <span class='value'>{{value}}</span></p>
{% endfor %}
</fieldset>{%endif%}
- <div id="main_menu">
- <ul>
- {% for section in MENU.childs %}
- {% if section.available %}
- <li id='section-{{section.idx}}'{% if section.css %} class="{{section.css}}"{% endif %}>
- {{section.label}}
- <ul>
- {% for menu_item in section.childs %}{%if menu_item.available%}
- {% if menu_item.childs %}<li id='subsection-{{menu_item.idx}}'{% if menu_item.css %} class="{{menu_item.css}}"{% endif %}>{{menu_item.label}}
- <ul>
- {% for menu_subitem in menu_item.childs %}{% if menu_subitem.available %}
- {% url 'action' menu_subitem.idx as item_url %}
- <li id='{{menu_subitem.idx}}'{% if item_url in CURRENT_PATH %} class='selected'{% endif %}><a
- href='{{item_url}}'>{{menu_subitem.label}}</a></li>
- {%endif%}{% endfor %}</ul></li>
- {% else %}
- {% url 'action' menu_item.idx as item_url %}
- <li id='{{menu_item.idx}}'
- class="{% if item_url in CURRENT_PATH %}selected{% endif %} {% if menu_item.css %}{{menu_item.css}}{% endif %}"><a href="{{item_url}}">{{menu_item.label}}</a></li>
- {%endif%}{% endif %}{% endfor %}
- </ul>
- </li>{%endif%}
- {% endfor %}
- </ul>
- </div>
- <div id="content">
- {% if warnings %}
- <ul class="alert">{% for warning in warnings %}
- <li>{{warning}}</li>{% endfor %}
- </ul>
- {% endif %}
+ <button class="nav-button btn btn-sm btn-secondary" id="to_bottom_arrow">
+ <i class="fa fa-arrow-down" aria-hidden="true"></i>
+ </button>
+ <button class="nav-button btn btn-sm btn-secondary" id="to_top_arrow">
+ <i class="fa fa-arrow-up" aria-hidden="true"></i>
+ </button>
+ <div class="container">
+ <div id="window_wrapper">
+ <div id="window" role="tablist"></div>
+ </div>
+
+ {% if warnings %}{% for warning in warnings %}
+ <div class="alert alert-warning alert-dismissible fade show" role="alert">
+ {{warning}}
+ <button type="button" class="close" data-dismiss="alert" aria-label="Close">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </div>
+ {% endfor %}{% endif %}
{% block content %}{% endblock %}
</div>
diff --git a/ishtar_common/templates/blocks/DataTables.html b/ishtar_common/templates/blocks/DataTables.html
new file mode 100644
index 000000000..38cd4f298
--- /dev/null
+++ b/ishtar_common/templates/blocks/DataTables.html
@@ -0,0 +1,287 @@
+{% load i18n %}
+
+<p class="text-center">
+
+<button id='search_{{name}}' class='btn btn-primary btn-block'>
+ {% trans "Search" %}</button>
+
+{% if url_new %}
+<p><a href="#" onclick="open_window('{{url_new}}');">{{new_message}}</a></p>
+{% endif %}
+
+<h4 class="text-center">{% trans "Search and select an item" %}</h4>
+
+<div class="alert alert-info" role="alert" id="pinned_search_{{name}}">
+ <i class="fa fa-thumb-tack"></i> &nbsp;
+ <strong>{% trans "Pinned search:" %}</strong>
+ <em><span id="pinned_search_content_{{name}}"></span></em>
+</div>
+
+<div class="modal fade table-modal-lg" tabindex="-1" role="dialog"
+ aria-hidden="true" id="modal_grid_{{name}}">
+ <div class="modal-dialog full modal-lg">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </div>
+ <div class="modal-body">
+ <div class="current-sheets"></div>
+ <div class="current-grid"></div>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div id="grid_{{name}}_meta_wrapper">
+ <table id='grid_{{name}}' class="display">
+ <thead>
+ <tr>
+ <th></th>
+ <th></th>{% for col in col_names %}
+ <th>{{col}}</th>
+ {% endfor %}</tr>
+ </thead>
+ </table>
+</div>
+
+<div id='foot_{{name}}' class="gridfooter row toolbar">
+ <div class='col-md-2'>
+ <div class="btn-group btn-group-sm" role="group">
+ <button type='button' class="btn btn-secondary" data-toggle="modal"
+ data-target=".table-modal-lg">
+ {% trans "Expand table" %} <i class="fa fa-expand" aria-hidden="true"></i>
+ </button>
+ </div>
+ </div>
+ <div class='col-md-2'>
+ <div class="btn-group btn-group-sm" role="group"
+ aria-label="{% trans 'Export'%}">
+ {% if source_full or extra_sources %}
+ <a class="btn btn-secondary" href='{{source}}csv' target='_blank'
+ title="{% trans 'Export as CSV - ' %}{% trans 'simple'%}">{% trans "Simple CSV" %}</a>
+ {% if source_full %}<a class='btn btn-secondary' href='{{source_full}}csv' target='_blank' title="{% trans 'Export as CSV - full' %}">{% trans "CSV full" %}</a>{% endif %}
+ {% for slug, name, extra_source in extra_sources %}
+ <a class="btn btn-secondary" href='{{extra_source}}csv' target='_blank' title="{% trans 'Export as CSV - ' %}{{name}}">{{name}}</a>
+ {% endfor %}
+ {% else %}
+ <a class="btn btn-secondary" href="{{source}}csv" target="_blank" title="{% trans 'Export as CSV' %}">{% trans "CSV" %}</a>
+ {% endif %}
+ </div>
+ </div>
+</div>
+
+{% if multiple %}
+<input type="button" id="add_button_{{name}}" value="{% trans 'Add' %}"/>
+<ul id="selectmulti_{{name}}" class="selectmulti"></ul>
+{% endif %}
+
+<input type="hidden" id="hidden_{{name}}" name="{{name}}"/>
+
+<script type="text/javascript" language='javascript'>
+$('#modal_grid_{{name}}').on('show.bs.modal', function (e) {
+ $('#grid_{{name}}_wrapper').appendTo(
+ '#modal_grid_{{name}} .modal-body .current-grid');
+ $('#window').appendTo(
+ '#modal_grid_{{name}} .modal-body .current-sheets');
+ $('#grid_{{name}}').DataTable().clear().draw()
+});
+
+$('#modal_grid_{{name}}').on('hide.bs.modal', function (e) {
+ $('#grid_{{name}}_wrapper').appendTo(
+ '#grid_{{name}}_meta_wrapper');
+ $('#window').appendTo('#window_wrapper');
+ $('#grid_{{name}}').DataTable().clear().draw()
+});
+
+
+var query_vars = new Array({{col_idx|safe}});
+var selItems_{{sname}} = new Array();
+jQuery(document).ready(function(){
+ jQuery("#search_{{name}}").click(function (){
+ if ($("#progress").length > 0){
+ $("#progress").show();
+ }
+ var data = "";
+ for (idx in query_vars)
+ {
+ var key = query_vars[idx];
+ var item = jQuery("#id_"+key);
+ var val = null;
+ if (item.prop('type') == 'checkbox'){
+ if (item.prop('checked')){
+ var val = item.val();
+ }
+ } else {
+ var val = item.val();
+ }
+ if (val){
+ if (data) data += "&";
+ data += key + "=" + val;
+ }
+ }
+ var mygrid = jQuery("#grid_{{name}}");
+ var url = "{{source}}?submited=1&" + data;
+ var csv_url = "{{source}}csv?submited=1&" + data;
+ $(".{{sname}}-csv").attr("href", csv_url);
+ var csv_full_url = "{{source_full}}csv?submited=1&" + data;
+ $(".{{sname}}-csv-full").attr("href", csv_full_url);
+ {% for slug, name, extra_source in extra_sources %}
+ $(".{{slug}}-csv-full").attr("href", '{{extra_source}}csv?submited=1&' + data);
+ {% endfor %}
+
+ {% comment %}
+ mygrid.setGridParam({url:url, page:1});
+ mygrid.trigger("reloadGrid");
+ {% endcomment %}
+ if ($("#progress").length > 0){
+ $("#progress").hide();
+ }
+ return false;
+ });
+
+ datatable_options = {
+ "ajax": {
+ "url": "{{source}}",
+ "dataSrc": "rows"
+ },
+ "select": {% if multiple_select %}true{% else %}'single'{% endif %},
+ "columns": [
+ { "data": "id", "visible": false },
+ { "data": "link", "orderable": false },{% for col in extra_cols %}
+ { "data": "{{col}}", "defaultContent": "-"}{% if not forloop.last %},{% endif %}{% endfor %}
+ ]
+ };
+
+ $.extend(datatable_options, datatables_default);
+ if (datatables_i18n) datatable_options['language'] = datatables_i18n;
+ datatable_{{sname}} = jQuery("#grid_{{name}}").DataTable(datatable_options);
+
+{% comment %}
+
+ jQuery("#grid_{{name}}").jqGrid({
+ url:'{{source}}',
+ datatype: "json",
+ mtype: 'GET',
+ colNames:['id', '', {{col_names|safe}}],
+ colModel:[
+ {name:'id', index:'id', hidden:true},
+ {name:'link', index:'link', width:30},
+ {{extra_cols|safe}}
+ ],
+ height: 300,
+ sortname: '__default__',
+ viewrecords: true,
+ sortorder: "asc",
+ emptyrecords: "{{no_result}}",
+ loadtext: "{{loading}}",
+ pager: '#pager_{{name}}',
+ width: null,
+ shrinkToFit: false,
+ rowNum:20,
+ {% if multiple_select %}multiselect: true,{% endif %}
+ jsonReader : {repeatitems: false},
+ loadError: function (jqXHR, textStatus, errorThrown) {
+ alert("{% trans "An error as occured during search. Check your query fields." %}");
+ },
+ beforeProcessing: function(data, status, xhr){
+ $('#pinned_search_content_{{name}}').html('');
+ for (idx in data){
+ if (idx == 'pinned-search' && data[idx] != ''){
+ $('#pinned_search_content_{{name}}').html(data[idx]);
+ }
+ }
+ if ($('#pinned_search_content_{{name}}').html()){
+ $('#pinned_search_{{name}}').show();
+ } else {
+ $('#pinned_search_{{name}}').hide();
+ }
+ }
+ });
+{% endcomment %}
+
+{% if multiple %}
+ jQuery("#add_button_{{name}}").click(function (){
+ var mygrid = jQuery("#grid_{{name}}");
+ var idx = mygrid.getGridParam('selrow');
+ var lbl_cols = new Array({{multi_cols|safe}});
+ var label = "";
+ for (var id in lbl_cols){
+ if(id == 1){
+ label += " (";
+ }else if (id > 1){
+ label += " ; ";
+ }
+ label += mygrid.getCell(idx, lbl_cols[id]);
+ }
+ if (id > 0){
+ label += ")";
+ }
+ for (id in selItems_{{sname}}){
+ if(selItems_{{sname}}[id] == idx){
+ return false;
+ }
+ }
+ selItems_{{sname}}.push(idx);
+ jQuery("#selectmulti_{{name}}").append(
+ "<li id='selected_{{name}}_"+idx+"'>\
+<a href='#' class='remove' \
+ onclick=\"multiRemoveItem(selItems_{{sname}}, '{{name}}', "+ idx +");\
+ return false;\" title=\"{{remove}}\">X</a>" + label + "</li>");
+ return true;
+ });
+ jQuery("#submit_form").click(function (){
+ jQuery("#hidden_{{name}}").val(selItems_{{sname}});
+ return true;
+ });
+{% else %}
+ jQuery("#submit_form").click(function (){
+ var mygrid = jQuery("#grid_{{name}}");
+
+ var data = datatable_{{sname}}.rows( { selected: true } ).data();
+ {% if multiple_select %}
+ var value = "";
+ for (k in data){
+ if (k > 0) value += ",";
+ value += data[k]['id'];
+ }
+ {% else %}
+ var value = data[0]['id'];
+ {% endif %}
+ jQuery("#hidden_{{name}}").val(value);
+ return true;
+ });
+{% endif %}
+
+});
+
+ function get_next_table_id(c_id){
+ // var mygrid = jQuery("#grid_{{name}}");
+ var has_current_id = false;
+
+ ids = datatable_{{sname}}.column(0).data();
+ // ids = mygrid.getDataIDs();
+ for (idx in ids){
+ if (has_current_id) return ids[idx];
+ if (ids[idx] == c_id) has_current_id = true;
+ }
+ return false;
+ }
+ function get_previous_table_id(c_id){
+ // var mygrid = jQuery("#grid_{{name}}");
+ var previous_id = 0;
+
+ ids = datatable_{{sname}}.column(0).data();
+ //ids = mygrid.getDataIDs();
+ for (idx in ids){
+ if (ids[idx] == c_id){
+ if (previous_id) return previous_id;
+ return false;
+ }
+ previous_id = ids[idx];
+ }
+ return false;
+ }
+</script>
+
diff --git a/ishtar_common/templates/blocks/JQueryJqGrid.html b/ishtar_common/templates/blocks/JQueryJqGrid.html
index 1768ab427..9160ef9b5 100644
--- a/ishtar_common/templates/blocks/JQueryJqGrid.html
+++ b/ishtar_common/templates/blocks/JQueryJqGrid.html
@@ -1,33 +1,41 @@
{% load i18n %}
-<button id='search_{{name}}' class='submit ui-widget-header'>{% trans "Search" %}</button>
+<p class="text-center">
+
+<button id='search_{{name}}' class='btn btn-primary btn-block'>
+ {% trans "Search" %}</button>
{% if url_new %}
<p><a href="#" onclick="open_window('{{url_new}}');">{{new_message}}</a></p>
{% endif %}
-<h4>{% trans "Search and select an item" %}</h4>
+<h4 class="text-center">{% trans "Search and select an item" %}</h4>
-<h5 id="pinned_search_{{name}}">
+<div class="alert alert-info" role="alert" id="pinned_search_{{name}}">
<i class="fa fa-thumb-tack"></i> &nbsp;
<strong>{% trans "Pinned search:" %}</strong>
<em><span id="pinned_search_content_{{name}}"></span></em>
-</h5>
+</div>
<table id='grid_{{name}}' class='jqgrid'></table>
<div id='pager_{{name}}'></div>
-<div id='foot_{{name}}' class='gridfooter'>
-
-{% if source_full or extra_sources %}
-<a class='badge {{sname}}-csv' href='{{source}}csv' target='_blank' title="{% trans 'Export as CSV' %}">{% trans "CSV" %}</a>
-{% if source_full %}<a class='badge {{sname}}-csv-full' href='{{source_full}}csv' target='_blank' title="{% trans 'Export as CSV - full' %}">{% trans "CSV full" %}</a>{% endif %}
-{% for slug, name, extra_source in extra_sources %}
-<a class='badge {{slug}}-csv-full' href='{{extra_source}}csv' target='_blank' title="{% trans 'Export as CSV - ' %}{{name}}">{{name}}</a>
-{% endfor %}
-{% else %}
-<a class='{{sname}}-csv' href="{{source}}csv" target="_blank" title="{% trans 'Export as CSV' %}">{% trans "CSV" %}</a>
-{% endif %} {{encoding}}
+<div id='foot_{{name}}' class="gridfooter row toolbar">
+ <div class='col-md-2'>
+ <div class="btn-group btn-group-sm" role="group"
+ aria-label="{% trans 'Export'%}">
+ {% if source_full or extra_sources %}
+ <a class="btn btn-secondary" href='{{source}}csv' target='_blank'
+ title="{% trans 'Export as CSV - ' %}{% trans 'simple'%}">{% trans "CSV" %}</a>
+ {% if source_full %}<a class='btn btn-secondary' href='{{source_full}}csv' target='_blank' title="{% trans 'Export as CSV - full' %}">{% trans "CSV full" %}</a>{% endif %}
+ {% for slug, name, extra_source in extra_sources %}
+ <a class="btn btn-secondary" href='{{extra_source}}csv' target='_blank' title="{% trans 'Export as CSV - ' %}{{name}}">{{name}}</a>
+ {% endfor %}
+ {% else %}
+ <a class="btn btn-secondary" href="{{source}}csv" target="_blank" title="{% trans 'Export as CSV' %}">{% trans "CSV" %}</a>
+ {% endif %}
+ </div>
+ </div>
</div>
{% if multiple %}
diff --git a/ishtar_common/templates/blocks/action_list.html b/ishtar_common/templates/blocks/action_list.html
new file mode 100644
index 000000000..50a6554c4
--- /dev/null
+++ b/ishtar_common/templates/blocks/action_list.html
@@ -0,0 +1,12 @@
+<li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle"
+ data-toggle="dropdown" href="#" role="button" aria-haspopup="true"
+ aria-expanded="false">{{section_label}}</a>
+
+ <div class="dropdown-menu">
+ {% for label, url, has_children in sections %}
+ <a class="dropdown-item{% if has_children%} font-weight-bold{%endif%}" href="{{url}}">
+ {{ label }}
+ </a>{% endfor %}
+ </div>
+</li>
diff --git a/ishtar_common/templates/blocks/bs_form_snippet.html b/ishtar_common/templates/blocks/bs_form_snippet.html
new file mode 100644
index 000000000..a6997507c
--- /dev/null
+++ b/ishtar_common/templates/blocks/bs_form_snippet.html
@@ -0,0 +1,90 @@
+{% load i18n %}
+{% if form.non_field_errors %}
+<div class="alert alert-danger" role="alert">
+ {{form.non_field_errors}}
+</div>
+{% endif %}
+
+{% for hidden in form.hidden_fields %}
+{{hidden}}
+{% if field.errors %}<div class="invalid-feedback">
+ {{ field.errors }}
+</div>{% endif %}
+{% endfor %}
+
+{% for field in form.visible_fields %}
+{% if field.name == 'pk' %}
+{{field}}
+{% elif field.name == 'search_vector' and forloop.counter0 == 0 %}
+
+<div class="form-row">
+ <div class="form-group col-lg-10">
+ <div class="input-group">
+ <span class="input-group-addon">
+ <i class="fa fa-search" aria-hidden="true"></i></span>
+ {{field|safe}}
+ </div>
+ {% if field.help_text %}
+ <small><a data-toggle="collapse" href="#{{field.auto_id}}_help"
+ aria-expanded="false" aria-controls="{{field.auto_id}}_help">
+ {% trans 'help'%}</a></small>{% endif %}
+ {% if field.errors %}
+ <div class="invalid-feedback">
+ {{ field.errors }}
+ </div>{% endif %}
+ </div>
+ <div class="form-group col-lg">
+ <p class="text-right">
+ <a class="btn btn-secondary btn-sm" data-toggle="collapse" href="#tail-form"
+ aria-expanded="false" aria-controls="tail-form">
+ {% trans "Advanced search" %}</a>
+ </p>
+ </div>
+
+ {% if field.help_text %}
+ <div class="collapse" id="{{field.auto_id}}_help">
+ <div class="card card-body">
+ {{field.help_text}}
+ </div>
+ </div>
+ {% endif %}
+</div>
+{% else %}
+{% if search and forloop.counter0 == 1 %}
+<div class="collapse" id="tail-form">
+ <div class="card card-body">
+ <div class="form-row">
+{% endif %}
+
+{% if not search and forloop.counter0|divisibleby:2 or search and forloop.counter1|divisibleby:2 %}
+{% if forloop.counter0 %}
+ </div>{% endif %}
+ <div class="form-row">
+{% endif %}
+
+ <div class="form-group col-lg-6">
+ {{ field.label_tag }}
+ {{field|safe}}
+ {% if field.errors %}<div class="invalid-feedback">
+ {{ field.errors }}
+ </div>{% endif %}
+ {% if field.help_text %}
+ <small><a data-toggle="collapse" href="#{{field.auto_id}}_help"
+ aria-expanded="false" aria-controls="{{field.auto_id}}_help">
+ {% trans 'help'%}</a></small>
+ <div class="collapse" id="{{field.auto_id}}_help">
+ <div class="card card-body">
+ {{field.help_text}}
+ </div>
+ </div>
+ {% endif %}
+ </div>
+{% if forloop.last %}
+{% if search and forloop.counter0 >= 1 %}
+ </div>
+ </div>
+{% endif %}
+</div>
+{% endif %}
+{% endif %}
+{% endfor %}
diff --git a/ishtar_common/templates/blocks/form_snippet.html b/ishtar_common/templates/blocks/table_form_snippet.html
index 5ee88e25f..5ee88e25f 100644
--- a/ishtar_common/templates/blocks/form_snippet.html
+++ b/ishtar_common/templates/blocks/table_form_snippet.html
diff --git a/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html b/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html
index e6ce31c25..78126a240 100644
--- a/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html
+++ b/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html
@@ -1,19 +1,21 @@
{% load i18n link_to_window %}
{% if item.history_creator.ishtaruser.person %}
-<li><label>{% trans "Creation" context "Sheet" %}</label>
- <span class='value'>
+<div class="col-12 col-md-6 col-lg-4 d-flex flex-wrap row">
+ <dt class="col-5">{% trans "Creation" context "Sheet" %}</dt>
+ <dd class="col-7">
{{item.history_creator.ishtaruser.person}}
{{item.history_creator.ishtaruser.person|link_to_window}} <br/>
- <small><em>{{item.history_creation_date|date:"DATETIME_FORMAT"}}</em></small>
- </span>
-</li>
+ <small class="text-muted">{{item.history_creation_date|date:"DATETIME_FORMAT"}}</small>
+ </dd>
+</div>
{% endif %}
{% if item.history_creation_date != item.last_edition_date %}
-<li><label>{% trans "Modification" context "Sheet" %}</label>
- <span class='value'>
+<div class="col-12 col-md-6 col-lg-4 d-flex flex-wrap row">
+ <dt class="col-5">{% trans "Modification" context "Sheet" %}</dt>
+ <dd class='col-7'>
{{item.history_modifier.ishtaruser.person}}
{{item.history_modifier.ishtaruser.person|link_to_window}} <br/>
- <small><em>{% firstof item.history_date|date:"DATETIME_FORMAT" item.history.all.0.history_date|date:"DATETIME_FORMAT" %}</em></small>
- </span>
-</li>
+ <small class="text-muted">{% firstof item.history_date|date:"DATETIME_FORMAT" item.history.all.0.history_date|date:"DATETIME_FORMAT" %}</small>
+ </dd>
+</div>
{% endif %}
diff --git a/ishtar_common/templates/ishtar/blocks/sheet_json.html b/ishtar_common/templates/ishtar/blocks/sheet_json.html
index 31e6acb84..6aaf4bae7 100644
--- a/ishtar_common/templates/ishtar/blocks/sheet_json.html
+++ b/ishtar_common/templates/ishtar/blocks/sheet_json.html
@@ -4,8 +4,8 @@
<h3>{{json_section}}</h3>
{% endif %}
{% for label, value in json_fields %}
-{% if forloop.first %}<ul class='form-flex'>{% endif %}
- {% field_li label value %}
-{% if forloop.last %}</ul>{% endif %}
+{% if forloop.first %}<div class='row'>{% endif %}
+ {% field_flex label value %}
+{% if forloop.last %}</div>{% endif %}
{% endfor %}
{% endfor %}
diff --git a/ishtar_common/templates/ishtar/blocks/shortcut_menu.html b/ishtar_common/templates/ishtar/blocks/shortcut_menu.html
index 67f91dfea..5a811ddf0 100644
--- a/ishtar_common/templates/ishtar/blocks/shortcut_menu.html
+++ b/ishtar_common/templates/ishtar/blocks/shortcut_menu.html
@@ -1,42 +1,45 @@
{% load i18n %}
{% if current_menu %}
-<form method="post" action="{% url 'update-current-item' %}">
-<fieldset id="shortcut-menu">
-<span class="fa-stack short-menu-close">
- <i class="fa fa-circle fa-stack-2x"></i>
- <i class="fa fa-times fa-stack-1x fa-inverse"></i>
-</span>
-<span class="fa-stack short-menu-open">
- <i class="fa fa-circle fa-stack-2x"></i>
- <i class="fa fa-plus fa-stack-1x fa-inverse"></i>
-</span>
-<div class="short-menu-buttons btn-group" role="group">
- <button type="button" class="btn btn-selected" id='short-menu-simple' title="{% trans 'Simple menu limited to your own items. Be careful only the last 100 items are displayed.' %}">{% trans "simple" %}</button>
- <button type="button" class="btn" id='short-menu-advanced' title="{% trans 'Advanced menu' %}">{% trans "advanced" %}</button>
+<div class="nav-item dropdown navbar-expand-lg navbar-collapse justify-content-end">
+ <ul class="navbar-nav">
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" data-toggle="dropdown"
+ href="#" role="button" aria-haspopup="true">
+ {% trans "Default selection" %}
+ <i class="icon fa fa-thumb-tack fa-2x" aria-hidden="true" title="{% trans 'Pin an item in order to constrain default searches with this item. By default only your items are displayed. New created and modified items are auto-pin.' %}"></i>
+ </a>
+ <div id="shortcut-menu" class="dropdown-menu dropdown-menu-right">
+ <form method="post" action="{% url 'update-current-item' %}">
+
+ <div class="short-menu-buttons btn-group" role="group">
+ <button type="button" class="btn btn-selected" id='short-menu-simple' title="{% trans 'Simple menu limited to your own items. Be careful only the last 100 items are displayed.' %}">{% trans "simple" %}</button>
+ <button type="button" class="btn" id='short-menu-advanced' title="{% trans 'Advanced menu' %}">{% trans "advanced" %}</button>
+ </div>
+ <div>
+ <table id='current_items'>
+ {% for lbl, model_name, main_cls, items in current_menu %}
+ <tr>
+ <td><label for="current_{{model_name}}">{{lbl}}</label></td>
+ <td>
+ <select class='{{main_cls}} chosen-select' id='current_{{model_name}}'>
+ <option class='normal' value=''>--</option>
+ {% for val, label, selected, cls in items %}<option{% if cls %} class='{{cls}}'{% endif %} value='{{val}}'{% if selected %} selected="selected"{% endif %}>{% ifequal cls 'basket' %}&#xf291; {% endifequal %}{% ifequal cls 'green' %}&#xf058; {% endifequal %}{% ifequal cls 'orange' %}&#xf06a; {% endifequal %}{% ifequal cls 'red' %}&#xf071; {% endifequal %}{{label}}</option>
+ {% endfor %}</select>
+ </td>{% with 'show-'|add:model_name as model_url%}
+ <td><a href='#' onclick='load_current_window("{% url model_url 0 %}", "{{model_name}}");' class='display_details'><i class="fa fa-info-circle" aria-hidden="true"></i></a></td>
+ <td><span class='pin-action' onclick='$.get("{% url 'unpin' model_name %}", function(){load_shortcut_menu();});' title="{% trans 'Unpin' %}">
+ <i class="fa fa-times"></i>
+ </span></td>
+ {% endwith %}
+ </tr>
+ {% endfor %}
+ </table>
+ </div>
+ </form>
+ </div>
+ </li>
+ </ul>
</div>
-<div>
-<i class="icon fa fa-thumb-tack fa-2x" aria-hidden="true" title="{% trans 'Pin an item in order to constrain default searches with this item. By default only your items are displayed. New created and modified items are auto-pin.' %}"></i>
-<table id='current_items'>
-{% for lbl, model_name, main_cls, items in current_menu %}
-<tr>
- <td><label for="current_{{model_name}}">{{lbl}}</label></td>
- <td>
- <select class='{{main_cls}} chosen-select' id='current_{{model_name}}'>
- <option class='normal' value=''>--</option>
- {% for val, label, selected, cls in items %}<option{% if cls %} class='{{cls}}'{% endif %} value='{{val}}'{% if selected %} selected="selected"{% endif %}>{% ifequal cls 'basket' %}&#xf291; {% endifequal %}{% ifequal cls 'green' %}&#xf058; {% endifequal %}{% ifequal cls 'orange' %}&#xf06a; {% endifequal %}{% ifequal cls 'red' %}&#xf071; {% endifequal %}{{label}}</option>
- {% endfor %}</select>
- </td>{% with 'show-'|add:model_name as model_url%}
- <td><a href='#' onclick='load_current_window("{% url model_url 0 %}", "{{model_name}}");' class='display_details'><i class="fa fa-info-circle" aria-hidden="true"></i></a></td>
- <td><span class='pin-action' onclick='$.get("{% url 'unpin' model_name %}", function(){load_shortcut_menu();});' title="{% trans 'Unpin' %}">
- <i class="fa fa-times"></i>
- </span></td>
- {% endwith %}
-</tr>
-{% endfor %}
-</table>
-</div>
-</fieldset>
-</form>
<script type='text/javascript'>var advanced_menu = false;
{% if SHORTCUT_SHOW == 'off' %}var shortcut_menu_hide = true;
{% else %}var shortcut_menu_hide = false;{% endif %}
diff --git a/ishtar_common/templates/ishtar/blocks/window_field.html b/ishtar_common/templates/ishtar/blocks/window_field.html
index b52ed78ee..097ae3fd2 100644
--- a/ishtar_common/templates/ishtar/blocks/window_field.html
+++ b/ishtar_common/templates/ishtar/blocks/window_field.html
@@ -1,3 +1,6 @@
-{% load i18n %}{% if data %}{% if li %}<li>{% else %}<p>{% endif %}<label>{% trans caption %}</label>
-<span class='value'>{{pre_data|safe}}{{data|linebreaksbr}}{{post_data|safe}}</span>{% if li %}</li>{% else %}</p>{% endif %}
+{% load i18n %}{% if data %}{% if li %}<li>{% elif flex %}
+ <div class="col-12 col-md-6 col-lg-4 d-flex flex-wrap">{% else %}<p>{% endif %}
+ <label>{% trans caption %}</label>
+ <span class='value'>{{pre_data|safe}}{{data|linebreaksbr}}{{post_data|safe }}</span>
+ {% if li %}</li>{% elif flex %}</div>{% else %}</p>{% endif %}
{% endif %}
diff --git a/ishtar_common/templates/ishtar/blocks/window_field_flex.html b/ishtar_common/templates/ishtar/blocks/window_field_flex.html
new file mode 100644
index 000000000..add2a5520
--- /dev/null
+++ b/ishtar_common/templates/ishtar/blocks/window_field_flex.html
@@ -0,0 +1,6 @@
+{% load i18n %}{% if data %}
+ <dl class="col-12 {% if size == 2 %}col-lg-6{% else %}col-md-6 col-lg-4{% endif %} d-flex flex-wrap row">
+ <dt class="col-5">{% trans caption %}</dt>
+ <dd class="col-7">{{pre_data|safe}}{{data|linebreaksbr}}{{post_data|safe }}</dd>
+ </dl>
+{% endif %}
diff --git a/ishtar_common/templates/ishtar/blocks/window_field_flex_detail.html b/ishtar_common/templates/ishtar/blocks/window_field_flex_detail.html
new file mode 100644
index 000000000..5968f9afa
--- /dev/null
+++ b/ishtar_common/templates/ishtar/blocks/window_field_flex_detail.html
@@ -0,0 +1,6 @@
+{% load i18n %}{% if item %}
+<dl class="col-12 col-md-6 col-lg-4 d-flex flex-wrap row">
+ <dt class="col-5">{% trans caption %}</dt>
+ <dd class="col-7">{{item}}{{link}}</dd>
+</dl>
+{% endif %}
diff --git a/ishtar_common/templates/ishtar/blocks/window_field_flex_full.html b/ishtar_common/templates/ishtar/blocks/window_field_flex_full.html
new file mode 100644
index 000000000..f44cdc6fd
--- /dev/null
+++ b/ishtar_common/templates/ishtar/blocks/window_field_flex_full.html
@@ -0,0 +1,6 @@
+{% load i18n %}{% if data %}
+ <dl class="col-12 row">
+ <dt class="col-12">{% trans caption %}</dt>
+ <dd class="col-12">{{pre_data|safe}}{{data|linebreaksbr}}{{post_data|safe }}</dd>
+ </dl>
+{% endif %}
diff --git a/ishtar_common/templates/ishtar/blocks/window_field_flex_multiple.html b/ishtar_common/templates/ishtar/blocks/window_field_flex_multiple.html
new file mode 100644
index 000000000..60f6361b7
--- /dev/null
+++ b/ishtar_common/templates/ishtar/blocks/window_field_flex_multiple.html
@@ -0,0 +1,8 @@
+{% load i18n %}{% if data.count %}
+<dl class="col-12 col-md-6 col-lg-4 d-flex flex-wrap row">
+ <dt class="col-5">{% trans caption %}</dt>
+ <dd class="col-7">{% for d in data.all %}
+ {% if forloop.counter0 %} ; {% endif %}{{ d }}
+ {% endfor %}</dd>
+</dl>
+{% endif %}
diff --git a/ishtar_common/templates/ishtar/blocks/window_field_flex_url.html b/ishtar_common/templates/ishtar/blocks/window_field_flex_url.html
new file mode 100644
index 000000000..59f612bc6
--- /dev/null
+++ b/ishtar_common/templates/ishtar/blocks/window_field_flex_url.html
@@ -0,0 +1,7 @@
+{% load i18n %}{% if link %}
+<div class="col-12 col-md-6 col-lg-4 d-flex flex-wrap row">
+ <dt class="col-5">{% trans caption %}</dt>
+ <dd class="col-7">
+ <a target="_blank" href='{{link|safe}}'>{% if link_name %}{{link_name}}{% else %}{{link}}{% endif %}</a>
+ </dd>
+{% endif%}
diff --git a/ishtar_common/templates/ishtar/blocks/window_nav.html b/ishtar_common/templates/ishtar/blocks/window_nav.html
index f212ebff6..89263d0de 100644
--- a/ishtar_common/templates/ishtar/blocks/window_nav.html
+++ b/ishtar_common/templates/ishtar/blocks/window_nav.html
@@ -1,56 +1,62 @@
{% load i18n %}
-{% if previous or next %}
- <div class='tool-right'>
- {% if previous %}
- <a class='history-nav' href="#" onclick='load_window("{% url histo_url item.pk previous|date:"c"%}");$("#{{window_id}}").hide();return false;' title="{%trans 'Previous version'%}">
- <span class="fa-stack">
- <i class="fa fa-circle fa-stack-2x"></i>
- <i class="fa fa-step-backward fa-stack-1x fa-inverse"></i>
- </span>
- <br/>{{previous}}
- </a>
- {% else %}
- <span class='history-nav'> </span>
- {% endif %}
- {% if next %}
- <a class='history-nav' title="{% trans 'Restore this version' %}" href="#" onclick='if(confirm("{%trans 'Are you sure to restore to this version? All changes made since this version will be lost.' %}")){load_url("{% url revert_url item.pk item.history_date|date:"c"%}");closeAllWindows();load_window("{% url show_url item.pk None %}");}'>
- <span class="fa-stack fa-lg">
- <i class="fa fa-circle fa-stack-2x"></i>
- <i class="fa fa-history fa-stack-1x fa-inverse"></i>
- </span>
- <br/>{% trans "Restore" %}
- </a>
- <a class='history-nav' href="#" onclick='load_window("{% url histo_url item.pk next|date:"c" %}");$("#{{window_id}}").hide();return false;' title="{%trans 'Next version'%}">
- <span class="fa-stack">
- <i class="fa fa-circle fa-stack-2x"></i>
- <i class="fa fa-step-forward fa-stack-1x fa-inverse"></i>
- </span>
- <br/>{{next}}
- </a>
- {% else %}
- <span class='history-nav'> </span>
- <span class='history-nav'> </span>
- {% endif %}
+<div class="row toolbar">
+ {% if previous or next %}
+ <div class='col-md-2'>
+ <div class="btn-group btn-group-sm" role="group" aria-label="{% trans 'History'%}">
+ {% if previous %}
+ <button type="button" class="btn btn-secondary"
+ data-toggle="tooltip" data-placement="bottom"
+ title="{{previous}}"
+ onclick='load_window("{% url histo_url item.pk previous|date:"c"%}");$("#{{window_id}}").hide();return false;'>
+ <i class="fa fa-step-backward"></i>
+ </button>
+ {% endif %}
+ {% if next %}
+ <button type="button" class="btn btn-secondary"
+ data-toggle="tooltip" data-placement="bottom"
+ onclick='if(confirm("{%trans 'Are you sure to restore to this version? All changes made since this version will be lost.' %}")){load_url("{% url revert_url item.pk item.history_date|date:"c"%}");closeAllWindows();load_window("{% url show_url item.pk None %}");}'
+ title="{% trans 'Restore this version' %}">
+ <i class="fa fa-history"></i>
+ </button>
+ <button type="button" class="btn btn-secondary"
+ data-toggle="tooltip" data-placement="bottom"
+ onclick='load_window("{% url histo_url item.pk next|date:"c" %}");$("#{{window_id}}").hide();return false;'
+ title="{{next}}">
+ <i class="fa fa-step-forward"></i>
+ </button>
+ {% endif %}
+ </div>
</div>
-{% endif %}
-<div class='tool-left'>
+ <div class='offset-md-6 col-md-4 text-right'>
+ {% else %}
+ <div class='offset-md-8 col-md-4 text-right'>
+ {% endif %}
+ <div class="btn-group btn-group-sm" role="group" aria-label="{% trans 'Actions' %}">
{% block extra_actions %}{% endblock %}
- {% if modify_url %}<a href='{% url modify_url item.pk %}' title="{% trans 'Modify' %}">
- <span class="fa-stack fa-lg">
- <i class="fa fa-circle fa-stack-2x"></i>
- <i class="fa fa-pencil fa-stack-1x fa-inverse"></i>
- </span>
- </a>{% endif %}
- {% if pin_action and item.SLUG %}
- <span class='pin-action' onclick='$.get("{% url 'pin' item.SLUG item.pk %}", function(){load_shortcut_menu(); display_info("{% trans 'Item pined in your shortcut menu.' %}")});' title="{% trans 'Pin' %}">
- <span class="fa-stack fa-lg">
- <i class="fa fa-circle fa-stack-2x"></i>
- <i class="fa fa-thumb-tack fa-stack-1x fa-inverse"></i>
- </span>
- </span>{% endif %}
- <a class='badge' href='{% url show_url item.pk "odt" %}' title='{% trans "Export as OpenOffice.org file"%}'>ODT</a> <a class='badge' href='{% url show_url item.pk "pdf" %}' title='{% trans "Export as PDF file"%}'>PDF</a>
+ {% if modify_url %}
+ <a class="btn btn-secondary" href='{% url modify_url item.pk %}'
+ title="{% trans 'Modify' %}">
+ <i class="fa fa-pencil"></i>
+ </a>
+ {% endif %}
+ {% if pin_action and item.SLUG %}
+ <a class="btn btn-secondary" href="#" class='pin-action'
+ onclick='$.get("{% url "pin" item.SLUG item.pk %}", function(){load_shortcut_menu(); display_info("{% trans 'Item pined in your shortcut menu.' %}")});' title="{% trans 'Pin' %}">
+ <i class="fa fa-thumb-tack"></i>
+ </a>
+ {% endif %}
+ <a class="btn btn-secondary" href='{% url show_url item.pk "odt" %}'
+ title='{% trans "Export as OpenOffice.org file"%}'>
+ ODT <i class="fa fa-file-word-o" aria-hidden="true"></i>
+ <a class="btn btn-secondary" href='{% url show_url item.pk "pdf" %}'
+ title='{% trans "Export as PDF file"%}'>
+ PDF <i class="fa fa-file-pdf-o" aria-hidden="true"></i>
+ </a>
+ </div>
+ </div>
</div>
-<hr class='clear'>
{% if next %}
- <p class='info-box'><i class="fa fa-info-circle" aria-hidden="true"></i> <em>{% trans "Relation between items are not historized." %}</em></p>
+<div class="alert alert-warning" role="alert">
+ {% trans "Relation between items are not historized." %}
+</div>
{% endif %}
diff --git a/ishtar_common/templates/ishtar/blocks/window_tables/dynamic_documents.html b/ishtar_common/templates/ishtar/blocks/window_tables/dynamic_documents.html
index 891cd0f6f..e10390915 100644
--- a/ishtar_common/templates/ishtar/blocks/window_tables/dynamic_documents.html
+++ b/ishtar_common/templates/ishtar/blocks/window_tables/dynamic_documents.html
@@ -1,23 +1,95 @@
{% load i18n %}
<h4>{{caption}}</h4>
-<table id='grid_{{name}}' class='jqgrid'></table>
-<div id='pager_{{name}}'></div>
-
-<div id='foot_{{name}}' class='gridfooter'>
-{% if source_full %}
-<a class="badge" href='{{simple_source}}csv{{ source_attrs|safe }}' target='_blank' title="{% trans 'Export as CSV' %}">{% trans "CSV" %}</a>
-<a class="badge" href='{{source_full}}csv{{ source_attrs|safe }}' target='_blank' title="{% trans 'Export as CSV - full' %}">{% trans "CSV full" %}</a>
-{% else %}
-<a class="badge" href="{{simple_source}}csv{{ source_attrs|safe }}" target="_blank" title="{% trans 'Export as CSV' %}">CSV</a>
-{% endif %} {{encoding}}
+
+<div class="modal fade table-modal-lg" tabindex="-1" role="dialog"
+ aria-hidden="true" id="modal_grid_{{name}}">
+ <div class="modal-dialog full modal-lg">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </div>
+ <div class="modal-body">
+ <div class="current-sheets"></div>
+ <div class="current-grid"></div>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div id="grid_{{name}}_meta_wrapper">
+ <table id='grid_{{name}}' class="display">
+ <thead>
+ <tr>
+ <th></th>
+ <th></th>{% for col in col_names %}
+ <th>{{col}}</th>
+ {% endfor %}</tr>
+ </thead>
+ </table>
+</div>
+
+<div id='foot_{{name}}' class="gridfooter row toolbar">
+ <div class='col-md-2'>
+ <div class="btn-group btn-group-sm" role="group">
+ <button class="btn btn-secondary" data-toggle="modal"
+ data-target=".table-modal-lg">
+ {% trans "Expand table" %} <i class="fa fa-expand" aria-hidden="true"></i>
+ </button>
+ </div>
+ </div>
+ <div class='col-md-2'>
+ <div class="btn-group btn-group-sm" role="group"
+ aria-label="{% trans 'Export'%}">
+ {% if source_full %}
+ <a class="btn btn-secondary" href='{{simple_source}}csv{{ source_attrs|safe }}' target='_blank' title="{% trans 'Export as CSV' %}">{% trans "CSV" %}</a>
+ <a class="btn btn-secondary" href='{{source_full}}csv{{ source_attrs|safe }}' target='_blank' title="{% trans 'Export as CSV - full' %}">{% trans "CSV full" %}</a>
+ {% else %}
+ <a class="btn btn-secondary" href="{{simple_source}}csv{{ source_attrs|safe }}" target="_blank" title="{% trans 'Export as CSV' %}">CSV</a>
+ {% endif %}
+ </div>
+ </div>
+</div>
+
+<div class="row toolbar justify-content-center">
</div>
<script type="text/javascript" language='javascript'>
setTimeout(
function(){
- $("#grid_{{name}}").jqGrid({
+ datatable_options = {
+ "ajax": {
+ "url": "{{source}}",
+ "dataSrc": "rows"
+ },
+ "columns": [
+ { "data": "id", "visible": false },
+ { "data": "link", "orderable": false },{% for col in extra_cols %}
+ { "data": "{{col}}", "defaultContent": "-"}{% if not forloop.last %},{% endif %}{% endfor %}
+ ]
+ };
+ $.extend(datatable_options, datatables_default);
+ if (datatables_i18n) datatable_options['language'] = datatables_i18n;
+
+ datatable_{{sname}} = jQuery("#grid_{{name}}").DataTable(datatable_options);
+
+ $('#modal_grid_{{name}}').on('show.bs.modal', function (e) {
+ $('#grid_{{name}}_wrapper').appendTo(
+ '#modal_grid_{{name}} .modal-body .current-grid');
+ $('#grid_{{name}}').DataTable().clear().draw()
+ });
+
+ $('#modal_grid_{{name}}').on('hide.bs.modal', function (e) {
+ $('#grid_{{name}}_wrapper').appendTo(
+ '#grid_{{name}}_meta_wrapper');
+ $('#grid_{{name}}').DataTable().clear().draw()
+ });
+
+ {% comment %}
+ {
url:'{{source|safe}}',
datatype: "json",
mtype: 'GET',
@@ -42,6 +114,7 @@ setTimeout(
}
});
{% if large %}jQuery("#grid_{{name}}").jqGrid('setGridHeight', 272);{% endif %}
+ {% endcomment %}
}, 200);
</script>
diff --git a/ishtar_common/templates/ishtar/blocks/wizard_breadcrumb.html b/ishtar_common/templates/ishtar/blocks/wizard_breadcrumb.html
new file mode 100644
index 000000000..79bca71f1
--- /dev/null
+++ b/ishtar_common/templates/ishtar/blocks/wizard_breadcrumb.html
@@ -0,0 +1,21 @@
+<form action="." method="post">{% csrf_token %}
+ <nav aria-label="breadcrumb" role="navigation">
+ <ol class="breadcrumb">
+ {% for step in previous_steps %}
+ <li class="breadcrumb-item">
+ <button class='change_step' name="form_prev_step"
+ value="{{forloop.counter0}}">{{step}}</button>
+ </li>
+ {% endfor %}
+ <li class="breadcrumb-item active">
+ <a href='#'>{{current_step_label}}</a>
+ </li>
+ {% for step in next_steps %}
+ <li class="breadcrumb-item">
+ <button class='change_step' name="form_prev_step"
+ value="{{forloop.counter|add:previous_step_counter}}">{{step}}</button>
+ </li>
+ {% endfor %}
+ </ol>
+ </nav>
+</form>
diff --git a/ishtar_common/templates/ishtar/sheet.html b/ishtar_common/templates/ishtar/sheet.html
index bfefd5eb6..4f118f2f9 100644
--- a/ishtar_common/templates/ishtar/sheet.html
+++ b/ishtar_common/templates/ishtar/sheet.html
@@ -12,68 +12,86 @@
</head>
<body>
{% endblock %}
-<div class="sheet" id='{{window_id}}'>
-{% block head_sheet %}
-<script type="text/javascript">var last_window='{{window_id}}';</script>
-<div class="head">
+ <div class="card sheet" id="{{window_id}}">
+ <div class="card-header" data-sheet-id="{{sheet_id}}" role="tab" id='head-{{window_id}}'>
+ <div class="row">
+ <div class="col">
+ <h5 class="mb-0">
+ <a data-toggle="collapse" href="#collapse-{{window_id}}" aria-expanded="true"
+ aria-controls="collapse-{{window_id}}">
+ {% block head_title %}{% endblock %}
+ </a>
+ </h5>
+ </div>
+ <div class='col text-center'>
+ <a href='#' class='previous_page'>
+ <span class="fa-stack">
+ <i class="fa fa-circle fa-stack-2x"></i>
+ <i class="fa fa-arrow-left fa-stack-1x fa-inverse"></i>
+ </span>
+ </a>
+ <a href='#' class='next_page'>
+ <span class="fa-stack">
+ <i class="fa fa-circle fa-stack-2x"></i>
+ <i class="fa fa-arrow-right fa-stack-1x fa-inverse"></i>
+ </span>
+ </a>
+ </div>
+ <div class='col text-right'>
+ <a href='#' onclick='$("#{{window_id}}").hide()' title="{% trans 'Close' %}">
+ <span class="fa-stack">
+ <i class="fa fa-circle fa-stack-2x"></i>
+ <i class="fa fa-times fa-stack-1x fa-inverse"></i>
+ </span>
+ </a>
+ {% comment %}
+ <a href='#' onclick='closeAllWindows();' title="{% trans "Close all windows" %}">
+ <span class="fa-stack">
+ <i class="fa fa-files-o fa-stack-2x"></i>
+ <i class="fa fa-circle fa-stack-15x"></i>
+ <i class="fa fa-times fa-stack-1x fa-inverse"></i>
+ </span>
+ </a>
+ {% endcomment %}
+ </div>
+ </div>
+ {% block header_title %}{% endblock %}
+ </div>
-<a href='#' class='previous_page'>
-<span class="fa-stack fa-lg">
- <i class="fa fa-circle fa-stack-2x"></i>
- <i class="fa fa-arrow-left fa-stack-1x fa-inverse"></i>
-</span>
-</a>
-<div class='close-buttons'>
-<a href='#' onclick='$("#{{window_id}}").hide("slow")' title="{% trans 'Close' %}">
-<span class="fa-stack">
- <i class="fa fa-circle fa-stack-2x"></i>
- <i class="fa fa-times fa-stack-1x fa-inverse"></i>
-</span>
-</a>
-<a href='#' onclick='closeAllWindows();' title="{% trans "Close all windows" %}">
-<span class="fa-stack">
- <i class="fa fa-files-o fa-stack-2x"></i>
- <i class="fa fa-circle fa-stack-15x"></i>
- <i class="fa fa-times fa-stack-1x fa-inverse"></i>
-</span>
-</a>
-</div>
-<a href='#' class='next_page'>
-<span class="fa-stack fa-lg">
- <i class="fa fa-circle fa-stack-2x"></i>
- <i class="fa fa-arrow-right fa-stack-1x fa-inverse"></i>
-</span>
-</a>
-
-<h1>{% block head_title %}{% endblock %}</h1>
-</div>
+ <div id="collapse-{{window_id}}" class="collapse show" role="tabpanel"
+ aria-labelledby="heading-{{window_id}}" data-parent="#window">
+ {% block toolbar %}{% endblock %}
+ <div class="card-body">
+ {% block head_sheet %}
+ <script type="text/javascript">
+ var last_window='{{window_id}}';
-<script type="text/javascript" language='javascript'>
-jQuery(document).ready(function(){
- if (! get_next_table_id({{item.pk}})){
- jQuery('.next_page').hide();
- }
- if (! get_previous_table_id({{item.pk}})){
- jQuery('.previous_page').hide();
- }
- jQuery(".next_page").click(function() {
- load_window("{{current_window_url}}" + get_next_table_id({{item.pk}}) + "/",
- '', function(){$("#{{window_id}}").hide();});
- });
- jQuery(".previous_page").click(function() {
- load_window("{{current_window_url}}" + get_previous_table_id({{item.pk}}) + "/",
- '', function(){$("#{{window_id}}").hide();});
- });
-});
-</script>
-{% endblock %}
-{% block header_title %}{% endblock %}
-<div class="body">
-{% block toolbar %}{% endblock %}
-{% block content %}
-{% endblock %}
-</div>
+ jQuery(document).ready(function(){
+ if (! get_next_table_id({{item.pk}})){
+ jQuery('.next_page').hide();
+ }
+ if (! get_previous_table_id({{item.pk}})){
+ jQuery('.previous_page').hide();
+ }
+ jQuery(".next_page").click(function() {
+ load_window("{{current_window_url}}" + get_next_table_id({{item.pk}}) + "/",
+ '', function(){$("#{{window_id}}").remove();});
+ });
+ jQuery(".previous_page").click(function() {
+ load_window("{{current_window_url}}" + get_previous_table_id({{item.pk}}) + "/",
+ '', function(){$("#{{window_id}}").remove();});
+ });
+ });
+ </script>
+ {% endblock %}
+ <div class="body">
+ {% block content %}
+ {% endblock %}
+ </div>
+ </div>
+ </div>
+ </div>
</div>
{%block main_foot%}
</body>
diff --git a/ishtar_common/templates/ishtar/wizard/confirm_wizard.html b/ishtar_common/templates/ishtar/wizard/confirm_wizard.html
index 7339af9a8..034d6e21a 100644
--- a/ishtar_common/templates/ishtar/wizard/confirm_wizard.html
+++ b/ishtar_common/templates/ishtar/wizard/confirm_wizard.html
@@ -3,14 +3,9 @@
{% load range %}
{% block content %}
<h2>{{wizard_label}}</h2>
-<form action="." method="post">{% csrf_token %}
-<ul id='form_path'>
-{% for step in previous_steps %}
- <li><button name="form_prev_step" value="{{forloop.counter0}}">{{step}}</button></li>
-{% endfor %}
- <li class='current'><a href='#'>{{current_step_label}}</a></li>
-</ul>
-</form>
+
+{% include "ishtar/blocks/wizard_breadcrumb.html" %}
+
<form action="." method="post">{% csrf_token %}
<div class='form'>
{% block "warning_informations" %}{% endblock %}
diff --git a/ishtar_common/templates/ishtar/wizard/default_wizard.html b/ishtar_common/templates/ishtar/wizard/default_wizard.html
index 19076b0de..7ba87c44d 100644
--- a/ishtar_common/templates/ishtar/wizard/default_wizard.html
+++ b/ishtar_common/templates/ishtar/wizard/default_wizard.html
@@ -5,18 +5,10 @@
{% endblock %}
{% block content %}
{% block wizard_head %}
-<h2>{{wizard_label}}</h2>
-<form action="." method="post">{% csrf_token %}
-<ul id='form_path'>
-{% for step in previous_steps %}
- <li><button class='change_step' name="form_prev_step" value="{{forloop.counter0}}">{{step}}</button></li>
-{% endfor %}
- <li class='current'><a href='#'>{{current_step_label}}</a></li>
-{% for step in next_steps %}
- <li><button class='change_step' name="form_prev_step" value="{{forloop.counter|add:previous_step_counter}}">{{step}}</button></li>
-{% endfor %}
-</ul>
-</form>
+<h3>{{wizard_label}}</h3>
+
+{% include "ishtar/blocks/wizard_breadcrumb.html" %}
+
{% endblock %}
{% block wizard_form %}
<form action="." method="post" name='wizard'{% if wizard.form.file_upload %} enctype="multipart/form-data"{% endif %}>{% csrf_token %}
@@ -31,14 +23,12 @@
<table class='formset'>
{%if wizard.form.non_form_errors%}<tr class='error'><th colspan='2'>{{wizard.form.non_form_errors}}</th></tr>{%endif%}
{% for formsetform in wizard.form.forms %}
- {% table_form formsetform %}
+ {% bs_form formsetform %}
{% endfor %}
<tr class='modify'><td colspan="2"><button name="formset_modify" value="{{wizard.steps.current}}">{% trans "Add/Modify" %}</button></td></tr></li>
</table>
{% else %}
-{% if not is_search %}<table>{% endif %}
-{% table_form wizard.form %}
-{% if not is_search %}</table>{% endif %}
+ {% bs_form wizard.form %}
{% endif %}
{% endblock %}
<input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
diff --git a/ishtar_common/templates/ishtar/wizard/search.html b/ishtar_common/templates/ishtar/wizard/search.html
index e5066cf87..da7955c26 100644
--- a/ishtar_common/templates/ishtar/wizard/search.html
+++ b/ishtar_common/templates/ishtar/wizard/search.html
@@ -4,10 +4,18 @@
{{wizard.form.media}}
{% endblock %}
{% block content %}
-<h2>{{wizard_label}}</h2>
-<ul id='form_path'>
- <li class='current'><a href='#'>{{current_step.form_label}}</a></li>
-</ul>
+<h3>{{wizard_label}}</h3>
+
+{% comment %}
+<nav aria-label="breadcrumb" role="navigation">
+ <ol class="breadcrumb">
+ <li class="breadcrumb-item active">
+ <a href='#'>{{current_step.form_label}}</a>
+ </li>
+ </ol>
+</nav>
+{% endcomment %}
+
{% if wizard.form.forms %}
<div class='form'>
<div class='top_button'><input type="submit" id="submit_form" value="{% trans "Validate" %}"/></div>
@@ -20,7 +28,7 @@
<tr class='modify'><td colspan="2"><button name="formset_modify" value="{{wizard.steps.current}}">{% trans "Add/Modify" %}</button></td></tr></li>
</table>
{% else %}
-<div class='form'>
+<div class='form search'>
{{ wizard.form.as_p }}
</div>
{% endif %}
diff --git a/ishtar_common/templates/ishtar/wizard/validation_bar.html b/ishtar_common/templates/ishtar/wizard/validation_bar.html
index b99b9e689..0a30fb7e1 100644
--- a/ishtar_common/templates/ishtar/wizard/validation_bar.html
+++ b/ishtar_common/templates/ishtar/wizard/validation_bar.html
@@ -1,8 +1,24 @@
{% load i18n %}
-<div id='validation-bar'>
- <input type="submit" id="submit_form" name='validate' value="{% trans 'Validate' %}"/>
+<div id='validation-bar' class="row text-center">
+ <div class="col-sm">
+ <button type="submit" id="submit_form" name='validate'
+ value="validate" class="btn btn-success">
+ {% trans 'Validate' %}
+ </button>
+ </div>
{% if last_step_is_available and next_steps %}
- <input type="submit" id="submit_end_form" name='validate_and_end' value="{% trans 'Validate and end' %}"/>
+ <div class="col-sm">
+ <button type="submit" id="submit_end_form" name='validate_and_end'
+ value="validate_and_end" class="btn btn-success">
+ {% trans 'Validate and end' %}
+ </button>
+ </div>
{% endif %}
- <a href="{% url 'reset_wizards' %}" id="reset_wizards" class='button'>{% trans "Cancel" %}</a>
+ <div class="col-sm">
+ <a href="{% url 'reset_wizards' %}" id="reset_wizards">
+ <button type="button" class="btn btn-secondary">
+ {% trans "Cancel" %}
+ </button>
+ </a>
+ </div>
</div>
diff --git a/ishtar_common/templates/navbar.html b/ishtar_common/templates/navbar.html
new file mode 100644
index 000000000..0f6036a6c
--- /dev/null
+++ b/ishtar_common/templates/navbar.html
@@ -0,0 +1,59 @@
+{% load i18n %}
+<header class="navbar navbar-expand-lg navbar-dark bg-dark">
+ {% block header %}
+ <a class="navbar-brand" href="/">
+ <img src="{{STATIC_URL}}media/images/ishtar-blason.svg"
+ width="30" height="30" alt="">
+ </a>
+ {% include "actions.html" %}
+ <button class="navbar-toggler" type="button"
+ data-toggle="collapse" data-target="#navbar-actions"
+ aria-controls="navbar-actions" aria-expanded="false"
+ aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse justify-content-end" id="navbar-actions">
+ <ul class="navbar-nav">
+ {% if APP_NAME %}
+ <li class="nav-item">
+ <a class="navbar-brand" href="/">{{APP_NAME}}</a>
+ </li>
+ {% endif %}
+ {% if user.is_authenticated %}
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" data-toggle="dropdown"
+ href="#" role="button" aria-haspopup="true" aria-expanded="false">{{ user.username }}</a>
+ <div class="dropdown-menu dropdown-menu-right">
+ <a class="dropdown-item" href="{% url 'auth_logout' %}">
+ {% trans "Log out" %}
+ </a>
+ <a class="dropdown-item" href="{% url 'auth_password_change' %}">
+ {% trans "Change password" %}
+ </a>
+ </div>
+ </li>
+ {% else %}
+ <li class="nav-item">
+ <a class="nav-link" href="{% url 'auth_login' %}">{% trans "Log in" %}</a>
+ </li>
+ {% endif %}
+ {% if LANGUAGES|length > 1 %}
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" data-toggle="dropdown"
+ href="#" role="button" aria-haspopup="true" aria-expanded="false"><i class="fa fa-flag" aria-hidden="true"></i></a>
+ {% csrf_token %}
+ <div class="dropdown-menu dropdown-menu-right" id="language-selector">
+ {% for lang in LANGUAGES %}<a class="dropdown-item" href="#" data-lang="{{ lang.0 }}">
+ {{ lang.1 }}
+ </a>{% endfor %}
+ <form action="/i18n/setlang/" method="post" id='language-form'>
+ {% csrf_token %}
+ <input name="language" value="{{LANGUAGE_CODE}}">
+ </form>
+ </div>
+ </li>
+ {% endif %}
+ </ul>
+ </div>
+ {% endblock %}
+</header>
diff --git a/ishtar_common/templates/registration/login.html b/ishtar_common/templates/registration/login.html
index e8122f150..3e82a882f 100644
--- a/ishtar_common/templates/registration/login.html
+++ b/ishtar_common/templates/registration/login.html
@@ -2,18 +2,46 @@
{% load i18n %}
{% block content %}
-<div class='form'>
-<form method="post" action=".">{% csrf_token %}
-<table id='login'>
- <caption>{%trans "Log in"%}</caption>
-{{ form.as_table }}
- <tr class='submit'><td colspan='2'><input type="submit" value="{% trans 'Log in' %}" /></td></tr>
- <input type="hidden" name="next" value="{{ next }}" />
-</table>
-</form>
+<div class="row justify-content-center">
+ <div class="col-md-6">
+ <h4>{%trans "Log in"%}</h4>
+ <form method="post" action=".">{% csrf_token %}
+ <input type="hidden" name="next" value="{{ next }}" />
+ {% if form.non_field_errors %}
+ <div class="form-group row">
+ {% for error in form.non_field_errors %}
+ <div class="form-group has-errors text-danger small">
+ {{error}}
+ </div>
+ {% endfor %}
+ </div>
+ {% endif %}
+
+ {% for field in form %}
+ {% if field.errors %}
+ <div class="form-group row has-errors text-danger small">
+ {{field.errors}}
+ </div>
+ {% endif %}
+ <div class="form-group row">
+ <label for="{{field.id}}" class="col-6 col-form-label">{{field.label}}</label>
+ <div class="col-6">{{field}}</div>
+ </div>
+ {% endfor %}
+
+ <div class="row justify-content-center">
+ <div class="col-12">
+ <button type="submit" class="btn btn-primary">{% trans 'Log in' %}</button>
+ </div>
+ </div>
+ </form>
+ </div>
</div>
-<div class='info'>
-<p>{% trans "Forgot password?" %} <a href="{% url 'auth_password_reset' %}">{% trans "Reset it" %}</a></p>
-<p>{% trans "Not member?" %} <a href="{% url 'registration_register' %}">{% trans "Register" %}</a></p>
+<hr/>
+<div class="row justify-content-center">
+ <div class="col-md-6">
+ <small class="text-secondary">{% trans "Forgot password?" %} <a href="{% url 'auth_password_reset' %}">{% trans "Reset it" %}</a> &ndash;
+ {% trans "Not member?" %} <a href="{% url 'registration_register' %}">{% trans "Register" %}</a></small>
+ </div>
</div>
{% endblock %}
diff --git a/ishtar_common/templates/sheet_ope.html b/ishtar_common/templates/sheet_ope.html
deleted file mode 100644
index 1e18e8b7e..000000000
--- a/ishtar_common/templates/sheet_ope.html
+++ /dev/null
@@ -1,146 +0,0 @@
-{% extends "sheet.html" %}
-{% load i18n %}
-{% block content %}
-<div class='tool'>{%trans "Export as:"%} <a href='{% url show-file item.pk "odt" %}'>{%trans "OpenOffice.org file"%}</a>, <a href='{% url show-file item.pk "pdf" %}'>{%trans "PDF file"%}</a></div>
-<h3>{% trans "General"%}</h3>
-<p><label>{%trans "Year:"%}</label> <span class='value'>{{ item.year }}</span></p>
-<p><label>{%trans "Numerical reference:"%}</label> <span class='value'>{{ item.numeric_reference }}</span></p>
-
-{% if item.patriarche_code %}<p><label>{%trans "Patriarche OA code:"%}</label> <span class='value'>{{ item.patriarche_code }}</span></p>{%endif%}
-{% if item.patriarche_code_not_recorded %}<p><label>{%trans "Patriarche OA code not yet recorded !"%}</label></p>{%endif%}
-
-<p><label>{%trans "Operation's name:"%}</label> <span class='value'>{{ item.internal_reference }}</span></p>
-
-<p><label>{%trans "Edition date:"%}</label> <span class='value'>{{ item.history.all.0.history_date }}</span></p> <!-- date = now -->
-
-<p><label>{%trans "Begining date:"%}</label> <span class='value'>{{ item.begin_date }}</span></p>
-<p><label>{%trans "Field work end date:"%}</label> <span class='value'>{{ item.end_date }}</span></p>
-
-<p><label>{%trans "Head scientist:"%}</label> <span class='value'>{{ item.head_scientist.full_label }}</span></p>
-<p><label>{%trans "State:"%}</label> <span class='value'>{% if item.is_active %}{%trans "Active file"%}</span></p>
-{% else %}{%trans "Closed operation"%}</span></p>
-<p><label>{%trans "Closing date:"%}</label> <span class='value'>{{ item.closing.date }} <strong>{%trans "by" %}</strong> {{ item.closing.user }}</span></p>
-{% endif %}
-<p><label>{%trans "Type:"%}</label> <span class='value'>{{ item.operation_type }}</span></p>
-<p><label>{%trans "Surface:"%}</label> <span class='value'>{{ item.total_surface }} m<sup>2</sup> ({{ item.total_surface_ha }} ha)</span></p>
-<p><label>{%trans "Cost:"%}</label> <span class='value'>{{ item.cost }} Euros, ({{ item.cost_by_m2 }} Euros/m<sup>2</sup>)</span></p>
-<p><label>{%trans "Duration:"%}</label> <span class='value'>{{ item.duration }} {%trans "Day"%}s</span></p>
-
-<p><label>{%trans "Remains:"%}</label> <span class='value'>{{ item.remains.all|join:", " }}</span></p>
-<p><label>{%trans "Periods:"%}</label> <span class='value'>{{ item.periods.all|join:", " }}</span></p>
-
-{% if item.related_file %}
-<p><label>{%trans "Related file:"%}</label> <span class='value'><a href='{% url show-file item.related_file.pk ''%}'>{{ item.related_file }}</a></span></p><!-- Displayed as Year/index/Commune/Common_name This should be a link to the file sheet of the related file -->
-{% if item.related_file.is_preventive %}
-{% if item.operator_reference_code %}<p><label>{%trans "Operator's reference code:"%}</label> <span class='value'>{{ item.operator_reference_code }}</span></p>{% endif %}
-{% if item.related_file.town_planning_service %}<p><label>{%trans "Planning service:"%}</label> <span class='value'>{{ item.related_file.town_planning_service }}</span></p>{% endif %}
-{% if item.related_file.permit_type %}<p><label>{%trans "Permit type:"%}</label> <span class='value'>{{ item.related_file.permit_type }}</span></p>{% endif %}
-{% if item.related_file.permit_reference %}<p><label>{%trans "Permit reference:"%}</label> <span class='value'>{{ item.related_file.permit_reference }}</span></p>{% endif %}
-{% if item.related_file.general_contractor.attached_to %}<p><label>{%trans "General contractor organisation:"%}</label> <span class='value'>{{ item.related_file.general_contractor.attached_to }}</span></p>{% endif %} <!-- Contractor's organisation displayed as concat of Name/Adress/postal_code/city -->
-{% if item.related_file.general_contractor %}<p><label>{%trans "General contractor:"%}</label> <span class='value'>{{ item.related_file.general_contractor.full_label }}</span></p>{% endif %}
-{% endif %}
-{% endif %}
-
-{% if item.comment %}<p><label>{%trans "Comment:"%}</label> <span class='value'>{{ item.comment }}</span></p>{%endif%}
-
-<h3>{% trans "Localisation"%}</h3>
-<p><label>{%trans "Towns:"%}</label> <span class='value'>{{ item.towns.all|join:", " }}</span></p>
-
-<p><label>{%trans "Main address:"%}</label> <span class='value'>{{ item.address }}</span></p>
-{% if item.address_complement %}<p><label>{%trans "Complement:"%}</label> <span class='value'>{{ item.address_complement }}</span></p>{%endif%}
-{% if item.postal_code %}<p><label>{%trans "Postal code:"%}</label> <span class='value'>{{ item.postal_code }}</span></p>{%endif%}
-
-<p><label>{%trans "Lambert X:"%}</label> <span class='value'>{{ item.lambert_x }}</span></p>
-<p><label>{%trans "Lambert Y:"%}</label> <span class='value'>{{ item.lambert_y }}</span></p>
-<p><label>{%trans "Altitude (m NGF):"%}</label> <span class='value'>{{ item.altitude }}</span></p>
-
-<table>
- <caption>{%trans "Associated parcels"%}</caption>
- <tr>
- <th>{% trans "Commune" %}</th>
- <th>{% trans "Year" %}</th>
- <th>{% trans "Section" %}</th>
- <th>{% trans "Parcel" %}</th>
- <th>{% trans "Owner" %}</th>
- </tr>
- {% for parcels in item.parcel.all %}
- <tr>
- <td>{{operation.commune}}</td>
- <td>{{operation.year}}</td>
- <td>{{operation.section}}</td>
- <td>{{operation.parcel}}</td>
- <td class='string'>{{operation.parcel.owner}}</td>
- </tr>
- {% empty %}
- <tr><td colspan="5" class='no_items'>{% trans "No parcel associated to this operation" %}</td></tr>
- {% endfor %}
-</table>
-
-<h3>{% trans "Admninistrative acts"%}</h3>
-<table>
- <caption>{%trans "Admninistrative acts"%}</caption>
- <tr>
- <th>{% trans "Year" %}</th>
- <th>{% trans "Reference" %}</th>
- <th>{% trans "Type" %}</th>
- <th>{% trans "Date" %}</th>
- </tr>
- {% for act in item.administrative_act.all %}
- <tr>
- <td>{{act.signature_date.year}}</td>
- <td>{{act.ref_sra}}</td>
- <td class='string'>{{act.act_type}}</td>
- <td>{{act.signature_date}}</td>
- </tr>
- {% empty %}
- <tr><td colspan="4" class='no_items'>{% trans "No administrative act associated to this operation" %}</td></tr>
- {% endfor %}
-</table>
-
-<h3>{% trans "Documentation"%}</h3>
-<table>
- <caption>{%trans "Documents"%}</caption>
- <tr>
- <th>{% trans "Title" %}</th>
- <th>{% trans "Type" %}</th>
- <th>{% trans "Authors" %}</th>
- <th>{% trans "Localisation" %}</th>
- </tr>
- {% for doc in item.doc.all %}
- <tr>
- <td>{{ doc.title }}</td>
- <td class='string'>{{doc.type}}</td>
- <td>{{ doc.author.all|join:", " }}</td>
- <td>{{ doc.localisation }}</td>
- </tr>
- {% empty %}
- <tr><td colspan="4" class='no_items'>{% trans "No document associated to this operation" %}</td></tr>
- {% endfor %}
-</table>
-
-<h3>{% trans "Context Records"%}</h3>
-<table>
- <caption>{%trans "Context Records"%}</caption>
- <tr>
- <th>{% trans "ID" %}</th>
- <th>{% trans "Type" %}</th>
- <th>{% trans "Chronology" %}</th>
- <th>{% trans "Description" %}</th>
- <th>{% trans "Parcel" %}</th>
- <th class='link'>&nbsp;</th>
- </tr>
- {% for record_unit in item.record_unit.all %}
- <tr>
- <td>{{ record_unit.label }}</td>
- <td class='string'>{{record_unit.unit_type}}</td>
- <td>{{ record_unit.period.all|join:", " }}</td>
- <td>{{ record_unit.description }}</td>
- <td>{{ record_unit.section_and_parcel }}</td><!-- Displayed as (Section)-(parcel number). A record unit can be linked to only one parcel. -->
- <td class='link'><a href="#{#{%url show-record_unit record_unit.pk%}#}">{% trans "Details" %}</a></td>
- </tr>
- {% empty %}
- <tr><td colspan="6" class='no_items'>{% trans "No context record associated to this operation" %}</td></tr>
- {% endfor %}
-</table>
-
-{% endblock %}
diff --git a/ishtar_common/templates/welcome.html b/ishtar_common/templates/welcome.html
index 4b9f3b5c5..59a53d759 100644
--- a/ishtar_common/templates/welcome.html
+++ b/ishtar_common/templates/welcome.html
@@ -1,11 +1,21 @@
{% load i18n %}
<h2>{% trans "Welcome in Ishtar, open source software for management and inventory of archaeological data" %}</h2>
-{{random_image}}
-<p>{% trans "Some useful links:" %}</p>
-<ul>
- <li><a href='https://ishtar-archeo.net' target="_blank">{% trans "Presentation site and blog" %}</a>{% trans ":"%} {% trans "stay tuned with Ishtar news!" %}</li>
- <li><a href='{% url 'admin:index' %}' target="_blank">{% trans "Admin interface" %}</a>{% trans ":"%} {% trans "for admin only." %}</li>
- <li><a href="https://forum.ishtar-archeo.net/" target="_blank">{% trans "Forum" %}</a>{% trans ":"%} {% trans "need help? find a new bug? a fantastic feature to propose? Here is the place to go." %}</li>
- <li><a href="https://gitlab.com/iggdrasil/ishtar" target="_blank">{% trans "Source code" %}</a> &ndash; <a href="https://tickets.iggdrasil.net/projects/ishtar" target="_blank">{% trans "tickets" %}</a>{% trans ":"%} {% trans "where the magic happens." %}</li>
-</ul>
+<div class="row">
+ <div class="col col-lg-4">
+ {{random_image}}
+ </div>
+ <div class="col col-lg-8">
+ <div class="card">
+ <div class="card-body">
+ <p>{% trans "Some useful links:" %}</p>
+ <ul>
+ <li><a href='https://ishtar-archeo.net' target="_blank">{% trans "Presentation site and blog" %}</a>{% trans ":"%} {% trans "stay tuned with Ishtar news!" %}</li>
+ <li><a href="{% url 'admin:index' %}" target="_blank">{% trans "Admin interface" %}</a>{% trans ":"%} {% trans "for admin only." %}</li>
+ <li><a href="https://forum.ishtar-archeo.net/" target="_blank">{% trans "Forum" %}</a>{% trans ":"%} {% trans "need help? find a new bug? a fantastic feature to propose? Here is the place to go." %}</li>
+ <li><a href="https://gitlab.com/iggdrasil/ishtar" target="_blank">{% trans "Source code" %}</a> &ndash; <a href="https://tickets.iggdrasil.net/projects/ishtar" target="_blank">{% trans "tickets" %}</a>{% trans ":"%} {% trans "where the magic happens." %}</li>
+ </ul>
+ </div>
+ </div>
+ </div>
+</div>