{"version":3,"file":"js/sorttable-dc4723e67a912500c101.js","mappings":"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","sources":["webpack://skippr/./app/javascript/packs/sorttable.js"],"sourcesContent":["/*\n SortTable\n version 2\n 7th April 2007\n Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/\n Instructions:\n Download this file\n Add to your HTML\n Add class=\"-sortable\" to any table you'd like to make sortable\n Click on the headers to sort\n Thanks to many, many people for contributions and suggestions.\n Licenced as X11: http://www.kryogenix.org/code/browser/licence.html\n This basically means: do what you want with it.\n*/\n\n/* jshint -W051, -W083, -W027 */\n\nvar stIsIE = /*@cc_on!@*/ false\n\nsorttable = {\n init: function() {\n // quit if this function has already been called\n if (arguments.callee.done) return\n // flag this function so we don't do the same thing twice\n arguments.callee.done = true\n // kill the timer\n if (_timer) clearInterval(_timer)\n\n if (!document.createElement || !document.getElementsByTagName) return\n\n sorttable.DATE_RE = /^(\\d\\d?)[\\/\\.-](\\d\\d?)[\\/\\.-]((\\d\\d)?\\d\\d)$/\n\n forEach(document.getElementsByTagName('table'), function(table) {\n if (table.className.search(/-sortable\\b/) != -1) {\n sorttable.makeSortable(table)\n }\n })\n },\n\n makeSortable: function(table) {\n if (table.getElementsByTagName('thead').length === 0) {\n // table doesn't have a tHead. Since it should have, create one and\n // put the first table row in it.\n the = document.createElement('thead')\n the.appendChild(table.rows[0])\n table.insertBefore(the, table.firstChild)\n }\n // Safari doesn't support table.tHead, sigh\n if (table.tHead === null)\n table.tHead = table.getElementsByTagName('thead')[0]\n\n if (table.tHead.rows.length != 1) return // can't cope with two header rows\n\n // Sorttable v1 put rows with a class of \"sortbottom\" at the bottom (as\n // \"total\" rows, for example). This is B&R, since what you're supposed\n // to do is put them in a tfoot. So, if there are sortbottom rows,\n // for backwards compatibility, move them to tfoot (creating it if needed).\n sortbottomrows = []\n for (var i = 0; i < table.rows.length; i++) {\n if (table.rows[i].className.search(/\\bsortbottom\\b/) != -1) {\n sortbottomrows[sortbottomrows.length] = table.rows[i]\n }\n }\n if (sortbottomrows) {\n if (table.tFoot === null) {\n // table doesn't have a tfoot. Create one.\n tfo = document.createElement('tfoot')\n table.appendChild(tfo)\n }\n for (i = 0; i < sortbottomrows.length; i++) {\n tfo.appendChild(sortbottomrows[i])\n }\n //delete sortbottomrows;\n }\n\n // work through each column and calculate its type\n headrow = table.tHead.rows[0].cells\n for (i = 0; i < headrow.length; i++) {\n // manually override the type with a sorttable_type attribute\n if (!headrow[i].className.match(/\\bsorttable_nosort\\b/)) {\n // skip this col\n mtch = headrow[i].className.match(/\\bsorttable_([a-z0-9]+)\\b/)\n if (mtch) {\n override = mtch[1]\n }\n if (mtch && typeof sorttable['sort_' + override] == 'function') {\n headrow[i].sorttable_sortfunction = sorttable['sort_' + override]\n } else {\n headrow[i].sorttable_sortfunction = sorttable.guessType(table, i)\n }\n // make it clickable to sort\n headrow[i].sorttable_columnindex = i\n headrow[i].sorttable_tbody = table.tBodies[0]\n dean_addEvent(\n headrow[i],\n 'click',\n (sorttable.innerSortFunction = function(e) {\n if (this.className.search(/\\bsorttable_sorted\\b/) != -1) {\n // if we're already sorted by this column, just\n // reverse the table, which is quicker\n sorttable.reverse(this.sorttable_tbody)\n this.className = this.className.replace(\n 'sorttable_sorted',\n 'sorttable_sorted_reverse'\n )\n this.removeChild(document.getElementById('sorttable_sortfwdind'))\n sortrevind = document.createElement('span')\n sortrevind.id = 'sorttable_sortrevind'\n sortrevind.innerHTML = stIsIE\n ? ' 5'\n : ' ▴'\n this.appendChild(sortrevind)\n return\n }\n if (this.className.search(/\\bsorttable_sorted_reverse\\b/) != -1) {\n // if we're already sorted by this column in reverse, just\n // re-reverse the table, which is quicker\n sorttable.reverse(this.sorttable_tbody)\n this.className = this.className.replace(\n 'sorttable_sorted_reverse',\n 'sorttable_sorted'\n )\n this.removeChild(document.getElementById('sorttable_sortrevind'))\n sortfwdind = document.createElement('span')\n sortfwdind.id = 'sorttable_sortfwdind'\n sortfwdind.innerHTML = stIsIE\n ? ' 6'\n : ' ▾'\n this.appendChild(sortfwdind)\n return\n }\n\n // remove sorttable_sorted classes\n theadrow = this.parentNode\n forEach(theadrow.childNodes, function(cell) {\n if (cell.nodeType == 1) {\n // an element\n cell.className = cell.className.replace(\n 'sorttable_sorted_reverse',\n ''\n )\n cell.className = cell.className.replace('sorttable_sorted', '')\n }\n })\n sortfwdind = document.getElementById('sorttable_sortfwdind')\n if (sortfwdind) {\n sortfwdind.parentNode.removeChild(sortfwdind)\n }\n sortrevind = document.getElementById('sorttable_sortrevind')\n if (sortrevind) {\n sortrevind.parentNode.removeChild(sortrevind)\n }\n\n this.className += ' sorttable_sorted'\n sortfwdind = document.createElement('span')\n sortfwdind.id = 'sorttable_sortfwdind'\n sortfwdind.innerHTML = stIsIE\n ? ' 6'\n : ' ▾'\n this.appendChild(sortfwdind)\n\n // build an array to sort. This is a Schwartzian transform thing,\n // i.e., we \"decorate\" each row with the actual sort key,\n // sort based on the sort keys, and then put the rows back in order\n // which is a lot faster because you only do getInnerText once per row\n row_array = []\n col = this.sorttable_columnindex\n rows = this.sorttable_tbody.rows\n for (var j = 0; j < rows.length; j++) {\n row_array[row_array.length] = [\n sorttable.getInnerText(rows[j].cells[col]),\n rows[j]\n ]\n }\n /* If you want a stable sort, uncomment the following line */\n //sorttable.shaker_sort(row_array, this.sorttable_sortfunction);\n /* and comment out this one */\n row_array.sort(this.sorttable_sortfunction)\n\n tb = this.sorttable_tbody\n for (j = 0; j < row_array.length; j++) {\n tb.appendChild(row_array[j][1])\n }\n\n //delete row_array;\n })\n )\n }\n }\n },\n\n guessType: function(table, column) {\n // guess the type of a column based on its first non-blank row\n sortfn = sorttable.sort_alpha\n for (var i = 0; i < table.tBodies[0].rows.length; i++) {\n text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column])\n if (text !== '') {\n if (text.match(/^-?[£$¤]?[\\d,.]+%?$/)) {\n return sorttable.sort_numeric\n }\n // check for a date: dd/mm/yyyy or dd/mm/yy\n // can have / or . or - as separator\n // can be mm/dd as well\n possdate = text.match(sorttable.DATE_RE)\n if (possdate) {\n // looks like a date\n first = parseInt(possdate[1], 10)\n second = parseInt(possdate[2], 10)\n if (first > 12) {\n // definitely dd/mm\n return sorttable.sort_ddmm\n } else if (second > 12) {\n return sorttable.sort_mmdd\n } else {\n // looks like a date, but we can't tell which, so assume\n // that it's dd/mm (English imperialism!) and keep looking\n sortfn = sorttable.sort_ddmm\n }\n }\n }\n }\n return sortfn\n },\n\n getInnerText: function(node) {\n // gets the text we want to use for sorting for a cell.\n // strips leading and trailing whitespace.\n // this is *not* a generic getInnerText function; it's special to sorttable.\n // for example, you can override the cell text with a customkey attribute.\n // it also gets .value for fields.\n\n if (!node) return ''\n\n hasInputs =\n typeof node.getElementsByTagName == 'function' &&\n node.getElementsByTagName('input').length\n\n if (\n node.nodeType == 1 &&\n node.getAttribute('sorttable_customkey') !== null\n ) {\n return node.getAttribute('sorttable_customkey')\n } else if (typeof node.textContent != 'undefined' && !hasInputs) {\n return node.textContent.replace(/^\\s+|\\s+$/g, '')\n } else if (typeof node.innerText != 'undefined' && !hasInputs) {\n return node.innerText.replace(/^\\s+|\\s+$/g, '')\n } else if (typeof node.text != 'undefined' && !hasInputs) {\n return node.text.replace(/^\\s+|\\s+$/g, '')\n } else {\n switch (node.nodeType) {\n case 3:\n if (node.nodeName.toLowerCase() == 'input') {\n return node.value.replace(/^\\s+|\\s+$/g, '')\n }\n break\n case 4:\n return node.nodeValue.replace(/^\\s+|\\s+$/g, '')\n break\n case 1:\n case 11:\n var innerText = ''\n for (var i = 0; i < node.childNodes.length; i++) {\n innerText += sorttable.getInnerText(node.childNodes[i])\n }\n return innerText.replace(/^\\s+|\\s+$/g, '')\n break\n default:\n return ''\n }\n }\n },\n\n reverse: function(tbody) {\n // reverse the rows in a tbody\n newrows = []\n for (var i = 0; i < tbody.rows.length; i++) {\n newrows[newrows.length] = tbody.rows[i]\n }\n for (i = newrows.length - 1; i >= 0; i--) {\n tbody.appendChild(newrows[i])\n }\n //delete newrows;\n },\n\n /* sort functions\n each sort function takes two parameters, a and b\n you are comparing a[0] and b[0] */\n sort_numeric: function(a, b) {\n aa = parseFloat(a[0].replace(/[^0-9.-]/g, ''))\n if (isNaN(aa)) aa = 0\n bb = parseFloat(b[0].replace(/[^0-9.-]/g, ''))\n if (isNaN(bb)) bb = 0\n return aa - bb\n },\n sort_alpha: function(a, b) {\n return a[0].localeCompare(b[0])\n /*\n if (a[0]==b[0]) return 0;\n if (a[0] 0) {\n q = list[i]\n list[i] = list[i + 1]\n list[i + 1] = q\n swap = true\n }\n } // for\n t--\n\n if (!swap) break\n\n for (i = t; i > b; --i) {\n if (comp_func(list[i], list[i - 1]) < 0) {\n q = list[i]\n list[i] = list[i - 1]\n list[i - 1] = q\n swap = true\n }\n } // for\n b++\n } // while(swap)\n }\n}\n\n/* ******************************************************************\n Supporting functions: bundled here to avoid depending on a library\n ****************************************************************** */\n\n// Dean Edwards/Matthias Miller/John Resig\n\n/* for Mozilla/Opera9 */\nif (document.addEventListener) {\n document.addEventListener('DOMContentLoaded', sorttable.init, false)\n}\n\n/* for Internet Explorer */\n/*@cc_on @*/\n/*@if (@_win32)\n document.write(\"