Make it possible to hide columns (closes #1058)

Hide new overview page columns by default
This commit is contained in:
Bernd Bestel 2020-11-11 21:11:17 +01:00
parent b15740bded
commit 0245a925b7
No known key found for this signature in database
GPG Key ID: 71BD34C0D4891300
30 changed files with 307 additions and 58 deletions

View File

@ -94,6 +94,35 @@
- New Userfield type "File" to attach any file, will be rendered as a link to the file in tables (if enabled) (thanks @fipwmaqzufheoxq92ebc) - New Userfield type "File" to attach any file, will be rendered as a link to the file in tables (if enabled) (thanks @fipwmaqzufheoxq92ebc)
- New Userfield type "Picture" to attach a picture, the picture will be rendered (small) in tables (if enabled) (thanks @fipwmaqzufheoxq92ebc) - New Userfield type "Picture" to attach a picture, the picture will be rendered (small) in tables (if enabled) (thanks @fipwmaqzufheoxq92ebc)
### General & other improvements/fixes
- UI refresh / style improvements (thanks @zsarnett for the idea and initial work on this)
- Improved mobile views (thanks @4lloyd for the idea and initial work on this)
- The buttons on the top of each page and the filter row is now collapsed (use the ellipsis/filter button to show them, this also superseded the shopping list compact view)
- Tables are horizontally scrollable (instead of collapsing columns which don't fit)
- Table columns can now be shown/hidden (new little eye icon on the top left corner on each table)
- There are also new columns on some pages, hidden by default
- Dialogs are now used everywhere where appropriate instead of jumping between pages (for exampel when adding/editing shopping list items)
- Added a "Clear filter"-button on all pages (with filters) to quickly reset applied filters
- The data path (previously fixed to the `data` folder) is now configurable, making it possible to run multiple grocy instances from the same directory (with different `config.php` files / different database, etc.) (thanks @fgrsnau)
- Via an environment variable `GROCY_DATAPATH` (higher priority)
- Via an FastCGI parameter `GROCY_DATAPATH` (lower priority)
- The language can now be set per user (see the new user settings page / top right corner settings menu) (thanks @fipwmaqzufheoxq92ebc)
- Additionally, the language is now also auto-guessed based on the browser locale (HTTP-Header `Accept-Language`)
- The `config.php` option `CULTURE` was renamed to `DEFAULT_LOCALE`
- So the used language is based on (in that order)
- The user setting
- If not set, then based on browser locale
- If no matching localizaton was found, `DEFAULT_LOCALE` from `config.php` is used
- Performance improvements (page loading time) of the stock overview page (thanks @fipwmaqzufheoxq92ebc)
- The prerequisites checker now also checks for the minimum required SQLite version (thanks @Forceu)
- Replaced (again, added before in v2.7.0, then reverted in v2.7.1 due to some problems) [QuaggaJS](https://github.com/serratus/quaggaJS) (seems to be unmaintained) by [Quagga2](https://github.com/ericblade/quagga2)
- More `config.php` settings (see the section `Component configuration for Quagga2`) to tweak Quagga2 (this is the component used for device camera for barcode scanning) (thanks @andrelam)
- Some localization string fixes (thanks @duckfullstop)
- Fixed that XSS / HTML injection was possible through some user input fields (low severity / not really a problem as this could not be abused unauthenticated)
- New translations: (thanks all the translators)
- Greek (demo available at https://el.demo.grocy.info)
- Korean (demo available at https://ko.demo.grocy.info)
### API improvements/fixes ### API improvements/fixes
- Breaking changes: - Breaking changes:
- All prices are now related to the products **stock** quantity unit (instead of the purchase QU) - All prices are now related to the products **stock** quantity unit (instead of the purchase QU)
@ -133,30 +162,3 @@
- Fixed that the endpoint `/stock/consume` returned the response code `200` and an empty response body when `stock_entry_id` was set (consuming a specific stock entry) but invalid (now returns the response code `400`) (thanks @fipwmaqzufheoxq92ebc) - Fixed that the endpoint `/stock/consume` returned the response code `200` and an empty response body when `stock_entry_id` was set (consuming a specific stock entry) but invalid (now returns the response code `400`) (thanks @fipwmaqzufheoxq92ebc)
- Endpoint `/calendar/ical`: Fixed that "Track date only"-chores were always set to happen at 12am (are treated as all-day events now) - Endpoint `/calendar/ical`: Fixed that "Track date only"-chores were always set to happen at 12am (are treated as all-day events now)
- Fixed (again) that CORS was broken - Fixed (again) that CORS was broken
### General & other improvements/fixes
- UI refresh / style improvements (thanks @zsarnett for the idea and initial work on this)
- Improved mobile views (thanks @4lloyd for the idea and initial work on this)
- The buttons on the top of each page and the filter row is now collapsed (use the ellipsis/filter button to show them, this also superseded the shopping list compact view)
- Tables are horizontally scrollable (instead of collapsing columns which don't fit)
- Dialogs are now used everywhere where appropriate instead of jumping between pages (for exampel when adding/editing shopping list items)
- Added a "Clear filter"-button on all pages (with filters) to quickly reset applied filters
- The data path (previously fixed to the `data` folder) is now configurable, making it possible to run multiple grocy instances from the same directory (with different `config.php` files / different database, etc.) (thanks @fgrsnau)
- Via an environment variable `GROCY_DATAPATH` (higher priority)
- Via an FastCGI parameter `GROCY_DATAPATH` (lower priority)
- The language can now be set per user (see the new user settings page / top right corner settings menu) (thanks @fipwmaqzufheoxq92ebc)
- Additionally, the language is now also auto-guessed based on the browser locale (HTTP-Header `Accept-Language`)
- The `config.php` option `CULTURE` was renamed to `DEFAULT_LOCALE`
- So the used language is based on (in that order)
- The user setting
- If not set, then based on browser locale
- If no matching localizaton was found, `DEFAULT_LOCALE` from `config.php` is used
- Performance improvements (page loading time) of the stock overview page (thanks @fipwmaqzufheoxq92ebc)
- The prerequisites checker now also checks for the minimum required SQLite version (thanks @Forceu)
- Replaced (again, added before in v2.7.0, then reverted in v2.7.1 due to some problems) [QuaggaJS](https://github.com/serratus/quaggaJS) (seems to be unmaintained) by [Quagga2](https://github.com/ericblade/quagga2)
- More `config.php` settings (see the section `Component configuration for Quagga2`) to tweak Quagga2 (this is the component used for device camera for barcode scanning) (thanks @andrelam)
- Some localization string fixes (thanks @duckfullstop)
- Fixed that XSS / HTML injection was possible through some user input fields (low severity / not really a problem as this could not be abused unauthenticated)
- New translations: (thanks all the translators)
- Greek (demo available at https://el.demo.grocy.info)
- Korean (demo available at https://ko.demo.grocy.info)

View File

@ -1942,3 +1942,6 @@ msgstr ""
msgid "Price per stock unit" msgid "Price per stock unit"
msgstr "" msgstr ""
msgid "Hide/view columns"
msgstr ""

View File

@ -661,6 +661,16 @@ $.extend(true, $.fn.dataTable.defaults, {
{ {
column.search.search = ""; column.search.search = "";
}); });
},
'stateSaveCallback': function(settings, data)
{
// TODO: Save/load this server side
localStorage.setItem('datatables_state_' + settings.sTableId, JSON.stringify(data));
},
'stateLoadCallback': function(settings, data)
{
// TODO: Save/load this server side
return JSON.parse(localStorage.getItem('datatables_state_' + settings.sTableId));
} }
}); });
@ -751,3 +761,67 @@ $(window).on("message", function(e)
window.location.reload(); window.location.reload();
} }
}); });
$("#change-table-columns-visibility").on("click", function(e)
{
var dataTableSelector = $(e.currentTarget).attr("data-table-selector");
var dataTable = $(dataTableSelector).DataTable();
var columnCheckBoxesHtml = "";
dataTable.columns().every(function()
{
var index = this.index();
var title = $(this.header()).text();
var visible = this.visible();
if (title.isEmpty() || title.startsWith("Hidden"))
{
return;
}
var checked = "checked";
if (!visible)
{
checked = "";
}
columnCheckBoxesHtml += '<div class="form-group"> \
<div class="custom-control custom-checkbox"> \
<input ' + checked + ' class="form-check-input custom-control-input change-table-columns-visibility-toggle" \
type="checkbox" \
id="column-' + index.toString() + '" \
data-table-selector="' + dataTableSelector + '" \
data-column-index="' + index.toString() + '" \
value="1"> \
<label class="form-check-label custom-control-label" \
for="column-' + index.toString() + '">' + title + ' \
</label> \
</div> \
</div>'
});
bootbox.dialog({
message: '<div class="text-center"><h5>' + __t('Hide/view columns') + '</h5><hr><div class="text-left">' + columnCheckBoxesHtml + '</div></div>',
size: 'small',
backdrop: true,
closeButton: false,
buttons: {
cancel: {
label: __t('OK'),
className: 'btn-primary responsive-button',
callback: function()
{
bootbox.hideAll();
}
}
}
});
});
$(document).on("click", ".change-table-columns-visibility-toggle", function()
{
var dataTableSelector = $(this).attr("data-table-selector");
var columnIndex = $(this).attr("data-column-index");
var dataTable = $(dataTableSelector).DataTable();
dataTable.columns(columnIndex).visible(this.checked);
});

View File

@ -7,7 +7,9 @@
{ 'searchable': false, "targets": 0 }, { 'searchable': false, "targets": 0 },
{ 'visible': false, 'targets': 6 }, { 'visible': false, 'targets': 6 },
{ 'visible': false, 'targets': 7 }, { 'visible': false, 'targets': 7 },
{ 'visible': false, 'targets': 8 } { 'visible': false, 'targets': 8 },
{ 'visible': false, 'targets': 2 },
{ 'visible': false, 'targets': 4 }
], ],
}); });

View File

@ -70,7 +70,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#batteries-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Name') }}</th> <th>{{ $__t('Name') }}</th>
<th>{{ $__t('Description') }}</th> <th>{{ $__t('Description') }}</th>
<th>{{ $__t('Used in') }}</th> <th>{{ $__t('Used in') }}</th>

View File

@ -65,7 +65,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#batteries-journal-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Battery') }}</th> <th>{{ $__t('Battery') }}</th>
<th>{{ $__t('Tracked time') }}</th> <th>{{ $__t('Tracked time') }}</th>
</tr> </tr>

View File

@ -87,7 +87,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#batteries-overview-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Battery') }}</th> <th>{{ $__t('Battery') }}</th>
<th>{{ $__t('Used in') }}</th> <th>{{ $__t('Used in') }}</th>
<th>{{ $__t('Last charged') }}</th> <th>{{ $__t('Last charged') }}</th>

View File

@ -70,7 +70,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#chores-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Name') }}</th> <th>{{ $__t('Name') }}</th>
<th>{{ $__t('Period type') }}</th> <th>{{ $__t('Period type') }}</th>
<th>{{ $__t('Description') }}</th> <th>{{ $__t('Description') }}</th>

View File

@ -65,7 +65,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#chores-journal-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Chore') }}</th> <th>{{ $__t('Chore') }}</th>
<th>{{ $__t('Tracked time') }}</th> <th>{{ $__t('Tracked time') }}</th>
@if(GROCY_FEATURE_FLAG_CHORES_ASSIGNMENTS) @if(GROCY_FEATURE_FLAG_CHORES_ASSIGNMENTS)

View File

@ -109,7 +109,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#chores-overview-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Chore') }}</th> <th>{{ $__t('Chore') }}</th>
<th>{{ $__t('Next estimated tracking') }}</th> <th>{{ $__t('Next estimated tracking') }}</th>
<th>{{ $__t('Last tracked') }}</th> <th>{{ $__t('Last tracked') }}</th>

View File

@ -61,7 +61,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#equipment-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Name') }}</th> <th>{{ $__t('Name') }}</th>
@include('components.userfields_thead', array( @include('components.userfields_thead', array(

View File

@ -70,7 +70,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#locations-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Name') }}</th> <th>{{ $__t('Name') }}</th>
<th>{{ $__t('Description') }}</th> <th>{{ $__t('Description') }}</th>

View File

@ -75,7 +75,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#apikeys-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('API key') }}</th> <th>{{ $__t('API key') }}</th>
<th>{{ $__t('User') }}</th> <th>{{ $__t('User') }}</th>
<th>{{ $__t('Expires') }}</th> <th>{{ $__t('Expires') }}</th>

View File

@ -393,7 +393,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#barcode-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Barcode') }}</th> <th>{{ $__t('Barcode') }}</th>
@if(GROCY_FEATURE_FLAG_STOCK_PRICE_TRACKING) @if(GROCY_FEATURE_FLAG_STOCK_PRICE_TRACKING)
<th>{{ $__t('Store') }}</th> <th>{{ $__t('Store') }}</th>
@ -478,7 +484,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#qu-conversion-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Quantity unit from') }}</th> <th>{{ $__t('Quantity unit from') }}</th>
<th>{{ $__t('Quantity unit to') }}</th> <th>{{ $__t('Quantity unit to') }}</th>
<th>{{ $__t('Factor') }}</th> <th>{{ $__t('Factor') }}</th>

View File

@ -70,7 +70,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#productgroups-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Name') }}</th> <th>{{ $__t('Name') }}</th>
<th>{{ $__t('Description') }}</th> <th>{{ $__t('Description') }}</th>
<th>{{ $__t('Product count') }}</th> <th>{{ $__t('Product count') }}</th>

View File

@ -88,7 +88,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#products-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Name') }}</th> <th>{{ $__t('Name') }}</th>
<th class="@if(!GROCY_FEATURE_FLAG_STOCK_LOCATION_TRACKING) d-none @endif">{{ $__t('Location') }}</th> <th class="@if(!GROCY_FEATURE_FLAG_STOCK_LOCATION_TRACKING) d-none @endif">{{ $__t('Location') }}</th>
<th>{{ $__t('Min. stock amount') }}</th> <th>{{ $__t('Min. stock amount') }}</th>

View File

@ -126,7 +126,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#qu-conversions-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Factor') }}</th> <th>{{ $__t('Factor') }}</th>
<th>{{ $__t('Unit') }}</th> <th>{{ $__t('Unit') }}</th>
</tr> </tr>

View File

@ -70,7 +70,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#quantityunits-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Name') }}</th> <th>{{ $__t('Name') }}</th>
<th>{{ $__t('Description') }}</th> <th>{{ $__t('Description') }}</th>

View File

@ -145,11 +145,17 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#recipes-pos-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Product') }}</th> <th>{{ $__t('Product') }}</th>
<th>{{ $__t('Amount') }}</th> <th>{{ $__t('Amount') }}</th>
<th class="fit-content">{{ $__t('Note') }}</th> <th class="fit-content">{{ $__t('Note') }}</th>
<th class="d-none">Hiden ingredient group</th> <th class="d-none">Hidden ingredient group</th>
</tr> </tr>
</thead> </thead>
<tbody class="d-none"> <tbody class="d-none">
@ -242,7 +248,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#recipes-includes-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Recipe') }}</th> <th>{{ $__t('Recipe') }}</th>
<th>{{ $__t('Servings') }}</th> <th>{{ $__t('Servings') }}</th>
</tr> </tr>

View File

@ -99,7 +99,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#recipes-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Name') }}</th> <th>{{ $__t('Name') }}</th>
<th>{{ $__t('Desired servings') }}</th> <th>{{ $__t('Desired servings') }}</th>
<th>{{ $__t('Requirements fulfilled') }}</th> <th>{{ $__t('Requirements fulfilled') }}</th>

View File

@ -175,10 +175,16 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#shoppinglist-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Product') }} / <em>{{ $__t('Note') }}</em></th> <th>{{ $__t('Product') }} / <em>{{ $__t('Note') }}</em></th>
<th>{{ $__t('Amount') }}</th> <th>{{ $__t('Amount') }}</th>
<th class="d-none">Hiden product group</th> <th class="d-none">Hidden product group</th>
<th class="d-none">Hidden status</th> <th class="d-none">Hidden status</th>
@include('components.userfields_thead', array( @include('components.userfields_thead', array(

View File

@ -70,7 +70,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#shoppinglocations-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Name') }}</th> <th>{{ $__t('Name') }}</th>
<th>{{ $__t('Description') }}</th> <th>{{ $__t('Description') }}</th>

View File

@ -36,7 +36,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#stockentries-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th class="d-none">product_id</th> <!-- This must be in the first column for searching --> <th class="d-none">product_id</th> <!-- This must be in the first column for searching -->
<th>{{ $__t('Product') }}</th> <th>{{ $__t('Product') }}</th>
<th>{{ $__t('Amount') }}</th> <th>{{ $__t('Amount') }}</th>

View File

@ -76,7 +76,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#stock-journal-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Product') }}</th> <th>{{ $__t('Product') }}</th>
<th>{{ $__t('Amount') }}</th> <th>{{ $__t('Amount') }}</th>
<th>{{ $__t('Booking time') }}</th> <th>{{ $__t('Booking time') }}</th>

View File

@ -145,7 +145,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#stock-overview-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Product') }}</th> <th>{{ $__t('Product') }}</th>
<th>{{ $__t('Product group') }}</th> <th>{{ $__t('Product group') }}</th>
<th>{{ $__t('Amount') }}</th> <th>{{ $__t('Amount') }}</th>

View File

@ -70,7 +70,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#taskcategories-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Name') }}</th> <th>{{ $__t('Name') }}</th>
<th>{{ $__t('Description') }}</th> <th>{{ $__t('Description') }}</th>

View File

@ -105,7 +105,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#tasks-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Task') }}</th> <th>{{ $__t('Task') }}</th>
<th>{{ $__t('Due') }}</th> <th>{{ $__t('Due') }}</th>
<th class="d-none">Hidden category</th> <th class="d-none">Hidden category</th>

View File

@ -66,7 +66,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#userentities-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Name') }}</th> <th>{{ $__t('Name') }}</th>
<th>{{ $__t('Caption') }}</th> <th>{{ $__t('Caption') }}</th>
</tr> </tr>

View File

@ -80,7 +80,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#userfields-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Entity') }}</th> <th>{{ $__t('Entity') }}</th>
<th>{{ $__t('Name') }}</th> <th>{{ $__t('Name') }}</th>
<th>{{ $__t('Caption') }}</th> <th>{{ $__t('Caption') }}</th>

View File

@ -66,7 +66,13 @@
class="table table-sm table-striped nowrap w-100"> class="table table-sm table-striped nowrap w-100">
<thead> <thead>
<tr> <tr>
<th class="border-right"></th> <th class="border-right"><a id="change-table-columns-visibility"
class="text-muted"
data-toggle="tooltip"
title="{{ $__t('Hide/view columns') }}"
data-table-selector="#users-table"
href="#"><i class="fas fa-eye"></i></a>
</th>
<th>{{ $__t('Username') }}</th> <th>{{ $__t('Username') }}</th>
<th>{{ $__t('First name') }}</th> <th>{{ $__t('First name') }}</th>
<th>{{ $__t('Last name') }}</th> <th>{{ $__t('Last name') }}</th>