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;
text-align: right;
}
.dataTables_wrapper .dataTables_filter input {
margin-left: 0.5em;
}
.dataTables_wrapper .dataTables_info {
clear: both;
float: left;

View File

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

View File

@ -2187,81 +2187,66 @@
* @param {object} oSettings dataTables settings object
* @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 klass = 'class="'+oSettings.oClasses.sFilterInput+'"';
var sSearchStr = oSettings.oLanguage.sSearch;
sSearchStr = (sSearchStr.indexOf('_INPUT_') !== -1) ?
sSearchStr.replace('_INPUT_', '<input type="search" />') :
sSearchStr==="" ?
'<input type="search" '+klass+' />' :
sSearchStr+' <input type="search" '+klass+'/>';
var str = settings.oLanguage.sSearch;
str = str.match(/_INPUT_/) ?
str.replace('_INPUT_', '<input type="search" />') :
str+'<input type="search" class="'+classes.sFilterInput+'"/>';
var nFilter = document.createElement( 'div' );
nFilter.className = oSettings.oClasses.sFilter;
nFilter.innerHTML = '<label>'+sSearchStr+'</label>';
if ( !oSettings.aanFeatures.f )
{
nFilter.id = oSettings.sTableId+'_filter';
}
var filter = $('<div/>', {
'id': ! features.f ? tableId+'_filter' : null,
'class': classes.sFilter
} )
.append( $('<label/>' ).append( str ) );
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
// added to the filter wrapper if needed (submit button for example)
nFilter._DT_Input = jqFilter[0];
/* Now do the filter */
if ( val != previousSearch.sSearch ) {
_fnFilterComplete( settings, {
"sSearch": val,
"bRegex": previousSearch.bRegex,
"bSmart": previousSearch.bSmart ,
"bCaseInsensitive": previousSearch.bCaseInsensitive
} );
jqFilter.val( oPreviousSearch.sSearch.replace('"','&quot;') );
jqFilter.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 = 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)
// Need to redraw, without resorting
settings._iDisplayStart = 0;
_fnDraw( settings );
}
} )
.bind( 'keypress.DT', function(e) {
/* Prevent form submission */
if ( e.keyCode == 13 )
{
if ( e.keyCode == 13 ) {
return false;
}
}
);
} )
.attr('aria-controls', tableId);
// 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 {
// IE9 throws an 'unknown error' if document.activeElement is used
// inside an iframe or frame...
if ( this._DT_Input !== document.activeElement ) {
jqFilter.val( oPreviousSearch.sSearch );
if ( jqFilter[0] !== document.activeElement ) {
jqFilter.val( previousSearch.sSearch );
}
}
catch ( e ) {
jqFilter.val( oPreviousSearch.sSearch );
}
catch ( e ) {}
} );
return nFilter;
return filter[0];
}