mirror of
https://github.com/dani-garcia/vaultwarden.git
synced 2025-09-13 03:55:58 +03:00
Update Rust, Crates and other deps (#5709)
- Updated Rust to v1.85.1 - Updated crates and fixed breaking changes - Updated datatables js - Updated GitHub Actions Signed-off-by: BlackDex <black.dex@gmail.com>
This commit is contained in:
committed by
GitHub
parent
07b869b3ef
commit
8dfe805954
@@ -6,7 +6,7 @@ use std::{
|
||||
time::Duration,
|
||||
};
|
||||
|
||||
use hickory_resolver::{system_conf::read_system_conf, TokioAsyncResolver};
|
||||
use hickory_resolver::{name_server::TokioConnectionProvider, TokioResolver};
|
||||
use once_cell::sync::Lazy;
|
||||
use regex::Regex;
|
||||
use reqwest::{
|
||||
@@ -173,7 +173,7 @@ impl std::error::Error for CustomHttpClientError {}
|
||||
#[derive(Debug, Clone)]
|
||||
enum CustomDnsResolver {
|
||||
Default(),
|
||||
Hickory(Arc<TokioAsyncResolver>),
|
||||
Hickory(Arc<TokioResolver>),
|
||||
}
|
||||
type BoxError = Box<dyn std::error::Error + Send + Sync>;
|
||||
|
||||
@@ -184,9 +184,9 @@ impl CustomDnsResolver {
|
||||
}
|
||||
|
||||
fn new() -> Arc<Self> {
|
||||
match read_system_conf() {
|
||||
Ok((config, opts)) => {
|
||||
let resolver = TokioAsyncResolver::tokio(config.clone(), opts.clone());
|
||||
match TokioResolver::builder(TokioConnectionProvider::default()) {
|
||||
Ok(builder) => {
|
||||
let resolver = builder.build();
|
||||
Arc::new(Self::Hickory(Arc::new(resolver)))
|
||||
}
|
||||
Err(e) => {
|
||||
|
26
src/static/scripts/datatables.css
vendored
26
src/static/scripts/datatables.css
vendored
@@ -4,13 +4,12 @@
|
||||
*
|
||||
* To rebuild or modify this file with the latest versions of the included
|
||||
* software please visit:
|
||||
* https://datatables.net/download/#bs5/dt-2.1.8
|
||||
* https://datatables.net/download/#bs5/dt-2.2.2
|
||||
*
|
||||
* Included libraries:
|
||||
* DataTables 2.1.8
|
||||
* DataTables 2.2.2
|
||||
*/
|
||||
|
||||
@charset "UTF-8";
|
||||
:root {
|
||||
--dt-row-selected: 13, 110, 253;
|
||||
--dt-row-selected-text: 255, 255, 255;
|
||||
@@ -43,6 +42,9 @@ table.dataTable tr.dt-hasChild td.dt-control:before {
|
||||
border-bottom: 0px solid transparent;
|
||||
border-right: 5px solid transparent;
|
||||
}
|
||||
table.dataTable tfoot:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
html.dark table.dataTable td.dt-control:before,
|
||||
:root[data-bs-theme=dark] table.dataTable td.dt-control:before,
|
||||
@@ -90,8 +92,8 @@ table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order:before {
|
||||
position: absolute;
|
||||
display: block;
|
||||
bottom: 50%;
|
||||
content: "▲";
|
||||
content: "▲"/"";
|
||||
content: "\25B2";
|
||||
content: "\25B2"/"";
|
||||
}
|
||||
table.dataTable thead > tr > th.dt-orderable-desc span.dt-column-order:after, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order:after,
|
||||
table.dataTable thead > tr > td.dt-orderable-desc span.dt-column-order:after,
|
||||
@@ -99,8 +101,8 @@ table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order:after {
|
||||
position: absolute;
|
||||
display: block;
|
||||
top: 50%;
|
||||
content: "▼";
|
||||
content: "▼"/"";
|
||||
content: "\25BC";
|
||||
content: "\25BC"/"";
|
||||
}
|
||||
table.dataTable thead > tr > th.dt-orderable-asc, table.dataTable thead > tr > th.dt-orderable-desc, table.dataTable thead > tr > th.dt-ordering-asc, table.dataTable thead > tr > th.dt-ordering-desc,
|
||||
table.dataTable thead > tr > td.dt-orderable-asc,
|
||||
@@ -251,6 +253,11 @@ table.dataTable th,
|
||||
table.dataTable td {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
table.dataTable th.dt-type-numeric, table.dataTable th.dt-type-date,
|
||||
table.dataTable td.dt-type-numeric,
|
||||
table.dataTable td.dt-type-date {
|
||||
text-align: right;
|
||||
}
|
||||
table.dataTable th.dt-left,
|
||||
table.dataTable td.dt-left {
|
||||
text-align: left;
|
||||
@@ -276,11 +283,6 @@ table.dataTable td.dt-empty {
|
||||
text-align: center;
|
||||
vertical-align: top;
|
||||
}
|
||||
table.dataTable th.dt-type-numeric, table.dataTable th.dt-type-date,
|
||||
table.dataTable td.dt-type-numeric,
|
||||
table.dataTable td.dt-type-date {
|
||||
text-align: right;
|
||||
}
|
||||
table.dataTable thead th,
|
||||
table.dataTable thead td,
|
||||
table.dataTable tfoot th,
|
||||
|
503
src/static/scripts/datatables.js
vendored
503
src/static/scripts/datatables.js
vendored
@@ -4,34 +4,16 @@
|
||||
*
|
||||
* To rebuild or modify this file with the latest versions of the included
|
||||
* software please visit:
|
||||
* https://datatables.net/download/#bs5/dt-2.1.8
|
||||
* https://datatables.net/download/#bs5/dt-2.2.2
|
||||
*
|
||||
* Included libraries:
|
||||
* DataTables 2.1.8
|
||||
* DataTables 2.2.2
|
||||
*/
|
||||
|
||||
/*! DataTables 2.1.8
|
||||
/*! DataTables 2.2.2
|
||||
* © SpryMedia Ltd - datatables.net/license
|
||||
*/
|
||||
|
||||
/**
|
||||
* @summary DataTables
|
||||
* @description Paginate, search and order HTML tables
|
||||
* @version 2.1.8
|
||||
* @author SpryMedia Ltd
|
||||
* @contact www.datatables.net
|
||||
* @copyright SpryMedia Ltd.
|
||||
*
|
||||
* This source file is free software, available under the following license:
|
||||
* MIT license - https://datatables.net/license
|
||||
*
|
||||
* This source file is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
|
||||
*
|
||||
* For details please refer to: https://www.datatables.net
|
||||
*/
|
||||
|
||||
(function( factory ) {
|
||||
"use strict";
|
||||
|
||||
@@ -441,7 +423,6 @@
|
||||
thead = $('<thead/>').appendTo($this);
|
||||
}
|
||||
oSettings.nTHead = thead[0];
|
||||
$('tr', thead).addClass(oClasses.thead.row);
|
||||
|
||||
var tbody = $this.children('tbody');
|
||||
if ( tbody.length === 0 ) {
|
||||
@@ -456,7 +437,6 @@
|
||||
tfoot = $('<tfoot/>').appendTo($this);
|
||||
}
|
||||
oSettings.nTFoot = tfoot[0];
|
||||
$('tr', tfoot).addClass(oClasses.tfoot.row);
|
||||
|
||||
// Copy the data index array
|
||||
oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
|
||||
@@ -539,7 +519,7 @@
|
||||
*
|
||||
* @type string
|
||||
*/
|
||||
builder: "bs5/dt-2.1.8",
|
||||
builder: "bs5/dt-2.2.2",
|
||||
|
||||
|
||||
/**
|
||||
@@ -2173,6 +2153,10 @@
|
||||
var width = _fnColumnsSumWidth(settings, [i], false, false);
|
||||
|
||||
cols[i].colEl.css('width', width);
|
||||
|
||||
if (settings.oScroll.sX) {
|
||||
cols[i].colEl.css('min-width', width);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3240,9 +3224,13 @@
|
||||
|
||||
// Add the number of cells needed to make up to the number of columns
|
||||
if (row.length === 1) {
|
||||
var cells = $('td, th', row);
|
||||
var cellCount = 0;
|
||||
|
||||
$('td, th', row).each(function () {
|
||||
cellCount += this.colSpan;
|
||||
});
|
||||
|
||||
for ( i=cells.length, ien=columns.length ; i<ien ; i++ ) {
|
||||
for ( i=cellCount, ien=columns.length ; i<ien ; i++ ) {
|
||||
$('<th/>')
|
||||
.html( columns[i][titleProp] || '' )
|
||||
.appendTo( row );
|
||||
@@ -3254,9 +3242,11 @@
|
||||
|
||||
if (side === 'header') {
|
||||
settings.aoHeader = detected;
|
||||
$('tr', target).addClass(classes.thead.row);
|
||||
}
|
||||
else {
|
||||
settings.aoFooter = detected;
|
||||
$('tr', target).addClass(classes.tfoot.row);
|
||||
}
|
||||
|
||||
// Every cell needs to be passed through the renderer
|
||||
@@ -4519,7 +4509,7 @@
|
||||
// So the array reference doesn't break set the results into the
|
||||
// existing array
|
||||
displayRows.length = 0;
|
||||
displayRows.push.apply(displayRows, rows);
|
||||
_fnArrayApply(displayRows, rows);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5247,8 +5237,11 @@
|
||||
// [].find, but it wasn't supported in Chrome until Sept 2015, and DT has 10 year
|
||||
// browser support
|
||||
var firstTr = null;
|
||||
var start = _fnDataSource( settings ) !== 'ssp'
|
||||
? settings._iDisplayStart
|
||||
: 0;
|
||||
|
||||
for (i=settings._iDisplayStart ; i<settings.aiDisplay.length ; i++) {
|
||||
for (i=start ; i<start + settings.aiDisplay.length ; i++) {
|
||||
var idx = settings.aiDisplay[i];
|
||||
var tr = settings.aoData[idx].nTr;
|
||||
|
||||
@@ -5263,7 +5256,7 @@
|
||||
return {
|
||||
idx: _fnVisibleToColumnIndex(settings, vis),
|
||||
width: $(this).outerWidth()
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
// Check against what the colgroup > col is set to and correct if needed
|
||||
@@ -5273,6 +5266,10 @@
|
||||
|
||||
if (colWidth !== colSizes[i].width) {
|
||||
colEl.style.width = colSizes[i].width + 'px';
|
||||
|
||||
if (scroll.sX) {
|
||||
colEl.style.minWidth = colSizes[i].width + 'px';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5365,6 +5362,14 @@
|
||||
i, column, columnIdx;
|
||||
|
||||
var styleWidth = table.style.width;
|
||||
var containerWidth = _fnWrapperWidth(settings);
|
||||
|
||||
// Don't re-run for the same width as the last time
|
||||
if (containerWidth === settings.containerWidth) {
|
||||
return false;
|
||||
}
|
||||
|
||||
settings.containerWidth = containerWidth;
|
||||
|
||||
// If there is no width applied as a CSS style or as an attribute, we assume that
|
||||
// the width is intended to be 100%, which is usually is in CSS, but it is very
|
||||
@@ -5422,6 +5427,8 @@
|
||||
// browser will collapse it. If this width is smaller than the
|
||||
// width the column requires, then it will have no effect
|
||||
if ( scrollX ) {
|
||||
this.style.minWidth = width;
|
||||
|
||||
$( this ).append( $('<div/>').css( {
|
||||
width: width,
|
||||
margin: 0,
|
||||
@@ -5490,15 +5497,15 @@
|
||||
|
||||
// If there is no width attribute or style, then allow the table to
|
||||
// collapse
|
||||
if ( tmpTable.width() < tableContainer.clientWidth && tableWidthAttr ) {
|
||||
tmpTable.width( tableContainer.clientWidth );
|
||||
if ( tmpTable.outerWidth() < tableContainer.clientWidth && tableWidthAttr ) {
|
||||
tmpTable.outerWidth( tableContainer.clientWidth );
|
||||
}
|
||||
}
|
||||
else if ( scrollY ) {
|
||||
tmpTable.width( tableContainer.clientWidth );
|
||||
tmpTable.outerWidth( tableContainer.clientWidth );
|
||||
}
|
||||
else if ( tableWidthAttr ) {
|
||||
tmpTable.width( tableWidthAttr );
|
||||
tmpTable.outerWidth( tableWidthAttr );
|
||||
}
|
||||
|
||||
// Get the width of each column in the constructed table
|
||||
@@ -5531,20 +5538,64 @@
|
||||
}
|
||||
|
||||
if ( (tableWidthAttr || scrollX) && ! settings._reszEvt ) {
|
||||
var bindResize = function () {
|
||||
$(window).on('resize.DT-'+settings.sInstance, DataTable.util.throttle( function () {
|
||||
if (! settings.bDestroying) {
|
||||
_fnAdjustColumnSizing( settings );
|
||||
}
|
||||
} ) );
|
||||
};
|
||||
var resize = DataTable.util.throttle( function () {
|
||||
var newWidth = _fnWrapperWidth(settings);
|
||||
|
||||
bindResize();
|
||||
// Don't do it if destroying or the container width is 0
|
||||
if (! settings.bDestroying && newWidth !== 0) {
|
||||
_fnAdjustColumnSizing( settings );
|
||||
}
|
||||
} );
|
||||
|
||||
// For browsers that support it (~2020 onwards for wide support) we can watch for the
|
||||
// container changing width.
|
||||
if (window.ResizeObserver) {
|
||||
// This is a tricky beast - if the element is visible when `.observe()` is called,
|
||||
// then the callback is immediately run. Which we don't want. If the element isn't
|
||||
// visible, then it isn't run, but we want it to run when it is then made visible.
|
||||
// This flag allows the above to be satisfied.
|
||||
var first = $(settings.nTableWrapper).is(':visible');
|
||||
|
||||
// Use an empty div to attach the observer so it isn't impacted by height changes
|
||||
var resizer = $('<div>')
|
||||
.css({
|
||||
width: '100%',
|
||||
height: 0
|
||||
})
|
||||
.addClass('dt-autosize')
|
||||
.appendTo(settings.nTableWrapper);
|
||||
|
||||
settings.resizeObserver = new ResizeObserver(function (e) {
|
||||
if (first) {
|
||||
first = false;
|
||||
}
|
||||
else {
|
||||
resize();
|
||||
}
|
||||
});
|
||||
|
||||
settings.resizeObserver.observe(resizer[0]);
|
||||
}
|
||||
else {
|
||||
// For old browsers, the best we can do is listen for a window resize
|
||||
$(window).on('resize.DT-'+settings.sInstance, resize);
|
||||
}
|
||||
|
||||
settings._reszEvt = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the width of the DataTables wrapper element
|
||||
*
|
||||
* @param {*} settings DataTables settings object
|
||||
* @returns Width
|
||||
*/
|
||||
function _fnWrapperWidth(settings) {
|
||||
return $(settings.nTableWrapper).is(':visible')
|
||||
? $(settings.nTableWrapper).width()
|
||||
: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the maximum strlen for each data column
|
||||
@@ -5855,10 +5906,14 @@
|
||||
displayMaster = oSettings.aiDisplayMaster,
|
||||
aSort;
|
||||
|
||||
// Make sure the columns all have types defined
|
||||
_fnColumnTypes(oSettings);
|
||||
|
||||
// Allow a specific column to be sorted, which will _not_ alter the display
|
||||
// master
|
||||
if (col !== undefined) {
|
||||
var srcCol = oSettings.aoColumns[col];
|
||||
|
||||
aSort = [{
|
||||
src: col,
|
||||
col: col,
|
||||
@@ -6153,15 +6208,26 @@
|
||||
return;
|
||||
}
|
||||
|
||||
// Sort state saving uses [[idx, order]] structure.
|
||||
var sorting = [];
|
||||
_fnSortResolve(settings, sorting, settings.aaSorting );
|
||||
|
||||
/* Store the interesting variables */
|
||||
var columns = settings.aoColumns;
|
||||
var state = {
|
||||
time: +new Date(),
|
||||
start: settings._iDisplayStart,
|
||||
length: settings._iDisplayLength,
|
||||
order: $.extend( true, [], settings.aaSorting ),
|
||||
order: sorting.map(function (sort) {
|
||||
// If a column name is available, use it
|
||||
return columns[sort[0]] && columns[sort[0]].sName
|
||||
? [ columns[sort[0]].sName, sort[1] ]
|
||||
: sort.slice();
|
||||
} ),
|
||||
search: $.extend({}, settings.oPreviousSearch),
|
||||
columns: settings.aoColumns.map( function ( col, i ) {
|
||||
return {
|
||||
name: col.sName,
|
||||
visible: col.bVisible,
|
||||
search: $.extend({}, settings.aoPreSearchCols[i])
|
||||
};
|
||||
@@ -6209,6 +6275,8 @@
|
||||
function _fnImplementState ( settings, s, callback) {
|
||||
var i, ien;
|
||||
var columns = settings.aoColumns;
|
||||
var currentNames = _pluck(settings.aoColumns, 'sName');
|
||||
|
||||
settings._bLoadingState = true;
|
||||
|
||||
// When StateRestore was introduced the state could now be implemented at any time
|
||||
@@ -6238,13 +6306,6 @@
|
||||
return;
|
||||
}
|
||||
|
||||
// Number of columns have changed - all bets are off, no restore of settings
|
||||
if ( s.columns && columns.length !== s.columns.length ) {
|
||||
settings._bLoadingState = false;
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
|
||||
// Store the saved state so it might be accessed at any time
|
||||
settings.oLoadedState = $.extend( true, {}, s );
|
||||
|
||||
@@ -6278,10 +6339,23 @@
|
||||
if ( s.order !== undefined ) {
|
||||
settings.aaSorting = [];
|
||||
$.each( s.order, function ( i, col ) {
|
||||
settings.aaSorting.push( col[0] >= columns.length ?
|
||||
[ 0, col[1] ] :
|
||||
col
|
||||
);
|
||||
var set = [ col[0], col[1] ];
|
||||
|
||||
// A column name was stored and should be used for restore
|
||||
if (typeof col[0] === 'string') {
|
||||
var idx = currentNames.indexOf(col[0]);
|
||||
|
||||
// Find the name from the current list of column names, or fallback to index 0
|
||||
set[0] = idx >= 0
|
||||
? idx
|
||||
: 0;
|
||||
}
|
||||
else if (set[0] >= columns.length) {
|
||||
// If a column name, but it is out of bounds, set to 0
|
||||
set[0] = 0;
|
||||
}
|
||||
|
||||
settings.aaSorting.push(set);
|
||||
} );
|
||||
}
|
||||
|
||||
@@ -6292,31 +6366,65 @@
|
||||
|
||||
// Columns
|
||||
if ( s.columns ) {
|
||||
for ( i=0, ien=s.columns.length ; i<ien ; i++ ) {
|
||||
var col = s.columns[i];
|
||||
var set = s.columns;
|
||||
var incoming = _pluck(s.columns, 'name');
|
||||
|
||||
// Visibility
|
||||
if ( col.visible !== undefined ) {
|
||||
// If the api is defined, the table has been initialised so we need to use it rather than internal settings
|
||||
if (api) {
|
||||
// Don't redraw the columns on every iteration of this loop, we will do this at the end instead
|
||||
api.column(i).visible(col.visible, false);
|
||||
// Check if it is a 2.2 style state object with a `name` property for the columns, and if
|
||||
// the name was defined. If so, then create a new array that will map the state object
|
||||
// given, to the current columns (don't bother if they are already matching tho).
|
||||
if (incoming.join('').length && incoming.join('') !== currentNames.join('')) {
|
||||
set = [];
|
||||
|
||||
// For each column, try to find the name in the incoming array
|
||||
for (i=0 ; i<currentNames.length ; i++) {
|
||||
if (currentNames[i] != '') {
|
||||
var idx = incoming.indexOf(currentNames[i]);
|
||||
|
||||
if (idx >= 0) {
|
||||
set.push(s.columns[idx]);
|
||||
}
|
||||
else {
|
||||
// No matching column name in the state's columns, so this might be a new
|
||||
// column and thus can't have a state already.
|
||||
set.push({});
|
||||
}
|
||||
}
|
||||
else {
|
||||
columns[i].bVisible = col.visible;
|
||||
// If no name, but other columns did have a name, then there is no knowing
|
||||
// where this one came from originally so it can't be restored.
|
||||
set.push({});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If the number of columns to restore is different from current, then all bets are off.
|
||||
if (set.length === columns.length) {
|
||||
for ( i=0, ien=set.length ; i<ien ; i++ ) {
|
||||
var col = set[i];
|
||||
|
||||
// Visibility
|
||||
if ( col.visible !== undefined ) {
|
||||
// If the api is defined, the table has been initialised so we need to use it rather than internal settings
|
||||
if (api) {
|
||||
// Don't redraw the columns on every iteration of this loop, we will do this at the end instead
|
||||
api.column(i).visible(col.visible, false);
|
||||
}
|
||||
else {
|
||||
columns[i].bVisible = col.visible;
|
||||
}
|
||||
}
|
||||
|
||||
// Search
|
||||
if ( col.search !== undefined ) {
|
||||
$.extend( settings.aoPreSearchCols[i], col.search );
|
||||
}
|
||||
}
|
||||
|
||||
// Search
|
||||
if ( col.search !== undefined ) {
|
||||
$.extend( settings.aoPreSearchCols[i], col.search );
|
||||
// If the api is defined then we need to adjust the columns once the visibility has been changed
|
||||
if (api) {
|
||||
api.columns.adjust();
|
||||
}
|
||||
}
|
||||
|
||||
// If the api is defined then we need to adjust the columns once the visibility has been changed
|
||||
if (api) {
|
||||
api.columns.adjust();
|
||||
}
|
||||
}
|
||||
|
||||
settings._bLoadingState = false;
|
||||
@@ -6633,6 +6741,30 @@
|
||||
replace(/_ENTRIES-TOTAL_/g, settings.api.i18n('entries', '', vis) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Add elements to an array as quickly as possible, but stack stafe.
|
||||
*
|
||||
* @param {*} arr Array to add the data to
|
||||
* @param {*} data Data array that is to be added
|
||||
* @returns
|
||||
*/
|
||||
function _fnArrayApply(arr, data) {
|
||||
if (! data) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Chrome can throw a max stack error if apply is called with
|
||||
// too large an array, but apply is faster.
|
||||
if (data.length < 10000) {
|
||||
arr.push.apply(arr, data);
|
||||
}
|
||||
else {
|
||||
for (i=0 ; i<data.length ; i++) {
|
||||
arr.push(data[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
@@ -6825,18 +6957,7 @@
|
||||
: settings;
|
||||
|
||||
// Initial data
|
||||
if ( data ) {
|
||||
// Chrome can throw a max stack error if apply is called with
|
||||
// too large an array, but apply is faster.
|
||||
if (data.length < 10000) {
|
||||
this.push.apply(this, data);
|
||||
}
|
||||
else {
|
||||
for (i=0 ; i<data.length ; i++) {
|
||||
this.push(data[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
_fnArrayApply(this, data);
|
||||
|
||||
// selector
|
||||
this.selector = {
|
||||
@@ -7217,7 +7338,7 @@
|
||||
selector.forEach(function (sel) {
|
||||
var inner = __table_selector(sel, a);
|
||||
|
||||
result.push.apply(result, inner);
|
||||
_fnArrayApply(result, inner);
|
||||
});
|
||||
|
||||
return result.filter( function (item) {
|
||||
@@ -8071,7 +8192,7 @@
|
||||
// Return an Api.rows() extended instance, so rows().nodes() etc can be used
|
||||
var modRows = this.rows( -1 );
|
||||
modRows.pop();
|
||||
modRows.push.apply(modRows, newRows);
|
||||
_fnArrayApply(modRows, newRows);
|
||||
|
||||
return modRows;
|
||||
} );
|
||||
@@ -8584,7 +8705,10 @@
|
||||
.map( function () {
|
||||
return _fnColumnsFromHeader( this ); // `nodes` is column index complete and in order
|
||||
} )
|
||||
.toArray();
|
||||
.toArray()
|
||||
.sort(function (a, b) {
|
||||
return a - b;
|
||||
});
|
||||
|
||||
if ( jqResult.length || ! s.nodeName ) {
|
||||
return jqResult;
|
||||
@@ -8838,6 +8962,10 @@
|
||||
|
||||
_api_register( 'columns.adjust()', function () {
|
||||
return this.iterator( 'table', function ( settings ) {
|
||||
// Force a column sizing to happen with a manual call - otherwise it can skip
|
||||
// if the size hasn't changed
|
||||
settings.containerWidth = -1;
|
||||
|
||||
_fnAdjustColumnSizing( settings );
|
||||
}, 1 );
|
||||
} );
|
||||
@@ -9403,6 +9531,10 @@
|
||||
} );
|
||||
} );
|
||||
|
||||
// Can be assigned in DateTable.use() - note luxon and moment vars are in helpers.js
|
||||
var __bootstrap;
|
||||
var __foundation;
|
||||
|
||||
/**
|
||||
* Set the libraries that DataTables uses, or the global objects.
|
||||
* Note that the arguments can be either way around (legacy support)
|
||||
@@ -9436,6 +9568,14 @@
|
||||
case 'moment':
|
||||
return __moment;
|
||||
|
||||
case 'bootstrap':
|
||||
// Use local if set, otherwise try window, which could be undefined
|
||||
return __bootstrap || window.bootstrap;
|
||||
|
||||
case 'foundation':
|
||||
// Ditto
|
||||
return __foundation || window.Foundation;
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
@@ -9445,7 +9585,7 @@
|
||||
if (type === 'lib' || type === 'jq' || (module && module.fn && module.fn.jquery)) {
|
||||
$ = module;
|
||||
}
|
||||
else if (type == 'win' || (module && module.document)) {
|
||||
else if (type === 'win' || (module && module.document)) {
|
||||
window = module;
|
||||
document = module.document;
|
||||
}
|
||||
@@ -9458,6 +9598,14 @@
|
||||
else if (type === 'moment' || (module && module.isMoment)) {
|
||||
__moment = module;
|
||||
}
|
||||
else if (type === 'bootstrap' || (module && module.Modal && module.Modal.NAME === 'modal'))
|
||||
{
|
||||
// This is currently for BS5 only. BS3/4 attach to jQuery, so no need to use `.use()`
|
||||
__bootstrap = module;
|
||||
}
|
||||
else if (type === 'foundation' || (module && module.Reveal)) {
|
||||
__foundation = module;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -9709,12 +9857,14 @@
|
||||
// Function to run either once the table becomes ready or
|
||||
// immediately if it is already ready.
|
||||
return this.tables().every(function () {
|
||||
var api = this;
|
||||
|
||||
if (this.context[0]._bInitComplete) {
|
||||
fn.call(this);
|
||||
fn.call(api);
|
||||
}
|
||||
else {
|
||||
this.on('init.dt.DT', function () {
|
||||
fn.call(this);
|
||||
fn.call(api);
|
||||
});
|
||||
}
|
||||
} );
|
||||
@@ -9748,6 +9898,11 @@
|
||||
new _Api( settings ).columns().visible( true );
|
||||
}
|
||||
|
||||
// Container width change listener
|
||||
if (settings.resizeObserver) {
|
||||
settings.resizeObserver.disconnect();
|
||||
}
|
||||
|
||||
// Blitz all `DT` namespaced events (these are internal events, the
|
||||
// lowercase, `dt` events are user subscribed and they are responsible
|
||||
// for removing them
|
||||
@@ -9765,20 +9920,37 @@
|
||||
jqTable.append( tfoot );
|
||||
}
|
||||
|
||||
// Clean up the header
|
||||
$(thead).find('span.dt-column-order').remove();
|
||||
$(thead).find('span.dt-column-title').each(function () {
|
||||
var title = $(this).html();
|
||||
$(this).parent().append(title);
|
||||
$(this).remove();
|
||||
});
|
||||
|
||||
settings.colgroup.remove();
|
||||
|
||||
settings.aaSorting = [];
|
||||
settings.aaSortingFixed = [];
|
||||
_fnSortingClasses( settings );
|
||||
|
||||
$(jqTable).find('th, td').removeClass(
|
||||
$.map(DataTable.ext.type.className, function (v) {
|
||||
return v;
|
||||
}).join(' ')
|
||||
);
|
||||
|
||||
$('th, td', thead)
|
||||
.removeClass(
|
||||
orderClasses.none + ' ' +
|
||||
orderClasses.canAsc + ' ' +
|
||||
orderClasses.canDesc + ' ' +
|
||||
orderClasses.isAsc + ' ' +
|
||||
orderClasses.isDesc
|
||||
)
|
||||
.css('width', '');
|
||||
.css('width', '')
|
||||
.removeAttr('data-dt-column')
|
||||
.removeAttr('aria-sort');
|
||||
|
||||
// Add the TR elements back into the table in their original order
|
||||
jqTbody.children().detach();
|
||||
@@ -9866,7 +10038,7 @@
|
||||
* @type string
|
||||
* @default Version number
|
||||
*/
|
||||
DataTable.version = "2.1.8";
|
||||
DataTable.version = "2.2.2";
|
||||
|
||||
/**
|
||||
* Private data store, containing all of the settings objects that are
|
||||
@@ -11969,7 +12141,13 @@
|
||||
deferLoading: null,
|
||||
|
||||
/** Allow auto type detection */
|
||||
typeDetect: true
|
||||
typeDetect: true,
|
||||
|
||||
/** ResizeObserver for the container div */
|
||||
resizeObserver: null,
|
||||
|
||||
/** Keep a record of the last size of the container, so we can skip duplicates */
|
||||
containerWidth: -1
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -12111,8 +12289,8 @@
|
||||
|
||||
|
||||
var __mlWarning = false;
|
||||
var __luxon; // Can be assigned in DateTeble.use()
|
||||
var __moment; // Can be assigned in DateTeble.use()
|
||||
var __luxon; // Can be assigned in DateTable.use()
|
||||
var __moment; // Can be assigned in DateTable.use()
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -12148,7 +12326,7 @@
|
||||
return null;
|
||||
}
|
||||
|
||||
dt.setLocale(locale);
|
||||
dt = dt.setLocale(locale);
|
||||
}
|
||||
else if (! format) {
|
||||
// No format given, must be ISO
|
||||
@@ -12531,6 +12709,13 @@
|
||||
});
|
||||
}
|
||||
|
||||
var __diacriticHtmlSort = function (a, b) {
|
||||
a = _stripHtml(a);
|
||||
b = _stripHtml(b);
|
||||
|
||||
return __diacriticSort(a, b);
|
||||
}
|
||||
|
||||
//
|
||||
// Built in data types
|
||||
//
|
||||
@@ -12601,6 +12786,31 @@
|
||||
});
|
||||
|
||||
|
||||
DataTable.type('html-utf8', {
|
||||
detect: {
|
||||
allOf: function ( d ) {
|
||||
return _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1);
|
||||
},
|
||||
oneOf: function ( d ) {
|
||||
// At least one data point must contain a `<` and a non-ASCII character
|
||||
// eslint-disable-next-line compat/compat
|
||||
return navigator.languages &&
|
||||
! _empty( d ) &&
|
||||
typeof d === 'string' &&
|
||||
d.indexOf('<') !== -1 &&
|
||||
typeof d === 'string' && d.match(/[^\x00-\x7F]/);
|
||||
}
|
||||
},
|
||||
order: {
|
||||
asc: __diacriticHtmlSort,
|
||||
desc: function (a, b) {
|
||||
return __diacriticHtmlSort(a, b) * -1;
|
||||
}
|
||||
},
|
||||
search: _filterString(true, true)
|
||||
});
|
||||
|
||||
|
||||
DataTable.type('date', {
|
||||
className: 'dt-type-date',
|
||||
detect: {
|
||||
@@ -12811,6 +13021,7 @@
|
||||
var indexes = columns.indexes();
|
||||
var sortDirs = columns.orderable(true).flatten();
|
||||
var orderedColumns = _pluck(sorting, 'col');
|
||||
var tabIndex = settings.iTabIndex;
|
||||
|
||||
cell
|
||||
.removeClass(
|
||||
@@ -12868,15 +13079,20 @@
|
||||
cell.removeAttr('aria-sort');
|
||||
}
|
||||
|
||||
cell.attr('aria-label', orderable
|
||||
? col.ariaTitle + ctx.api.i18n('oAria.orderable' + ariaType)
|
||||
: col.ariaTitle
|
||||
);
|
||||
|
||||
// Make the headers tab-able for keyboard navigation
|
||||
if (orderable) {
|
||||
cell.find('.dt-column-title').attr('role', 'button');
|
||||
cell.attr('tabindex', 0)
|
||||
var orderSpan = cell.find('.dt-column-order');
|
||||
|
||||
orderSpan
|
||||
.attr('role', 'button')
|
||||
.attr('aria-label', orderable
|
||||
? col.ariaTitle + ctx.api.i18n('oAria.orderable' + ariaType)
|
||||
: col.ariaTitle
|
||||
);
|
||||
|
||||
if (tabIndex !== -1) {
|
||||
orderSpan.attr('tabindex', tabIndex);
|
||||
}
|
||||
}
|
||||
} );
|
||||
}
|
||||
@@ -12890,7 +13106,7 @@
|
||||
.addClass(items.className || classes.row)
|
||||
.appendTo( container );
|
||||
|
||||
$.each( items, function (key, val) {
|
||||
DataTable.ext.renderer.layout._forLayoutRow(items, function (key, val) {
|
||||
if (key === 'id' || key === 'className') {
|
||||
return;
|
||||
}
|
||||
@@ -12921,7 +13137,31 @@
|
||||
})
|
||||
.append( val.contents )
|
||||
.appendTo( row );
|
||||
} );
|
||||
});
|
||||
},
|
||||
|
||||
// Shared for use by the styling frameworks
|
||||
_forLayoutRow: function (items, fn) {
|
||||
// As we are inserting dom elements, we need start / end in a
|
||||
// specific order, this function is used for sorting the layout
|
||||
// keys.
|
||||
var layoutEnum = function (x) {
|
||||
switch (x) {
|
||||
case '': return 0;
|
||||
case 'start': return 1;
|
||||
case 'end': return 2;
|
||||
default: return 3;
|
||||
}
|
||||
};
|
||||
|
||||
Object
|
||||
.keys(items)
|
||||
.sort(function (a, b) {
|
||||
return layoutEnum(a) - layoutEnum(b);
|
||||
})
|
||||
.forEach(function (key) {
|
||||
fn(key, items[key]);
|
||||
});
|
||||
}
|
||||
}
|
||||
} );
|
||||
@@ -13273,7 +13513,7 @@
|
||||
'data-dt-idx': button,
|
||||
'tabIndex': btnInfo.disabled
|
||||
? -1
|
||||
: settings.iTabIndex
|
||||
: settings.iTabIndex && btn.clicker[0].nodeName.toLowerCase() !== 'span'
|
||||
? settings.iTabIndex
|
||||
: null, // `0` doesn't need a tabIndex since it is the default
|
||||
});
|
||||
@@ -13307,12 +13547,16 @@
|
||||
|
||||
// Responsive - check if the buttons are over two lines based on the
|
||||
// height of the buttons and the container.
|
||||
if (
|
||||
buttonEls.length && // any buttons
|
||||
opts.buttons > 1 && // prevent infinite
|
||||
$(host).height() >= ($(buttonEls[0]).outerHeight() * 2) - 10
|
||||
) {
|
||||
_pagingDraw(settings, host, $.extend({}, opts, { buttons: opts.buttons - 2 }));
|
||||
if (buttonEls.length) {
|
||||
var outerHeight = $(buttonEls[0]).outerHeight();
|
||||
|
||||
if (
|
||||
opts.buttons > 1 && // prevent infinite
|
||||
outerHeight > 0 && // will be 0 if hidden
|
||||
$(host).height() >= (outerHeight * 2) - 10
|
||||
) {
|
||||
_pagingDraw(settings, host, $.extend({}, opts, { buttons: opts.buttons - 2 }));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13336,7 +13580,6 @@
|
||||
switch ( button ) {
|
||||
case 'ellipsis':
|
||||
o.display = '…';
|
||||
o.disabled = true;
|
||||
break;
|
||||
|
||||
case 'first':
|
||||
@@ -13523,7 +13766,7 @@
|
||||
|
||||
// Save text node content for macro updating
|
||||
var textNodes = [];
|
||||
Array.from(div.find('label')[0].childNodes).forEach(function (el) {
|
||||
Array.prototype.slice.call(div.find('label')[0].childNodes).forEach(function (el) {
|
||||
if (el.nodeType === Node.TEXT_NODE) {
|
||||
textNodes.push({
|
||||
el: el,
|
||||
@@ -13541,7 +13784,6 @@
|
||||
|
||||
// Next, the select itself, along with the options
|
||||
var select = $('<select/>', {
|
||||
'name': tableId+'_length',
|
||||
'aria-controls': tableId,
|
||||
'class': classes.select
|
||||
} );
|
||||
@@ -13732,41 +13974,6 @@ DataTable.ext.renderer.pagingContainer.bootstrap = function (settings, buttonEls
|
||||
return $('<ul/>').addClass('pagination').append(buttonEls);
|
||||
};
|
||||
|
||||
// DataTable.ext.renderer.layout.bootstrap = function ( settings, container, items ) {
|
||||
// var row = $( '<div/>', {
|
||||
// "class": items.full ?
|
||||
// 'row mt-2 justify-content-md-center' :
|
||||
// 'row mt-2 justify-content-between'
|
||||
// } )
|
||||
// .appendTo( container );
|
||||
|
||||
// $.each( items, function (key, val) {
|
||||
// var klass;
|
||||
// var cellClass = '';
|
||||
|
||||
// // Apply start / end (left / right when ltr) margins
|
||||
// if (val.table) {
|
||||
// klass = 'col-12';
|
||||
// }
|
||||
// else if (key === 'start') {
|
||||
// klass = '' + cellClass;
|
||||
// }
|
||||
// else if (key === 'end') {
|
||||
// klass = '' + cellClass;
|
||||
// }
|
||||
// else {
|
||||
// klass = ' ' + cellClass;
|
||||
// }
|
||||
|
||||
// $( '<div/>', {
|
||||
// id: val.id || null,
|
||||
// "class": klass + ' ' + (val.className || '')
|
||||
// } )
|
||||
// .append( val.contents )
|
||||
// .appendTo( row );
|
||||
// } );
|
||||
// };
|
||||
|
||||
|
||||
return DataTable;
|
||||
}));
|
||||
|
Reference in New Issue
Block a user