commit
19769588b9
@ -0,0 +1,22 @@
|
||||
/**
|
||||
* When using `-init deferRender` you might find that under a specific set of circumstances you
|
||||
* need the `-tag tr` element for a row which hasn't yet been drawn. This method can be used to
|
||||
* create the nodes for the rows which haven't yet been drawn.
|
||||
*
|
||||
* @name rows().generate()
|
||||
* @summary Create tr elements for rows which have not yet had their nodes created.
|
||||
* @author [Allan Jardine](http://datatables.net)
|
||||
* @requires DataTables 1.10+
|
||||
*
|
||||
* @returns {DataTable.Api} DataTables API instance
|
||||
*
|
||||
* @example
|
||||
* // Create nodes for all rows
|
||||
* table.rows().generate();
|
||||
*/
|
||||
|
||||
$.fn.dataTable.Api.register( 'rows().generate()', function () {
|
||||
return this.iterator( 'row', function ( context, index ) {
|
||||
context.oApi._fnCreateTr( context, index );
|
||||
} );
|
||||
} );
|
@ -0,0 +1,245 @@
|
||||
/**
|
||||
* @summary SlidingChild
|
||||
* @description Show / Hide row child plugin
|
||||
* @version 2.0.1
|
||||
* @file dataTables.slidingChild.js
|
||||
* @author Nick Adkinson (https://github.com/data-handler)
|
||||
* @copyright Copyright 2018 Nick Adkinson
|
||||
*
|
||||
* License MIT - http://datatables.net/license/mit
|
||||
*
|
||||
* This feature plug-in provides functionality for showing and hiding row child
|
||||
* information in DataTables. This can be particularly useful for displaying
|
||||
* hierarchical data as a drill-down, or where you wish to convey more information
|
||||
* about a row than there is space for in the host table.
|
||||
*
|
||||
* @example
|
||||
* $('#myTable').DataTable({
|
||||
* slidingChild: {
|
||||
* source: function(parent, response) {
|
||||
* $.get('/Child/GetByParentId/' + parent.data('id'), response);
|
||||
* }
|
||||
* }
|
||||
* });
|
||||
*
|
||||
*/
|
||||
(function( factory ){
|
||||
if ( typeof define === 'function' && define.amd ) {
|
||||
// AMD
|
||||
define( ['jquery', 'datatables.net'], function ( $ ) {
|
||||
return factory( $, window, document );
|
||||
} );
|
||||
}
|
||||
else if ( typeof exports === 'object' ) {
|
||||
// CommonJS
|
||||
module.exports = function (root, $) {
|
||||
if ( ! root ) {
|
||||
root = window;
|
||||
}
|
||||
|
||||
if ( ! $ || ! $.fn.dataTable ) {
|
||||
$ = require('datatables.net')(root, $).$;
|
||||
}
|
||||
|
||||
return factory( $, root, root.document );
|
||||
};
|
||||
}
|
||||
else {
|
||||
// Browser
|
||||
factory( jQuery, document );
|
||||
}
|
||||
}(function( $, document ) {
|
||||
'use strict';
|
||||
|
||||
var SlidingChild = function (dt, options)
|
||||
{
|
||||
var that = this;
|
||||
dt.on('draw', function() {
|
||||
that._updateFadedRows();
|
||||
});
|
||||
var table = dt.table();
|
||||
var sliderElement = document.createElement('div');
|
||||
sliderElement.className = 'slider';
|
||||
|
||||
this.s = $.extend({},
|
||||
{
|
||||
dt: dt,
|
||||
table: $(table.node()),
|
||||
slider: $(sliderElement)
|
||||
},
|
||||
SlidingChild.defaults,
|
||||
options
|
||||
);
|
||||
|
||||
this._bind();
|
||||
};
|
||||
|
||||
SlidingChild.prototype = {
|
||||
_bind: function() {
|
||||
var that = this;
|
||||
var settings = that.s;
|
||||
$(settings.table, '> tbody').on('click', settings.selector, function() {
|
||||
var $this = $(this);
|
||||
var tr = $this.is('tr') ? $this : $this.closest('tr');
|
||||
|
||||
if (!tr.is('tr')) { return; } // throw error?
|
||||
|
||||
var dtRow = settings.dt.row(tr);
|
||||
that._toggleChild(dtRow);
|
||||
});
|
||||
},
|
||||
_toggleChild: function(dtRow) {
|
||||
var settings = this.s;
|
||||
if (dtRow.child.isShown()) {
|
||||
this._hideChild(dtRow, function() {});
|
||||
} else {
|
||||
var existingShownDtRow = settings.dt.row('.shown');
|
||||
if (existingShownDtRow.length && settings.toggle) {
|
||||
this._hideChild(existingShownDtRow, this._showChildCallback(dtRow));
|
||||
} else {
|
||||
this._showChild(dtRow);
|
||||
}
|
||||
}
|
||||
},
|
||||
_showChildCallback: function(dtRow) {
|
||||
return function( dtRow ) {
|
||||
this._showChild(dtRow);
|
||||
}.bind( this, dtRow );
|
||||
},
|
||||
_showChild: function(dtRow) {
|
||||
this.s.source( $(dtRow.node() ), this._response(dtRow) );
|
||||
},
|
||||
_response: function(dtRow) {
|
||||
return function( dtRow, childData ) {
|
||||
this.__showChild( dtRow, childData );
|
||||
}.bind( this, dtRow );
|
||||
},
|
||||
__showChild: function(dtRow, data) {
|
||||
var settings = this.s;
|
||||
var slider = settings.slider;
|
||||
|
||||
slider.append(data);
|
||||
dtRow.child(slider, settings.childClass).show();
|
||||
|
||||
$(dtRow.node()).toggleClass('shown');
|
||||
this._updateFadedRows();
|
||||
|
||||
if (settings.animateShow) {
|
||||
this._showChildWithAnimation(dtRow);
|
||||
} else {
|
||||
this._showChildWithoutAnimation(dtRow);
|
||||
}
|
||||
},
|
||||
_showChildWithAnimation: function(dtRow) {
|
||||
var settings = this.s;
|
||||
$(settings.slider, dtRow.child()).slideDown(settings.animationSpeed, function () {
|
||||
settings.onShown(dtRow);
|
||||
});
|
||||
},
|
||||
_showChildWithoutAnimation: function(dtRow) {
|
||||
var settings = this.s;
|
||||
$(settings.slider, dtRow.child()).show();
|
||||
settings.onShown(dtRow);
|
||||
},
|
||||
_hideChild: function(dtRow, callback) {
|
||||
var settings = this.s;
|
||||
|
||||
$(dtRow.node()).toggleClass('shown');
|
||||
this._updateFadedRows();
|
||||
|
||||
if (settings.animateHide) {
|
||||
this._hideChildWithAnimation(dtRow, callback);
|
||||
} else {
|
||||
this._hideChildWithoutAnimation(dtRow, callback);
|
||||
}
|
||||
},
|
||||
_hideChildWithAnimation: function(dtRow, callback) {
|
||||
var settings = this.s;
|
||||
var slider = settings.slider;
|
||||
$(slider, dtRow.child()).slideUp(settings.animationSpeed, function () {
|
||||
dtRow.child.remove();
|
||||
slider.empty();
|
||||
settings.onHidden(dtRow);
|
||||
callback();
|
||||
});
|
||||
},
|
||||
_hideChildWithoutAnimation: function(dtRow, callback) {
|
||||
var settings = this.s;
|
||||
var slider = settings.slider;
|
||||
$(slider, dtRow.child()).hide();
|
||||
dtRow.child.remove();
|
||||
slider.empty();
|
||||
settings.onHidden(dtRow);
|
||||
callback();
|
||||
},
|
||||
_updateFadedRows: function() {
|
||||
if (this.s.fadeNonShowingRows) {
|
||||
this._fadeNonShowingRows();
|
||||
this._removeFadeFromShowingRows();
|
||||
} else {
|
||||
this._removeFadeFromRows();
|
||||
}
|
||||
},
|
||||
_fadeNonShowingRows: function() {
|
||||
if (this.s.dt.rows('.shown:visible').count()) {
|
||||
this.s.dt.rows(':visible:not(.shown):not(.faded)')
|
||||
.nodes()
|
||||
.to$()
|
||||
.css('opacity', this.s.fadeOpacity)
|
||||
.addClass('faded');
|
||||
} else {
|
||||
this._removeFadeFromRows();
|
||||
}
|
||||
},
|
||||
_removeFadeFromShowingRows: function() {
|
||||
this.s.dt.rows('.shown.faded:visible')
|
||||
.nodes()
|
||||
.to$()
|
||||
.css('opacity', 1)
|
||||
.removeClass('faded');
|
||||
},
|
||||
_removeFadeFromRows: function() {
|
||||
this.s.dt.rows('.faded')
|
||||
.nodes()
|
||||
.to$()
|
||||
.css('opacity', 1)
|
||||
.removeClass('faded');
|
||||
}
|
||||
};
|
||||
|
||||
SlidingChild.defaults = {
|
||||
selector: "tr",
|
||||
childClass: 'child',
|
||||
source: function() {},
|
||||
toggle: true,
|
||||
animateShow: true,
|
||||
animateHide: true,
|
||||
fadeNonShowingRows: false,
|
||||
fadeOpacity: 0.4,
|
||||
animationSpeed: 200,
|
||||
onShown: function() {},
|
||||
onHidden: function() {}
|
||||
};
|
||||
|
||||
|
||||
$.fn.dataTable.SlidingChild = SlidingChild;
|
||||
$.fn.DataTable.SlidingChild = SlidingChild;
|
||||
|
||||
// Automatic initialisation listener
|
||||
$(document).on( 'init.dt', function ( e, settings ) {
|
||||
if ( e.namespace !== 'dt' ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var api = new $.fn.dataTable.Api( settings );
|
||||
|
||||
if ( $( api.table().node() ).hasClass( 'slidingChild' ) ||
|
||||
settings.oInit.slidingChild ||
|
||||
$.fn.dataTable.defaults.slidingChild )
|
||||
{
|
||||
new SlidingChild( api, settings.oInit.slidingChild );
|
||||
}
|
||||
} );
|
||||
|
||||
|
||||
}));
|
@ -0,0 +1,7 @@
|
||||
(function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(f){return d(f,window,document)}):"object"===typeof exports?module.exports=function(f,e){f||(f=window);if(!e||!e.fn.dataTable)e=require("datatables.net")(f,e).$;return d(e,f,f.document)}:d(jQuery,document)})(function(d,f){var e=function(a,c){var b=this;a.on("draw",function(){b._updateFadedRows()});var h=a.table(),g=f.createElement("div");g.className="slider";this.s=d.extend({},{dt:a,table:d(h.node()),slider:d(g)},
|
||||
e.defaults,c);this._bind()};e.prototype={_bind:function(){var a=this,c=a.s;d(c.table,"> tbody").on("click",c.selector,function(){var b=d(this),b=b.is("tr")?b:b.closest("tr");b.is("tr")&&(b=c.dt.row(b),a._toggleChild(b))})},_toggleChild:function(a){var c=this.s;if(a.child.isShown())this._hideChild(a,function(){});else{var b=c.dt.row(".shown");b.length&&c.toggle?this._hideChild(b,this._showChildCallback(a)):this._showChild(a)}},_showChildCallback:function(a){return function(a){this._showChild(a)}.bind(this,
|
||||
a)},_showChild:function(a){this.s.source(d(a.node()),this._response(a))},_response:function(a){return function(a,b){this.__showChild(a,b)}.bind(this,a)},__showChild:function(a,c){var b=this.s,e=b.slider;e.append(c);a.child(e,b.childClass).show();d(a.node()).toggleClass("shown");this._updateFadedRows();b.animateShow?this._showChildWithAnimation(a):this._showChildWithoutAnimation(a)},_showChildWithAnimation:function(a){var c=this.s;d(c.slider,a.child()).slideDown(c.animationSpeed,function(){c.onShown(a)})},
|
||||
_showChildWithoutAnimation:function(a){var c=this.s;d(c.slider,a.child()).show();c.onShown(a)},_hideChild:function(a,c){var b=this.s;d(a.node()).toggleClass("shown");this._updateFadedRows();b.animateHide?this._hideChildWithAnimation(a,c):this._hideChildWithoutAnimation(a,c)},_hideChildWithAnimation:function(a,c){var b=this.s,e=b.slider;d(e,a.child()).slideUp(b.animationSpeed,function(){a.child.remove();e.empty();b.onHidden(a);c()})},_hideChildWithoutAnimation:function(a,c){var b=this.s,e=b.slider;
|
||||
d(e,a.child()).hide();a.child.remove();e.empty();b.onHidden(a);c()},_updateFadedRows:function(){this.s.fadeNonShowingRows?(this._fadeNonShowingRows(),this._removeFadeFromShowingRows()):this._removeFadeFromRows()},_fadeNonShowingRows:function(){this.s.dt.rows(".shown:visible").count()?this.s.dt.rows(":visible:not(.shown):not(.faded)").nodes().to$().css("opacity",this.s.fadeOpacity).addClass("faded"):this._removeFadeFromRows()},_removeFadeFromShowingRows:function(){this.s.dt.rows(".shown.faded:visible").nodes().to$().css("opacity",
|
||||
1).removeClass("faded")},_removeFadeFromRows:function(){this.s.dt.rows(".faded").nodes().to$().css("opacity",1).removeClass("faded")}};e.defaults={selector:"tr",childClass:"child",source:function(){},toggle:!0,animateShow:!0,animateHide:!0,fadeNonShowingRows:!1,fadeOpacity:0.4,animationSpeed:200,onShown:function(){},onHidden:function(){}};d.fn.dataTable.SlidingChild=e;d.fn.DataTable.SlidingChild=e;d(f).on("init.dt",function(a,c){if("dt"===a.namespace){var b=new d.fn.dataTable.Api(c);(d(b.table().node()).hasClass("slidingChild")||
|
||||
c.oInit.slidingChild||d.fn.dataTable.defaults.slidingChild)&&new e(b,c.oInit.slidingChild)}})});
|
@ -1,128 +0,0 @@
|
||||
/**
|
||||
* @summary SlidingChild
|
||||
* @description Plug-in to show/hide row child data
|
||||
* @version 1.0.0
|
||||
* @file slidingchild.js
|
||||
* @author datahandler (www.datahandler.uk)
|
||||
* @copyright Copyright datahandler (www.datahandler.uk)
|
||||
*
|
||||
* License MIT - http://datatables.net/license/mit
|
||||
*/
|
||||
|
||||
/**
|
||||
* Example usage
|
||||
* @example
|
||||
* var table = $('#table_id').DataTable();
|
||||
* slidingChild =
|
||||
* new $.fn.dataTable.SlidingChild(table, {
|
||||
* ajax: {
|
||||
* requestType: 'POST',
|
||||
* requestUrl: '/Home/GetChildData',
|
||||
* dataType: 'HTML',
|
||||
* requestDataCallback: myRequestDataCallback
|
||||
* }
|
||||
* });
|
||||
*/
|
||||
(function ($) {
|
||||
var SlidingChild = function (dt, options) {
|
||||
var opts = $.extend({}, SlidingChild.defaults, options);
|
||||
|
||||
// bind to selector click
|
||||
$(opts.selector).on('click', function () {
|
||||
var $this = $(this);
|
||||
var dtRow = $this.is('tr') ? $this : $this.closest('tr');
|
||||
|
||||
if (!dtRow.is('tr')) { return; } // throw error?
|
||||
// check row belongs to this table?
|
||||
|
||||
dtRow = dt.row(dtRow);
|
||||
toggleChild(dtRow);
|
||||
});
|
||||
|
||||
var toggleChild = function (dtRow) {
|
||||
// if child already showing, close it.
|
||||
if (dtRow.child.isShown()) {
|
||||
closeChild(dtRow);
|
||||
}
|
||||
else {
|
||||
// closes existing showing child, if any
|
||||
if (opts.toggleChild) closeChild(dt.row('.shown'));
|
||||
|
||||
showChildData(dtRow);
|
||||
}
|
||||
};
|
||||
// code borrowed from the resource at: https://datatables.net/blog/2014-10-02
|
||||
var closeChild = function (dtRow) {
|
||||
if (dtRow) {
|
||||
var showingRow = $(dtRow.node());
|
||||
$(opts.sliderSelector, dtRow.child()).slideUp(function () {
|
||||
dtRow.child.remove();
|
||||
showingRow.removeClass('shown');
|
||||
$(dt.table().node()).trigger('childClosed', [dtRow]);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var showChildData = function (dtRow) {
|
||||
if (opts.useRowData) {
|
||||
showChildDataFromRow(dtRow);
|
||||
}
|
||||
else {
|
||||
$.ajax({
|
||||
type: opts.ajax.requestType,
|
||||
url: opts.ajax.requestUrl,
|
||||
beforeSend: function(xhr, settings) {
|
||||
if (opts.ajax.requestDataCallback) {
|
||||
this.data = opts.ajax.requestDataCallback(dtRow);
|
||||
}
|
||||
},
|
||||
contentType: opts.ajax.contentType,
|
||||
dataType: opts.ajax.dataType,
|
||||
success: function (response) {
|
||||
var data = response;
|
||||
if (opts.dataFormatCallback) {
|
||||
data = opts.dataFormatCallback(response);
|
||||
}
|
||||
showChild(dtRow, data);
|
||||
},
|
||||
error: function (response) { showChild(dtRow, response); }
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var showChildDataFromRow = function(dtRow) {
|
||||
if (!opts.dataFormatCallback) { return; } // throw error?
|
||||
var data = opts.dataFormatCallback(dtRow.data());
|
||||
showChild(dtRow, data);
|
||||
}
|
||||
|
||||
var showChild = function(dtRow, data) {
|
||||
var selectedRow = $(dtRow.node());
|
||||
dtRow.child(data).show();
|
||||
|
||||
$(opts.sliderSelector, dtRow.child()).slideDown(function () {
|
||||
selectedRow.addClass('shown');
|
||||
|
||||
$(dt.table().node()).trigger('childShown', [dtRow]);
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
SlidingChild.defaults = {
|
||||
selector: "tr",
|
||||
toggleChild: false,
|
||||
useRowData: false,
|
||||
ajax: {
|
||||
requestType: "GET",
|
||||
requestDataCallback: null,
|
||||
requestUrl: null,
|
||||
contentType: "application/json; charset=utf-8",
|
||||
dataType: "json"
|
||||
},
|
||||
dataFormatCallback: null,
|
||||
sliderSelector: 'div.slider'
|
||||
};
|
||||
|
||||
$.fn.dataTable.SlidingChild = SlidingChild;
|
||||
$.fn.DataTable.SlidingChild = SlidingChild;
|
||||
}(jQuery));
|
@ -0,0 +1,50 @@
|
||||
/**
|
||||
* Sorts a column containing chapter numbers. This can be most useful when
|
||||
* using DataTables for a book or book reference style application. By
|
||||
* default, five sections are supported (a.b.c.d.e) with each being upto
|
||||
* four-digits long. Those defaults are controlled by constMaxSections and
|
||||
* constMaxSectionDigits respectively, and can be easily changed
|
||||
*
|
||||
* @name chapter
|
||||
* @summary Sort book chapters numerically
|
||||
* @author Colin Marks
|
||||
*
|
||||
* @example
|
||||
* $('#example').dataTable( {
|
||||
* columnDefs: [
|
||||
* { type: 'chapter', targets: 0 }
|
||||
* ]
|
||||
* } );
|
||||
*/
|
||||
|
||||
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
|
||||
'chapter-pre': function(a) {
|
||||
function makeFiller(count) {
|
||||
return count === 0 ? '' : Array(count + 1).join('0');
|
||||
}
|
||||
|
||||
var constMaxSections = 5;
|
||||
var constMaxSectionDigits = 4;
|
||||
|
||||
var filler;
|
||||
var result = '';
|
||||
var sections = a.split('.');
|
||||
|
||||
for (var i = 0; i < constMaxSections; i++) {
|
||||
filler = i < sections.length ? constMaxSectionDigits - sections[i].length : constMaxSectionDigits;
|
||||
|
||||
result += filler === 0 ? '' : Array(filler + 1).join('0');
|
||||
result += i < sections.length ? sections[i] : '';
|
||||
}
|
||||
|
||||
return result;
|
||||
},
|
||||
|
||||
'chapter-asc': function(a, b) {
|
||||
return a < b ? -1 : a > b ? 1 : 0;
|
||||
},
|
||||
|
||||
'chapter-desc': function(a, b) {
|
||||
return a < b ? 1 : a > b ? -1 : 0;
|
||||
}
|
||||
});
|
Loading…
Reference in new issue