src/pyams_skin/resources/js/myams-dataTables.js
changeset 118 391ad752903e
parent 97 8337e31c9edb
child 126 b94a381c36c2
equal deleted inserted replaced
117:00bfb7b29d9e 118:391ad752903e
     3  * Version 0.1.0
     3  * Version 0.1.0
     4  * ©2014-2015 Thierry Florac <tflorac@ulthar.net>
     4  * ©2014-2015 Thierry Florac <tflorac@ulthar.net>
     5  */
     5  */
     6 
     6 
     7 
     7 
     8 (function($) {
     8 (function($, globals) {
       
     9 
       
    10 	"use strict";
     9 
    11 
    10 	/**
    12 	/**
    11 	 * Update default values for DataTables initialization
    13 	 * Update default values for DataTables initialization
    12 	 */
    14 	 */
    13 	$.extend(true, $.fn.dataTable.defaults, {
    15 	$.extend(true, $.fn.dataTable.defaults, {
    84 		},
    86 		},
    85 
    87 
    86 		// date-euro column sorter
    88 		// date-euro column sorter
    87 		"date-euro-pre": function(a) {
    89 		"date-euro-pre": function(a) {
    88 			var trimmed = $.trim(a);
    90 			var trimmed = $.trim(a);
    89 			if (trimmed != '') {
    91 			var x;
       
    92 			if (trimmed !== '') {
    90 				var frDate= trimmed.split('/');
    93 				var frDate= trimmed.split('/');
    91 				var x = (frDate[2] + frDate[1] + frDate[0]) * 1;
    94 				x = (frDate[2] + frDate[1] + frDate[0]) * 1;
    92 			} else {
    95 			} else {
    93 				x = 10000000; // = l'an 1000 ...
    96 				x = 10000000; // = l'an 1000 ...
    94 			}
    97 			}
    95 			return x;
    98 			return x;
    96 		},
    99 		},
   104 		},
   107 		},
   105 
   108 
   106 		// datetime-euro column sorter
   109 		// datetime-euro column sorter
   107 		"datetime-euro-pre": function(a) {
   110 		"datetime-euro-pre": function(a) {
   108 			var trimmed = $.trim(a);
   111 			var trimmed = $.trim(a);
   109 			if (trimmed != '') {
   112 			var x;
       
   113 			if (trimmed !== '') {
   110 				var frDateTime = trimmed.split(' - ');
   114 				var frDateTime = trimmed.split(' - ');
   111 				var frDate= frDateTime[0].split('/');
   115 				var frDate= frDateTime[0].split('/');
   112 				var frTime = frDateTime[1].split(':');
   116 				var frTime = frDateTime[1].split(':');
   113 				var x = (frDate[2] + frDate[1] + frDate[0] + frTime[0] + frTime[1]) * 1;
   117 				x = (frDate[2] + frDate[1] + frDate[0] + frTime[0] + frTime[1]) * 1;
   114 			} else {
   118 			} else {
   115 				x = 100000000000; // = l'an 1000 ...
   119 				x = 100000000000; // = l'an 1000 ...
   116 			}
   120 			}
   117 			return x;
   121 			return x;
   118 		},
   122 		},
   134 		"bootstrap": {
   138 		"bootstrap": {
   135 			"fnInit": function(oSettings, nPaging, fnDraw) {
   139 			"fnInit": function(oSettings, nPaging, fnDraw) {
   136 				var oLang = oSettings.oLanguage.oPaginate;
   140 				var oLang = oSettings.oLanguage.oPaginate;
   137 				var fnClickHandler = function (e) {
   141 				var fnClickHandler = function (e) {
   138 					e.preventDefault();
   142 					e.preventDefault();
   139 					if (oSettings.oApi._fnPageChange(oSettings, e.data.action))
   143 					if (oSettings.oApi._fnPageChange(oSettings, e.data.action)) {
   140 						fnDraw(oSettings);
   144 						fnDraw(oSettings);
       
   145 					}
   141 				};
   146 				};
   142 
   147 
   143 				$(nPaging).append(
   148 				$(nPaging).append(
   144 					'<ul class="pagination">' +
   149 					'<ul class="pagination">' +
   145 						'<li class="prev disabled"><a href="#">' + oLang.sPrevious + '</a></li>' +
   150 						'<li class="prev disabled"><a href="#">' + oLang.sPrevious + '</a></li>' +
   181 					// Remove the middle elements
   186 					// Remove the middle elements
   182 					$('li:gt(0)', an[i]).filter(':not(:last)').remove();
   187 					$('li:gt(0)', an[i]).filter(':not(:last)').remove();
   183 
   188 
   184 					// Add the new list items and their event handlers
   189 					// Add the new list items and their event handlers
   185 					for (j=iStart ; j<=iEnd ; j++) {
   190 					for (j=iStart ; j<=iEnd ; j++) {
   186 						sClass = (j==oPaging.iPage+1) ? 'class="active"' : '';
   191 						sClass = (j === oPaging.iPage+1) ? 'class="active"' : '';
   187 						$('<li '+sClass+'><a href="#">'+j+'</a></li>')
   192 						$('<li '+sClass+'><a href="#">'+j+'</a></li>')
   188 							.insertBefore( $('li:last', an[i])[0] )
   193 							.insertBefore( $('li:last', an[i])[0] )
   189 							.on('click', function (e) {
   194 							.on('click', function (e) {
   190 								e.preventDefault();
   195 								e.preventDefault();
   191 								oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
   196 								oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
   192 								fnDraw( oSettings );
   197 								fnDraw( oSettings );
   193 							});
   198 							});
   194 					}
   199 					}
   195 
   200 
   196 					// Add / remove disabled classes from the static elements
   201 					// Add / remove disabled classes from the static elements
   197 					if (oPaging.iPage === 0)
   202 					if (oPaging.iPage === 0) {
   198 						$('li:first', an[i]).addClass('disabled');
   203 						$('li:first', an[i]).addClass('disabled');
   199 					else
   204 					} else {
   200 						$('li:first', an[i]).removeClass('disabled');
   205 						$('li:first', an[i]).removeClass('disabled');
   201 
   206 					}
   202 					if (oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0)
   207 
       
   208 					if (oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0) {
   203 						$('li:last', an[i]).addClass('disabled');
   209 						$('li:last', an[i]).addClass('disabled');
   204 					else
   210 					} else {
   205 						$('li:last', an[i]).removeClass('disabled');
   211 						$('li:last', an[i]).removeClass('disabled');
       
   212 					}
   206 				}
   213 				}
   207 			}
   214 			}
   208 		}
   215 		}
   209 	});
   216 	});
   210 
   217 
   216 		"bootstrap_full": {
   223 		"bootstrap_full": {
   217 			"fnInit": function(oSettings, nPaging, fnDraw) {
   224 			"fnInit": function(oSettings, nPaging, fnDraw) {
   218 				var oLang = oSettings.oLanguage.oPaginate;
   225 				var oLang = oSettings.oLanguage.oPaginate;
   219 				var fnClickHandler = function (e) {
   226 				var fnClickHandler = function (e) {
   220 					e.preventDefault();
   227 					e.preventDefault();
   221 					if (oSettings.oApi._fnPageChange(oSettings, e.data.action))
   228 					if (oSettings.oApi._fnPageChange(oSettings, e.data.action)) {
   222 						fnDraw(oSettings);
   229 						fnDraw(oSettings);
       
   230 					}
   223 				};
   231 				};
   224 
   232 
   225 				$(nPaging).append(
   233 				$(nPaging).append(
   226 					'<ul class="pagination">' +
   234 					'<ul class="pagination">' +
   227 						'<li class="first disabled"><a href="#">' + oLang.sFirst + '</a></li>' +
   235 						'<li class="first disabled"><a href="#">' + oLang.sFirst + '</a></li>' +
   267 					// Remove the middle elements
   275 					// Remove the middle elements
   268 					$('li', an[i]).filter(":not(.first)").filter(":not(.last)").filter(":not(.prev)").filter(":not(.next)").remove();
   276 					$('li', an[i]).filter(":not(.first)").filter(":not(.last)").filter(":not(.prev)").filter(":not(.next)").remove();
   269 
   277 
   270 					// Add the new list items and their event handlers
   278 					// Add the new list items and their event handlers
   271 					for (j=iStart ; j<=iEnd ; j++) {
   279 					for (j=iStart ; j<=iEnd ; j++) {
   272 						sClass = (j==oPaging.iPage+1) ? 'class="active"' : '';
   280 						sClass = (j === oPaging.iPage+1) ? 'class="active"' : '';
   273 						$('<li '+sClass+'><a href="#">'+j+'</a></li>')
   281 						$('<li '+sClass+'><a href="#">'+j+'</a></li>')
   274 							.insertBefore( $('li.next', an[i])[0] )
   282 							.insertBefore( $('li.next', an[i])[0] )
   275 							.on('click', function (e) {
   283 							.on('click', function (e) {
   276 								e.preventDefault();
   284 								e.preventDefault();
   277 								oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
   285 								oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
   278 								fnDraw( oSettings );
   286 								fnDraw( oSettings );
   279 							} );
   287 							});
   280 					}
   288 					}
   281 
   289 
   282 					// Add / remove disabled classes from the static elements
   290 					// Add / remove disabled classes from the static elements
   283 					if (oPaging.iPage === 0) {
   291 					if (oPaging.iPage === 0) {
   284 						$('li.first', an[i]).addClass('disabled');
   292 						$('li.first', an[i]).addClass('disabled');
   308 		"bootstrap_prevnext": {
   316 		"bootstrap_prevnext": {
   309 			"fnInit": function(oSettings, nPaging, fnDraw) {
   317 			"fnInit": function(oSettings, nPaging, fnDraw) {
   310 				var oLang = oSettings.oLanguage.oPaginate;
   318 				var oLang = oSettings.oLanguage.oPaginate;
   311 				var fnClickHandler = function (e) {
   319 				var fnClickHandler = function (e) {
   312 					e.preventDefault();
   320 					e.preventDefault();
   313 					if (oSettings.oApi._fnPageChange(oSettings, e.data.action))
   321 					if (oSettings.oApi._fnPageChange(oSettings, e.data.action)) {
   314 						fnDraw(oSettings);
   322 						fnDraw(oSettings);
       
   323 					}
   315 				};
   324 				};
   316 
   325 
   317 				$(nPaging).append(
   326 				$(nPaging).append(
   318 					'<ul class="pagination">' +
   327 					'<ul class="pagination">' +
   319 						'<li class="first disabled"><a href="#"><i class="fa fa-fw fa-fast-backward"></i></a></li>' +
   328 						'<li class="first disabled"><a href="#"><i class="fa fa-fw fa-fast-backward"></i></a></li>' +
   426 	 */
   435 	 */
   427 	var bl_factory = function($, DataTable) {
   436 	var bl_factory = function($, DataTable) {
   428 
   437 
   429 		var BootstrapLength = function(oSettings, oInit) {
   438 		var BootstrapLength = function(oSettings, oInit) {
   430 
   439 
   431 			if (!this.CLASS || this.CLASS != 'BootstrapLength')
   440 			if (!this.CLASS || this.CLASS !== 'BootstrapLength') {
   432 				alert("Warning: BootstrapLength must be initialized with the 'new' keyword");
   441 				if (globals.alert) {
   433 			if (typeof(oInit) == 'undefined')
   442 					globals.alert("Warning: BootstrapLength must be initialized with the 'new' keyword");
       
   443 				}
       
   444 			}
       
   445 			if (typeof(oInit) === 'undefined') {
   434 				oInit = {};
   446 				oInit = {};
   435 			if ($.fn.dataTable.camelToHungarian)
   447 			}
       
   448 			if ($.fn.dataTable.camelToHungarian) {
   436 				$.fn.dataTable.camelToHungarian(BootstrapLength.defaults, oInit);
   449 				$.fn.dataTable.camelToHungarian(BootstrapLength.defaults, oInit);
       
   450 			}
   437 
   451 
   438 			this.s = {
   452 			this.s = {
   439 				dt: null,
   453 				dt: null,
   440 				oInit: oInit,
   454 				oInit: oInit,
   441 				hidden: true,
   455 				hidden: true,
   445 				wrapper: null,
   459 				wrapper: null,
   446 				input: null
   460 				input: null
   447 			};
   461 			};
   448 			BootstrapLength.aInstances.push(this);
   462 			BootstrapLength.aInstances.push(this);
   449 
   463 
   450 			this.s.dt = $.fn.dataTable.Api
   464 			this.s.dt = $.fn.dataTable.Api ?
   451 				? new $.fn.dataTable.Api(oSettings).settings()[0]
   465 				new $.fn.dataTable.Api(oSettings).settings()[0]
   452 				: oSettings;
   466 				: oSettings;
   453 
   467 
   454 			this._fnConstruct(oInit);
   468 			this._fnConstruct(oInit);
   455 			return this;
   469 			return this;
   456 		};
   470 		};
   469 			},
   483 			},
   470 
   484 
   471 			_fnConstruct: function(init) {
   485 			_fnConstruct: function(init) {
   472 				var self = this;
   486 				var self = this;
   473 				var dt = self.s.dt;
   487 				var dt = self.s.dt;
   474 				if (dt.oScroll.bInfinite)
   488 				if (dt.oScroll.bInfinite) {
   475 					return;
   489 					return;
       
   490 				}
   476 				var sName = dt.sTableId + '_length';
   491 				var sName = dt.sTableId + '_length';
   477 				var sMenu = $('<select size="1"></select>').attr('name', sName);
   492 				var sMenu = $('<select size="1"></select>').attr('name', sName);
   478 				var i, iLen;
   493 				var i, iLen;
   479 				var aLengthMenu = dt.aLengthMenu;
   494 				var aLengthMenu = dt.aLengthMenu;
   480 				if (aLengthMenu.length == 2 && typeof(aLengthMenu[0]) == 'object' && typeof(aLengthMenu[1]) == 'object') {
   495 				if (aLengthMenu.length === 2 &&
   481 					for (i=0, iLen=aLengthMenu[0].length; i < iLen; i++)
   496 					typeof(aLengthMenu[0]) === 'object' &&
       
   497 					typeof(aLengthMenu[1]) === 'object') {
       
   498 					for (i=0, iLen=aLengthMenu[0].length; i < iLen; i++) {
   482 						$('<option />').attr('value', aLengthMenu[0][i])
   499 						$('<option />').attr('value', aLengthMenu[0][i])
   483 									   .text(aLengthMenu[1][i])
   500 									   .text(aLengthMenu[1][i])
   484 									   .appendTo(sMenu);
   501 									   .appendTo(sMenu);
       
   502 					}
   485 				} else {
   503 				} else {
   486 					for (i=0, iLen=aLengthMenu.length; i < iLen; i++)
   504 					for (i=0, iLen=aLengthMenu.length; i < iLen; i++) {
   487 						$('<option />').attr('value', aLengthMenu[i])
   505 						$('<option />').attr('value', aLengthMenu[i])
   488 									   .text(aLengthMenu[i])
   506 									   .text(aLengthMenu[i])
   489 									   .appendTo(sMenu);
   507 									   .appendTo(sMenu);
       
   508 					}
   490 				}
   509 				}
   491 				var nLength = $('<div>').addClass(dt.oClasses.sLength)
   510 				var nLength = $('<div>').addClass(dt.oClasses.sLength)
   492 										.append($('<span></span>').addClass('ams-form')
   511 										.append($('<span></span>').addClass('ams-form')
   493 																  .append($('<label></label>').addClass('select')
   512 																  .append($('<label></label>').addClass('select')
   494 																							  .css('width', 60)
   513 																							  .css('width', 60)
   495 																							  .append(sMenu)
   514 																							  .append(sMenu)
   496 																							  .append($('<i></i>'))));
   515 																							  .append($('<i></i>'))));
   497 				if (!dt.aanFeatures.L)
   516 				if (!dt.aanFeatures.L) {
   498 					nLength.attr('id', dt.sTableId + '_length');
   517 					nLength.attr('id', dt.sTableId + '_length');
       
   518 				}
   499 				this.dom.wrapper = nLength.get(0);
   519 				this.dom.wrapper = nLength.get(0);
   500 
   520 
   501 				$('select option[value="' + dt._iDisplayLength + '"]', nLength).attr("selected", true);
   521 				$('select option[value="' + dt._iDisplayLength + '"]', nLength).attr("selected", true);
   502 				$("select", nLength).on('change.DT', function(e) {
   522 				$("select", nLength).on('change.DT', function(e) {
   503 					var iVal = $(this).val();
   523 					var iVal = $(this).val();
   504 					var n = dt.aanFeatures.L;
   524 					var n = dt.aanFeatures.L;
   505 					for (i = 0, iLen = n.length; i < iLen; i++) {
   525 					for (i = 0, iLen = n.length; i < iLen; i++) {
   506 						if (n[i] != this.parentNode)
   526 						if (n[i] !== this.parentNode) {
   507 						  $("select", n[i]).val(iVal);
   527 							$("select", n[i]).val(iVal);
       
   528 						}
   508 					}
   529 					}
   509 					dt._iDisplayLength = parseInt(iVal, 10);
   530 					dt._iDisplayLength = parseInt(iVal, 10);
   510 					dt.oInstance._fnCalculateEnd(dt);
   531 					dt.oInstance._fnCalculateEnd(dt);
   511 					if (dt.fnDisplayEnd() == dt.fnRecordsDisplay()) {
   532 					if (dt.fnDisplayEnd() === dt.fnRecordsDisplay()) {
   512 						dt._iDisplayStart = dt.fnDisplayEnd() - dt._iDisplayLength;
   533 						dt._iDisplayStart = dt.fnDisplayEnd() - dt._iDisplayLength;
   513 						if (dt._iDisplayStart < 0)
   534 						if (dt._iDisplayStart < 0) {
   514 							dt._iDisplayStart = 0;
   535 							dt._iDisplayStart = 0;
   515 					}
   536 						}
   516 					if (dt._iDisplayLength == -1)
   537 					}
       
   538 					if (dt._iDisplayLength === -1) {
   517 						dt._iDisplayStart = 0;
   539 						dt._iDisplayStart = 0;
       
   540 					}
   518 					dt.oInstance._fnDraw();
   541 					dt.oInstance._fnDraw();
   519 				});
   542 				});
   520 				$("select", nLength).attr("aria-controls", dt.sTableId);
   543 				$("select", nLength).attr("aria-controls", dt.sTableId);
   521 			}
   544 			}
   522 		};
   545 		};
   528 		BootstrapLength.prototype.CLASS = 'BootstrapLength';
   551 		BootstrapLength.prototype.CLASS = 'BootstrapLength';
   529 
   552 
   530 		BootstrapLength.VERSION = '1.0.0';
   553 		BootstrapLength.VERSION = '1.0.0';
   531 		BootstrapLength.prototype.VERSION = BootstrapLength.VERSION;
   554 		BootstrapLength.prototype.VERSION = BootstrapLength.VERSION;
   532 
   555 
   533 		if ((typeof($.fn.dataTable) == 'function') &&
   556 		if ((typeof($.fn.dataTable) === 'function') &&
   534 			(typeof($.fn.dataTableExt.fnVersionCheck) == 'function') &&
   557 			(typeof($.fn.dataTableExt.fnVersionCheck) === 'function') &&
   535 			$.fn.dataTableExt.fnVersionCheck('1.7.0')) {
   558 			$.fn.dataTableExt.fnVersionCheck('1.7.0')) {
   536 			$.fn.dataTableExt.aoFeatures.push({
   559 			$.fn.dataTableExt.aoFeatures.push({
   537 				fnInit: function(oSettings) {
   560 				fnInit: function(oSettings) {
   538 					var init = oSettings.oInit;
   561 					var init = oSettings.oInit;
   539 					var Length = new BootstrapLength(oSettings, init.bootstrapLength || init.oBootstrapLength || {});
   562 					var Length = new BootstrapLength(oSettings, init.bootstrapLength || init.oBootstrapLength || {});
   541 				},
   564 				},
   542 				cFeature: 'L',
   565 				cFeature: 'L',
   543 				sFeature: "BootstrapLength"
   566 				sFeature: "BootstrapLength"
   544 			});
   567 			});
   545 		} else {
   568 		} else {
   546 			alert("Warning: BootstrapLength required DataTables 1.7 or greater...");
   569 			if (globals.alert) {
       
   570 				globals.alert("Warning: BootstrapLength required DataTables 1.7 or greater...");
       
   571 			}
   547 		}
   572 		}
   548 
   573 
   549 		$.fn.dataTable.BootstrapLength = BootstrapLength;
   574 		$.fn.dataTable.BootstrapLength = BootstrapLength;
   550 		return BootstrapLength;
   575 		return BootstrapLength;
   551 
   576 
   552 	};
   577 	};
   553 
   578 
   554 	if (!jQuery.fn.dataTable.BootstrapLength) {
   579 	if (!$.fn.dataTable.BootstrapLength) {
   555 		bl_factory($, $.fn.dataTable);
   580 		bl_factory($, $.fn.dataTable);
   556 	}
   581 	}
   557 
   582 
   558 
   583 
   559 	/**
   584 	/**
   561 	 */
   586 	 */
   562 	var bf_factory = function($, DataTable) {
   587 	var bf_factory = function($, DataTable) {
   563 
   588 
   564 		var BootstrapFilter = function(oSettings, oInit) {
   589 		var BootstrapFilter = function(oSettings, oInit) {
   565 
   590 
   566 			if (!this.CLASS || this.CLASS != 'BootstrapFilter')
   591 			if (!this.CLASS || this.CLASS !== 'BootstrapFilter') {
   567 				alert("Warning: BootstrapFilter must be initialized with the 'new' keyword");
   592 				if (globals.alert) {
   568 			if (typeof(oInit) == 'undefined')
   593 					globals.alert("Warning: BootstrapFilter must be initialized with the 'new' keyword");
       
   594 				}
       
   595 			}
       
   596 			if (typeof(oInit) === 'undefined') {
   569 				oInit = {};
   597 				oInit = {};
   570 			if ($.fn.dataTable.camelToHungarian)
   598 			}
       
   599 			if ($.fn.dataTable.camelToHungarian) {
   571 				$.fn.dataTable.camelToHungarian(BootstrapFilter.defaults, oInit);
   600 				$.fn.dataTable.camelToHungarian(BootstrapFilter.defaults, oInit);
       
   601 			}
   572 
   602 
   573 			this.s = {
   603 			this.s = {
   574 				dt: null,
   604 				dt: null,
   575 				oInit: oInit,
   605 				oInit: oInit,
   576 				hidden: true,
   606 				hidden: true,
   580 				wrapper: null,
   610 				wrapper: null,
   581 				input: null
   611 				input: null
   582 			};
   612 			};
   583 			BootstrapFilter.aInstances.push(this);
   613 			BootstrapFilter.aInstances.push(this);
   584 
   614 
   585 			this.s.dt = $.fn.dataTable.Api
   615 			this.s.dt = $.fn.dataTable.Api ?
   586 				? new $.fn.dataTable.Api(oSettings).settings()[0]
   616 				new $.fn.dataTable.Api(oSettings).settings()[0]
   587 				: oSettings;
   617 				: oSettings;
   588 
   618 
   589 			this._fnConstruct(oInit);
   619 			this._fnConstruct(oInit);
   590 			return this;
   620 			return this;
   591 		};
   621 		};
   625 						.attr('aria-control', dt.sTableId)
   655 						.attr('aria-control', dt.sTableId)
   626 						.on('keyup.DT', function(e) {
   656 						.on('keyup.DT', function(e) {
   627 							var n = dt.aanFeatures.F;
   657 							var n = dt.aanFeatures.F;
   628 							var val = $(this).val();
   658 							var val = $(this).val();
   629 							for (var i = 0, iLen = n.length; i < iLen; i++) {
   659 							for (var i = 0, iLen = n.length; i < iLen; i++) {
   630 								if (n[i] != $(this).parents("div.dataTables_filter")[0])
   660 								if (n[i] !== $(this).parents("div.dataTables_filter")[0]) {
   631 									$(n[i]).data('DT_Input').val(val);
   661 									$(n[i]).data('DT_Input').val(val);
       
   662 								}
   632 							}
   663 							}
   633 							if (val != oPreviousSearch.sSearch) {
   664 							if (val !== oPreviousSearch.sSearch) {
   634 								dt.oInstance._fnFilterComplete({
   665 								dt.oInstance._fnFilterComplete({
   635 									sSearch: val,
   666 									sSearch: val,
   636 									bRegex: oPreviousSearch.bRegex,
   667 									bRegex: oPreviousSearch.bRegex,
   637 									bSmart: oPreviousSearch.bSmart,
   668 									bSmart: oPreviousSearch.bSmart,
   638 									bCaseInsensitive: oPreviousSearch.bCaseInsensitive
   669 									bCaseInsensitive: oPreviousSearch.bCaseInsensitive
   639 								});
   670 								});
   640 							}
   671 							}
   641 						})
   672 						})
   642 						.on('keypress.DT', function(e) {
   673 						.on('keypress.DT', function(e) {
   643 							if (e.keyCode == 13) {
   674 							if (e.keyCode === 13) {
   644 								return false;
   675 								return false;
   645 							}
   676 							}
   646 						});
   677 						});
   647 			}
   678 			}
   648 		};
   679 		};
   654 		BootstrapFilter.prototype.CLASS = 'BootstrapFilter';
   685 		BootstrapFilter.prototype.CLASS = 'BootstrapFilter';
   655 
   686 
   656 		BootstrapFilter.VERSION = '1.0.0';
   687 		BootstrapFilter.VERSION = '1.0.0';
   657 		BootstrapFilter.prototype.VERSION = BootstrapFilter.VERSION;
   688 		BootstrapFilter.prototype.VERSION = BootstrapFilter.VERSION;
   658 
   689 
   659 		if ((typeof($.fn.dataTable) == 'function') &&
   690 		if ((typeof($.fn.dataTable) === 'function') &&
   660 			(typeof($.fn.dataTableExt.fnVersionCheck) == 'function') &&
   691 			(typeof($.fn.dataTableExt.fnVersionCheck) === 'function') &&
   661 			$.fn.dataTableExt.fnVersionCheck('1.7.0')) {
   692 			$.fn.dataTableExt.fnVersionCheck('1.7.0')) {
   662 			$.fn.dataTableExt.aoFeatures.push({
   693 			$.fn.dataTableExt.aoFeatures.push({
   663 				fnInit: function(oSettings) {
   694 				fnInit: function(oSettings) {
   664 					var init = oSettings.oInit;
   695 					var init = oSettings.oInit;
   665 					var filter = new BootstrapFilter(oSettings, init.bootstrapFilter || init.oBootstrapFilter || {});
   696 					var filter = new BootstrapFilter(oSettings, init.bootstrapFilter || init.oBootstrapFilter || {});
   667 				},
   698 				},
   668 				cFeature: 'F',
   699 				cFeature: 'F',
   669 				sFeature: "BootstrapFilter"
   700 				sFeature: "BootstrapFilter"
   670 			});
   701 			});
   671 		} else {
   702 		} else {
   672 			alert("Warning: BootstrapFilter required DataTables 1.7 or greater...");
   703 			if (globals.alert) {
       
   704 				globals.alert("Warning: BootstrapFilter required DataTables 1.7 or greater...");
       
   705 			}
   673 		}
   706 		}
   674 
   707 
   675 		$.fn.dataTable.BootstrapFilter = BootstrapFilter;
   708 		$.fn.dataTable.BootstrapFilter = BootstrapFilter;
   676 		return BootstrapFilter;
   709 		return BootstrapFilter;
   677 
   710 
   678 	};
   711 	};
   679 
   712 
   680 	if (!jQuery.fn.dataTable.BootstrapFilter) {
   713 	if (!$.fn.dataTable.BootstrapFilter) {
   681 		bf_factory($, $.fn.dataTable);
   714 		bf_factory($, $.fn.dataTable);
   682 	}
   715 	}
   683 
   716 
   684 })(jQuery);
   717 })(jQuery, this);