admin/public/js/plugins/dataTables/jquery.dataTables.js
function _fnGetRowElements( settings, row )
	{
		var
			d = [],
			tds = [],
			td = row.firstChild,
			name, col, o, i=0, contents,
			columns = settings.aoColumns;
	
		var attr = function ( str, data, td  ) {
			if ( typeof str === 'string' ) {
				var idx = str.indexOf('@');
	
				if ( idx !== -1 ) {
					var src = str.substring( idx+1 );
					o[ '@'+src ] = td.getAttribute( src );
				}
			}
		};
	
		while ( td ) {
			name = td.nodeName.toUpperCase();
	
			if ( name == "TD" || name == "TH" ) {
				col = columns[i];
				contents = $.trim(td.innerHTML);
	
				if ( col && col._bAttrSrc ) {
					o = {
						display: contents
					};
	
					attr( col.mData.sort, o, td );
					attr( col.mData.type, o, td );
					attr( col.mData.filter, o, td );
	
					d.push( o );
				}
				else {
					d.push( contents );
				}
	
				tds.push( td );
				i++;
			}
	
			td = td.nextSibling;
		}
	
		return {
			data: d,
			cells: tds
		};
	}
function _fnGetRowElements( settings, row )
	{
		var
			d = [],
			tds = [],
			td = row.firstChild,
			name, col, o, i=0, contents,
			columns = settings.aoColumns;
	
		var attr = function ( str, data, td  ) {
			if ( typeof str === 'string' ) {
				var idx = str.indexOf('@');
	
				if ( idx !== -1 ) {
					var src = str.substring( idx+1 );
					o[ '@'+src ] = td.getAttribute( src );
				}
			}
		};
	
		while ( td ) {
			name = td.nodeName.toUpperCase();
	
			if ( name == "TD" || name == "TH" ) {
				col = columns[i];
				contents = $.trim(td.innerHTML);
	
				if ( col && col._bAttrSrc ) {
					o = {
						display: contents
					};
	
					attr( col.mData.sort, o, td );
					attr( col.mData.type, o, td );
					attr( col.mData.filter, o, td );
	
					d.push( o );
				}
				else {
					d.push( contents );
				}
	
				tds.push( td );
				i++;
			}
	
			td = td.nextSibling;
		}
	
		return {
			data: d,
			cells: tds
		};
	}
function _fnGetRowElements ( settings , row ) { var d = [ ] , tds = [ ] , td = row . firstChild , name , col , o , i = 0 , contents , columns = settings . aoColumns ; var attr = function ( str , data , td ) { if ( typeof str === 'string' ) { var idx = str . indexOf ( '@' ) ; if ( idx !== - 1 ) { var src = str . substring ( idx + 1 ) ; o [ '@' + src ] = td . getAttribute ( src ) ; } } } ; while ( td ) { name = td . nodeName . toUpperCase ( ) ; if ( name == "TD" || name == "TH" ) { col = columns [ i ] ; contents = $ . trim ( td . innerHTML ) ; if ( col && col . _bAttrSrc ) { o = { display : contents } ; attr ( col . mData . sort , o , td ) ; attr ( col . mData . type , o , td ) ; attr ( col . mData . filter , o , td ) ; d . push ( o ) ; } else { d . push ( contents ) ; } tds . push ( td ) ; i ++ ; } td = td . nextSibling ; } return { data : d , cells : tds } ; }
Build a data source object from an HTML row, reading the contents of the
cells that are in the row.

@param {object} settings DataTables settings object
@param {node} TR element from which to read data
@returns {object} Object with two parameters: `data` the data read, in
document order, and `cells` and array of nodes (they can be useful to the
caller, so rather than needing a second traversal to get them, just return
them from here).
@memberof DataTable#oApi
Build a data source object from an HTML row reading the contents of the cells that are in the row .