70 lines
2.9 KiB
JavaScript
70 lines
2.9 KiB
JavaScript
// DataTables (classic jQuery plugin) init, partilhado pelas listagens do
|
|
// backoffice que já tinham exportação CSV (audit 6.9). Cliente-only — todas
|
|
// as tabelas aqui são pequenas (bem abaixo de 60 linhas), por isso sem
|
|
// server-side processing nem AJAX.
|
|
//
|
|
// Tradução pt-PT oficial da DataTables (i18n/pt-PT.json), inline: não se
|
|
// carrega de CDN nenhum, pela mesma razão que o Roboto e o FontAwesome
|
|
// passaram a ser servidos daqui (RGPD — sem pedidos a terceiros antes do
|
|
// consentimento).
|
|
var DATATABLES_PT_PT = {
|
|
decimal: ',',
|
|
emptyTable: 'Não existem dados disponíveis na tabela',
|
|
info: 'A mostrar registos de _START_ até _END_ de um total de _TOTAL_ registos',
|
|
infoEmpty: 'A mostrar registos de 0 até 0 de um total de 0 registos',
|
|
infoFiltered: '(filtrados de um total de _MAX_ registos)',
|
|
infoPostFix: '',
|
|
thousands: '.',
|
|
lengthMenu: 'Mostrar _MENU_ registos',
|
|
loadingRecords: 'A carregar...',
|
|
processing: 'A processar...',
|
|
search: 'Pesquisar:',
|
|
zeroRecords: 'Não foram encontrados resultados',
|
|
paginate: {
|
|
first: 'Primeiro',
|
|
last: 'Último',
|
|
next: 'Seguinte',
|
|
previous: 'Anterior'
|
|
},
|
|
aria: {
|
|
sortAscending: ': ativar para ordenar a coluna de forma ascendente',
|
|
sortDescending: ': ativar para ordenar a coluna de forma descendente'
|
|
},
|
|
select: {
|
|
rows: {
|
|
_: 'Selecionadas %d linhas',
|
|
0: 'Nenhuma linha selecionada',
|
|
1: 'Selecionada 1 linha'
|
|
}
|
|
}
|
|
};
|
|
|
|
// opts pode trazer columnDefs (p.ex. marcar a coluna de Ações como
|
|
// orderable:false/searchable:false) e qualquer outra opção da DataTable —
|
|
// é feito merge profundo por cima destes valores por omissão.
|
|
function initDataTable(selector, opts) {
|
|
if (!window.jQuery || !jQuery.fn || !jQuery.fn.DataTable) return null;
|
|
var $table = jQuery(selector);
|
|
if (!$table.length) return null;
|
|
// Listagem vazia: as páginas desenham uma única linha <td colspan> com a
|
|
// mensagem, que a DataTables rejeita (nº de colunas errado → erro). Tira-se
|
|
// a linha e a mensagem dela (com links) passa a ser o emptyTable.
|
|
var language = DATATABLES_PT_PT;
|
|
var $rows = $table.find('tbody > tr');
|
|
var $only = $rows.length === 1 ? $rows.children('td[colspan]') : jQuery();
|
|
if ($only.length === 1 && $rows.children().length === 1) {
|
|
language = jQuery.extend({}, DATATABLES_PT_PT, { emptyTable: $only.html() });
|
|
$rows.remove();
|
|
}
|
|
return $table.DataTable(jQuery.extend(true, {
|
|
language: language,
|
|
pageLength: 25,
|
|
lengthMenu: [[10, 25, 50, -1], [10, 25, 50, 'Todos']],
|
|
responsive: true,
|
|
// Sem ordenação inicial: a ordem que a página já desenha (mais
|
|
// recente primeiro, ordem manual, etc.) é a que faz sentido por
|
|
// omissão — impor uma coluna aqui só a desfazia sem avisar.
|
|
order: []
|
|
}, opts || {}));
|
|
}
|