{"version":3,"sources":["jsdelivr-header.js","/npm/tablesaw@3.1.2/dist/stackonly/tablesaw.stackonly.jquery.js"],"names":[],"mappings":"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","file":"/npm/tablesaw@3.1.2/dist/stackonly/tablesaw.stackonly.jquery.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/tablesaw@3.1.2/dist/stackonly/tablesaw.stackonly.jquery.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*! Tablesaw - v3.1.2 - 2019-03-19\n* https://github.com/filamentgroup/tablesaw\n* Copyright (c) 2019 Filament Group; Licensed MIT */\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    define([\"jquery\"], function (jQuery) {\n      return (root.Tablesaw = factory(jQuery, root));\n    });\n  } else if (typeof exports === 'object') {\n    if( \"document\" in root ) {\n      module.exports = factory(require('jquery'), root);\n    } else {\n      // special jQuery case for CommonJS (pass in a window)\n      module.exports = factory(require('jquery')(root), root);\n    }\n  } else {\n    root.Tablesaw = factory(jQuery, root);\n  }\n}(typeof window !== \"undefined\" ? window : this, function ($, window) {\n\t\"use strict\";\n\n  var document = window.document;\n\n// Account for Tablesaw being loaded either before or after the DOMContentLoaded event is fired.\nvar domContentLoadedTriggered = /complete|loaded/.test(document.readyState);\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n\tdomContentLoadedTriggered = true;\n});\n\nvar Tablesaw = {\n\ti18n: {\n\t\tmodeStack: \"Stack\",\n\t\tmodeSwipe: \"Swipe\",\n\t\tmodeToggle: \"Toggle\",\n\t\tmodeSwitchColumnsAbbreviated: \"Cols\",\n\t\tmodeSwitchColumns: \"Columns\",\n\t\tcolumnToggleButton: \"Columns\",\n\t\tcolumnToggleError: \"No eligible columns.\",\n\t\tsort: \"Sort\",\n\t\tswipePreviousColumn: \"Previous column\",\n\t\tswipeNextColumn: \"Next column\"\n\t},\n\t// cut the mustard\n\tmustard:\n\t\t\"head\" in document && // IE9+, Firefox 4+, Safari 5.1+, Mobile Safari 4.1+, Opera 11.5+, Android 2.3+\n\t\t(!window.blackberry || window.WebKitPoint) && // only WebKit Blackberry (OS 6+)\n\t\t!window.operamini,\n\t$: $,\n\t_init: function(element) {\n\t\tTablesaw.$(element || document).trigger(\"enhance.tablesaw\");\n\t},\n\tinit: function(element) {\n\t\t// Account for Tablesaw being loaded either before or after the DOMContentLoaded event is fired.\n\t\tdomContentLoadedTriggered =\n\t\t\tdomContentLoadedTriggered || /complete|loaded/.test(document.readyState);\n\t\tif (!domContentLoadedTriggered) {\n\t\t\tif (\"addEventListener\" in document) {\n\t\t\t\t// Use raw DOMContentLoaded instead of shoestring (may have issues in Android 2.3, exhibited by stack table)\n\t\t\t\tdocument.addEventListener(\"DOMContentLoaded\", function() {\n\t\t\t\t\tTablesaw._init(element);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tTablesaw._init(element);\n\t\t}\n\t}\n};\n\n$(document).on(\"enhance.tablesaw\", function() {\n\t// Extend i18n config, if one exists.\n\tif (typeof TablesawConfig !== \"undefined\" && TablesawConfig.i18n) {\n\t\tTablesaw.i18n = $.extend(Tablesaw.i18n, TablesawConfig.i18n || {});\n\t}\n\n\tTablesaw.i18n.modes = [\n\t\tTablesaw.i18n.modeStack,\n\t\tTablesaw.i18n.modeSwipe,\n\t\tTablesaw.i18n.modeToggle\n\t];\n});\n\nif (Tablesaw.mustard) {\n\t$(document.documentElement).addClass(\"tablesaw-enhanced\");\n}\n\n(function() {\n\tvar pluginName = \"tablesaw\";\n\tvar classes = {\n\t\ttoolbar: \"tablesaw-bar\"\n\t};\n\tvar events = {\n\t\tcreate: \"tablesawcreate\",\n\t\tdestroy: \"tablesawdestroy\",\n\t\trefresh: \"tablesawrefresh\",\n\t\tresize: \"tablesawresize\"\n\t};\n\tvar defaultMode = \"stack\";\n\tvar initSelector = \"table\";\n\tvar initFilterSelector = \"[data-tablesaw],[data-tablesaw-mode],[data-tablesaw-sortable]\";\n\tvar defaultConfig = {};\n\n\tTablesaw.events = events;\n\n\tvar Table = function(element) {\n\t\tif (!element) {\n\t\t\tthrow new Error(\"Tablesaw requires an element.\");\n\t\t}\n\n\t\tthis.table = element;\n\t\tthis.$table = $(element);\n\n\t\t// only one <thead> and <tfoot> are allowed, per the specification\n\t\tthis.$thead = this.$table\n\t\t\t.children()\n\t\t\t.filter(\"thead\")\n\t\t\t.eq(0);\n\n\t\t// multiple <tbody> are allowed, per the specification\n\t\tthis.$tbody = this.$table.children().filter(\"tbody\");\n\n\t\tthis.mode = this.$table.attr(\"data-tablesaw-mode\") || defaultMode;\n\n\t\tthis.$toolbar = null;\n\n\t\tthis.attributes = {\n\t\t\tsubrow: \"data-tablesaw-subrow\",\n\t\t\tignorerow: \"data-tablesaw-ignorerow\"\n\t\t};\n\n\t\tthis.init();\n\t};\n\n\tTable.prototype.init = function() {\n\t\tif (!this.$thead.length) {\n\t\t\tthrow new Error(\"tablesaw: a <thead> is required, but none was found.\");\n\t\t}\n\n\t\tif (!this.$thead.find(\"th\").length) {\n\t\t\tthrow new Error(\"tablesaw: no header cells found. Are you using <th> inside of <thead>?\");\n\t\t}\n\n\t\t// assign an id if there is none\n\t\tif (!this.$table.attr(\"id\")) {\n\t\t\tthis.$table.attr(\"id\", pluginName + \"-\" + Math.round(Math.random() * 10000));\n\t\t}\n\n\t\tthis.createToolbar();\n\n\t\tthis._initCells();\n\n\t\tthis.$table.data(pluginName, this);\n\n\t\tthis.$table.trigger(events.create, [this]);\n\t};\n\n\tTable.prototype.getConfig = function(pluginSpecificConfig) {\n\t\t// shoestring extend doesn’t support arbitrary args\n\t\tvar configs = $.extend(defaultConfig, pluginSpecificConfig || {});\n\t\treturn $.extend(configs, typeof TablesawConfig !== \"undefined\" ? TablesawConfig : {});\n\t};\n\n\tTable.prototype._getPrimaryHeaderRow = function() {\n\t\treturn this._getHeaderRows().eq(0);\n\t};\n\n\tTable.prototype._getHeaderRows = function() {\n\t\treturn this.$thead\n\t\t\t.children()\n\t\t\t.filter(\"tr\")\n\t\t\t.filter(function() {\n\t\t\t\treturn !$(this).is(\"[data-tablesaw-ignorerow]\");\n\t\t\t});\n\t};\n\n\tTable.prototype._getRowIndex = function($row) {\n\t\treturn $row.prevAll().length;\n\t};\n\n\tTable.prototype._getHeaderRowIndeces = function() {\n\t\tvar self = this;\n\t\tvar indeces = [];\n\t\tthis._getHeaderRows().each(function() {\n\t\t\tindeces.push(self._getRowIndex($(this)));\n\t\t});\n\t\treturn indeces;\n\t};\n\n\tTable.prototype._getPrimaryHeaderCells = function($row) {\n\t\treturn ($row || this._getPrimaryHeaderRow()).find(\"th\");\n\t};\n\n\tTable.prototype._$getCells = function(th) {\n\t\tvar self = this;\n\t\treturn $(th)\n\t\t\t.add(th.cells)\n\t\t\t.filter(function() {\n\t\t\t\tvar $t = $(this);\n\t\t\t\tvar $row = $t.parent();\n\t\t\t\tvar hasColspan = $t.is(\"[colspan]\");\n\t\t\t\t// no subrows or ignored rows (keep cells in ignored rows that do not have a colspan)\n\t\t\t\treturn (\n\t\t\t\t\t!$row.is(\"[\" + self.attributes.subrow + \"]\") &&\n\t\t\t\t\t(!$row.is(\"[\" + self.attributes.ignorerow + \"]\") || !hasColspan)\n\t\t\t\t);\n\t\t\t});\n\t};\n\n\tTable.prototype._getVisibleColspan = function() {\n\t\tvar colspan = 0;\n\t\tthis._getPrimaryHeaderCells().each(function() {\n\t\t\tvar $t = $(this);\n\t\t\tif ($t.css(\"display\") !== \"none\") {\n\t\t\t\tcolspan += parseInt($t.attr(\"colspan\"), 10) || 1;\n\t\t\t}\n\t\t});\n\t\treturn colspan;\n\t};\n\n\tTable.prototype.getColspanForCell = function($cell) {\n\t\tvar visibleColspan = this._getVisibleColspan();\n\t\tvar visibleSiblingColumns = 0;\n\t\tif ($cell.closest(\"tr\").data(\"tablesaw-rowspanned\")) {\n\t\t\tvisibleSiblingColumns++;\n\t\t}\n\n\t\t$cell.siblings().each(function() {\n\t\t\tvar $t = $(this);\n\t\t\tvar colColspan = parseInt($t.attr(\"colspan\"), 10) || 1;\n\n\t\t\tif ($t.css(\"display\") !== \"none\") {\n\t\t\t\tvisibleSiblingColumns += colColspan;\n\t\t\t}\n\t\t});\n\t\t// console.log( $cell[ 0 ], visibleColspan, visibleSiblingColumns );\n\n\t\treturn visibleColspan - visibleSiblingColumns;\n\t};\n\n\tTable.prototype.isCellInColumn = function(header, cell) {\n\t\treturn $(header)\n\t\t\t.add(header.cells)\n\t\t\t.filter(function() {\n\t\t\t\treturn this === cell;\n\t\t\t}).length;\n\t};\n\n\tTable.prototype.updateColspanCells = function(cls, header, userAction) {\n\t\tvar self = this;\n\t\tvar primaryHeaderRow = self._getPrimaryHeaderRow();\n\n\t\t// find persistent column rowspans\n\t\tthis.$table.find(\"[rowspan][data-tablesaw-priority]\").each(function() {\n\t\t\tvar $t = $(this);\n\t\t\tif ($t.attr(\"data-tablesaw-priority\") !== \"persist\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar $row = $t.closest(\"tr\");\n\t\t\tvar rowspan = parseInt($t.attr(\"rowspan\"), 10);\n\t\t\tif (rowspan > 1) {\n\t\t\t\t$row = $row.next();\n\n\t\t\t\t$row.data(\"tablesaw-rowspanned\", true);\n\n\t\t\t\trowspan--;\n\t\t\t}\n\t\t});\n\n\t\tthis.$table\n\t\t\t.find(\"[colspan],[data-tablesaw-maxcolspan]\")\n\t\t\t.filter(function() {\n\t\t\t\t// is not in primary header row\n\t\t\t\treturn $(this).closest(\"tr\")[0] !== primaryHeaderRow[0];\n\t\t\t})\n\t\t\t.each(function() {\n\t\t\t\tvar $cell = $(this);\n\n\t\t\t\tif (userAction === undefined || self.isCellInColumn(header, this)) {\n\t\t\t\t} else {\n\t\t\t\t\t// if is not a user action AND the cell is not in the updating column, kill it\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar colspan = self.getColspanForCell($cell);\n\n\t\t\t\tif (cls && userAction !== undefined) {\n\t\t\t\t\t// console.log( colspan === 0 ? \"addClass\" : \"removeClass\", $cell );\n\t\t\t\t\t$cell[colspan === 0 ? \"addClass\" : \"removeClass\"](cls);\n\t\t\t\t}\n\n\t\t\t\t// cache original colspan\n\t\t\t\tvar maxColspan = parseInt($cell.attr(\"data-tablesaw-maxcolspan\"), 10);\n\t\t\t\tif (!maxColspan) {\n\t\t\t\t\t$cell.attr(\"data-tablesaw-maxcolspan\", $cell.attr(\"colspan\"));\n\t\t\t\t} else if (colspan > maxColspan) {\n\t\t\t\t\tcolspan = maxColspan;\n\t\t\t\t}\n\n\t\t\t\t// console.log( this, \"setting colspan to \", colspan );\n\t\t\t\t$cell.attr(\"colspan\", colspan);\n\t\t\t});\n\t};\n\n\tTable.prototype._findPrimaryHeadersForCell = function(cell) {\n\t\tvar $headerRow = this._getPrimaryHeaderRow();\n\t\tvar headerRowIndex = this._getRowIndex($headerRow);\n\t\tvar results = [];\n\n\t\tfor (var rowNumber = 0; rowNumber < this.headerMapping.length; rowNumber++) {\n\t\t\tif (rowNumber === headerRowIndex) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (var colNumber = 0; colNumber < this.headerMapping[rowNumber].length; colNumber++) {\n\t\t\t\tif (this.headerMapping[rowNumber][colNumber] === cell) {\n\t\t\t\t\tresults.push(this.headerMapping[headerRowIndex][colNumber]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t};\n\n\t// used by init cells\n\tTable.prototype.getRows = function() {\n\t\tvar self = this;\n\t\treturn this.$table.find(\"tr\").filter(function() {\n\t\t\treturn $(this)\n\t\t\t\t.closest(\"table\")\n\t\t\t\t.is(self.$table);\n\t\t});\n\t};\n\n\t// used by sortable\n\tTable.prototype.getBodyRows = function(tbody) {\n\t\treturn (tbody ? $(tbody) : this.$tbody).children().filter(\"tr\");\n\t};\n\n\tTable.prototype.getHeaderCellIndex = function(cell) {\n\t\tvar lookup = this.headerMapping[0];\n\t\tfor (var colIndex = 0; colIndex < lookup.length; colIndex++) {\n\t\t\tif (lookup[colIndex] === cell) {\n\t\t\t\treturn colIndex;\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t};\n\n\tTable.prototype._initCells = function() {\n\t\t// re-establish original colspans\n\t\tthis.$table.find(\"[data-tablesaw-maxcolspan]\").each(function() {\n\t\t\tvar $t = $(this);\n\t\t\t$t.attr(\"colspan\", $t.attr(\"data-tablesaw-maxcolspan\"));\n\t\t});\n\n\t\tvar $rows = this.getRows();\n\t\tvar columnLookup = [];\n\n\t\t$rows.each(function(rowNumber) {\n\t\t\tcolumnLookup[rowNumber] = [];\n\t\t});\n\n\t\t$rows.each(function(rowNumber) {\n\t\t\tvar coltally = 0;\n\t\t\tvar $t = $(this);\n\t\t\tvar children = $t.children();\n\n\t\t\tchildren.each(function() {\n\t\t\t\tvar colspan = parseInt(\n\t\t\t\t\tthis.getAttribute(\"data-tablesaw-maxcolspan\") || this.getAttribute(\"colspan\"),\n\t\t\t\t\t10\n\t\t\t\t);\n\t\t\t\tvar rowspan = parseInt(this.getAttribute(\"rowspan\"), 10);\n\n\t\t\t\t// set in a previous rowspan\n\t\t\t\twhile (columnLookup[rowNumber][coltally]) {\n\t\t\t\t\tcoltally++;\n\t\t\t\t}\n\n\t\t\t\tcolumnLookup[rowNumber][coltally] = this;\n\n\t\t\t\t// TODO? both colspan and rowspan\n\t\t\t\tif (colspan) {\n\t\t\t\t\tfor (var k = 0; k < colspan - 1; k++) {\n\t\t\t\t\t\tcoltally++;\n\t\t\t\t\t\tcolumnLookup[rowNumber][coltally] = this;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (rowspan) {\n\t\t\t\t\tfor (var j = 1; j < rowspan; j++) {\n\t\t\t\t\t\tcolumnLookup[rowNumber + j][coltally] = this;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcoltally++;\n\t\t\t});\n\t\t});\n\n\t\tvar headerRowIndeces = this._getHeaderRowIndeces();\n\t\tfor (var colNumber = 0; colNumber < columnLookup[0].length; colNumber++) {\n\t\t\tfor (var headerIndex = 0, k = headerRowIndeces.length; headerIndex < k; headerIndex++) {\n\t\t\t\tvar headerCol = columnLookup[headerRowIndeces[headerIndex]][colNumber];\n\n\t\t\t\tvar rowNumber = headerRowIndeces[headerIndex];\n\t\t\t\tvar rowCell;\n\n\t\t\t\tif (!headerCol.cells) {\n\t\t\t\t\theaderCol.cells = [];\n\t\t\t\t}\n\n\t\t\t\twhile (rowNumber < columnLookup.length) {\n\t\t\t\t\trowCell = columnLookup[rowNumber][colNumber];\n\n\t\t\t\t\tif (headerCol !== rowCell) {\n\t\t\t\t\t\theaderCol.cells.push(rowCell);\n\t\t\t\t\t}\n\n\t\t\t\t\trowNumber++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.headerMapping = columnLookup;\n\t};\n\n\tTable.prototype.refresh = function() {\n\t\tthis._initCells();\n\n\t\tthis.$table.trigger(events.refresh, [this]);\n\t};\n\n\tTable.prototype._getToolbarAnchor = function() {\n\t\tvar $parent = this.$table.parent();\n\t\tif ($parent.is(\".tablesaw-overflow\")) {\n\t\t\treturn $parent;\n\t\t}\n\t\treturn this.$table;\n\t};\n\n\tTable.prototype._getToolbar = function($anchor) {\n\t\tif (!$anchor) {\n\t\t\t$anchor = this._getToolbarAnchor();\n\t\t}\n\t\treturn $anchor.prev().filter(\".\" + classes.toolbar);\n\t};\n\n\tTable.prototype.createToolbar = function() {\n\t\t// Insert the toolbar\n\t\t// TODO move this into a separate component\n\t\tvar $anchor = this._getToolbarAnchor();\n\t\tvar $toolbar = this._getToolbar($anchor);\n\t\tif (!$toolbar.length) {\n\t\t\t$toolbar = $(\"<div>\")\n\t\t\t\t.addClass(classes.toolbar)\n\t\t\t\t.insertBefore($anchor);\n\t\t}\n\t\tthis.$toolbar = $toolbar;\n\n\t\tif (this.mode) {\n\t\t\tthis.$toolbar.addClass(\"tablesaw-mode-\" + this.mode);\n\t\t}\n\t};\n\n\tTable.prototype.destroy = function() {\n\t\t// Don’t remove the toolbar, just erase the classes on it.\n\t\t// Some of the table features are not yet destroy-friendly.\n\t\tthis._getToolbar().each(function() {\n\t\t\tthis.className = this.className.replace(/\\btablesaw-mode\\-\\w*\\b/gi, \"\");\n\t\t});\n\n\t\tvar tableId = this.$table.attr(\"id\");\n\t\t$(document).off(\".\" + tableId);\n\t\t$(window).off(\".\" + tableId);\n\n\t\t// other plugins\n\t\tthis.$table.trigger(events.destroy, [this]);\n\n\t\tthis.$table.removeData(pluginName);\n\t};\n\n\t// Collection method.\n\t$.fn[pluginName] = function() {\n\t\treturn this.each(function() {\n\t\t\tvar $t = $(this);\n\n\t\t\tif ($t.data(pluginName)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tnew Table(this);\n\t\t});\n\t};\n\n\tvar $doc = $(document);\n\t$doc.on(\"enhance.tablesaw\", function(e) {\n\t\t// Cut the mustard\n\t\tif (Tablesaw.mustard) {\n\t\t\tvar $target = $(e.target);\n\t\t\tif ($target.parent().length) {\n\t\t\t\t$target = $target.parent();\n\t\t\t}\n\n\t\t\t$target\n\t\t\t\t.find(initSelector)\n\t\t\t\t.filter(initFilterSelector)\n\t\t\t\t[pluginName]();\n\t\t}\n\t});\n\n\t// Avoid a resize during scroll:\n\t// Some Mobile devices trigger a resize during scroll (sometimes when\n\t// doing elastic stretch at the end of the document or from the\n\t// location bar hide)\n\tvar isScrolling = false;\n\tvar scrollTimeout;\n\t$doc.on(\"scroll.tablesaw\", function() {\n\t\tisScrolling = true;\n\n\t\twindow.clearTimeout(scrollTimeout);\n\t\tscrollTimeout = window.setTimeout(function() {\n\t\t\tisScrolling = false;\n\t\t}, 300); // must be greater than the resize timeout below\n\t});\n\n\tvar resizeTimeout;\n\t$(window).on(\"resize\", function() {\n\t\tif (!isScrolling) {\n\t\t\twindow.clearTimeout(resizeTimeout);\n\t\t\tresizeTimeout = window.setTimeout(function() {\n\t\t\t\t$doc.trigger(events.resize);\n\t\t\t}, 150); // must be less than the scrolling timeout above.\n\t\t}\n\t});\n\n\tTablesaw.Table = Table;\n})();\n\n(function() {\n\tvar classes = {\n\t\tstackTable: \"tablesaw-stack\",\n\t\tcellLabels: \"tablesaw-cell-label\",\n\t\tcellContentLabels: \"tablesaw-cell-content\"\n\t};\n\n\tvar data = {\n\t\tkey: \"tablesaw-stack\"\n\t};\n\n\tvar attrs = {\n\t\tlabelless: \"data-tablesaw-no-labels\",\n\t\thideempty: \"data-tablesaw-hide-empty\"\n\t};\n\n\tvar Stack = function(element, tablesaw) {\n\t\tthis.tablesaw = tablesaw;\n\t\tthis.$table = $(element);\n\n\t\tthis.labelless = this.$table.is(\"[\" + attrs.labelless + \"]\");\n\t\tthis.hideempty = this.$table.is(\"[\" + attrs.hideempty + \"]\");\n\n\t\tthis.$table.data(data.key, this);\n\t};\n\n\tStack.prototype.init = function() {\n\t\tthis.$table.addClass(classes.stackTable);\n\n\t\tif (this.labelless) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar self = this;\n\n\t\tthis.$table\n\t\t\t.find(\"th, td\")\n\t\t\t.filter(function() {\n\t\t\t\treturn !$(this).closest(\"thead\").length;\n\t\t\t})\n\t\t\t.filter(function() {\n\t\t\t\treturn (\n\t\t\t\t\t!$(this).is(\"[\" + attrs.labelless + \"]\") &&\n\t\t\t\t\t!$(this)\n\t\t\t\t\t\t.closest(\"tr\")\n\t\t\t\t\t\t.is(\"[\" + attrs.labelless + \"]\") &&\n\t\t\t\t\t(!self.hideempty || !!$(this).html())\n\t\t\t\t);\n\t\t\t})\n\t\t\t.each(function() {\n\t\t\t\tvar $newHeader = $(document.createElement(\"b\")).addClass(classes.cellLabels);\n\t\t\t\tvar $cell = $(this);\n\n\t\t\t\t$(self.tablesaw._findPrimaryHeadersForCell(this)).each(function(index) {\n\t\t\t\t\tvar $header = $(this.cloneNode(true));\n\t\t\t\t\t// TODO decouple from sortable better\n\t\t\t\t\t// Changed from .text() in https://github.com/filamentgroup/tablesaw/commit/b9c12a8f893ec192830ec3ba2d75f062642f935b\n\t\t\t\t\t// to preserve structural html in headers, like <a>\n\t\t\t\t\tvar $sortableButton = $header.find(\".tablesaw-sortable-btn\");\n\t\t\t\t\t$header.find(\".tablesaw-sortable-arrow\").remove();\n\n\t\t\t\t\t// TODO decouple from checkall better\n\t\t\t\t\tvar $checkall = $header.find(\"[data-tablesaw-checkall]\");\n\t\t\t\t\t$checkall.closest(\"label\").remove();\n\t\t\t\t\tif ($checkall.length) {\n\t\t\t\t\t\t$newHeader = $([]);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t$newHeader.append(document.createTextNode(\", \"));\n\t\t\t\t\t}\n\n\t\t\t\t\tvar parentNode = $sortableButton.length ? $sortableButton[0] : $header[0];\n\t\t\t\t\tvar el;\n\t\t\t\t\twhile ((el = parentNode.firstChild)) {\n\t\t\t\t\t\t$newHeader[0].appendChild(el);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif ($newHeader.length && !$cell.find(\".\" + classes.cellContentLabels).length) {\n\t\t\t\t\t$cell.wrapInner(\"<span class='\" + classes.cellContentLabels + \"'></span>\");\n\t\t\t\t}\n\n\t\t\t\t// Update if already exists.\n\t\t\t\tvar $label = $cell.find(\".\" + classes.cellLabels);\n\t\t\t\tif (!$label.length) {\n\t\t\t\t\t$cell.prepend(document.createTextNode(\" \"));\n\t\t\t\t\t$cell.prepend($newHeader);\n\t\t\t\t} else {\n\t\t\t\t\t// only if changed\n\t\t\t\t\t$label.replaceWith($newHeader);\n\t\t\t\t}\n\t\t\t});\n\t};\n\n\tStack.prototype.destroy = function() {\n\t\tthis.$table.removeClass(classes.stackTable);\n\t\tthis.$table.find(\".\" + classes.cellLabels).remove();\n\t\tthis.$table.find(\".\" + classes.cellContentLabels).each(function() {\n\t\t\t$(this).replaceWith($(this.childNodes));\n\t\t});\n\t};\n\n\t// on tablecreate, init\n\t$(document)\n\t\t.on(Tablesaw.events.create, function(e, tablesaw) {\n\t\t\tif (tablesaw.mode === \"stack\") {\n\t\t\t\tvar table = new Stack(tablesaw.table, tablesaw);\n\t\t\t\ttable.init();\n\t\t\t}\n\t\t})\n\t\t.on(Tablesaw.events.refresh, function(e, tablesaw) {\n\t\t\tif (tablesaw.mode === \"stack\") {\n\t\t\t\t$(tablesaw.table)\n\t\t\t\t\t.data(data.key)\n\t\t\t\t\t.init();\n\t\t\t}\n\t\t})\n\t\t.on(Tablesaw.events.destroy, function(e, tablesaw) {\n\t\t\tif (tablesaw.mode === \"stack\") {\n\t\t\t\t$(tablesaw.table)\n\t\t\t\t\t.data(data.key)\n\t\t\t\t\t.destroy();\n\t\t\t}\n\t\t});\n\n\tTablesaw.Stack = Stack;\n})();\n\n\treturn Tablesaw;\n}));\n"]}