1
0
mirror of https://github.com/DataTables/DataTables.git synced 2025-03-15 16:29:16 +01:00

Dev: Refactor the filtering HTML creation function - save 138 bytes on

file size
This commit is contained in:
Allan Jardine 2013-10-10 17:46:36 +01:00
parent 3795134856
commit c31d3a1447
4 changed files with 50 additions and 59 deletions

View File

@ -1 +1 @@
9fd084bdae8fa642638c88f15592e3322548c328 2e8c9ddd5aaf32c42462cef8cdb620654d186068

View File

@ -226,6 +226,9 @@ table.dataTable.sort-column.hover tbody tr.even:hover.selected > .sorting_3 {
float: right; float: right;
text-align: right; text-align: right;
} }
.dataTables_wrapper .dataTables_filter input {
margin-left: 0.5em;
}
.dataTables_wrapper .dataTables_info { .dataTables_wrapper .dataTables_info {
clear: both; clear: both;
float: left; float: left;

View File

@ -219,6 +219,9 @@ table.dataTable.sort-column.hover tbody tr.even:hover.selected > .sorting_3 {
float: right; float: right;
text-align: right; text-align: right;
} }
.dataTables_wrapper .dataTables_filter input {
margin-left: 0.5em;
}
.dataTables_wrapper .dataTables_info { .dataTables_wrapper .dataTables_info {
clear: both; clear: both;
float: left; float: left;

View File

@ -2187,81 +2187,66 @@
* @param {object} oSettings dataTables settings object * @param {object} oSettings dataTables settings object
* @memberof DataTable#oApi * @memberof DataTable#oApi
*/ */
function _fnFeatureHtmlFilter ( oSettings ) function _fnFeatureHtmlFilter ( settings )
{ {
var oPreviousSearch = oSettings.oPreviousSearch; var classes = settings.oClasses;
var tableId = settings.sTableId;
var previousSearch = settings.oPreviousSearch;
var features = settings.aanFeatures;
// @todo Surely this can be cleaned up!?! var str = settings.oLanguage.sSearch;
var klass = 'class="'+oSettings.oClasses.sFilterInput+'"'; str = str.match(/_INPUT_/) ?
var sSearchStr = oSettings.oLanguage.sSearch; str.replace('_INPUT_', '<input type="search" />') :
sSearchStr = (sSearchStr.indexOf('_INPUT_') !== -1) ? str+'<input type="search" class="'+classes.sFilterInput+'"/>';
sSearchStr.replace('_INPUT_', '<input type="search" />') :
sSearchStr==="" ?
'<input type="search" '+klass+' />' :
sSearchStr+' <input type="search" '+klass+'/>';
var nFilter = document.createElement( 'div' ); var filter = $('<div/>', {
nFilter.className = oSettings.oClasses.sFilter; 'id': ! features.f ? tableId+'_filter' : null,
nFilter.innerHTML = '<label>'+sSearchStr+'</label>'; 'class': classes.sFilter
if ( !oSettings.aanFeatures.f ) } )
{ .append( $('<label/>' ).append( str ) );
nFilter.id = oSettings.sTableId+'_filter';
}
var jqFilter = $('input[type="search"]', nFilter); var jqFilter = $('input[type="search"]', filter)
.val( previousSearch.sSearch.replace('"','&quot;') )
.bind( 'keyup.DT search.DT input.DT paste.DT cut.DT', function(e) {
/* Update all other filter input elements for the new display */
var n = features.f;
var val = !this.value ? "" : this.value; // mental IE8 fix :-(
// Store a reference to the input element, so other input elements could be /* Now do the filter */
// added to the filter wrapper if needed (submit button for example) if ( val != previousSearch.sSearch ) {
nFilter._DT_Input = jqFilter[0]; _fnFilterComplete( settings, {
"sSearch": val,
"bRegex": previousSearch.bRegex,
"bSmart": previousSearch.bSmart ,
"bCaseInsensitive": previousSearch.bCaseInsensitive
} );
jqFilter.val( oPreviousSearch.sSearch.replace('"','&quot;') ); // Need to redraw, without resorting
jqFilter.bind( 'keyup.DT search.DT input.DT paste.DT cut.DT', function(e) { settings._iDisplayStart = 0;
/* Update all other filter input elements for the new display */ _fnDraw( settings );
var n = oSettings.aanFeatures.f; }
var val = this.value==="" ? "" : this.value; // mental IE8 fix :-( } )
/* Now do the filter */
if ( val != oPreviousSearch.sSearch )
{
_fnFilterComplete( oSettings, {
"sSearch": val,
"bRegex": oPreviousSearch.bRegex,
"bSmart": oPreviousSearch.bSmart ,
"bCaseInsensitive": oPreviousSearch.bCaseInsensitive
} );
// Need to redraw, without resorting
oSettings._iDisplayStart = 0;
_fnDraw( oSettings );
}
} );
jqFilter
.attr('aria-controls', oSettings.sTableId)
.bind( 'keypress.DT', function(e) { .bind( 'keypress.DT', function(e) {
/* Prevent form submission */ /* Prevent form submission */
if ( e.keyCode == 13 ) if ( e.keyCode == 13 ) {
{
return false; return false;
} }
} } )
); .attr('aria-controls', tableId);
// Update the input elements whenever the table is filtered // Update the input elements whenever the table is filtered
$(oSettings.nTable).on( 'filter.DT', function () { $(settings.nTable).on( 'filter.DT', function () {
// IE9 throws an 'unknown error' if document.activeElement is used
// inside an iframe or frame...
try { try {
// IE9 throws an 'unknown error' if document.activeElement is used if ( jqFilter[0] !== document.activeElement ) {
// inside an iframe or frame... jqFilter.val( previousSearch.sSearch );
if ( this._DT_Input !== document.activeElement ) {
jqFilter.val( oPreviousSearch.sSearch );
} }
} }
catch ( e ) { catch ( e ) {}
jqFilter.val( oPreviousSearch.sSearch );
}
} ); } );
return nFilter; return filter[0];
} }