mirror of
https://github.com/Combodo/iTop.git
synced 2026-05-02 06:58:49 +02:00
NPM libs: Update embedded package to avoid their dependencies to be retrieved as they are already their
This commit is contained in:
432
node_modules/datatables.net-responsive/js/dataTables.responsive.js
generated
vendored
432
node_modules/datatables.net-responsive/js/dataTables.responsive.js
generated
vendored
@@ -1,15 +1,15 @@
|
||||
/*! Responsive 2.1.0
|
||||
* 2014-2016 SpryMedia Ltd - datatables.net/license
|
||||
/*! Responsive 2.2.7
|
||||
* 2014-2021 SpryMedia Ltd - datatables.net/license
|
||||
*/
|
||||
|
||||
/**
|
||||
* @summary Responsive
|
||||
* @description Responsive tables plug-in for DataTables
|
||||
* @version 2.1.0
|
||||
* @version 2.2.7
|
||||
* @file dataTables.responsive.js
|
||||
* @author SpryMedia Ltd (www.sprymedia.co.uk)
|
||||
* @contact www.sprymedia.co.uk/contact
|
||||
* @copyright Copyright 2014-2016 SpryMedia Ltd.
|
||||
* @copyright Copyright 2014-2021 SpryMedia Ltd.
|
||||
*
|
||||
* This source file is free software, available under the following license:
|
||||
* MIT license - http://datatables.net/license/mit
|
||||
@@ -97,8 +97,8 @@ var DataTable = $.fn.dataTable;
|
||||
*/
|
||||
var Responsive = function ( settings, opts ) {
|
||||
// Sanity check that we are using DataTables 1.10 or newer
|
||||
if ( ! DataTable.versionCheck || ! DataTable.versionCheck( '1.10.3' ) ) {
|
||||
throw 'DataTables Responsive requires DataTables 1.10.3 or newer';
|
||||
if ( ! DataTable.versionCheck || ! DataTable.versionCheck( '1.10.10' ) ) {
|
||||
throw 'DataTables Responsive requires DataTables 1.10.10 or newer';
|
||||
}
|
||||
|
||||
this.s = {
|
||||
@@ -144,7 +144,7 @@ $.extend( Responsive.prototype, {
|
||||
var that = this;
|
||||
var dt = this.s.dt;
|
||||
var dtPrivateSettings = dt.settings()[0];
|
||||
var oldWindowWidth = $(window).width();
|
||||
var oldWindowWidth = $(window).innerWidth();
|
||||
|
||||
dt.settings()[0]._responsive = this;
|
||||
|
||||
@@ -153,7 +153,7 @@ $.extend( Responsive.prototype, {
|
||||
$(window).on( 'resize.dtr orientationchange.dtr', DataTable.util.throttle( function () {
|
||||
// iOS has a bug whereby resize can fire when only scrolling
|
||||
// See: http://stackoverflow.com/questions/8898412
|
||||
var width = $(window).width();
|
||||
var width = $(window).innerWidth();
|
||||
|
||||
if ( width !== oldWindowWidth ) {
|
||||
that._resize();
|
||||
@@ -166,7 +166,7 @@ $.extend( Responsive.prototype, {
|
||||
// new data is added
|
||||
dtPrivateSettings.oApi._fnCallbackReg( dtPrivateSettings, 'aoRowCreatedCallback', function (tr, data, idx) {
|
||||
if ( $.inArray( false, that.s.current ) !== -1 ) {
|
||||
$('td, th', tr).each( function ( i ) {
|
||||
$('>td, >th', tr).each( function ( i ) {
|
||||
var idx = dt.column.index( 'toData', i );
|
||||
|
||||
if ( that.s.current[idx] === false ) {
|
||||
@@ -181,6 +181,7 @@ $.extend( Responsive.prototype, {
|
||||
dt.off( '.dtr' );
|
||||
$( dt.table().body() ).off( '.dtr' );
|
||||
$(window).off( 'resize.dtr orientationchange.dtr' );
|
||||
dt.cells('.dtr-control').nodes().to$().removeClass('dtr-control');
|
||||
|
||||
// Restore the columns that we've hidden
|
||||
$.each( that.s.current, function ( i, val ) {
|
||||
@@ -208,10 +209,21 @@ $.extend( Responsive.prototype, {
|
||||
|
||||
// DataTables will trigger this event on every column it shows and
|
||||
// hides individually
|
||||
dt.on( 'column-visibility.dtr', function (e, ctx, col, vis) {
|
||||
that._classLogic();
|
||||
that._resizeAuto();
|
||||
that._resize();
|
||||
dt.on( 'column-visibility.dtr', function () {
|
||||
// Use a small debounce to allow multiple columns to be set together
|
||||
if ( that._timer ) {
|
||||
clearTimeout( that._timer );
|
||||
}
|
||||
|
||||
that._timer = setTimeout( function () {
|
||||
that._timer = null;
|
||||
|
||||
that._classLogic();
|
||||
that._resizeAuto();
|
||||
that._resize(true);
|
||||
|
||||
that._redrawChildren();
|
||||
}, 100 );
|
||||
} );
|
||||
|
||||
// Redraw the details box on each draw which will happen if the data
|
||||
@@ -227,7 +239,7 @@ $.extend( Responsive.prototype, {
|
||||
dt.on( 'column-reorder.dtr', function (e, settings, details) {
|
||||
that._classLogic();
|
||||
that._resizeAuto();
|
||||
that._resize();
|
||||
that._resize(true);
|
||||
} );
|
||||
|
||||
// Change in column sizes means we need to calc
|
||||
@@ -236,16 +248,44 @@ $.extend( Responsive.prototype, {
|
||||
that._resize();
|
||||
});
|
||||
|
||||
dt.on( 'init.dtr', function (e, settings, details) {
|
||||
that._resizeAuto();
|
||||
that._resize();
|
||||
// On Ajax reload we want to reopen any child rows which are displayed
|
||||
// by responsive
|
||||
dt.on( 'preXhr.dtr', function () {
|
||||
var rowIds = [];
|
||||
dt.rows().every( function () {
|
||||
if ( this.child.isShown() ) {
|
||||
rowIds.push( this.id(true) );
|
||||
}
|
||||
} );
|
||||
|
||||
// If columns were hidden, then DataTables needs to adjust the
|
||||
// column sizing
|
||||
if ( $.inArray( false, that.s.current ) ) {
|
||||
dt.columns.adjust();
|
||||
}
|
||||
} );
|
||||
dt.one( 'draw.dtr', function () {
|
||||
that._resizeAuto();
|
||||
that._resize();
|
||||
|
||||
dt.rows( rowIds ).every( function () {
|
||||
that._detailsDisplay( this, false );
|
||||
} );
|
||||
} );
|
||||
});
|
||||
|
||||
dt
|
||||
.on( 'draw.dtr', function () {
|
||||
that._controlClass();
|
||||
})
|
||||
.on( 'init.dtr', function (e, settings, details) {
|
||||
if ( e.namespace !== 'dt' ) {
|
||||
return;
|
||||
}
|
||||
|
||||
that._resizeAuto();
|
||||
that._resize();
|
||||
|
||||
// If columns were hidden, then DataTables needs to adjust the
|
||||
// column sizing
|
||||
if ( $.inArray( false, that.s.current ) ) {
|
||||
dt.columns.adjust();
|
||||
}
|
||||
} );
|
||||
|
||||
// First pass - draw the table for the current viewport size
|
||||
this._resize();
|
||||
@@ -294,7 +334,10 @@ $.extend( Responsive.prototype, {
|
||||
// Class logic - determine which columns are in this breakpoint based
|
||||
// on the classes. If no class control (i.e. `auto`) then `-` is used
|
||||
// to indicate this to the rest of the function
|
||||
var display = $.map( columns, function ( col ) {
|
||||
var display = $.map( columns, function ( col, i ) {
|
||||
if ( dt.column(i).visible() === false ) {
|
||||
return 'not-visible';
|
||||
}
|
||||
return col.auto && col.minWidth === null ?
|
||||
false :
|
||||
col.auto === true ?
|
||||
@@ -362,7 +405,7 @@ $.extend( Responsive.prototype, {
|
||||
var showControl = false;
|
||||
|
||||
for ( i=0, ien=columns.length ; i<ien ; i++ ) {
|
||||
if ( ! columns[i].control && ! columns[i].never && ! display[i] ) {
|
||||
if ( ! columns[i].control && ! columns[i].never && display[i] === false ) {
|
||||
showControl = true;
|
||||
break;
|
||||
}
|
||||
@@ -372,6 +415,11 @@ $.extend( Responsive.prototype, {
|
||||
if ( columns[i].control ) {
|
||||
display[i] = showControl;
|
||||
}
|
||||
|
||||
// Replace not visible string with false from the control column detection above
|
||||
if ( display[i] === 'not-visible' ) {
|
||||
display[i] = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Finally we need to make sure that there is at least one column that
|
||||
@@ -402,13 +450,12 @@ $.extend( Responsive.prototype, {
|
||||
var column = this.column(i);
|
||||
var className = column.header().className;
|
||||
var priority = dt.settings()[0].aoColumns[i].responsivePriority;
|
||||
var dataPriority = column.header().getAttribute('data-priority');
|
||||
|
||||
if ( priority === undefined ) {
|
||||
var dataPriority = $(column.header()).data('priority');
|
||||
|
||||
priority = dataPriority !== undefined ?
|
||||
dataPriority * 1 :
|
||||
10000;
|
||||
priority = dataPriority === undefined || dataPriority === null?
|
||||
10000 :
|
||||
dataPriority * 1;
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -475,7 +522,7 @@ $.extend( Responsive.prototype, {
|
||||
|
||||
// Split the class name up so multiple rules can be applied if needed
|
||||
for ( var k=0, ken=classNames.length ; k<ken ; k++ ) {
|
||||
var className = $.trim( classNames[k] );
|
||||
var className = classNames[k].trim();
|
||||
|
||||
if ( className === 'all' ) {
|
||||
// Include in all
|
||||
@@ -490,7 +537,7 @@ $.extend( Responsive.prototype, {
|
||||
hasClass = true;
|
||||
return;
|
||||
}
|
||||
else if ( className === 'control' ) {
|
||||
else if ( className === 'control' || className === 'dtr-control' ) {
|
||||
// Special column that is only visible, when one of the other
|
||||
// columns is hidden. This is used for the details control
|
||||
hasClass = true;
|
||||
@@ -528,6 +575,36 @@ $.extend( Responsive.prototype, {
|
||||
this.s.columns = columns;
|
||||
},
|
||||
|
||||
/**
|
||||
* Update the cells to show the correct control class / button
|
||||
* @private
|
||||
*/
|
||||
_controlClass: function ()
|
||||
{
|
||||
if ( this.c.details.type === 'inline' ) {
|
||||
var dt = this.s.dt;
|
||||
var columnsVis = this.s.current;
|
||||
var firstVisible = $.inArray(true, columnsVis);
|
||||
|
||||
// Remove from any cells which shouldn't have it
|
||||
dt.cells(
|
||||
null,
|
||||
function(idx) {
|
||||
return idx !== firstVisible;
|
||||
},
|
||||
{page: 'current'}
|
||||
)
|
||||
.nodes()
|
||||
.to$()
|
||||
.filter('.dtr-control')
|
||||
.removeClass('dtr-control');
|
||||
|
||||
dt.cells(null, firstVisible, {page: 'current'})
|
||||
.nodes()
|
||||
.to$()
|
||||
.addClass('dtr-control');
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Show the details for the child row
|
||||
@@ -569,7 +646,7 @@ $.extend( Responsive.prototype, {
|
||||
|
||||
// The inline type always uses the first child as the target
|
||||
if ( details.type === 'inline' ) {
|
||||
details.target = 'td:first-child, th:first-child';
|
||||
details.target = 'td.dtr-control, th.dtr-control';
|
||||
}
|
||||
|
||||
// Keyboard accessibility
|
||||
@@ -588,51 +665,53 @@ $.extend( Responsive.prototype, {
|
||||
var target = details.target;
|
||||
var selector = typeof target === 'string' ? target : 'td, th';
|
||||
|
||||
// Click handler to show / hide the details rows when they are available
|
||||
$( dt.table().body() )
|
||||
.on( 'click.dtr mousedown.dtr mouseup.dtr', selector, function (e) {
|
||||
// If the table is not collapsed (i.e. there is no hidden columns)
|
||||
// then take no action
|
||||
if ( ! $(dt.table().node()).hasClass('collapsed' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check that the row is actually a DataTable's controlled node
|
||||
if ( ! dt.row( $(this).closest('tr') ).length ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// For column index, we determine if we should act or not in the
|
||||
// handler - otherwise it is already okay
|
||||
if ( typeof target === 'number' ) {
|
||||
var targetIdx = target < 0 ?
|
||||
dt.columns().eq(0).length + target :
|
||||
target;
|
||||
|
||||
if ( dt.cell( this ).index().column !== targetIdx ) {
|
||||
if ( target !== undefined || target !== null ) {
|
||||
// Click handler to show / hide the details rows when they are available
|
||||
$( dt.table().body() )
|
||||
.on( 'click.dtr mousedown.dtr mouseup.dtr', selector, function (e) {
|
||||
// If the table is not collapsed (i.e. there is no hidden columns)
|
||||
// then take no action
|
||||
if ( ! $(dt.table().node()).hasClass('collapsed' ) ) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// $().closest() includes itself in its check
|
||||
var row = dt.row( $(this).closest('tr') );
|
||||
// Check that the row is actually a DataTable's controlled node
|
||||
if ( $.inArray( $(this).closest('tr').get(0), dt.rows().nodes().toArray() ) === -1 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check event type to do an action
|
||||
if ( e.type === 'click' ) {
|
||||
// The renderer is given as a function so the caller can execute it
|
||||
// only when they need (i.e. if hiding there is no point is running
|
||||
// the renderer)
|
||||
that._detailsDisplay( row, false );
|
||||
}
|
||||
else if ( e.type === 'mousedown' ) {
|
||||
// For mouse users, prevent the focus ring from showing
|
||||
$(this).css('outline', 'none');
|
||||
}
|
||||
else if ( e.type === 'mouseup' ) {
|
||||
// And then re-allow at the end of the click
|
||||
$(this).blur().css('outline', '');
|
||||
}
|
||||
} );
|
||||
// For column index, we determine if we should act or not in the
|
||||
// handler - otherwise it is already okay
|
||||
if ( typeof target === 'number' ) {
|
||||
var targetIdx = target < 0 ?
|
||||
dt.columns().eq(0).length + target :
|
||||
target;
|
||||
|
||||
if ( dt.cell( this ).index().column !== targetIdx ) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// $().closest() includes itself in its check
|
||||
var row = dt.row( $(this).closest('tr') );
|
||||
|
||||
// Check event type to do an action
|
||||
if ( e.type === 'click' ) {
|
||||
// The renderer is given as a function so the caller can execute it
|
||||
// only when they need (i.e. if hiding there is no point is running
|
||||
// the renderer)
|
||||
that._detailsDisplay( row, false );
|
||||
}
|
||||
else if ( e.type === 'mousedown' ) {
|
||||
// For mouse users, prevent the focus ring from showing
|
||||
$(this).css('outline', 'none');
|
||||
}
|
||||
else if ( e.type === 'mouseup' ) {
|
||||
// And then re-allow at the end of the click
|
||||
$(this).trigger('blur').css('outline', '');
|
||||
}
|
||||
} );
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -652,12 +731,17 @@ $.extend( Responsive.prototype, {
|
||||
return;
|
||||
}
|
||||
|
||||
var dtCol = dt.settings()[0].aoColumns[ i ];
|
||||
|
||||
return {
|
||||
title: dt.settings()[0].aoColumns[ i ].sTitle,
|
||||
className: dtCol.sClass,
|
||||
columnIndex: i,
|
||||
data: dt.cell( rowIdx, i ).render( that.c.orthogonal ),
|
||||
hidden: dt.column( i ).visible() && !that.s.current[ i ],
|
||||
columnIndex: i,
|
||||
rowIndex: rowIdx
|
||||
rowIndex: rowIdx,
|
||||
title: dtCol.sTitle !== null ?
|
||||
dtCol.sTitle :
|
||||
$(dt.column(i).header()).text()
|
||||
};
|
||||
} );
|
||||
},
|
||||
@@ -706,13 +790,14 @@ $.extend( Responsive.prototype, {
|
||||
* determining what breakpoint the window currently is in, getting the
|
||||
* column visibilities to apply and then setting them.
|
||||
*
|
||||
* @param {boolean} forceRedraw Force a redraw
|
||||
* @private
|
||||
*/
|
||||
_resize: function ()
|
||||
_resize: function (forceRedraw)
|
||||
{
|
||||
var that = this;
|
||||
var dt = this.s.dt;
|
||||
var width = $(window).width();
|
||||
var width = $(window).innerWidth();
|
||||
var breakpoints = this.c.breakpoints;
|
||||
var breakpoint = breakpoints[0].name;
|
||||
var columns = this.s.columns;
|
||||
@@ -735,8 +820,9 @@ $.extend( Responsive.prototype, {
|
||||
// listeners know what the state is. Need to determine if there are
|
||||
// any columns that are not visible but can be shown
|
||||
var collapsedClass = false;
|
||||
|
||||
for ( i=0, ien=columns.length ; i<ien ; i++ ) {
|
||||
if ( columnsVis[i] === false && ! columns[i].never && ! columns[i].control ) {
|
||||
if ( columnsVis[i] === false && ! columns[i].never && ! columns[i].control && ! dt.column(i).visible() === false ) {
|
||||
collapsedClass = true;
|
||||
break;
|
||||
}
|
||||
@@ -745,9 +831,14 @@ $.extend( Responsive.prototype, {
|
||||
$( dt.table().node() ).toggleClass( 'collapsed', collapsedClass );
|
||||
|
||||
var changed = false;
|
||||
var visible = 0;
|
||||
|
||||
dt.columns().eq(0).each( function ( colIdx, i ) {
|
||||
if ( columnsVis[i] !== oldVis[i] ) {
|
||||
if ( columnsVis[i] === true ) {
|
||||
visible++;
|
||||
}
|
||||
|
||||
if ( forceRedraw || columnsVis[i] !== oldVis[i] ) {
|
||||
changed = true;
|
||||
that._setColumnVis( colIdx, columnsVis[i] );
|
||||
}
|
||||
@@ -758,7 +849,14 @@ $.extend( Responsive.prototype, {
|
||||
|
||||
// Inform listeners of the change
|
||||
$(dt.table().node()).trigger( 'responsive-resize.dt', [dt, this.s.current] );
|
||||
|
||||
// If no records, update the "No records" display element
|
||||
if ( dt.page.info().recordsDisplay === 0 ) {
|
||||
$('td', dt.table().body()).eq(0).attr('colspan', visible);
|
||||
}
|
||||
}
|
||||
|
||||
that._controlClass();
|
||||
},
|
||||
|
||||
|
||||
@@ -786,6 +884,15 @@ $.extend( Responsive.prototype, {
|
||||
return;
|
||||
}
|
||||
|
||||
// Need to restore all children. They will be reinstated by a re-render
|
||||
if ( ! $.isEmptyObject( _childNodeStore ) ) {
|
||||
$.each( _childNodeStore, function ( key ) {
|
||||
var idx = key.split('-');
|
||||
|
||||
_childNodesRestore( dt, idx[0]*1, idx[1]*1 );
|
||||
} );
|
||||
}
|
||||
|
||||
// Clone the table with the current data in it
|
||||
var tableWidth = dt.table().node().offsetWidth;
|
||||
var columnWidths = dt.columns;
|
||||
@@ -793,6 +900,8 @@ $.extend( Responsive.prototype, {
|
||||
var clonedHeader = $( dt.table().header().cloneNode( false ) ).appendTo( clonedTable );
|
||||
var clonedBody = $( dt.table().body() ).clone( false, false ).empty().appendTo( clonedTable ); // use jQuery because of IE8
|
||||
|
||||
clonedTable.style.width = 'auto';
|
||||
|
||||
// Header
|
||||
var headerCells = dt.columns()
|
||||
.header()
|
||||
@@ -801,7 +910,9 @@ $.extend( Responsive.prototype, {
|
||||
} )
|
||||
.to$()
|
||||
.clone( false )
|
||||
.css( 'display', 'table-cell' );
|
||||
.css( 'display', 'table-cell' )
|
||||
.css( 'width', 'auto' )
|
||||
.css( 'min-width', 0 );
|
||||
|
||||
// Body rows - we don't need to take account of DataTables' column
|
||||
// visibility since we implement our own here (hence the `display` set)
|
||||
@@ -842,12 +953,17 @@ $.extend( Responsive.prototype, {
|
||||
// multiple times. For example, cloning and inserting a checked radio
|
||||
// clears the chcecked state of the original radio.
|
||||
$( clonedTable ).find( '[name]' ).removeAttr( 'name' );
|
||||
|
||||
// A position absolute table would take the table out of the flow of
|
||||
// our container element, bypassing the height and width (Scroller)
|
||||
$( clonedTable ).css( 'position', 'relative' )
|
||||
|
||||
var inserted = $('<div/>')
|
||||
.css( {
|
||||
width: 1,
|
||||
height: 1,
|
||||
overflow: 'hidden'
|
||||
overflow: 'hidden',
|
||||
clear: 'both'
|
||||
} )
|
||||
.append( clonedTable );
|
||||
|
||||
@@ -862,6 +978,23 @@ $.extend( Responsive.prototype, {
|
||||
inserted.remove();
|
||||
},
|
||||
|
||||
/**
|
||||
* Get the state of the current hidden columns - controlled by Responsive only
|
||||
*/
|
||||
_responsiveOnlyHidden: function ()
|
||||
{
|
||||
var dt = this.s.dt;
|
||||
|
||||
return $.map( this.s.current, function (v, i) {
|
||||
// If the column is hidden by DataTables then it can't be hidden by
|
||||
// Responsive!
|
||||
if ( dt.column(i).visible() === false ) {
|
||||
return true;
|
||||
}
|
||||
return v;
|
||||
} );
|
||||
},
|
||||
|
||||
/**
|
||||
* Set a column's visibility.
|
||||
*
|
||||
@@ -882,6 +1015,13 @@ $.extend( Responsive.prototype, {
|
||||
$( dt.column( col ).header() ).css( 'display', display );
|
||||
$( dt.column( col ).footer() ).css( 'display', display );
|
||||
dt.column( col ).nodes().to$().css( 'display', display );
|
||||
|
||||
// If the are child nodes stored, we might need to reinsert them
|
||||
if ( ! $.isEmptyObject( _childNodeStore ) ) {
|
||||
dt.cells( null, col ).indexes().each( function (idx) {
|
||||
_childNodesRestore( dt, idx.row, idx.column );
|
||||
} );
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -903,13 +1043,22 @@ $.extend( Responsive.prototype, {
|
||||
|
||||
cells.filter( '[data-dtr-keyboard]' ).removeData( '[data-dtr-keyboard]' );
|
||||
|
||||
var selector = typeof target === 'number' ?
|
||||
':eq('+target+')' :
|
||||
target;
|
||||
if ( typeof target === 'number' ) {
|
||||
dt.cells( null, target, { page: 'current' } ).nodes().to$()
|
||||
.attr( 'tabIndex', ctx.iTabIndex )
|
||||
.data( 'dtr-keyboard', 1 );
|
||||
}
|
||||
else {
|
||||
// This is a bit of a hack - we need to limit the selected nodes to just
|
||||
// those of this table
|
||||
if ( target === 'td:first-child, th:first-child' ) {
|
||||
target = '>td:first-child, >th:first-child';
|
||||
}
|
||||
|
||||
$( selector, dt.rows( { page: 'current' } ).nodes() )
|
||||
.attr( 'tabIndex', ctx.iTabIndex )
|
||||
.data( 'dtr-keyboard', 1 );
|
||||
$( target, dt.rows( { page: 'current' } ).nodes() )
|
||||
.attr( 'tabIndex', ctx.iTabIndex )
|
||||
.data( 'dtr-keyboard', 1 );
|
||||
}
|
||||
}
|
||||
} );
|
||||
|
||||
@@ -1037,6 +1186,52 @@ Responsive.display = {
|
||||
};
|
||||
|
||||
|
||||
var _childNodeStore = {};
|
||||
|
||||
function _childNodes( dt, row, col ) {
|
||||
var name = row+'-'+col;
|
||||
|
||||
if ( _childNodeStore[ name ] ) {
|
||||
return _childNodeStore[ name ];
|
||||
}
|
||||
|
||||
// https://jsperf.com/childnodes-array-slice-vs-loop
|
||||
var nodes = [];
|
||||
var children = dt.cell( row, col ).node().childNodes;
|
||||
for ( var i=0, ien=children.length ; i<ien ; i++ ) {
|
||||
nodes.push( children[i] );
|
||||
}
|
||||
|
||||
_childNodeStore[ name ] = nodes;
|
||||
|
||||
return nodes;
|
||||
}
|
||||
|
||||
function _childNodesRestore( dt, row, col ) {
|
||||
var name = row+'-'+col;
|
||||
|
||||
if ( ! _childNodeStore[ name ] ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var node = dt.cell( row, col ).node();
|
||||
var store = _childNodeStore[ name ];
|
||||
var parent = store[0].parentNode;
|
||||
var parentChildren = parent.childNodes;
|
||||
var a = [];
|
||||
|
||||
for ( var i=0, ien=parentChildren.length ; i<ien ; i++ ) {
|
||||
a.push( parentChildren[i] );
|
||||
}
|
||||
|
||||
for ( var j=0, jen=a.length ; j<jen ; j++ ) {
|
||||
node.appendChild( a[j] );
|
||||
}
|
||||
|
||||
_childNodeStore[ name ] = undefined;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Display methods - functions which define how the hidden data should be shown
|
||||
* in the table.
|
||||
@@ -1046,11 +1241,46 @@ Responsive.display = {
|
||||
* @static
|
||||
*/
|
||||
Responsive.renderer = {
|
||||
listHiddenNodes: function () {
|
||||
return function ( api, rowIdx, columns ) {
|
||||
var ul = $('<ul data-dtr-index="'+rowIdx+'" class="dtr-details"/>');
|
||||
var found = false;
|
||||
|
||||
var data = $.each( columns, function ( i, col ) {
|
||||
if ( col.hidden ) {
|
||||
var klass = col.className ?
|
||||
'class="'+ col.className +'"' :
|
||||
'';
|
||||
|
||||
$(
|
||||
'<li '+klass+' data-dtr-index="'+col.columnIndex+'" data-dt-row="'+col.rowIndex+'" data-dt-column="'+col.columnIndex+'">'+
|
||||
'<span class="dtr-title">'+
|
||||
col.title+
|
||||
'</span> '+
|
||||
'</li>'
|
||||
)
|
||||
.append( $('<span class="dtr-data"/>').append( _childNodes( api, col.rowIndex, col.columnIndex ) ) )// api.cell( col.rowIndex, col.columnIndex ).node().childNodes ) )
|
||||
.appendTo( ul );
|
||||
|
||||
found = true;
|
||||
}
|
||||
} );
|
||||
|
||||
return found ?
|
||||
ul :
|
||||
false;
|
||||
};
|
||||
},
|
||||
|
||||
listHidden: function () {
|
||||
return function ( api, rowIdx, columns ) {
|
||||
var data = $.map( columns, function ( col ) {
|
||||
var klass = col.className ?
|
||||
'class="'+ col.className +'"' :
|
||||
'';
|
||||
|
||||
return col.hidden ?
|
||||
'<li data-dtr-index="'+col.columnIndex+'" data-dt-row="'+col.rowIndex+'" data-dt-column="'+col.columnIndex+'">'+
|
||||
'<li '+klass+' data-dtr-index="'+col.columnIndex+'" data-dt-row="'+col.rowIndex+'" data-dt-column="'+col.columnIndex+'">'+
|
||||
'<span class="dtr-title">'+
|
||||
col.title+
|
||||
'</span> '+
|
||||
@@ -1062,7 +1292,7 @@ Responsive.renderer = {
|
||||
} ).join('');
|
||||
|
||||
return data ?
|
||||
$('<ul data-dtr-index="'+rowIdx+'"/>').append( data ) :
|
||||
$('<ul data-dtr-index="'+rowIdx+'" class="dtr-details"/>').append( data ) :
|
||||
false;
|
||||
}
|
||||
},
|
||||
@@ -1074,13 +1304,17 @@ Responsive.renderer = {
|
||||
|
||||
return function ( api, rowIdx, columns ) {
|
||||
var data = $.map( columns, function ( col ) {
|
||||
return '<tr data-dt-row="'+col.rowIndex+'" data-dt-column="'+col.columnIndex+'">'+
|
||||
var klass = col.className ?
|
||||
'class="'+ col.className +'"' :
|
||||
'';
|
||||
|
||||
return '<tr '+klass+' data-dt-row="'+col.rowIndex+'" data-dt-column="'+col.columnIndex+'">'+
|
||||
'<td>'+col.title+':'+'</td> '+
|
||||
'<td>'+col.data+'</td>'+
|
||||
'</tr>';
|
||||
} ).join('');
|
||||
|
||||
return $('<table class="'+options.tableClass+'" width="100%"/>').append( data );
|
||||
return $('<table class="'+options.tableClass+' dtr-details" width="100%"/>').append( data );
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -1190,10 +1424,18 @@ Api.register( 'responsive.hasHidden()', function () {
|
||||
var ctx = this.context[0];
|
||||
|
||||
return ctx._responsive ?
|
||||
$.inArray( false, ctx._responsive.s.current ) !== -1 :
|
||||
$.inArray( false, ctx._responsive._responsiveOnlyHidden() ) !== -1 :
|
||||
false;
|
||||
} );
|
||||
|
||||
Api.registerPlural( 'columns().responsiveHidden()', 'column().responsiveHidden()', function () {
|
||||
return this.iterator( 'column', function ( settings, column ) {
|
||||
return settings._responsive ?
|
||||
settings._responsive._responsiveOnlyHidden()[ column ] :
|
||||
false;
|
||||
}, 1 );
|
||||
} );
|
||||
|
||||
|
||||
/**
|
||||
* Version information
|
||||
@@ -1201,7 +1443,7 @@ Api.register( 'responsive.hasHidden()', function () {
|
||||
* @name Responsive.version
|
||||
* @static
|
||||
*/
|
||||
Responsive.version = '2.1.0';
|
||||
Responsive.version = '2.2.7';
|
||||
|
||||
|
||||
$.fn.dataTable.Responsive = Responsive;
|
||||
|
||||
32
node_modules/datatables.net-responsive/js/dataTables.responsive.min.js
generated
vendored
Normal file
32
node_modules/datatables.net-responsive/js/dataTables.responsive.min.js
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
/*!
|
||||
Responsive 2.2.7
|
||||
2014-2021 SpryMedia Ltd - datatables.net/license
|
||||
*/
|
||||
(function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(m){return d(m,window,document)}):"object"===typeof exports?module.exports=function(m,l){m||(m=window);if(!l||!l.fn.dataTable)l=require("datatables.net")(m,l).$;return d(l,m,m.document)}:d(jQuery,window,document)})(function(d,m,l,q){function t(a,b,c){var e=b+"-"+c;if(n[e])return n[e];for(var d=[],a=a.cell(b,c).node().childNodes,b=0,c=a.length;b<c;b++)d.push(a[b]);return n[e]=d}function r(a,b,c){var e=b+
|
||||
"-"+c;if(n[e]){for(var a=a.cell(b,c).node(),c=n[e][0].parentNode.childNodes,b=[],d=0,g=c.length;d<g;d++)b.push(c[d]);c=0;for(d=b.length;c<d;c++)a.appendChild(b[c]);n[e]=q}}var o=d.fn.dataTable,i=function(a,b){if(!o.versionCheck||!o.versionCheck("1.10.10"))throw"DataTables Responsive requires DataTables 1.10.10 or newer";this.s={dt:new o.Api(a),columns:[],current:[]};this.s.dt.settings()[0].responsive||(b&&"string"===typeof b.details?b.details={type:b.details}:b&&!1===b.details?b.details={type:!1}:
|
||||
b&&!0===b.details&&(b.details={type:"inline"}),this.c=d.extend(!0,{},i.defaults,o.defaults.responsive,b),a.responsive=this,this._constructor())};d.extend(i.prototype,{_constructor:function(){var a=this,b=this.s.dt,c=b.settings()[0],e=d(m).innerWidth();b.settings()[0]._responsive=this;d(m).on("resize.dtr orientationchange.dtr",o.util.throttle(function(){var b=d(m).innerWidth();b!==e&&(a._resize(),e=b)}));c.oApi._fnCallbackReg(c,"aoRowCreatedCallback",function(c){-1!==d.inArray(!1,a.s.current)&&d(">td, >th",
|
||||
c).each(function(c){c=b.column.index("toData",c);!1===a.s.current[c]&&d(this).css("display","none")})});b.on("destroy.dtr",function(){b.off(".dtr");d(b.table().body()).off(".dtr");d(m).off("resize.dtr orientationchange.dtr");b.cells(".dtr-control").nodes().to$().removeClass("dtr-control");d.each(a.s.current,function(b,c){!1===c&&a._setColumnVis(b,!0)})});this.c.breakpoints.sort(function(a,b){return a.width<b.width?1:a.width>b.width?-1:0});this._classLogic();this._resizeAuto();c=this.c.details;!1!==
|
||||
c.type&&(a._detailsInit(),b.on("column-visibility.dtr",function(){a._timer&&clearTimeout(a._timer);a._timer=setTimeout(function(){a._timer=null;a._classLogic();a._resizeAuto();a._resize(!0);a._redrawChildren()},100)}),b.on("draw.dtr",function(){a._redrawChildren()}),d(b.table().node()).addClass("dtr-"+c.type));b.on("column-reorder.dtr",function(){a._classLogic();a._resizeAuto();a._resize(true)});b.on("column-sizing.dtr",function(){a._resizeAuto();a._resize()});b.on("preXhr.dtr",function(){var c=[];
|
||||
b.rows().every(function(){this.child.isShown()&&c.push(this.id(true))});b.one("draw.dtr",function(){a._resizeAuto();a._resize();b.rows(c).every(function(){a._detailsDisplay(this,false)})})});b.on("draw.dtr",function(){a._controlClass()}).on("init.dtr",function(c){if(c.namespace==="dt"){a._resizeAuto();a._resize();d.inArray(false,a.s.current)&&b.columns.adjust()}});this._resize()},_columnsVisiblity:function(a){var b=this.s.dt,c=this.s.columns,e,f,g=c.map(function(a,b){return{columnIdx:b,priority:a.priority}}).sort(function(a,
|
||||
b){return a.priority!==b.priority?a.priority-b.priority:a.columnIdx-b.columnIdx}),j=d.map(c,function(c,e){return!1===b.column(e).visible()?"not-visible":c.auto&&null===c.minWidth?!1:!0===c.auto?"-":-1!==d.inArray(a,c.includeIn)}),h=0;e=0;for(f=j.length;e<f;e++)!0===j[e]&&(h+=c[e].minWidth);e=b.settings()[0].oScroll;e=e.sY||e.sX?e.iBarWidth:0;h=b.table().container().offsetWidth-e-h;e=0;for(f=j.length;e<f;e++)c[e].control&&(h-=c[e].minWidth);var s=!1;e=0;for(f=g.length;e<f;e++){var k=g[e].columnIdx;
|
||||
"-"===j[k]&&(!c[k].control&&c[k].minWidth)&&(s||0>h-c[k].minWidth?(s=!0,j[k]=!1):j[k]=!0,h-=c[k].minWidth)}g=!1;e=0;for(f=c.length;e<f;e++)if(!c[e].control&&!c[e].never&&!1===j[e]){g=!0;break}e=0;for(f=c.length;e<f;e++)c[e].control&&(j[e]=g),"not-visible"===j[e]&&(j[e]=!1);-1===d.inArray(!0,j)&&(j[0]=!0);return j},_classLogic:function(){var a=this,b=this.c.breakpoints,c=this.s.dt,e=c.columns().eq(0).map(function(a){var b=this.column(a),e=b.header().className,a=c.settings()[0].aoColumns[a].responsivePriority,
|
||||
b=b.header().getAttribute("data-priority");a===q&&(a=b===q||null===b?1E4:1*b);return{className:e,includeIn:[],auto:!1,control:!1,never:e.match(/\bnever\b/)?!0:!1,priority:a}}),f=function(a,b){var c=e[a].includeIn;-1===d.inArray(b,c)&&c.push(b)},g=function(c,d,g,k){if(g)if("max-"===g){k=a._find(d).width;d=0;for(g=b.length;d<g;d++)b[d].width<=k&&f(c,b[d].name)}else if("min-"===g){k=a._find(d).width;d=0;for(g=b.length;d<g;d++)b[d].width>=k&&f(c,b[d].name)}else{if("not-"===g){d=0;for(g=b.length;d<g;d++)-1===
|
||||
b[d].name.indexOf(k)&&f(c,b[d].name)}}else e[c].includeIn.push(d)};e.each(function(a,c){for(var e=a.className.split(" "),f=!1,i=0,m=e.length;i<m;i++){var l=e[i].trim();if("all"===l){f=!0;a.includeIn=d.map(b,function(a){return a.name});return}if("none"===l||a.never){f=!0;return}if("control"===l||"dtr-control"===l){f=!0;a.control=!0;return}d.each(b,function(a,b){var d=b.name.split("-"),e=l.match(RegExp("(min\\-|max\\-|not\\-)?("+d[0]+")(\\-[_a-zA-Z0-9])?"));e&&(f=!0,e[2]===d[0]&&e[3]==="-"+d[1]?g(c,
|
||||
b.name,e[1],e[2]+e[3]):e[2]===d[0]&&!e[3]&&g(c,b.name,e[1],e[2]))})}f||(a.auto=!0)});this.s.columns=e},_controlClass:function(){if("inline"===this.c.details.type){var a=this.s.dt,b=d.inArray(!0,this.s.current);a.cells(null,function(a){return a!==b},{page:"current"}).nodes().to$().filter(".dtr-control").removeClass("dtr-control");a.cells(null,b,{page:"current"}).nodes().to$().addClass("dtr-control")}},_detailsDisplay:function(a,b){var c=this,e=this.s.dt,f=this.c.details;if(f&&!1!==f.type){var g=f.display(a,
|
||||
b,function(){return f.renderer(e,a[0],c._detailsObj(a[0]))});(!0===g||!1===g)&&d(e.table().node()).triggerHandler("responsive-display.dt",[e,a,g,b])}},_detailsInit:function(){var a=this,b=this.s.dt,c=this.c.details;"inline"===c.type&&(c.target="td.dtr-control, th.dtr-control");b.on("draw.dtr",function(){a._tabIndexes()});a._tabIndexes();d(b.table().body()).on("keyup.dtr","td, th",function(a){a.keyCode===13&&d(this).data("dtr-keyboard")&&d(this).click()});var e=c.target;if(e!==q||null!==e)d(b.table().body()).on("click.dtr mousedown.dtr mouseup.dtr",
|
||||
"string"===typeof e?e:"td, th",function(c){if(d(b.table().node()).hasClass("collapsed")&&d.inArray(d(this).closest("tr").get(0),b.rows().nodes().toArray())!==-1){if(typeof e==="number"){var g=e<0?b.columns().eq(0).length+e:e;if(b.cell(this).index().column!==g)return}g=b.row(d(this).closest("tr"));c.type==="click"?a._detailsDisplay(g,false):c.type==="mousedown"?d(this).css("outline","none"):c.type==="mouseup"&&d(this).trigger("blur").css("outline","")}})},_detailsObj:function(a){var b=this,c=this.s.dt;
|
||||
return d.map(this.s.columns,function(e,f){if(!e.never&&!e.control){var g=c.settings()[0].aoColumns[f];return{className:g.sClass,columnIndex:f,data:c.cell(a,f).render(b.c.orthogonal),hidden:c.column(f).visible()&&!b.s.current[f],rowIndex:a,title:null!==g.sTitle?g.sTitle:d(c.column(f).header()).text()}}})},_find:function(a){for(var b=this.c.breakpoints,c=0,d=b.length;c<d;c++)if(b[c].name===a)return b[c]},_redrawChildren:function(){var a=this,b=this.s.dt;b.rows({page:"current"}).iterator("row",function(c,
|
||||
d){b.row(d);a._detailsDisplay(b.row(d),!0)})},_resize:function(a){var b=this,c=this.s.dt,e=d(m).innerWidth(),f=this.c.breakpoints,g=f[0].name,j=this.s.columns,h,i=this.s.current.slice();for(h=f.length-1;0<=h;h--)if(e<=f[h].width){g=f[h].name;break}var k=this._columnsVisiblity(g);this.s.current=k;f=!1;h=0;for(e=j.length;h<e;h++)if(!1===k[h]&&!j[h].never&&!j[h].control&&!1===!c.column(h).visible()){f=!0;break}d(c.table().node()).toggleClass("collapsed",f);var l=!1,n=0;c.columns().eq(0).each(function(c,
|
||||
d){!0===k[d]&&n++;if(a||k[d]!==i[d])l=!0,b._setColumnVis(c,k[d])});l&&(this._redrawChildren(),d(c.table().node()).trigger("responsive-resize.dt",[c,this.s.current]),0===c.page.info().recordsDisplay&&d("td",c.table().body()).eq(0).attr("colspan",n));b._controlClass()},_resizeAuto:function(){var a=this.s.dt,b=this.s.columns;if(this.c.auto&&-1!==d.inArray(!0,d.map(b,function(a){return a.auto}))){d.isEmptyObject(n)||d.each(n,function(b){b=b.split("-");r(a,1*b[0],1*b[1])});a.table().node();var c=a.table().node().cloneNode(!1),
|
||||
e=d(a.table().header().cloneNode(!1)).appendTo(c),f=d(a.table().body()).clone(!1,!1).empty().appendTo(c);c.style.width="auto";var g=a.columns().header().filter(function(b){return a.column(b).visible()}).to$().clone(!1).css("display","table-cell").css("width","auto").css("min-width",0);d(f).append(d(a.rows({page:"current"}).nodes()).clone(!1)).find("th, td").css("display","");if(f=a.table().footer()){var f=d(f.cloneNode(!1)).appendTo(c),j=a.columns().footer().filter(function(b){return a.column(b).visible()}).to$().clone(!1).css("display",
|
||||
"table-cell");d("<tr/>").append(j).appendTo(f)}d("<tr/>").append(g).appendTo(e);"inline"===this.c.details.type&&d(c).addClass("dtr-inline collapsed");d(c).find("[name]").removeAttr("name");d(c).css("position","relative");c=d("<div/>").css({width:1,height:1,overflow:"hidden",clear:"both"}).append(c);c.insertBefore(a.table().node());g.each(function(d){d=a.column.index("fromVisible",d);b[d].minWidth=this.offsetWidth||0});c.remove()}},_responsiveOnlyHidden:function(){var a=this.s.dt;return d.map(this.s.current,
|
||||
function(b,d){return!1===a.column(d).visible()?!0:b})},_setColumnVis:function(a,b){var c=this.s.dt,e=b?"":"none";d(c.column(a).header()).css("display",e);d(c.column(a).footer()).css("display",e);c.column(a).nodes().to$().css("display",e);d.isEmptyObject(n)||c.cells(null,a).indexes().each(function(a){r(c,a.row,a.column)})},_tabIndexes:function(){var a=this.s.dt,b=a.cells({page:"current"}).nodes().to$(),c=a.settings()[0],e=this.c.details.target;b.filter("[data-dtr-keyboard]").removeData("[data-dtr-keyboard]");
|
||||
"number"===typeof e?a.cells(null,e,{page:"current"}).nodes().to$().attr("tabIndex",c.iTabIndex).data("dtr-keyboard",1):("td:first-child, th:first-child"===e&&(e=">td:first-child, >th:first-child"),d(e,a.rows({page:"current"}).nodes()).attr("tabIndex",c.iTabIndex).data("dtr-keyboard",1))}});i.breakpoints=[{name:"desktop",width:Infinity},{name:"tablet-l",width:1024},{name:"tablet-p",width:768},{name:"mobile-l",width:480},{name:"mobile-p",width:320}];i.display={childRow:function(a,b,c){if(b){if(d(a.node()).hasClass("parent"))return a.child(c(),
|
||||
"child").show(),!0}else{if(a.child.isShown())return a.child(!1),d(a.node()).removeClass("parent"),!1;a.child(c(),"child").show();d(a.node()).addClass("parent");return!0}},childRowImmediate:function(a,b,c){if(!b&&a.child.isShown()||!a.responsive.hasHidden())return a.child(!1),d(a.node()).removeClass("parent"),!1;a.child(c(),"child").show();d(a.node()).addClass("parent");return!0},modal:function(a){return function(b,c,e){if(c)d("div.dtr-modal-content").empty().append(e());else{var f=function(){g.remove();
|
||||
d(l).off("keypress.dtr")},g=d('<div class="dtr-modal"/>').append(d('<div class="dtr-modal-display"/>').append(d('<div class="dtr-modal-content"/>').append(e())).append(d('<div class="dtr-modal-close">×</div>').click(function(){f()}))).append(d('<div class="dtr-modal-background"/>').click(function(){f()})).appendTo("body");d(l).on("keyup.dtr",function(a){27===a.keyCode&&(a.stopPropagation(),f())})}a&&a.header&&d("div.dtr-modal-content").prepend("<h2>"+a.header(b)+"</h2>")}}};var n={};i.renderer=
|
||||
{listHiddenNodes:function(){return function(a,b,c){var e=d('<ul data-dtr-index="'+b+'" class="dtr-details"/>'),f=!1;d.each(c,function(b,c){c.hidden&&(d("<li "+(c.className?'class="'+c.className+'"':"")+' data-dtr-index="'+c.columnIndex+'" data-dt-row="'+c.rowIndex+'" data-dt-column="'+c.columnIndex+'"><span class="dtr-title">'+c.title+"</span> </li>").append(d('<span class="dtr-data"/>').append(t(a,c.rowIndex,c.columnIndex))).appendTo(e),f=!0)});return f?e:!1}},listHidden:function(){return function(a,
|
||||
b,c){return(a=d.map(c,function(a){var b=a.className?'class="'+a.className+'"':"";return a.hidden?"<li "+b+' data-dtr-index="'+a.columnIndex+'" data-dt-row="'+a.rowIndex+'" data-dt-column="'+a.columnIndex+'"><span class="dtr-title">'+a.title+'</span> <span class="dtr-data">'+a.data+"</span></li>":""}).join(""))?d('<ul data-dtr-index="'+b+'" class="dtr-details"/>').append(a):!1}},tableAll:function(a){a=d.extend({tableClass:""},a);return function(b,c,e){b=d.map(e,function(a){return"<tr "+(a.className?
|
||||
'class="'+a.className+'"':"")+' data-dt-row="'+a.rowIndex+'" data-dt-column="'+a.columnIndex+'"><td>'+a.title+":</td> <td>"+a.data+"</td></tr>"}).join("");return d('<table class="'+a.tableClass+' dtr-details" width="100%"/>').append(b)}}};i.defaults={breakpoints:i.breakpoints,auto:!0,details:{display:i.display.childRow,renderer:i.renderer.listHidden(),target:0,type:"inline"},orthogonal:"display"};var p=d.fn.dataTable.Api;p.register("responsive()",function(){return this});p.register("responsive.index()",
|
||||
function(a){a=d(a);return{column:a.data("dtr-index"),row:a.parent().data("dtr-index")}});p.register("responsive.rebuild()",function(){return this.iterator("table",function(a){a._responsive&&a._responsive._classLogic()})});p.register("responsive.recalc()",function(){return this.iterator("table",function(a){a._responsive&&(a._responsive._resizeAuto(),a._responsive._resize())})});p.register("responsive.hasHidden()",function(){var a=this.context[0];return a._responsive?-1!==d.inArray(!1,a._responsive._responsiveOnlyHidden()):
|
||||
!1});p.registerPlural("columns().responsiveHidden()","column().responsiveHidden()",function(){return this.iterator("column",function(a,b){return a._responsive?a._responsive._responsiveOnlyHidden()[b]:!1},1)});i.version="2.2.7";d.fn.dataTable.Responsive=i;d.fn.DataTable.Responsive=i;d(l).on("preInit.dt.dtr",function(a,b){if("dt"===a.namespace&&(d(b.nTable).hasClass("responsive")||d(b.nTable).hasClass("dt-responsive")||b.oInit.responsive||o.defaults.responsive)){var c=b.oInit.responsive;!1!==c&&new i(b,
|
||||
d.isPlainObject(c)?c:{})}});return i});
|
||||
Reference in New Issue
Block a user