|
171 | 171 | function Plugin (element, options) { |
172 | 172 | this.element = element[0]; |
173 | 173 | this.$element = $(this.element); |
| 174 | + var tableElement = this.$element.find('.tablesorter'); |
| 175 | + |
174 | 176 | var lateDefaults = { |
175 | 177 | downloadButton: this.$element.find('.js-uf-table-download'), |
176 | 178 | onDownload: $.proxy(this._onDownload, this), |
|
246 | 248 | // Copy over dataUrl to pager_ajaxUrl |
247 | 249 | this.settings.tablesorter.widgetOptions.pager_ajaxUrl = this.settings.dataUrl; |
248 | 250 |
|
249 | | - var tableElement = this.$element.find('.tablesorter'); |
250 | | - |
251 | 251 | // Set up 'loading' overlays |
252 | 252 | if (this.settings.useLoadingTransition) { |
253 | 253 | var overlay = this.settings.overlay.container; |
|
262 | 262 | this.ts = tableElement.tablesorter(this.settings.tablesorter); |
263 | 263 |
|
264 | 264 | // Map default column template selectors based on data-column-template attribute in each column header |
265 | | - var columns = this.ts[0].config.headerList; |
| 265 | + var columns = this.ts[0].config.$headerIndexed; |
266 | 266 | var columnTemplates = {}; |
267 | 267 | for (var col = 0; col < columns.length; col++) { |
268 | | - var columnName = $(columns[col]).data('column-name'); |
| 268 | + var columnName = columns[col].data('column-name'); |
269 | 269 | if (!columnName && this.settings.DEBUG) { |
270 | 270 | console.error('Column number ' + col + ' is missing a data-column-name attribute.'); |
271 | 271 | } |
272 | | - columnTemplates[columnName] = $(columns[col]).data('column-template'); |
| 272 | + columnTemplates[columnName] = columns[col].data('column-template'); |
273 | 273 | } |
274 | 274 |
|
275 | 275 | // Merge in any column template selectors that were set in the ctor options |
|
279 | 279 | // At the same time, build out a numerically indexed array of templates |
280 | 280 | this.columnTemplates = []; |
281 | 281 | for (var col = 0; col < columns.length; col++) { |
282 | | - var columnName = $(columns[col]).data('column-name'); |
| 282 | + var columnName = columns[col].data('column-name'); |
283 | 283 | if (!columnTemplates[columnName] && this.settings.DEBUG) { |
284 | 284 | console.error("No template found for column '" + columnName + "'."); |
285 | 285 | } |
|
336 | 336 | var columnIndex = sortList[i][0]; |
337 | 337 | var columnDirection = sortOrders[sortList[i][1]]; // Converts to 'asc' or 'desc' |
338 | 338 | if (sortList[i]) { |
339 | | - var columnName = $(table.config.headerList[columnIndex]).data('column-name'); |
| 339 | + var columnName = table.config.$headerIndexed[columnIndex].data('column-name'); |
340 | 340 | sorts[columnName] = columnDirection; |
341 | 341 | } |
342 | 342 | } |
|
348 | 348 | if (filterList[i]) { |
349 | 349 | var columnName = base.settings.filterAllField; |
350 | 350 |
|
351 | | - if (table.config.headerList[i]) { |
352 | | - columnName = $(table.config.headerList[i]).data('column-name'); |
| 351 | + if (table.config.$headerIndexed[i]) { |
| 352 | + columnName = table.config.$headerIndexed[i].data('column-name'); |
353 | 353 | } |
354 | 354 |
|
355 | 355 | filters[columnName] = filterList[i]; |
|
428 | 428 | } |
429 | 429 |
|
430 | 430 | // Render table rows and cells via Handlebars |
431 | | - var columns = ts.config.headerList; |
432 | 431 | for (var row = 0; row < size; row++) { |
433 | 432 | var cellData = { |
434 | 433 | rownum: row, |
|
438 | 437 |
|
439 | 438 | rows += rowTemplate(cellData); |
440 | 439 |
|
441 | | - for (var col = 0; col < columns.length; col++) { |
| 440 | + for (var col = 0; col < this.columnTemplates.length; col++) { |
442 | 441 | rows += this.columnTemplates[col](cellData); |
443 | 442 | } |
444 | 443 |
|
445 | 444 | rows += '</tr>'; |
446 | 445 | } |
447 | 446 |
|
448 | | - // Initialize any dropdown filters |
| 447 | + // Initialize any dropdown filters |
| 448 | + var columns = ts.config.$headerIndexed; |
449 | 449 | this._ajaxInitFilterSelects(columns, data.listable); |
450 | 450 |
|
451 | 451 | json.total = data.count; // Get total rows without pagination |
|
470 | 470 | var filters = this.getSavedFilters(ts); |
471 | 471 | // Find columns with `.filter-select` and match them to column numbers based on their data-column-name |
472 | 472 | for (var col = 0; col < columns.length; col++) { |
473 | | - var column = $(columns[col]); |
| 473 | + var column = columns[col]; |
474 | 474 | // If the column is designated for filter-select, get the listables from the data and recreate it |
475 | 475 | if (column.hasClass('filter-select')) { |
476 | 476 | var columnName = column.data('column-name'); |
|
0 commit comments