{"version":3,"sources":["/source/pivot.coffee"],"names":[],"mappings":"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","file":"pivot.min.js","sourcesContent":["callWithJQuery = (pivotModule) ->\n if typeof exports is \"object\" and typeof module is \"object\" # CommonJS\n pivotModule require(\"jquery\")\n else if typeof define is \"function\" and define.amd # AMD\n define [\"jquery\"], pivotModule\n # Plain browser env\n else\n pivotModule jQuery\n \ncallWithJQuery ($) ->\n\n ###\n Utilities\n ###\n\n addSeparators = (nStr, thousandsSep, decimalSep) ->\n nStr += ''\n x = nStr.split('.')\n x1 = x[0]\n x2 = if x.length > 1 then decimalSep + x[1] else ''\n rgx = /(\\d+)(\\d{3})/\n x1 = x1.replace(rgx, '$1' + thousandsSep + '$2') while rgx.test(x1)\n return x1 + x2\n\n numberFormat = (opts) ->\n defaults = \n digitsAfterDecimal: 2, scaler: 1, \n thousandsSep: \",\", decimalSep: \".\"\n prefix: \"\", suffix: \"\"\n showZero: false\n opts = $.extend defaults, opts\n (x) ->\n return \"\" if isNaN(x) or not isFinite(x)\n return \"\" if x == 0 and not opts.showZero\n result = addSeparators (opts.scaler*x).toFixed(opts.digitsAfterDecimal), opts.thousandsSep, opts.decimalSep\n return \"\"+opts.prefix+result+opts.suffix\n\n #aggregator templates default to US number formatting but this is overrideable\n usFmt = numberFormat()\n usFmtInt = numberFormat(digitsAfterDecimal: 0)\n usFmtPct = numberFormat(digitsAfterDecimal:1, scaler: 100, suffix: \"%\")\n\n aggregatorTemplates =\n count: (formatter=usFmtInt) -> () -> (data, rowKey, colKey) ->\n count: 0\n push: -> @count++\n value: -> @count\n format: formatter\n\n countUnique: (formatter=usFmtInt) -> ([attr]) -> (data, rowKey, colKey) ->\n uniq: []\n push: (record) -> @uniq.push(record[attr]) if record[attr] not in @uniq\n value: -> @uniq.length\n format: formatter\n numInputs: if attr? then 0 else 1\n\n listUnique: (sep) -> ([attr]) -> (data, rowKey, colKey) ->\n uniq: []\n push: (record) -> @uniq.push(record[attr]) if record[attr] not in @uniq\n value: -> @uniq.join sep\n format: (x) -> x\n numInputs: if attr? then 0 else 1\n\n sum: (formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->\n sum: 0\n push: (record) -> @sum += parseFloat(record[attr]) if not isNaN parseFloat(record[attr])\n value: -> @sum\n format: formatter\n numInputs: if attr? then 0 else 1\n\n average: (formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->\n sum: 0\n len: 0\n push: (record) ->\n if not isNaN parseFloat(record[attr])\n @sum += parseFloat(record[attr])\n @len++\n value: -> @sum/@len\n format: formatter\n numInputs: if attr? then 0 else 1\n\n sumOverSum: (formatter=usFmt) -> ([num, denom]) -> (data, rowKey, colKey) ->\n sumNum: 0\n sumDenom: 0\n push: (record) ->\n @sumNum += parseFloat(record[num]) if not isNaN parseFloat(record[num])\n @sumDenom += parseFloat(record[denom]) if not isNaN parseFloat(record[denom])\n value: -> @sumNum/@sumDenom\n format: formatter\n numInputs: if num? and denom? then 0 else 2\n\n sumOverSumBound80: (upper=true, formatter=usFmt) -> ([num, denom]) -> (data, rowKey, colKey) ->\n sumNum: 0\n sumDenom: 0\n push: (record) ->\n @sumNum += parseFloat(record[num]) if not isNaN parseFloat(record[num])\n @sumDenom += parseFloat(record[denom]) if not isNaN parseFloat(record[denom])\n value: ->\n sign = if upper then 1 else -1\n (0.821187207574908/@sumDenom + @sumNum/@sumDenom + 1.2815515655446004*sign*\n Math.sqrt(0.410593603787454/ (@sumDenom*@sumDenom) + (@sumNum*(1 - @sumNum/ @sumDenom))/ (@sumDenom*@sumDenom)))/\n (1 + 1.642374415149816/@sumDenom)\n format: formatter\n numInputs: if num? and denom? then 0 else 2\n\n fractionOf: (wrapped, type=\"total\", formatter=usFmtPct) -> (x...) -> (data, rowKey, colKey) ->\n selector: {total:[[],[]],row:[rowKey,[]],col:[[],colKey]}[type]\n inner: wrapped(x...)(data, rowKey, colKey)\n push: (record) -> @inner.push record\n format: formatter\n value: -> @inner.value() / data.getAggregator(@selector...).inner.value()\n numInputs: wrapped(x...)().numInputs\n\n #default aggregators & renderers use US naming and number formatting\n aggregators = do (tpl = aggregatorTemplates) -> \n \"Count\": tpl.count(usFmtInt)\n \"Count Unique Values\": tpl.countUnique(usFmtInt)\n \"List Unique Values\": tpl.listUnique(\", \")\n \"Sum\": tpl.sum(usFmt)\n \"Integer Sum\": tpl.sum(usFmtInt)\n \"Average\": tpl.average(usFmt)\n \"Sum over Sum\": tpl.sumOverSum(usFmt)\n \"80% Upper Bound\": tpl.sumOverSumBound80(true, usFmt)\n \"80% Lower Bound\": tpl.sumOverSumBound80(false, usFmt)\n \"Sum as Fraction of Total\": tpl.fractionOf(tpl.sum(), \"total\", usFmtPct)\n \"Sum as Fraction of Rows\": tpl.fractionOf(tpl.sum(), \"row\", usFmtPct)\n \"Sum as Fraction of Columns\": tpl.fractionOf(tpl.sum(), \"col\", usFmtPct)\n \"Count as Fraction of Total\": tpl.fractionOf(tpl.count(), \"total\", usFmtPct)\n \"Count as Fraction of Rows\": tpl.fractionOf(tpl.count(), \"row\", usFmtPct)\n \"Count as Fraction of Columns\": tpl.fractionOf(tpl.count(), \"col\", usFmtPct)\n\n renderers =\n \"Table\": (pvtData, opts) -> pivotTableRenderer(pvtData, opts)\n \"Table Barchart\": (pvtData, opts) -> $(pivotTableRenderer(pvtData, opts)).barchart()\n \"Heatmap\": (pvtData, opts) -> $(pivotTableRenderer(pvtData, opts)).heatmap()\n \"Row Heatmap\": (pvtData, opts) -> $(pivotTableRenderer(pvtData, opts)).heatmap(\"rowheatmap\")\n \"Col Heatmap\": (pvtData, opts) -> $(pivotTableRenderer(pvtData, opts)).heatmap(\"colheatmap\")\n\n locales = \n en: \n aggregators: aggregators\n renderers: renderers\n localeStrings: \n renderError: \"An error occurred rendering the PivotTable results.\"\n computeError: \"An error occurred computing the PivotTable results.\"\n uiRenderError: \"An error occurred rendering the PivotTable UI.\"\n selectAll: \"Select All\"\n selectNone: \"Select None\"\n tooMany: \"(too many to list)\"\n filterResults: \"Filter results\"\n totals: \"Totals\" #for table renderer\n vs: \"vs\" #for gchart renderer\n by: \"by\" #for gchart renderer\n\n #dateFormat deriver l10n requires month and day names to be passed in directly\n mthNamesEn = [\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]\n dayNamesEn = [\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"]\n zeroPad = (number) -> (\"0\"+number).substr(-2,2)\n\n derivers =\n bin: (col, binWidth) -> (record) -> record[col] - record[col] % binWidth\n dateFormat: (col, formatString, mthNames=mthNamesEn, dayNames=dayNamesEn) ->\n (record) -> #thanks http://stackoverflow.com/a/12213072/112871\n date = new Date(Date.parse(record[col]))\n if isNaN(date) then return \"\"\n formatString.replace /%(.)/g, (m, p) ->\n switch p\n when \"y\" then date.getFullYear()\n when \"m\" then zeroPad(date.getMonth()+1)\n when \"n\" then mthNames[date.getMonth()]\n when \"d\" then zeroPad(date.getDate())\n when \"w\" then dayNames[date.getDay()]\n when \"x\" then date.getDay()\n when \"H\" then zeroPad(date.getHours())\n when \"M\" then zeroPad(date.getMinutes())\n when \"S\" then zeroPad(date.getSeconds())\n else \"%\" + p\n\n naturalSort = (as, bs) => #thanks http://stackoverflow.com/a/4373421/112871\n rx = /(\\d+)|(\\D+)/g\n rd = /\\d/\n rz = /^0/\n if typeof as is \"number\" or typeof bs is \"number\"\n return 1 if isNaN(as)\n return -1 if isNaN(bs)\n return as - bs\n a = String(as).toLowerCase()\n b = String(bs).toLowerCase()\n return 0 if a is b\n return (if a > b then 1 else -1) unless rd.test(a) and rd.test(b)\n a = a.match(rx)\n b = b.match(rx)\n while a.length and b.length\n a1 = a.shift()\n b1 = b.shift()\n if a1 isnt b1\n if rd.test(a1) and rd.test(b1)\n return a1.replace(rz, \".0\") - b1.replace(rz, \".0\")\n else\n return (if a1 > b1 then 1 else -1)\n a.length - b.length\n\n #expose these to the outside world\n $.pivotUtilities = {aggregatorTemplates, aggregators, renderers, derivers, locales,\n naturalSort, numberFormat}\n\n ###\n Data Model class\n ###\n\n class PivotData\n constructor: (input, opts) ->\n @aggregator = opts.aggregator\n @aggregatorName = opts.aggregatorName\n @colAttrs = opts.cols\n @rowAttrs = opts.rows\n @valAttrs = opts.vals\n @tree = {}\n @rowKeys = []\n @colKeys = []\n @rowTotals = {}\n @colTotals = {}\n @allTotal = @aggregator(this, [], [])\n @sorted = false\n\n # iterate through input, accumulating data for cells\n PivotData.forEachRecord input, opts.derivedAttributes, (record) =>\n @processRecord(record) if opts.filter(record)\n\n #can handle arrays or jQuery selections of tables\n @forEachRecord = (input, derivedAttributes, f) ->\n if $.isEmptyObject derivedAttributes\n addRecord = f\n else\n addRecord = (record) -> \n record[k] = v(record) ? record[k] for k, v of derivedAttributes\n f(record)\n\n #if it's a function, have it call us back\n if $.isFunction(input)\n input(addRecord)\n else if $.isArray(input)\n if $.isArray(input[0]) #array of arrays\n for own i, compactRecord of input when i > 0\n record = {}\n record[k] = compactRecord[j] for own j, k of input[0]\n addRecord(record)\n else #array of objects\n addRecord(record) for record in input\n else if input instanceof jQuery\n tblCols = []\n $(\"thead > tr > th\", input).each (i) -> tblCols.push $(this).text()\n $(\"tbody > tr\", input).each (i) ->\n record = {}\n $(\"td\", this).each (j) -> record[tblCols[j]] = $(this).text()\n addRecord(record)\n else\n throw new Error(\"unknown input format\")\n\n #converts to [{attr:val, attr:val},{attr:val, attr:val}] using method above\n @convertToArray = (input) ->\n result = []\n PivotData.forEachRecord input, {}, (record) -> result.push record\n return result\n\n natSort: (as, bs) => naturalSort(as, bs)\n\n arrSort: (a,b) => @natSort a.join(), b.join()\n\n sortKeys: () =>\n if not @sorted\n @rowKeys.sort @arrSort\n @colKeys.sort @arrSort\n @sorted = true\n\n getColKeys: () =>\n @sortKeys()\n return @colKeys\n\n getRowKeys: () =>\n @sortKeys()\n return @rowKeys\n\n processRecord: (record) -> #this code is called in a tight loop\n colKey = []\n rowKey = []\n colKey.push record[x] ? \"null\" for x in @colAttrs \n rowKey.push record[x] ? \"null\" for x in @rowAttrs\n flatRowKey = rowKey.join(String.fromCharCode(0))\n flatColKey = colKey.join(String.fromCharCode(0))\n\n @allTotal.push record\n\n if rowKey.length != 0\n if not @rowTotals[flatRowKey]\n @rowKeys.push rowKey\n @rowTotals[flatRowKey] = @aggregator(this, rowKey, [])\n @rowTotals[flatRowKey].push record\n\n if colKey.length != 0\n if not @colTotals[flatColKey]\n @colKeys.push colKey\n @colTotals[flatColKey] = @aggregator(this, [], colKey)\n @colTotals[flatColKey].push record\n\n if colKey.length != 0 and rowKey.length != 0\n if not @tree[flatRowKey]\n @tree[flatRowKey] = {}\n if not @tree[flatRowKey][flatColKey]\n @tree[flatRowKey][flatColKey] = @aggregator(this, rowKey, colKey)\n @tree[flatRowKey][flatColKey].push record\n\n getAggregator: (rowKey, colKey) =>\n flatRowKey = rowKey.join(String.fromCharCode(0))\n flatColKey = colKey.join(String.fromCharCode(0))\n if rowKey.length == 0 and colKey.length == 0\n agg = @allTotal\n else if rowKey.length == 0\n agg = @colTotals[flatColKey]\n else if colKey.length == 0\n agg = @rowTotals[flatRowKey]\n else\n agg = @tree[flatRowKey][flatColKey]\n return agg ? {value: (-> null), format: -> \"\"}\n\n ###\n Default Renderer for hierarchical table layout\n ###\n\n pivotTableRenderer = (pivotData, opts) ->\n\n defaults =\n localeStrings:\n totals: \"Totals\"\n\n opts = $.extend defaults, opts\n\n colAttrs = pivotData.colAttrs\n rowAttrs = pivotData.rowAttrs\n rowKeys = pivotData.getRowKeys()\n colKeys = pivotData.getColKeys()\n\n #now actually build the output\n result = document.createElement(\"table\")\n result.className = \"pvtTable\"\n\n #helper function for setting row/col-span in pivotTableRenderer\n spanSize = (arr, i, j) ->\n if i != 0\n noDraw = true\n for x in [0..j]\n if arr[i-1][x] != arr[i][x]\n noDraw = false\n if noDraw\n return -1 #do not draw cell\n len = 0\n while i+len < arr.length\n stop = false\n for x in [0..j]\n stop = true if arr[i][x] != arr[i+len][x]\n break if stop\n len++\n return len\n\n #the first few rows are for col headers\n for own j, c of colAttrs\n tr = document.createElement(\"tr\")\n if parseInt(j) == 0 and rowAttrs.length != 0\n th = document.createElement(\"th\")\n th.setAttribute(\"colspan\", rowAttrs.length)\n th.setAttribute(\"rowspan\", colAttrs.length)\n tr.appendChild th\n th = document.createElement(\"th\")\n th.className = \"pvtAxisLabel\"\n th.textContent = c\n tr.appendChild th\n for own i, colKey of colKeys\n x = spanSize(colKeys, parseInt(i), parseInt(j))\n if x != -1\n th = document.createElement(\"th\")\n th.className = \"pvtColLabel\"\n th.textContent = colKey[j]\n th.setAttribute(\"colspan\", x)\n if parseInt(j) == colAttrs.length-1 and rowAttrs.length != 0\n th.setAttribute(\"rowspan\", 2)\n tr.appendChild th\n if parseInt(j) == 0\n th = document.createElement(\"th\")\n th.className = \"pvtTotalLabel\"\n th.innerHTML = opts.localeStrings.totals\n th.setAttribute(\"rowspan\", colAttrs.length + (if rowAttrs.length ==0 then 0 else 1))\n tr.appendChild th\n result.appendChild tr\n\n #then a row for row header headers\n if rowAttrs.length !=0\n tr = document.createElement(\"tr\")\n for own i, r of rowAttrs\n th = document.createElement(\"th\")\n th.className = \"pvtAxisLabel\"\n th.textContent = r\n tr.appendChild th \n th = document.createElement(\"th\")\n if colAttrs.length ==0\n th.className = \"pvtTotalLabel\"\n th.innerHTML = opts.localeStrings.totals\n tr.appendChild th\n result.appendChild tr\n\n #now the actual data rows, with their row headers and totals\n for own i, rowKey of rowKeys\n tr = document.createElement(\"tr\")\n for own j, txt of rowKey\n x = spanSize(rowKeys, parseInt(i), parseInt(j))\n if x != -1\n th = document.createElement(\"th\")\n th.className = \"pvtRowLabel\"\n th.textContent = txt\n th.setAttribute(\"rowspan\", x)\n if parseInt(j) == rowAttrs.length-1 and colAttrs.length !=0\n th.setAttribute(\"colspan\",2)\n tr.appendChild th\n for own j, colKey of colKeys #this is the tight loop\n aggregator = pivotData.getAggregator(rowKey, colKey)\n val = aggregator.value()\n td = document.createElement(\"td\")\n td.className = \"pvtVal row#{i} col#{j}\"\n td.innerHTML = aggregator.format(val)\n td.setAttribute(\"data-value\", val)\n tr.appendChild td\n\n totalAggregator = pivotData.getAggregator(rowKey, [])\n val = totalAggregator.value()\n td = document.createElement(\"td\")\n td.className = \"pvtTotal rowTotal\"\n td.innerHTML = totalAggregator.format(val)\n td.setAttribute(\"data-value\", val)\n td.setAttribute(\"data-for\", \"row\"+i)\n tr.appendChild td\n result.appendChild tr\n\n #finally, the row for col totals, and a grand total\n tr = document.createElement(\"tr\")\n th = document.createElement(\"th\")\n th.className = \"pvtTotalLabel\"\n th.innerHTML = opts.localeStrings.totals\n th.setAttribute(\"colspan\", rowAttrs.length + (if colAttrs.length == 0 then 0 else 1))\n tr.appendChild th\n for own j, colKey of colKeys\n totalAggregator = pivotData.getAggregator([], colKey)\n val = totalAggregator.value()\n td = document.createElement(\"td\")\n td.className = \"pvtTotal colTotal\"\n td.innerHTML = totalAggregator.format(val)\n td.setAttribute(\"data-value\", val)\n td.setAttribute(\"data-for\", \"col\"+j)\n tr.appendChild td\n totalAggregator = pivotData.getAggregator([], [])\n val = totalAggregator.value()\n td = document.createElement(\"td\")\n td.className = \"pvtGrandTotal\"\n td.innerHTML = totalAggregator.format(val)\n td.setAttribute(\"data-value\", val)\n tr.appendChild td\n result.appendChild tr\n\n #squirrel this away for later\n result.setAttribute(\"data-numrows\", rowKeys.length)\n result.setAttribute(\"data-numcols\", colKeys.length)\n\n return result\n\n ###\n Pivot Table core: create PivotData object and call Renderer on it\n ###\n\n $.fn.pivot = (input, opts) ->\n defaults =\n cols : []\n rows: []\n filter: -> true\n aggregator: aggregatorTemplates.count()()\n aggregatorName: \"Count\"\n derivedAttributes: {},\n renderer: pivotTableRenderer\n rendererOptions: null\n localeStrings: locales.en.localeStrings\n\n opts = $.extend defaults, opts\n\n result = null\n try\n pivotData = new PivotData(input, opts)\n try\n result = opts.renderer(pivotData, opts.rendererOptions)\n catch e\n console.error(e.stack) if console?\n result = $(\"\").html opts.localeStrings.renderError\n catch e\n console.error(e.stack) if console?\n result = $(\"\").html opts.localeStrings.computeError\n \n x = this[0]\n x.removeChild(x.lastChild) while x.hasChildNodes()\n return @append result\n\n\n ###\n Pivot Table UI: calls Pivot Table core above with options set by user\n ###\n\n $.fn.pivotUI = (input, inputOpts, overwrite = false, locale=\"en\") ->\n defaults =\n derivedAttributes: {}\n aggregators: locales[locale].aggregators\n renderers: locales[locale].renderers\n hiddenAttributes: []\n menuLimit: 200\n cols: [], rows: [], vals: []\n exclusions: {}\n unusedAttrsVertical: \"auto\"\n autoSortUnusedAttrs: false\n rendererOptions: localeStrings: locales[locale].localeStrings\n onRefresh: null\n filter: -> true\n localeStrings: locales[locale].localeStrings\n\n existingOpts = @data \"pivotUIOptions\"\n if not existingOpts? or overwrite\n opts = $.extend defaults, inputOpts\n else\n opts = existingOpts\n\n try\n #cache the input in some useful form\n input = PivotData.convertToArray(input)\n tblCols = (k for own k of input[0])\n tblCols.push c for own c of opts.derivedAttributes when (c not in tblCols)\n\n #figure out the cardinality and some stats\n axisValues = {}\n axisValues[x] = {} for x in tblCols\n\n PivotData.forEachRecord input, opts.derivedAttributes, (record) ->\n for own k, v of record when opts.filter(record)\n v ?= \"null\"\n axisValues[k][v] ?= 0\n axisValues[k][v]++\n\n #start building the output\n uiTable = $(\"\")\n\n #renderer control\n rendererControl = $(\"\").appendTo(uiTable)\n\n #aggregator menu and value area\n\n aggregator = $(\"\").appendTo(uiTable)\n\n #row axes\n tr2.append $(\"\").append(rendererControl).append(colList)\n\n #render the UI in its default state\n @html uiTable\n\n #set up the UI initial state as requested by moving elements around\n\n for x in opts.cols\n @find(\".pvtCols\").append @find(\".axis_#{shownAttributes.indexOf(x)}\")\n for x in opts.rows\n @find(\".pvtRows\").append @find(\".axis_#{shownAttributes.indexOf(x)}\")\n if opts.aggregatorName?\n @find(\".pvtAggregator\").val opts.aggregatorName\n if opts.rendererName?\n @find(\".pvtRenderer\").val opts.rendererName\n\n initialRender = true\n\n #set up for refreshing\n refreshDelayed = =>\n subopts =\n derivedAttributes: opts.derivedAttributes\n localeStrings: opts.localeStrings\n rendererOptions: opts.rendererOptions\n cols: [], rows: []\n\n numInputsToProcess = opts.aggregators[aggregator.val()]([])().numInputs ? 0\n vals = []\n @find(\".pvtRows li span.pvtAttr\").each -> subopts.rows.push $(this).data(\"attrName\")\n @find(\".pvtCols li span.pvtAttr\").each -> subopts.cols.push $(this).data(\"attrName\")\n @find(\".pvtVals select.pvtAttrDropdown\").each ->\n if numInputsToProcess == 0\n $(this).remove()\n else\n numInputsToProcess--\n vals.push $(this).val() if $(this).val() != \"\"\n\n if numInputsToProcess != 0\n pvtVals = @find(\".pvtVals\")\n for x in [0...numInputsToProcess]\n newDropdown = $(\"
\")\n\n renderer = $(\"\")\n shownAttributes = (c for c in tblCols when c not in opts.hiddenAttributes)\n\n unusedAttrsVerticalAutoOverride = false\n if opts.unusedAttrsVertical == \"auto\"\n attrLength = 0\n attrLength += a.length for a in shownAttributes\n unusedAttrsVerticalAutoOverride = attrLength > 120\n\n if opts.unusedAttrsVertical == true or unusedAttrsVerticalAutoOverride\n colList.addClass('pvtVertList')\n else\n colList.addClass('pvtHorizList')\n\n for i, c of shownAttributes\n do (c) ->\n keys = (k for k of axisValues[c])\n hasExcludedItem = false\n valueList = $(\"
\").addClass('pvtFilterBox').hide()\n\n valueList.append $(\"

\").text(\"#{c} (#{keys.length})\")\n if keys.length > opts.menuLimit\n valueList.append $(\"

\").html(opts.localeStrings.tooMany)\n else\n btns = $(\"

\").appendTo(valueList)\n btns.append $(\"

\")\n .appendTo(tr1)\n .append(aggregator)\n .append($(\"
\"))\n\n #column axes\n $(\"
\").appendTo(tr1)\n\n tr2 = $(\"
\")\n\n #the actual pivot table container\n pivotTable = $(\"\").appendTo(tr2)\n\n #finally the renderer dropdown and unused attribs are inserted at the requested location\n if opts.unusedAttrsVertical == true or unusedAttrsVerticalAutoOverride\n uiTable.find('tr:nth-child(1)').prepend rendererControl\n uiTable.find('tr:nth-child(2)').prepend colList\n else\n uiTable.prepend $(\"