{"version":3,"file":"tableSortable.min.js","sources":["tableSortable.esm.js"],"sourcesContent":["/**\n * A simple jQuery plugin to sort table body by a selected column\n *\n * @license MIT\n * @author Dumitru Uzun (DUzun.Me)\n * @version 0.0.2\n */\nexport default function initTableSortable($) {\n const CLICK_TH_SELECTOR = 'th:not(.nosort),td.sort';\n let sort_dir;\n let cmp;\n const defaults = {\n cmp: undefined,\n };\n const tableSortable = function tableSortable(options) {\n options = $.extend({}, defaults, options);\n // Mark the table as initialized\n this.addClass('table_sortable');\n let $thead = this.children('thead');\n let $tbody = this.children('tbody');\n let $thr = $thead.children('tr');\n $thead.on('click', CLICK_TH_SELECTOR, function () {\n const $th = $(this);\n let sortOrder = $th.hasClass('asc') ? -1 : 1;\n const $ths = $thr.children(CLICK_TH_SELECTOR);\n $ths.removeClass('asc desc');\n if (sortOrder === -1) {\n $th.removeClass('asc').addClass('desc');\n }\n else {\n $th.removeClass('desc').addClass('asc');\n }\n let cols = $th.data('_cols_');\n if (cols == undefined) {\n calcCols($thr);\n cols = $th.data('_cols_');\n }\n const rows = $tbody.find('>tr:has(td)')\n .get() // get an Array\n .map((tr) => {\n const $tds = $(tr).children('td');\n const ret = cols.map(function (col) {\n let val = $tds.eq(col).text().toUpperCase(); // ignore case\n let ret = [val];\n let num = parseFloat(val.trim());\n if (!isNaN(num))\n ret[1] = num;\n return ret;\n });\n ret.tr = tr;\n return ret;\n });\n sort_dir = sortOrder > 0 ? 1 : -1;\n cmp = options.cmp;\n rows.sort(cmpArr);\n $tbody.append(rows.map((row) => row.tr));\n });\n return this;\n };\n // Comparison function for [].sort(), almost like narutal sort\n function cmpArr(_a, _b) {\n let ret;\n _a.some((a, idx) => {\n let b = _b[idx];\n if (cmp)\n return ret = cmp(a[0], b[0]);\n if (1 in a && 1 in b && (ret = a[1] - b[1])) {\n return ret;\n }\n else {\n let val1 = a[0];\n let val2 = b[0];\n if (val1 != val2) {\n return ret = val1 < val2 ? -1 : 1;\n }\n }\n });\n return ret * sort_dir;\n }\n // Calc _cols_ indexes, respecting colspan and rowspan in headers\n function calcCols($thr) {\n let headerMatrix = [];\n $thr.each((rowIdx, tr) => {\n $(tr)\n .children('th,td')\n .each((colIdx, td) => {\n //@ts-ignore\n let { rowSpan, colSpan } = td;\n const cols = [];\n const colsDict = {};\n while (rowSpan-- > 0) {\n let _rowIdx = rowIdx + rowSpan;\n let _colSpan = colSpan;\n while (_colSpan-- > 0) {\n let _colIdx = colIdx + _colSpan;\n let rowMatrix = headerMatrix[_rowIdx] || (headerMatrix[_rowIdx] = []);\n while (rowMatrix[_colIdx])\n ++_colIdx;\n rowMatrix[_colIdx] = td;\n if (!(_colIdx in colsDict)) {\n cols.push(_colIdx);\n colsDict[_colIdx] = _colIdx;\n }\n }\n }\n cols.sort();\n $(td).data('_cols_', cols);\n });\n });\n }\n tableSortable.defaults = defaults;\n $.fn.tableSortable = tableSortable;\n return tableSortable;\n}\n// Auto-init in browser when jQuery or Zepto is present\nif (typeof window !== 'undefined') {\n const $ = window.jQuery || window.Zepto;\n if ($) {\n initTableSortable($);\n }\n}\n"],"names":["initTableSortable","$","sort_dir","cmp","CLICK_TH_SELECTOR","defaults","undefined","tableSortable","options","extend","addClass","$thead","this","children","$tbody","$thr","on","$th","sortOrder","hasClass","removeClass","cols","data","headerMatrix","each","rowIdx","tr","colIdx","td","rowSpan","colSpan","colsDict","_rowIdx","_colSpan","_colIdx","rowMatrix","push","sort","calcCols","rows","find","get","map","$tds","ret","col","val","eq","text","toUpperCase","num","parseFloat","trim","isNaN","cmpArr","append","row","_a","_b","some","a","idx","b","val1","val2","fn","window","jQuery","Zepto"],"mappings":";;;;;;;OAOe,SAASA,EAAkBC,OAElCC,EACAC,EAFEC,EAAoB,0BAGpBC,EAAW,CACbF,SAAKG,GAEHC,EAAgB,SAAuBC,GACzCA,EAAUP,EAAEQ,OAAO,GAAIJ,EAAUG,QAE5BE,SAAS,sBACVC,EAASC,KAAKC,SAAS,SACvBC,EAASF,KAAKC,SAAS,SACvBE,EAAOJ,EAAOE,SAAS,aAC3BF,EAAOK,GAAG,QAASZ,GAAmB,eAC5Ba,EAAMhB,EAAEW,MACVM,EAAYD,EAAIE,SAAS,QAAU,EAAI,EAC9BJ,EAAKF,SAAST,GACtBgB,YAAY,aACE,IAAfF,EACAD,EAAIG,YAAY,OAAOV,SAAS,QAGhCO,EAAIG,YAAY,QAAQV,SAAS,WAEjCW,EAAOJ,EAAIK,KAAK,UACRhB,MAARe,cA+CMN,OACVQ,EAAe,GACnBR,EAAKS,MAAK,SAACC,EAAQC,GACfzB,EAAEyB,GACGb,SAAS,SACTW,MAAK,SAACG,EAAQC,WAETC,EAAqBD,EAArBC,QAASC,EAAYF,EAAZE,QACTT,EAAO,GACPU,EAAW,GACVF,KAAY,WACXG,EAAUP,EAASI,EACnBI,EAAWH,EACRG,KAAa,GAAG,SACfC,EAAUP,EAASM,EACnBE,EAAYZ,EAAaS,KAAaT,EAAaS,GAAW,IAC3DG,EAAUD,MACXA,EACNC,EAAUD,GAAWN,EACfM,KAAWH,IACbV,EAAKe,KAAKF,GACVH,EAASG,GAAWA,GAIhCb,EAAKgB,OACLpC,EAAE2B,GAAIN,KAAK,SAAUD,SAxErBiB,CAASvB,GACTM,EAAOJ,EAAIK,KAAK,eAEdiB,EAAOzB,EAAO0B,KAAK,eACpBC,MACAC,KAAI,SAAChB,OACAiB,EAAO1C,EAAEyB,GAAIb,SAAS,MACtB+B,EAAMvB,EAAKqB,KAAI,SAAUG,OACvBC,EAAMH,EAAKI,GAAGF,GAAKG,OAAOC,cAC1BL,EAAM,CAACE,GACPI,EAAMC,WAAWL,EAAIM,eACpBC,MAAMH,KACPN,EAAI,GAAKM,GACNN,YAEXA,EAAIlB,GAAKA,EACFkB,KAEX1C,EAAWgB,EAAY,EAAI,GAAK,EAChCf,EAAMK,EAAQL,IACdoC,EAAKF,KAAKiB,GACVxC,EAAOyC,OAAOhB,EAAKG,KAAI,SAACc,UAAQA,EAAI9B,UAEjCd,eAGF0C,EAAOG,EAAIC,OACZd,SACJa,EAAGE,MAAK,SAACC,EAAGC,OACJC,EAAIJ,EAAGG,MACP1D,EACA,OAAOyC,EAAMzC,EAAIyD,EAAE,GAAIE,EAAE,OACzB,KAAKF,GAAK,KAAKE,IAAMlB,EAAMgB,EAAE,GAAKE,EAAE,WAC7BlB,MAGHmB,EAAOH,EAAE,GACTI,EAAOF,EAAE,UACTC,GAAQC,EACDpB,EAAMmB,EAAOC,GAAQ,EAAI,YAIrCpB,EAAM1C,SAiCjBK,EAAcF,SAAWA,EACzBJ,EAAEgE,GAAG1D,cAAgBA,EACdA,EAGX,GAAsB,oBAAX2D,OAAwB,KACzBjE,EAAIiE,OAAOC,QAAUD,OAAOE,MAC9BnE,GACAD,EAAkBC"}