{"version":3,"sources":["/source/pivot.coffee","pivot.min.js"],"names":["callWithJQuery","indexOf","item","i","l","this","length","slice","bind","fn","me","apply","arguments","hasProp","hasOwnProperty","pivotModule","exports","module","require","define","amd","jQuery","$","PivotData","addSeparators","aggregatorTemplates","aggregators","dayNamesEn","derivers","getSort","locales","mthNamesEn","naturalSort","numberFormat","pivotTableRenderer","rd","renderers","rx","rz","sortAs","usFmt","usFmtInt","usFmtPct","zeroPad","nStr","thousandsSep","decimalSep","rgx","x","x1","x2","split","test","replace","opts","defaults","digitsAfterDecimal","scaler","prefix","suffix","showZero","extend","result","isNaN","isFinite","toFixed","count","formatter","data","rowKey","colKey","push","value","format","countUnique","arg","attr","uniq","record","ref","call","numInputs","listUnique","sep","join","sum","parseFloat","min","val","Math","max","first","sorter","sorters","last","average","len","sumOverSum","denom","num","sumNum","sumDenom","sumOverSumBound80","upper","sign","sqrt","fractionOf","wrapped","type","selector","total","row","col","inner","getAggregator","tpl","Count","Count Unique Values","List Unique Values","Sum","Integer Sum","Average","Minimum","Maximum","First","Last","Sum over Sum","80% Upper Bound","80% Lower Bound","Sum as Fraction of Total","Sum as Fraction of Rows","Sum as Fraction of Columns","Count as Fraction of Total","Count as Fraction of Rows","Count as Fraction of Columns","Table","Table Barchart","barchart","Heatmap","heatmap","Row Heatmap","Col Heatmap","en","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","cancel","totals","vs","by","number","substr","bin","binWidth","dateFormat","formatString","utcOutput","mthNames","dayNames","utc","date","Date","parse","m","p","_this","as","bs","a","a1","b","b1","nas","nbs","String","match","shift","order","l_mapping","mapping","toLowerCase","sort","isFunction","input","ref1","ref2","ref3","ref4","ref5","ref6","ref7","ref8","ref9","getRowKeys","getColKeys","sortKeys","arrSort","aggregator","aggregatorName","colAttrs","cols","rowAttrs","rows","valAttrs","vals","rowOrder","colOrder","derivedAttributes","filter","tree","rowKeys","colKeys","rowTotals","colTotals","allTotal","sorted","forEachRecord","processRecord","f","addRecord","compactRecord","j","k","len1","results","results1","tblCols","isEmptyObject","v","isArray","each","text","Error","prototype","forEachMatchingRecord","criteria","callback","attrs","sortersArr","comparison","r","c","flatColKey","flatRowKey","len2","n","fromCharCode","agg","pivotUtilities","pivotData","getClickHandler","spanSize","tbody","td","th","thead","totalAggregator","tr","txt","table","clickCallback","rowValues","colValues","filters","e","document","createElement","className","arr","noDraw","stop","parseInt","setAttribute","appendChild","textContent","innerHTML","onclick","pivot","inputOpts","locale","localeDefaults","dataClass","renderer","rendererOptions","_error","console","error","stack","html","hasChildNodes","removeChild","lastChild","append","pivotUI","overwrite","attrLength","attrValues","colOrderArrow","existingOpts","initialRender","len3","materializedInput","o","ordering","pivotTable","recordsProcessed","refresh","refreshDelayed","rendererControl","rowOrderArrow","shownAttributes","tr1","tr2","uiTable","unused","unusedAttrsVerticalAutoCutoff","unusedAttrsVerticalAutoOverride","hiddenAttributes","menuLimit","exclusions","inclusions","unusedAttrsVertical","autoSortUnusedAttrs","onRefresh","base","class","addClass","appendTo","attrElem","checkContainer","closeFilterBox","controls","filterItem","filterItemExcluded","finalButtons","hasExcludedItem","placeholder","triangleLink","valueCount","valueList","values","hide","accept","accept_gen","trim","accepted","real_filter","substring","startsWith","find","parent","show","prop","toggleClass","removeClass","left","top","currentTarget","position","css","key_a_to_z","rowSymbol","colSymbol","next","value_a_to_z","value_z_to_a","role","prepend","inArray","rendererName","len4","newDropdown","numInputsToProcess","pivotUIOptions","pvtVals","q","s","subopts","unusedAttrsContainer","remove","not","excludedItems","inclusionsInfo","children","setTimeout","sortable","update","ui","sender","connectWith","items","scope","colorScaleGenerator","heatmapper","numCols","numRows","nonRed","round","colorScale","forEachCell","elem","barcharter","wrapper","height","bottom","right","background-color","padding-left","padding-right","padding","padding-top","text-align"],"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        min: (formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->\n            val: null\n            push: (record) ->\n                x = parseFloat(record[attr])\n                if not isNaN x then @val = Math.min(x, @val ? x)\n            value: -> @val\n            format: formatter\n            numInputs: if attr? then 0 else 1\n\n        max: (formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->\n            val: null\n            push: (record) ->\n                x = parseFloat(record[attr])\n                if not isNaN x then @val = Math.max(x, @val ? x)\n            value: -> @val\n            format: formatter\n            numInputs: if attr? then 0 else 1\n\n        first: (formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->\n            val: null\n            sorter: getSort(data?.sorters, attr)\n            push: (record) ->\n                x = record[attr]\n                @val = x if @sorter(x, @val ? x) <= 0\n            value: -> @val\n            format: (x) -> if isNaN(x) then x else formatter(x)\n            numInputs: if attr? then 0 else 1\n\n        last: (formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->\n            val: null\n            sorter: getSort(data?.sorters, attr)\n            push: (record) ->\n                x = record[attr]\n                @val = x if @sorter(x, @val ? x) >= 0\n            value: -> @val\n            format: (x) -> if isNaN(x) then x else formatter(x)\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        \"Minimum\":              tpl.min(usFmt)\n        \"Maximum\":              tpl.max(usFmt)\n        \"First\":                tpl.first(usFmt)\n        \"Last\":                 tpl.last(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\":          (data, opts) ->   pivotTableRenderer(data, opts)\n        \"Table Barchart\": (data, opts) -> $(pivotTableRenderer(data, opts)).barchart()\n        \"Heatmap\":        (data, opts) -> $(pivotTableRenderer(data, opts)).heatmap(\"heatmap\",    opts)\n        \"Row Heatmap\":    (data, opts) -> $(pivotTableRenderer(data, opts)).heatmap(\"rowheatmap\", opts)\n        \"Col Heatmap\":    (data, opts) -> $(pivotTableRenderer(data, opts)).heatmap(\"colheatmap\", opts)\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 values\"\n                apply: \"Apply\"\n                cancel: \"Cancel\"\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, utcOutput=false, mthNames=mthNamesEn, dayNames=dayNamesEn) ->\n            utc = if utcOutput then \"UTC\" else \"\"\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[\"get#{utc}FullYear\"]()\n                        when \"m\" then zeroPad(date[\"get#{utc}Month\"]()+1)\n                        when \"n\" then mthNames[date[\"get#{utc}Month\"]()]\n                        when \"d\" then zeroPad(date[\"get#{utc}Date\"]())\n                        when \"w\" then dayNames[date[\"get#{utc}Day\"]()]\n                        when \"x\" then date[\"get#{utc}Day\"]()\n                        when \"H\" then zeroPad(date[\"get#{utc}Hours\"]())\n                        when \"M\" then zeroPad(date[\"get#{utc}Minutes\"]())\n                        when \"S\" then zeroPad(date[\"get#{utc}Seconds\"]())\n                        else \"%\" + p\n\n    rx = /(\\d+)|(\\D+)/g\n    rd = /\\d/\n    rz = /^0/\n    naturalSort = (as, bs) =>\n        #nulls first\n        return -1 if bs? and not as?\n        return  1 if as? and not bs?\n\n        #then raw NaNs\n        return -1 if typeof as == \"number\" and isNaN(as)\n        return  1 if typeof bs == \"number\" and isNaN(bs)\n\n        #numbers and numbery strings group together\n        nas = +as\n        nbs = +bs\n        return -1 if nas < nbs\n        return  1 if nas > nbs\n\n        #within that, true numbers before numbery strings\n        return -1 if typeof as == \"number\" and typeof bs != \"number\"\n        return  1 if typeof bs == \"number\" and typeof as != \"number\"\n        return  0 if typeof as == \"number\" and typeof bs == \"number\"\n\n        # 'Infinity' is a textual number, so less than 'A'\n        return -1 if isNaN(nbs) and not isNaN(nas)\n        return  1 if isNaN(nas) and not isNaN(nbs)\n\n        #finally, \"smart\" string sorting per http://stackoverflow.com/a/4373421/112871\n        a = String(as)\n        b = String(bs)\n        return 0 if a == b\n        return (if a > b then 1 else -1) unless rd.test(a) and rd.test(b)\n\n        #special treatment for strings containing digits\n        a = a.match(rx) #create digits vs non-digit chunks and iterate through\n        b = b.match(rx)\n        while a.length and b.length\n            a1 = a.shift()\n            b1 = b.shift()\n            if a1 != b1\n                if rd.test(a1) and rd.test(b1) #both are digit chunks\n                    return a1.replace(rz, \".0\") - b1.replace(rz, \".0\")\n                else\n                    return (if a1 > b1 then 1 else -1)\n        return a.length - b.length\n\n    sortAs = (order) ->\n        mapping = {}\n        l_mapping = {} # sort lowercased keys similarly\n        for i, x of order\n            mapping[x] = i\n            l_mapping[x.toLowerCase()] = i if typeof x == \"string\"\n        (a, b) ->\n            if mapping[a]? and mapping[b]? then mapping[a] - mapping[b]\n            else if mapping[a]? then -1\n            else if mapping[b]? then 1\n            else if l_mapping[a]? and l_mapping[b]? then l_mapping[a] - l_mapping[b]\n            else if l_mapping[a]? then -1\n            else if l_mapping[b]? then 1\n            else naturalSort(a,b)\n\n    getSort = (sorters, attr) ->\n        if sorters?\n            if $.isFunction(sorters)\n                sort = sorters(attr)\n                return sort if $.isFunction(sort)\n            else if sorters[attr]?\n                return sorters[attr]\n        return naturalSort\n\n    ###\n    Data Model class\n    ###\n\n    class PivotData\n        constructor: (input, opts = {}) ->\n            @input = input\n            @aggregator = opts.aggregator ? aggregatorTemplates.count()()\n            @aggregatorName = opts.aggregatorName ? \"Count\"\n            @colAttrs = opts.cols ? []\n            @rowAttrs = opts.rows ? []\n            @valAttrs = opts.vals ? []\n            @sorters = opts.sorters ? {}\n            @rowOrder = opts.rowOrder ? \"key_a_to_z\"\n            @colOrder = opts.colOrder ? \"key_a_to_z\"\n            @derivedAttributes = opts.derivedAttributes ? {}\n            @filter = opts.filter ? (-> true)\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, @derivedAttributes, (record) =>\n                @processRecord(record) if @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        forEachMatchingRecord: (criteria, callback) ->\n            PivotData.forEachRecord @input, @derivedAttributes, (record) =>\n                return if not @filter(record)\n                for k, v of criteria\n                    return if v != (record[k] ? \"null\")\n                callback(record)\n\n        arrSort: (attrs) =>\n            sortersArr = (getSort(@sorters, a) for a in attrs)\n            (a,b) ->\n                for own i, sorter of sortersArr\n                    comparison = sorter(a[i], b[i])\n                    return comparison if comparison != 0\n                return 0\n\n        sortKeys: () =>\n            if not @sorted\n                @sorted = true\n                v = (r,c) => @getAggregator(r,c).value()\n                switch @rowOrder\n                    when \"value_a_to_z\"  then @rowKeys.sort (a,b) =>  naturalSort v(a,[]), v(b,[])\n                    when \"value_z_to_a\" then @rowKeys.sort (a,b) => -naturalSort v(a,[]), v(b,[])\n                    else             @rowKeys.sort @arrSort(@rowAttrs)\n                switch @colOrder\n                    when \"value_a_to_z\"  then @colKeys.sort (a,b) =>  naturalSort v([],a), v([],b)\n                    when \"value_z_to_a\" then @colKeys.sort (a,b) => -naturalSort v([],a), v([],b)\n                    else             @colKeys.sort @arrSort(@colAttrs)\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    #expose these to the outside world\n    $.pivotUtilities = {aggregatorTemplates, aggregators, renderers, derivers, locales,\n        naturalSort, numberFormat, sortAs, PivotData}\n\n    ###\n    Default Renderer for hierarchical table layout\n    ###\n\n    pivotTableRenderer = (pivotData, opts) ->\n\n        defaults =\n            table: clickCallback: null\n            localeStrings: totals: \"Totals\"\n\n        opts = $.extend(true, {}, defaults, opts)\n\n        colAttrs = pivotData.colAttrs\n        rowAttrs = pivotData.rowAttrs\n        rowKeys = pivotData.getRowKeys()\n        colKeys = pivotData.getColKeys()\n\n        if opts.table.clickCallback\n            getClickHandler = (value, rowValues, colValues) ->\n                filters = {}\n                filters[attr] = colValues[i] for own i, attr of colAttrs when colValues[i]?\n                filters[attr] = rowValues[i] for own i, attr of rowAttrs when rowValues[i]?\n                return (e) -> opts.table.clickCallback(e, value, filters, pivotData)\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        thead = document.createElement(\"thead\")\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            thead.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            thead.appendChild tr\n        result.appendChild thead\n\n        #now the actual data rows, with their row headers and totals\n        tbody = document.createElement(\"tbody\")\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.textContent = aggregator.format(val)\n                td.setAttribute(\"data-value\", val)\n                if getClickHandler?\n                    td.onclick = getClickHandler(val, rowKey, colKey)\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.textContent = totalAggregator.format(val)\n            td.setAttribute(\"data-value\", val)\n            if getClickHandler?\n                td.onclick = getClickHandler(val, rowKey, [])\n            td.setAttribute(\"data-for\", \"row\"+i)\n            tr.appendChild td\n            tbody.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.textContent = totalAggregator.format(val)\n            td.setAttribute(\"data-value\", val)\n            if getClickHandler?\n                td.onclick = getClickHandler(val, [], colKey)\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.textContent = totalAggregator.format(val)\n        td.setAttribute(\"data-value\", val)\n        if getClickHandler?\n            td.onclick = getClickHandler(val, [], [])\n        tr.appendChild td\n        tbody.appendChild tr\n        result.appendChild tbody\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, inputOpts, locale=\"en\") ->\n        locale = \"en\" if not locales[locale]?\n        defaults =\n            cols : [], rows: [], vals: []\n            rowOrder: \"key_a_to_z\", colOrder: \"key_a_to_z\"\n            dataClass: PivotData\n            filter: -> true\n            aggregator: aggregatorTemplates.count()()\n            aggregatorName: \"Count\"\n            sorters: {}\n            derivedAttributes: {}\n            renderer: pivotTableRenderer\n\n        localeStrings = $.extend(true, {}, locales.en.localeStrings, locales[locale].localeStrings)\n        localeDefaults =\n            rendererOptions: {localeStrings}\n            localeStrings: localeStrings\n\n        opts = $.extend(true, {}, localeDefaults, $.extend({}, defaults, inputOpts))\n\n        result = null\n        try\n            pivotData = new opts.dataClass(input, opts)\n            try\n                result = opts.renderer(pivotData, opts.rendererOptions)\n            catch e\n                console.error(e.stack) if console?\n                result = $(\"<span>\").html opts.localeStrings.renderError\n        catch e\n            console.error(e.stack) if console?\n            result = $(\"<span>\").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        locale = \"en\" if not locales[locale]?\n        defaults =\n            derivedAttributes: {}\n            aggregators: locales[locale].aggregators\n            renderers: locales[locale].renderers\n            hiddenAttributes: []\n            menuLimit: 500\n            cols: [], rows: [], vals: []\n            rowOrder: \"key_a_to_z\", colOrder: \"key_a_to_z\"\n            dataClass: PivotData\n            exclusions: {}\n            inclusions: {}\n            unusedAttrsVertical: 85\n            autoSortUnusedAttrs: false\n            onRefresh: null\n            filter: -> true\n            sorters: {}\n\n        localeStrings = $.extend(true, {}, locales.en.localeStrings, locales[locale].localeStrings)\n        localeDefaults =\n            rendererOptions: {localeStrings}\n            localeStrings: localeStrings\n\n        existingOpts = @data \"pivotUIOptions\"\n        if not existingOpts? or overwrite\n            opts = $.extend(true, {}, localeDefaults, $.extend({}, defaults, inputOpts))\n        else\n            opts = existingOpts\n\n        try\n            # do a first pass on the data to cache a materialized copy of any\n            # function-valued inputs and to compute dimension cardinalities\n            attrValues = {}\n            materializedInput = []\n            recordsProcessed = 0\n            PivotData.forEachRecord input, opts.derivedAttributes, (record) ->\n                return unless opts.filter(record)\n                materializedInput.push(record)\n                for own attr of record\n                    if not attrValues[attr]?\n                        attrValues[attr] = {}\n                        if recordsProcessed > 0\n                            attrValues[attr][\"null\"] = recordsProcessed\n                for attr of attrValues\n                    value = record[attr] ? \"null\"\n                    attrValues[attr][value] ?= 0\n                    attrValues[attr][value]++\n                recordsProcessed++\n\n            #start building the output\n            uiTable = $(\"<table>\", \"class\": \"pvtUi\").attr(\"cellpadding\", 5)\n\n            #renderer control\n            rendererControl = $(\"<td>\")\n\n            renderer = $(\"<select>\")\n                .addClass('pvtRenderer')\n                .appendTo(rendererControl)\n                .bind \"change\", -> refresh() #capture reference\n            for own x of opts.renderers\n                $(\"<option>\").val(x).html(x).appendTo(renderer)\n\n\n            #axis list, including the double-click menu\n            unused = $(\"<td>\").addClass('pvtAxisContainer pvtUnused')\n            shownAttributes = (a for a of attrValues when a not in opts.hiddenAttributes)\n\n            unusedAttrsVerticalAutoOverride = false\n            if opts.unusedAttrsVertical == \"auto\"\n                unusedAttrsVerticalAutoCutoff = 120 # legacy support\n            else\n                unusedAttrsVerticalAutoCutoff = parseInt opts.unusedAttrsVertical\n\n            if not isNaN(unusedAttrsVerticalAutoCutoff)\n                attrLength = 0\n                attrLength += a.length for a in shownAttributes\n                unusedAttrsVerticalAutoOverride = attrLength > unusedAttrsVerticalAutoCutoff\n\n            if opts.unusedAttrsVertical == true or unusedAttrsVerticalAutoOverride\n                unused.addClass('pvtVertList')\n            else\n                unused.addClass('pvtHorizList')\n\n            for own i, attr of shownAttributes\n                do (attr) ->\n                    values = (v for v of attrValues[attr])\n                    hasExcludedItem = false\n                    valueList = $(\"<div>\").addClass('pvtFilterBox').hide()\n\n                    valueList.append $(\"<h4>\").append(\n                        $(\"<span>\").text(attr),\n                        $(\"<span>\").addClass(\"count\").text(\"(#{values.length})\"),\n                        )\n                    if values.length > opts.menuLimit\n                        valueList.append $(\"<p>\").html(opts.localeStrings.tooMany)\n                    else\n                        if values.length > 5\n                            controls = $(\"<p>\").appendTo(valueList)\n                            sorter = getSort(opts.sorters, attr)\n                            placeholder = opts.localeStrings.filterResults\n                            $(\"<input>\", {type: \"text\"}).appendTo(controls)\n                                .attr({placeholder: placeholder, class: \"pvtSearch\"})\n                                .bind \"keyup\", ->\n                                    filter = $(this).val().toLowerCase().trim()\n                                    accept_gen = (prefix, accepted) -> (v) ->\n                                        real_filter = filter.substring(prefix.length).trim()\n                                        return true if real_filter.length == 0\n                                        return Math.sign(sorter(v.toLowerCase(), real_filter)) in accepted\n                                    accept =\n                                        if      filter.startsWith(\">=\") then accept_gen(\">=\", [1,0])\n                                        else if filter.startsWith(\"<=\") then accept_gen(\"<=\", [-1,0])\n                                        else if filter.startsWith(\">\")  then accept_gen(\">\",  [1])\n                                        else if filter.startsWith(\"<\")  then accept_gen(\"<\",  [-1])\n                                        else if filter.startsWith(\"~\")  then (v) ->\n                                                return true if filter.substring(1).trim().length == 0\n                                                v.toLowerCase().match(filter.substring(1))\n                                        else (v) -> v.toLowerCase().indexOf(filter) != -1\n\n                                    valueList.find('.pvtCheckContainer p label span.value').each ->\n                                        if accept($(this).text())\n                                            $(this).parent().parent().show()\n                                        else\n                                            $(this).parent().parent().hide()\n                            controls.append $(\"<br>\")\n                            $(\"<button>\", {type:\"button\"}).appendTo(controls)\n                                .html(opts.localeStrings.selectAll)\n                                .bind \"click\", ->\n                                    valueList.find(\"input:visible:not(:checked)\")\n                                        .prop(\"checked\", true).toggleClass(\"changed\")\n                                    return false\n                            $(\"<button>\", {type:\"button\"}).appendTo(controls)\n                                .html(opts.localeStrings.selectNone)\n                                .bind \"click\", ->\n                                    valueList.find(\"input:visible:checked\")\n                                        .prop(\"checked\", false).toggleClass(\"changed\")\n                                    return false\n\n                        checkContainer = $(\"<div>\").addClass(\"pvtCheckContainer\").appendTo(valueList)\n\n                        for value in values.sort(getSort(opts.sorters, attr))\n                             valueCount = attrValues[attr][value]\n                             filterItem = $(\"<label>\")\n                             filterItemExcluded = false\n                             if opts.inclusions[attr]\n                                filterItemExcluded = (value not in opts.inclusions[attr])\n                             else if opts.exclusions[attr]\n                                filterItemExcluded = (value in opts.exclusions[attr])\n                             hasExcludedItem ||= filterItemExcluded\n                             $(\"<input>\")\n                                .attr(\"type\", \"checkbox\").addClass('pvtFilter')\n                                .attr(\"checked\", !filterItemExcluded).data(\"filter\", [attr,value])\n                                .appendTo(filterItem)\n                                .bind \"change\", -> $(this).toggleClass(\"changed\")\n                             filterItem.append $(\"<span>\").addClass(\"value\").text(value)\n                             filterItem.append $(\"<span>\").addClass(\"count\").text(\"(\"+valueCount+\")\")\n                             checkContainer.append $(\"<p>\").append(filterItem)\n\n                    closeFilterBox = ->\n                        if valueList.find(\"[type='checkbox']\").length >\n                               valueList.find(\"[type='checkbox']:checked\").length\n                                attrElem.addClass \"pvtFilteredAttribute\"\n                            else\n                                attrElem.removeClass \"pvtFilteredAttribute\"\n\n                            valueList.find('.pvtSearch').val('')\n                            valueList.find('.pvtCheckContainer p').show()\n                            valueList.hide()\n\n                    finalButtons = $(\"<p>\").appendTo(valueList)\n\n                    if values.length <= opts.menuLimit\n                        $(\"<button>\", {type: \"button\"}).text(opts.localeStrings.apply)\n                            .appendTo(finalButtons).bind \"click\", ->\n                                if valueList.find(\".changed\").removeClass(\"changed\").length\n                                    refresh()\n                                closeFilterBox()\n\n                    $(\"<button>\", {type: \"button\"}).text(opts.localeStrings.cancel)\n                        .appendTo(finalButtons).bind \"click\", ->\n                            valueList.find(\".changed:checked\")\n                                .removeClass(\"changed\").prop(\"checked\", false)\n                            valueList.find(\".changed:not(:checked)\")\n                                .removeClass(\"changed\").prop(\"checked\", true)\n                            closeFilterBox()\n\n                    triangleLink = $(\"<span>\").addClass('pvtTriangle')\n                        .html(\" &#x25BE;\").bind \"click\", (e) ->\n                            {left, top} = $(e.currentTarget).position()\n                            valueList.css(left: left+10, top: top+10).show()\n\n                    attrElem = $(\"<li>\").addClass(\"axis_#{i}\")\n                        .append $(\"<span>\").addClass('pvtAttr').text(attr).data(\"attrName\", attr).append(triangleLink)\n\n                    attrElem.addClass('pvtFilteredAttribute') if hasExcludedItem\n                    unused.append(attrElem).append(valueList)\n\n            tr1 = $(\"<tr>\").appendTo(uiTable)\n\n            #aggregator menu and value area\n\n            aggregator = $(\"<select>\").addClass('pvtAggregator')\n                .bind \"change\", -> refresh() #capture reference\n            for own x of opts.aggregators\n                aggregator.append $(\"<option>\").val(x).html(x)\n\n            ordering =\n                key_a_to_z:   {rowSymbol: \"&varr;\", colSymbol: \"&harr;\", next: \"value_a_to_z\"}\n                value_a_to_z: {rowSymbol: \"&darr;\", colSymbol: \"&rarr;\", next: \"value_z_to_a\"}\n                value_z_to_a: {rowSymbol: \"&uarr;\", colSymbol: \"&larr;\", next: \"key_a_to_z\"}\n\n            rowOrderArrow = $(\"<a>\", role: \"button\").addClass(\"pvtRowOrder\")\n                .data(\"order\", opts.rowOrder).html(ordering[opts.rowOrder].rowSymbol)\n                .bind \"click\", ->\n                    $(this).data(\"order\", ordering[$(this).data(\"order\")].next)\n                    $(this).html(ordering[$(this).data(\"order\")].rowSymbol)\n                    refresh()\n\n            colOrderArrow = $(\"<a>\", role: \"button\").addClass(\"pvtColOrder\")\n                .data(\"order\", opts.colOrder).html(ordering[opts.colOrder].colSymbol)\n                .bind \"click\", ->\n                    $(this).data(\"order\", ordering[$(this).data(\"order\")].next)\n                    $(this).html(ordering[$(this).data(\"order\")].colSymbol)\n                    refresh()\n\n            $(\"<td>\").addClass('pvtVals')\n              .appendTo(tr1)\n              .append(aggregator)\n              .append(rowOrderArrow)\n              .append(colOrderArrow)\n              .append($(\"<br>\"))\n\n            #column axes\n            $(\"<td>\").addClass('pvtAxisContainer pvtHorizList pvtCols').appendTo(tr1)\n\n            tr2 = $(\"<tr>\").appendTo(uiTable)\n\n            #row axes\n            tr2.append $(\"<td>\").addClass('pvtAxisContainer pvtRows').attr(\"valign\", \"top\")\n\n            #the actual pivot table container\n            pivotTable = $(\"<td>\")\n                .attr(\"valign\", \"top\")\n                .addClass('pvtRendererArea')\n                .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 unused\n            else\n                uiTable.prepend $(\"<tr>\").append(rendererControl).append(unused)\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_#{$.inArray(x, shownAttributes)}\")\n            for x in opts.rows\n                @find(\".pvtRows\").append @find(\".axis_#{$.inArray(x, shownAttributes)}\")\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                    sorters: opts.sorters\n                    cols: [], rows: []\n                    dataClass: opts.dataClass\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 = $(\"<select>\")\n                            .addClass('pvtAttrDropdown')\n                            .append($(\"<option>\"))\n                            .bind \"change\", -> refresh()\n                        for attr in shownAttributes\n                            newDropdown.append($(\"<option>\").val(attr).text(attr))\n                        pvtVals.append(newDropdown)\n\n                if initialRender\n                    vals = opts.vals\n                    i = 0\n                    @find(\".pvtVals select.pvtAttrDropdown\").each ->\n                        $(this).val vals[i]\n                        i++\n                    initialRender = false\n\n                subopts.aggregatorName = aggregator.val()\n                subopts.vals = vals\n                subopts.aggregator = opts.aggregators[aggregator.val()](vals)\n                subopts.renderer = opts.renderers[renderer.val()]\n                subopts.rowOrder = rowOrderArrow.data(\"order\")\n                subopts.colOrder = colOrderArrow.data(\"order\")\n                #construct filter here\n                exclusions = {}\n                @find('input.pvtFilter').not(':checked').each ->\n                    filter = $(this).data(\"filter\")\n                    if exclusions[filter[0]]?\n                        exclusions[filter[0]].push( filter[1] )\n                    else\n                        exclusions[filter[0]] = [ filter[1] ]\n                #include inclusions when exclusions present\n                inclusions = {}\n                @find('input.pvtFilter:checked').each ->\n                    filter = $(this).data(\"filter\")\n                    if exclusions[filter[0]]?\n                        if inclusions[filter[0]]?\n                            inclusions[filter[0]].push( filter[1] )\n                        else\n                            inclusions[filter[0]] = [ filter[1] ]\n\n                subopts.filter = (record) ->\n                    return false if not opts.filter(record)\n                    for k,excludedItems of exclusions\n                        return false if \"\"+(record[k] ? 'null') in excludedItems\n                    return true\n\n                pivotTable.pivot(materializedInput,subopts)\n                pivotUIOptions = $.extend {}, opts,\n                    cols: subopts.cols\n                    rows: subopts.rows\n                    colOrder: subopts.colOrder\n                    rowOrder: subopts.rowOrder\n                    vals: vals\n                    exclusions: exclusions\n                    inclusions: inclusions\n                    inclusionsInfo: inclusions #duplicated for backwards-compatibility\n                    aggregatorName: aggregator.val()\n                    rendererName: renderer.val()\n\n                @data \"pivotUIOptions\", pivotUIOptions\n\n                # if requested make sure unused columns are in alphabetical order\n                if opts.autoSortUnusedAttrs\n                    unusedAttrsContainer = @find(\"td.pvtUnused.pvtAxisContainer\")\n                    $(unusedAttrsContainer).children(\"li\")\n                        .sort((a, b) => naturalSort($(a).text(), $(b).text()))\n                        .appendTo unusedAttrsContainer\n\n                pivotTable.css(\"opacity\", 1)\n                opts.onRefresh(pivotUIOptions) if opts.onRefresh?\n\n            refresh = =>\n                pivotTable.css(\"opacity\", 0.5)\n                setTimeout refreshDelayed, 10\n\n            #the very first refresh will actually display the table\n            refresh()\n\n            @find(\".pvtAxisContainer\").sortable\n                    update: (e, ui) -> refresh() if not ui.sender?\n                    connectWith: @find(\".pvtAxisContainer\")\n                    items: 'li'\n                    placeholder: 'pvtPlaceholder'\n        catch e\n            console.error(e.stack) if console?\n            @html opts.localeStrings.uiRenderError\n        return this\n\n    ###\n    Heatmap post-processing\n    ###\n\n    $.fn.heatmap = (scope = \"heatmap\", opts) ->\n        numRows = @data \"numrows\"\n        numCols = @data \"numcols\"\n\n        # given a series of values\n        # must return a function to map a given value to a CSS color\n        colorScaleGenerator = opts?.heatmap?.colorScaleGenerator\n        colorScaleGenerator ?= (values) ->\n            min = Math.min(values...)\n            max = Math.max(values...)\n            return (x) ->\n                nonRed = 255 - Math.round 255*(x-min)/(max-min)\n                return \"rgb(255,#{nonRed},#{nonRed})\"\n\n        heatmapper = (scope) =>\n            forEachCell = (f) =>\n                @find(scope).each ->\n                    x = $(this).data(\"value\")\n                    f(x, $(this)) if x? and isFinite(x)\n\n            values = []\n            forEachCell (x) -> values.push x\n            colorScale = colorScaleGenerator(values)\n            forEachCell (x, elem) -> elem.css \"background-color\", colorScale(x)\n\n        switch scope\n            when \"heatmap\"    then heatmapper \".pvtVal\"\n            when \"rowheatmap\" then heatmapper \".pvtVal.row#{i}\" for i in [0...numRows]\n            when \"colheatmap\" then heatmapper \".pvtVal.col#{j}\" for j in [0...numCols]\n\n        heatmapper \".pvtTotal.rowTotal\"\n        heatmapper \".pvtTotal.colTotal\"\n\n        return this\n\n    ###\n    Barchart post-processing\n    ###\n\n    $.fn.barchart =  ->\n        numRows = @data \"numrows\"\n        numCols = @data \"numcols\"\n\n        barcharter = (scope) =>\n            forEachCell = (f) =>\n                @find(scope).each ->\n                    x = $(this).data(\"value\")\n                    f(x, $(this)) if x? and isFinite(x)\n\n            values = []\n            forEachCell (x) -> values.push x\n            max = Math.max(values...)\n            scaler = (x) -> 100*x/(1.4*max)\n            forEachCell (x, elem) ->\n                text = elem.text()\n                wrapper = $(\"<div>\").css\n                    \"position\": \"relative\"\n                    \"height\": \"55px\"\n                wrapper.append $(\"<div>\").css\n                    \"position\": \"absolute\"\n                    \"bottom\": 0\n                    \"left\": 0\n                    \"right\": 0\n                    \"height\": scaler(x) + \"%\"\n                    \"background-color\": \"gray\"\n                wrapper.append $(\"<div>\").text(text).css\n                    \"position\":\"relative\"\n                    \"padding-left\":\"5px\"\n                    \"padding-right\":\"5px\"\n\n                elem.css(\"padding\": 0,\"padding-top\": \"5px\", \"text-align\": \"center\").html wrapper\n\n        barcharter \".pvtVal.row#{i}\" for i in [0...numRows]\n        barcharter \".pvtTotal.colTotal\"\n\n        return this\n","(function(){var t,n=[].indexOf||function(t){for(var n=0,e=this.length;e>n;n++)if(n in this&&this[n]===t)return n;return-1},e=[].slice,r=function(t,n){return function(){return t.apply(n,arguments)}},a={}.hasOwnProperty;(t=function(t){return\"object\"==typeof exports&&\"object\"==typeof module?t(require(\"jquery\")):\"function\"==typeof define&&define.amd?define([\"jquery\"],t):t(jQuery)})(function(t){var i,o,l,s,u,c,p,h,d,f,v,g,m,b,C,A,y,N,x,w,S;return o=function(t,n,e){var r,a,i,o;for(t+=\"\",a=t.split(\".\"),i=a[0],o=a.length>1?e+a[1]:\"\",r=/(\\d+)(\\d{3})/;r.test(i);)i=i.replace(r,\"$1\"+n+\"$2\");return i+o},v=function(n){var e;return e={digitsAfterDecimal:2,scaler:1,thousandsSep:\",\",decimalSep:\".\",prefix:\"\",suffix:\"\",showZero:!1},n=t.extend({},e,n),function(t){var e;return isNaN(t)||!isFinite(t)?\"\":0!==t||n.showZero?(e=o((n.scaler*t).toFixed(n.digitsAfterDecimal),n.thousandsSep,n.decimalSep),\"\"+n.prefix+e+n.suffix):\"\"}},N=v(),x=v({digitsAfterDecimal:0}),w=v({digitsAfterDecimal:1,scaler:100,suffix:\"%\"}),l={count:function(t){return null==t&&(t=x),function(){return function(n,e,r){return{count:0,push:function(){return this.count++},value:function(){return this.count},format:t}}}},countUnique:function(t){return null==t&&(t=x),function(e){var r;return r=e[0],function(e,a,i){return{uniq:[],push:function(t){var e;return e=t[r],n.call(this.uniq,e)<0?this.uniq.push(t[r]):void 0},value:function(){return this.uniq.length},format:t,numInputs:null!=r?0:1}}}},listUnique:function(t){return function(e){var r;return r=e[0],function(e,a,i){return{uniq:[],push:function(t){var e;return e=t[r],n.call(this.uniq,e)<0?this.uniq.push(t[r]):void 0},value:function(){return this.uniq.join(t)},format:function(t){return t},numInputs:null!=r?0:1}}}},sum:function(t){return null==t&&(t=N),function(n){var e;return e=n[0],function(n,r,a){return{sum:0,push:function(t){return isNaN(parseFloat(t[e]))?void 0:this.sum+=parseFloat(t[e])},value:function(){return this.sum},format:t,numInputs:null!=e?0:1}}}},min:function(t){return null==t&&(t=N),function(n){var e;return e=n[0],function(n,r,a){return{val:null,push:function(t){var n,r;return r=parseFloat(t[e]),isNaN(r)?void 0:this.val=Math.min(r,null!=(n=this.val)?n:r)},value:function(){return this.val},format:t,numInputs:null!=e?0:1}}}},max:function(t){return null==t&&(t=N),function(n){var e;return e=n[0],function(n,r,a){return{val:null,push:function(t){var n,r;return r=parseFloat(t[e]),isNaN(r)?void 0:this.val=Math.max(r,null!=(n=this.val)?n:r)},value:function(){return this.val},format:t,numInputs:null!=e?0:1}}}},first:function(t){return null==t&&(t=N),function(n){var e;return e=n[0],function(n,r,a){return{val:null,sorter:p(null!=n?n.sorters:void 0,e),push:function(t){var n,r;return r=t[e],this.sorter(r,null!=(n=this.val)?n:r)<=0?this.val=r:void 0},value:function(){return this.val},format:function(n){return isNaN(n)?n:t(n)},numInputs:null!=e?0:1}}}},last:function(t){return null==t&&(t=N),function(n){var e;return e=n[0],function(n,r,a){return{val:null,sorter:p(null!=n?n.sorters:void 0,e),push:function(t){var n,r;return r=t[e],this.sorter(r,null!=(n=this.val)?n:r)>=0?this.val=r:void 0},value:function(){return this.val},format:function(n){return isNaN(n)?n:t(n)},numInputs:null!=e?0:1}}}},average:function(t){return null==t&&(t=N),function(n){var e;return e=n[0],function(n,r,a){return{sum:0,len:0,push:function(t){return isNaN(parseFloat(t[e]))?void 0:(this.sum+=parseFloat(t[e]),this.len++)},value:function(){return this.sum/this.len},format:t,numInputs:null!=e?0:1}}}},sumOverSum:function(t){return null==t&&(t=N),function(n){var e,r;return r=n[0],e=n[1],function(n,a,i){return{sumNum:0,sumDenom:0,push:function(t){return isNaN(parseFloat(t[r]))||(this.sumNum+=parseFloat(t[r])),isNaN(parseFloat(t[e]))?void 0:this.sumDenom+=parseFloat(t[e])},value:function(){return this.sumNum/this.sumDenom},format:t,numInputs:null!=r&&null!=e?0:2}}}},sumOverSumBound80:function(t,n){return null==t&&(t=!0),null==n&&(n=N),function(e){var r,a;return a=e[0],r=e[1],function(e,i,o){return{sumNum:0,sumDenom:0,push:function(t){return isNaN(parseFloat(t[a]))||(this.sumNum+=parseFloat(t[a])),isNaN(parseFloat(t[r]))?void 0:this.sumDenom+=parseFloat(t[r])},value:function(){var n;return n=t?1:-1,(.821187207574908/this.sumDenom+this.sumNum/this.sumDenom+1.2815515655446004*n*Math.sqrt(.410593603787454/(this.sumDenom*this.sumDenom)+this.sumNum*(1-this.sumNum/this.sumDenom)/(this.sumDenom*this.sumDenom)))/(1+1.642374415149816/this.sumDenom)},format:n,numInputs:null!=a&&null!=r?0:2}}}},fractionOf:function(t,n,r){return null==n&&(n=\"total\"),null==r&&(r=w),function(){var a;return a=1<=arguments.length?e.call(arguments,0):[],function(e,i,o){return{selector:{total:[[],[]],row:[i,[]],col:[[],o]}[n],inner:t.apply(null,a)(e,i,o),push:function(t){return this.inner.push(t)},format:r,value:function(){return this.inner.value()/e.getAggregator.apply(e,this.selector).inner.value()},numInputs:t.apply(null,a)().numInputs}}}}},s=function(t){return{Count:t.count(x),\"Count Unique Values\":t.countUnique(x),\"List Unique Values\":t.listUnique(\", \"),Sum:t.sum(N),\"Integer Sum\":t.sum(x),Average:t.average(N),Minimum:t.min(N),Maximum:t.max(N),First:t.first(N),Last:t.last(N),\"Sum over Sum\":t.sumOverSum(N),\"80% Upper Bound\":t.sumOverSumBound80(!0,N),\"80% Lower Bound\":t.sumOverSumBound80(!1,N),\"Sum as Fraction of Total\":t.fractionOf(t.sum(),\"total\",w),\"Sum as Fraction of Rows\":t.fractionOf(t.sum(),\"row\",w),\"Sum as Fraction of Columns\":t.fractionOf(t.sum(),\"col\",w),\"Count as Fraction of Total\":t.fractionOf(t.count(),\"total\",w),\"Count as Fraction of Rows\":t.fractionOf(t.count(),\"row\",w),\"Count as Fraction of Columns\":t.fractionOf(t.count(),\"col\",w)}}(l),b={Table:function(t,n){return g(t,n)},\"Table Barchart\":function(n,e){return t(g(n,e)).barchart()},Heatmap:function(n,e){return t(g(n,e)).heatmap(\"heatmap\",e)},\"Row Heatmap\":function(n,e){return t(g(n,e)).heatmap(\"rowheatmap\",e)},\"Col Heatmap\":function(n,e){return t(g(n,e)).heatmap(\"colheatmap\",e)}},h={en:{aggregators:s,renderers:b,localeStrings:{renderError:\"An error occurred rendering the PivotTable results.\",computeError:\"An error occurred computing the PivotTable results.\",uiRenderError:\"An error occurred rendering the PivotTable UI.\",selectAll:\"Select All\",selectNone:\"Select None\",tooMany:\"(too many to list)\",filterResults:\"Filter values\",apply:\"Apply\",cancel:\"Cancel\",totals:\"Totals\",vs:\"vs\",by:\"by\"}}},d=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],u=[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],S=function(t){return(\"0\"+t).substr(-2,2)},c={bin:function(t,n){return function(e){return e[t]-e[t]%n}},dateFormat:function(t,n,e,r,a){var i;return null==e&&(e=!1),null==r&&(r=d),null==a&&(a=u),i=e?\"UTC\":\"\",function(e){var o;return o=new Date(Date.parse(e[t])),isNaN(o)?\"\":n.replace(/%(.)/g,function(t,n){switch(n){case\"y\":return o[\"get\"+i+\"FullYear\"]();case\"m\":return S(o[\"get\"+i+\"Month\"]()+1);case\"n\":return r[o[\"get\"+i+\"Month\"]()];case\"d\":return S(o[\"get\"+i+\"Date\"]());case\"w\":return a[o[\"get\"+i+\"Day\"]()];case\"x\":return o[\"get\"+i+\"Day\"]();case\"H\":return S(o[\"get\"+i+\"Hours\"]());case\"M\":return S(o[\"get\"+i+\"Minutes\"]());case\"S\":return S(o[\"get\"+i+\"Seconds\"]());default:return\"%\"+n}})}}},C=/(\\d+)|(\\D+)/g,m=/\\d/,A=/^0/,f=function(t){return function(t,n){var e,r,a,i,o,l;if(null!=n&&null==t)return-1;if(null!=t&&null==n)return 1;if(\"number\"==typeof t&&isNaN(t))return-1;if(\"number\"==typeof n&&isNaN(n))return 1;if(o=+t,l=+n,l>o)return-1;if(o>l)return 1;if(\"number\"==typeof t&&\"number\"!=typeof n)return-1;if(\"number\"==typeof n&&\"number\"!=typeof t)return 1;if(\"number\"==typeof t&&\"number\"==typeof n)return 0;if(isNaN(l)&&!isNaN(o))return-1;if(isNaN(o)&&!isNaN(l))return 1;if(e=String(t),a=String(n),e===a)return 0;if(!m.test(e)||!m.test(a))return e>a?1:-1;for(e=e.match(C),a=a.match(C);e.length&&a.length;)if(r=e.shift(),i=a.shift(),r!==i)return m.test(r)&&m.test(i)?r.replace(A,\".0\")-i.replace(A,\".0\"):r>i?1:-1;return e.length-a.length}}(this),y=function(t){var n,e,r,a;r={},e={};for(n in t)a=t[n],r[a]=n,\"string\"==typeof a&&(e[a.toLowerCase()]=n);return function(t,n){return null!=r[t]&&null!=r[n]?r[t]-r[n]:null!=r[t]?-1:null!=r[n]?1:null!=e[t]&&null!=e[n]?e[t]-e[n]:null!=e[t]?-1:null!=e[n]?1:f(t,n)}},p=function(n,e){var r;if(null!=n)if(t.isFunction(n)){if(r=n(e),t.isFunction(r))return r}else if(null!=n[e])return n[e];return f},i=function(){function n(t,e){var a,i,o,s,u,c,p,h;null==e&&(e={}),this.getAggregator=r(this.getAggregator,this),this.getRowKeys=r(this.getRowKeys,this),this.getColKeys=r(this.getColKeys,this),this.sortKeys=r(this.sortKeys,this),this.arrSort=r(this.arrSort,this),this.input=t,this.aggregator=null!=(a=e.aggregator)?a:l.count()(),this.aggregatorName=null!=(i=e.aggregatorName)?i:\"Count\",this.colAttrs=null!=(o=e.cols)?o:[],this.rowAttrs=null!=(s=e.rows)?s:[],this.valAttrs=null!=(u=e.vals)?u:[],this.sorters=null!=(c=e.sorters)?c:{},this.derivedAttributes=null!=(p=e.derivedAttributes)?p:{},this.filter=null!=(h=e.filter)?h:function(){return!0},this.tree={},this.rowKeys=[],this.colKeys=[],this.rowTotals={},this.colTotals={},this.allTotal=this.aggregator(this,[],[]),this.sorted=!1,n.forEachRecord(this.input,this.derivedAttributes,function(t){return function(n){return t.filter(n)?t.processRecord(n):void 0}}(this))}return n.forEachRecord=function(n,e,r){var i,o,l,s,u,c,p,h,d,f,v,g;if(i=t.isEmptyObject(e)?r:function(t){var n,a,i;for(n in e)i=e[n],t[n]=null!=(a=i(t))?a:t[n];return r(t)},t.isFunction(n))return n(i);if(t.isArray(n)){if(t.isArray(n[0])){f=[];for(l in n)if(a.call(n,l)&&(o=n[l],l>0)){h={},d=n[0];for(s in d)a.call(d,s)&&(u=d[s],h[u]=o[s]);f.push(i(h))}return f}for(v=[],c=0,p=n.length;p>c;c++)h=n[c],v.push(i(h));return v}if(n instanceof jQuery)return g=[],t(\"thead > tr > th\",n).each(function(n){return g.push(t(this).text())}),t(\"tbody > tr\",n).each(function(n){return h={},t(\"td\",this).each(function(n){return h[g[n]]=t(this).text()}),i(h)});throw new Error(\"unknown input format\")},n.prototype.forEachMatchingRecord=function(t,e){return n.forEachRecord(this.input,this.derivedAttributes,function(n){return function(r){var a,i,o;if(n.filter(r)){for(a in t)if(o=t[a],o!==(null!=(i=r[a])?i:\"null\"))return;return e(r)}}}(this))},n.prototype.arrSort=function(t){var n,e;return e=function(){var e,r,a;for(a=[],e=0,r=t.length;r>e;e++)n=t[e],a.push(p(this.sorters,n));return a}.call(this),function(t,n){var r,i,o;for(i in e)if(a.call(e,i)&&(o=e[i],r=o(t[i],n[i]),0!==r))return r;return 0}},n.prototype.sortKeys=function(){return this.sorted?void 0:(this.sorted=!0,this.rowKeys.sort(this.arrSort(this.rowAttrs)),this.colKeys.sort(this.arrSort(this.colAttrs)))},n.prototype.getColKeys=function(){return this.sortKeys(),this.colKeys},n.prototype.getRowKeys=function(){return this.sortKeys(),this.rowKeys},n.prototype.processRecord=function(t){var n,e,r,a,i,o,l,s,u,c,p,h,d;for(n=[],h=[],s=this.colAttrs,a=0,i=s.length;i>a;a++)d=s[a],n.push(null!=(u=t[d])?u:\"null\");for(c=this.rowAttrs,l=0,o=c.length;o>l;l++)d=c[l],h.push(null!=(p=t[d])?p:\"null\");return r=h.join(String.fromCharCode(0)),e=n.join(String.fromCharCode(0)),this.allTotal.push(t),0!==h.length&&(this.rowTotals[r]||(this.rowKeys.push(h),this.rowTotals[r]=this.aggregator(this,h,[])),this.rowTotals[r].push(t)),0!==n.length&&(this.colTotals[e]||(this.colKeys.push(n),this.colTotals[e]=this.aggregator(this,[],n)),this.colTotals[e].push(t)),0!==n.length&&0!==h.length?(this.tree[r]||(this.tree[r]={}),this.tree[r][e]||(this.tree[r][e]=this.aggregator(this,h,n)),this.tree[r][e].push(t)):void 0},n.prototype.getAggregator=function(t,n){var e,r,a;return a=t.join(String.fromCharCode(0)),r=n.join(String.fromCharCode(0)),e=0===t.length&&0===n.length?this.allTotal:0===t.length?this.colTotals[r]:0===n.length?this.rowTotals[a]:this.tree[a][r],null!=e?e:{value:function(){return null},format:function(){return\"\"}}},n}(),t.pivotUtilities={aggregatorTemplates:l,aggregators:s,renderers:b,derivers:c,locales:h,naturalSort:f,numberFormat:v,sortAs:y,PivotData:i},g=function(n,e){var r,i,o,l,s,u,c,p,h,d,f,v,g,m,b,C,A,y,N,x,w,S,T,k;u={table:{clickCallback:null},localeStrings:{totals:\"Totals\"}},e=t.extend(!0,{},u,e),o=n.colAttrs,v=n.rowAttrs,m=n.getRowKeys(),s=n.getColKeys(),e.table.clickCallback&&(c=function(t,r,i){var l,s,u;s={};for(u in o)a.call(o,u)&&(l=o[u],null!=i[u]&&(s[l]=i[u]));for(u in v)a.call(v,u)&&(l=v[u],null!=r[u]&&(s[l]=r[u]));return function(r){return e.table.clickCallback(r,t,s,n)}}),f=document.createElement(\"table\"),f.className=\"pvtTable\",b=function(t,n,e){var r,a,i,o,l,s,u,c;if(0!==n){for(o=!0,c=r=0,l=e;l>=0?l>=r:r>=l;c=l>=0?++r:--r)t[n-1][c]!==t[n][c]&&(o=!1);if(o)return-1}for(a=0;n+a<t.length;){for(u=!1,c=i=0,s=e;s>=0?s>=i:i>=s;c=s>=0?++i:--i)t[n][c]!==t[n+a][c]&&(u=!0);if(u)break;a++}return a},N=document.createElement(\"thead\");for(h in o)if(a.call(o,h)){i=o[h],w=document.createElement(\"tr\"),0===parseInt(h)&&0!==v.length&&(y=document.createElement(\"th\"),y.setAttribute(\"colspan\",v.length),y.setAttribute(\"rowspan\",o.length),w.appendChild(y)),y=document.createElement(\"th\"),y.className=\"pvtAxisLabel\",y.textContent=i,w.appendChild(y);for(p in s)a.call(s,p)&&(l=s[p],k=b(s,parseInt(p),parseInt(h)),-1!==k&&(y=document.createElement(\"th\"),y.className=\"pvtColLabel\",y.textContent=l[h],y.setAttribute(\"colspan\",k),parseInt(h)===o.length-1&&0!==v.length&&y.setAttribute(\"rowspan\",2),w.appendChild(y)));0===parseInt(h)&&(y=document.createElement(\"th\"),y.className=\"pvtTotalLabel\",y.innerHTML=e.localeStrings.totals,y.setAttribute(\"rowspan\",o.length+(0===v.length?0:1)),w.appendChild(y)),N.appendChild(w)}if(0!==v.length){w=document.createElement(\"tr\");for(p in v)a.call(v,p)&&(d=v[p],y=document.createElement(\"th\"),y.className=\"pvtAxisLabel\",y.textContent=d,w.appendChild(y));y=document.createElement(\"th\"),0===o.length&&(y.className=\"pvtTotalLabel\",y.innerHTML=e.localeStrings.totals),w.appendChild(y),N.appendChild(w)}f.appendChild(N),C=document.createElement(\"tbody\");for(p in m)if(a.call(m,p)){g=m[p],w=document.createElement(\"tr\");for(h in g)a.call(g,h)&&(S=g[h],k=b(m,parseInt(p),parseInt(h)),-1!==k&&(y=document.createElement(\"th\"),y.className=\"pvtRowLabel\",y.textContent=S,y.setAttribute(\"rowspan\",k),parseInt(h)===v.length-1&&0!==o.length&&y.setAttribute(\"colspan\",2),w.appendChild(y)));for(h in s)a.call(s,h)&&(l=s[h],r=n.getAggregator(g,l),T=r.value(),A=document.createElement(\"td\"),A.className=\"pvtVal row\"+p+\" col\"+h,A.textContent=r.format(T),A.setAttribute(\"data-value\",T),null!=c&&(A.onclick=c(T,g,l)),w.appendChild(A));x=n.getAggregator(g,[]),T=x.value(),A=document.createElement(\"td\"),A.className=\"pvtTotal rowTotal\",A.textContent=x.format(T),A.setAttribute(\"data-value\",T),null!=c&&(A.onclick=c(T,g,[])),A.setAttribute(\"data-for\",\"row\"+p),w.appendChild(A),C.appendChild(w)}w=document.createElement(\"tr\"),y=document.createElement(\"th\"),y.className=\"pvtTotalLabel\",y.innerHTML=e.localeStrings.totals,y.setAttribute(\"colspan\",v.length+(0===o.length?0:1)),w.appendChild(y);for(h in s)a.call(s,h)&&(l=s[h],x=n.getAggregator([],l),T=x.value(),A=document.createElement(\"td\"),A.className=\"pvtTotal colTotal\",A.textContent=x.format(T),A.setAttribute(\"data-value\",T),null!=c&&(A.onclick=c(T,[],l)),A.setAttribute(\"data-for\",\"col\"+h),w.appendChild(A));return x=n.getAggregator([],[]),T=x.value(),A=document.createElement(\"td\"),A.className=\"pvtGrandTotal\",A.textContent=x.format(T),A.setAttribute(\"data-value\",T),null!=c&&(A.onclick=c(T,[],[])),w.appendChild(A),C.appendChild(w),f.appendChild(C),f.setAttribute(\"data-numrows\",m.length),f.setAttribute(\"data-numcols\",s.length),f},t.fn.pivot=function(n,e,r){var a,o,s,u,c,p,d,f;null==r&&(r=\"en\"),null==h[r]&&(r=\"en\"),a={cols:[],rows:[],vals:[],dataClass:i,filter:function(){return!0},aggregator:l.count()(),aggregatorName:\"Count\",sorters:{},derivedAttributes:{},renderer:g},u=t.extend(!0,{},h.en.localeStrings,h[r].localeStrings),s={rendererOptions:{localeStrings:u},localeStrings:u},c=t.extend(!0,{},s,t.extend({},a,e)),d=null;try{p=new c.dataClass(n,c);try{d=c.renderer(p,c.rendererOptions)}catch(v){o=v,\"undefined\"!=typeof console&&null!==console&&console.error(o.stack),d=t(\"<span>\").html(c.localeStrings.renderError)}}catch(v){o=v,\"undefined\"!=typeof console&&null!==console&&console.error(o.stack),d=t(\"<span>\").html(c.localeStrings.computeError)}for(f=this[0];f.hasChildNodes();)f.removeChild(f.lastChild);return this.append(d)},t.fn.pivotUI=function(e,r,o,l){var s,u,c,d,v,g,m,b,C,A,y,N,x,w,S,T,k,F,E,D,I,R,M,L,O,K,q,U,V,j,H,B,W,P,J,_,z,G,Q;null==o&&(o=!1),null==l&&(l=\"en\"),null==h[l]&&(l=\"en\"),g={derivedAttributes:{},aggregators:h[l].aggregators,renderers:h[l].renderers,hiddenAttributes:[],menuLimit:500,cols:[],rows:[],vals:[],dataClass:i,exclusions:{},inclusions:{},unusedAttrsVertical:85,autoSortUnusedAttrs:!1,onRefresh:null,filter:function(){return!0},sorters:{}},k=t.extend(!0,{},h.en.localeStrings,h[l].localeStrings),T={rendererOptions:{localeStrings:k},localeStrings:k},b=this.data(\"pivotUIOptions\"),I=null==b||o?t.extend(!0,{},T,t.extend({},g,r)):b;try{v={},F=[],M=0,i.forEachRecord(e,I.derivedAttributes,function(t){var n,e,r,i;if(I.filter(t)){F.push(t);for(n in t)a.call(t,n)&&null==v[n]&&(v[n]={},M>0&&(v[n][\"null\"]=M));for(n in v)i=null!=(r=t[n])?r:\"null\",null==(e=v[n])[i]&&(e[i]=0),v[n][i]++;return M++}}),J=t(\"<table>\",{\"class\":\"pvtUi\"}).attr(\"cellpadding\",5),H=t(\"<td>\"),j=t(\"<select>\").addClass(\"pvtRenderer\").appendTo(H).bind(\"change\",function(){return U()}),L=I.renderers;for(Q in L)a.call(L,Q)&&t(\"<option>\").val(Q).html(Q).appendTo(j);if(_=t(\"<td>\").addClass(\"pvtAxisContainer pvtUnused\"),B=function(){var t;t=[];for(s in v)n.call(I.hiddenAttributes,s)<0&&t.push(s);return t}(),G=!1,z=\"auto\"===I.unusedAttrsVertical?120:parseInt(I.unusedAttrsVertical),!isNaN(z)){for(d=0,N=0,x=B.length;x>N;N++)s=B[N],d+=s.length;G=d>z}_.addClass(I.unusedAttrsVertical===!0||G?\"pvtVertList\":\"pvtHorizList\"),C=function(e){var r,a,i,o,l,s,u,c,h,d,f,g,m,b,C,y,N,x,w;if(w=function(){var t;t=[];for(C in v[e])t.push(C);return t}(),c=!1,x=t(\"<div>\").addClass(\"pvtFilterBox\").hide(),x.append(t(\"<h4>\").append(t(\"<span>\").text(e),t(\"<span>\").addClass(\"count\").text(\"(\"+w.length+\")\"))),w.length>I.menuLimit)x.append(t(\"<p>\").html(I.localeStrings.tooMany));else for(w.length>5&&(o=t(\"<p>\").appendTo(x),m=p(I.sorters,e),f=I.localeStrings.filterResults,t(\"<input>\",{type:\"text\"}).appendTo(o).attr({placeholder:f,\"class\":\"pvtSearch\"}).bind(\"keyup\",function(){var e,r,a;return a=t(this).val().toLowerCase().trim(),r=function(t,e){return function(r){var i,o;return i=a.substring(t.length).trim(),0===i.length?!0:(o=Math.sign(m(r.toLowerCase(),i)),n.call(e,o)>=0)}},e=a.startsWith(\">=\")?r(\">=\",[1,0]):a.startsWith(\"<=\")?r(\"<=\",[-1,0]):a.startsWith(\">\")?r(\">\",[1]):a.startsWith(\"<\")?r(\"<\",[-1]):a.startsWith(\"~\")?function(t){return 0===a.substring(1).trim().length?!0:t.toLowerCase().match(a.substring(1))}:function(t){return-1!==t.toLowerCase().indexOf(a)},x.find(\".pvtCheckContainer p label span.value\").each(function(){return e(t(this).text())?t(this).parent().parent().show():t(this).parent().parent().hide()})}),o.append(t(\"<br>\")),t(\"<button>\",{type:\"button\"}).appendTo(o).html(I.localeStrings.selectAll).bind(\"click\",function(){return x.find(\"input:visible:not(:checked)\").prop(\"checked\",!0).toggleClass(\"changed\"),!1}),t(\"<button>\",{type:\"button\"}).appendTo(o).html(I.localeStrings.selectNone).bind(\"click\",function(){return x.find(\"input:visible:checked\").prop(\"checked\",!1).toggleClass(\"changed\"),!1})),a=t(\"<div>\").addClass(\"pvtCheckContainer\").appendTo(x),g=w.sort(p(I.sorters,e)),d=0,h=g.length;h>d;d++)y=g[d],N=v[e][y],l=t(\"<label>\"),s=!1,I.inclusions[e]?s=n.call(I.inclusions[e],y)<0:I.exclusions[e]&&(s=n.call(I.exclusions[e],y)>=0),c||(c=s),t(\"<input>\").attr(\"type\",\"checkbox\").addClass(\"pvtFilter\").attr(\"checked\",!s).data(\"filter\",[e,y]).appendTo(l).bind(\"change\",function(){return t(this).toggleClass(\"changed\")}),l.append(t(\"<span>\").addClass(\"value\").text(y)),l.append(t(\"<span>\").addClass(\"count\").text(\"(\"+N+\")\")),a.append(t(\"<p>\").append(l));return i=function(){return x.find(\"[type='checkbox']\").length>x.find(\"[type='checkbox']:checked\").length?r.addClass(\"pvtFilteredAttribute\"):r.removeClass(\"pvtFilteredAttribute\"),x.find(\".pvtSearch\").val(\"\"),x.find(\".pvtCheckContainer p\").show(),x.hide()},u=t(\"<p>\").appendTo(x),w.length<=I.menuLimit&&t(\"<button>\",{type:\"button\"}).text(I.localeStrings.apply).appendTo(u).bind(\"click\",function(){return x.find(\".changed\").removeClass(\"changed\").length&&U(),i()}),t(\"<button>\",{type:\"button\"}).text(I.localeStrings.cancel).appendTo(u).bind(\"click\",function(){return x.find(\".changed:checked\").removeClass(\"changed\").prop(\"checked\",!1),x.find(\".changed:not(:checked)\").removeClass(\"changed\").prop(\"checked\",!0),i()}),b=t(\"<span>\").addClass(\"pvtTriangle\").html(\" &#x25BE;\").bind(\"click\",function(n){var e,r,a;return r=t(n.currentTarget).position(),e=r.left,a=r.top,x.css({left:e+10,top:a+10}).show()}),r=t(\"<li>\").addClass(\"axis_\"+A).append(t(\"<span>\").addClass(\"pvtAttr\").text(e).data(\"attrName\",e).append(b)),c&&r.addClass(\"pvtFilteredAttribute\"),_.append(r).append(x)};for(A in B)a.call(B,A)&&(c=B[A],C(c));W=t(\"<tr>\").appendTo(J),u=t(\"<select>\").addClass(\"pvtAggregator\").bind(\"change\",function(){return U()}),O=I.aggregators;for(Q in O)a.call(O,Q)&&u.append(t(\"<option>\").val(Q).html(Q));for(t(\"<td>\").addClass(\"pvtVals\").appendTo(W).append(u).append(t(\"<br>\")),t(\"<td>\").addClass(\"pvtAxisContainer pvtHorizList pvtCols\").appendTo(W),P=t(\"<tr>\").appendTo(J),P.append(t(\"<td>\").addClass(\"pvtAxisContainer pvtRows\").attr(\"valign\",\"top\")),R=t(\"<td>\").attr(\"valign\",\"top\").addClass(\"pvtRendererArea\").appendTo(P),I.unusedAttrsVertical===!0||G?(J.find(\"tr:nth-child(1)\").prepend(H),J.find(\"tr:nth-child(2)\").prepend(_)):J.prepend(t(\"<tr>\").append(H).append(_)),this.html(J),K=I.cols,E=0,w=K.length;w>E;E++)Q=K[E],this.find(\".pvtCols\").append(this.find(\".axis_\"+t.inArray(Q,B)));for(q=I.rows,D=0,S=q.length;S>D;D++)Q=q[D],this.find(\".pvtRows\").append(this.find(\".axis_\"+t.inArray(Q,B)));null!=I.aggregatorName&&this.find(\".pvtAggregator\").val(I.aggregatorName),null!=I.rendererName&&this.find(\".pvtRenderer\").val(I.rendererName),y=!0,V=function(e){return function(){var r,a,i,o,l,s,p,h,d,v,g,m,b,C;if(m={derivedAttributes:I.derivedAttributes,localeStrings:I.localeStrings,rendererOptions:I.rendererOptions,sorters:I.sorters,cols:[],rows:[],dataClass:I.dataClass},l=null!=(d=I.aggregators[u.val()]([])().numInputs)?d:0,C=[],e.find(\".pvtRows li span.pvtAttr\").each(function(){return m.rows.push(t(this).data(\"attrName\"))}),e.find(\".pvtCols li span.pvtAttr\").each(function(){return m.cols.push(t(this).data(\"attrName\"))}),e.find(\".pvtVals select.pvtAttrDropdown\").each(function(){return 0===l?t(this).remove():(l--,\"\"!==t(this).val()?C.push(t(this).val()):void 0)}),0!==l)for(p=e.find(\".pvtVals\"),Q=h=0,v=l;v>=0?v>h:h>v;Q=v>=0?++h:--h){for(o=t(\"<select>\").addClass(\"pvtAttrDropdown\").append(t(\"<option>\")).bind(\"change\",function(){return U()}),g=0,i=B.length;i>g;g++)c=B[g],o.append(t(\"<option>\").val(c).text(c));p.append(o)}return y&&(C=I.vals,A=0,e.find(\".pvtVals select.pvtAttrDropdown\").each(function(){return t(this).val(C[A]),A++}),y=!1),m.aggregatorName=u.val(),m.vals=C,m.aggregator=I.aggregators[u.val()](C),m.renderer=I.renderers[j.val()],r={},e.find(\"input.pvtFilter\").not(\":checked\").each(function(){var n;return n=t(this).data(\"filter\"),null!=r[n[0]]?r[n[0]].push(n[1]):r[n[0]]=[n[1]]}),a={},e.find(\"input.pvtFilter:checked\").each(function(){var n;return n=t(this).data(\"filter\"),null!=r[n[0]]?null!=a[n[0]]?a[n[0]].push(n[1]):a[n[0]]=[n[1]]:void 0}),m.filter=function(t){var e,a,i,o;if(!I.filter(t))return!1;for(a in r)if(e=r[a],i=\"\"+(null!=(o=t[a])?o:\"null\"),n.call(e,i)>=0)return!1;return!0},R.pivot(F,m),s=t.extend({},I,{cols:m.cols,rows:m.rows,vals:C,exclusions:r,inclusions:a,inclusionsInfo:a,aggregatorName:u.val(),rendererName:j.val()}),e.data(\"pivotUIOptions\",s),I.autoSortUnusedAttrs&&(b=e.find(\"td.pvtUnused.pvtAxisContainer\"),t(b).children(\"li\").sort(function(n,e){return f(t(n).text(),t(e).text())}).appendTo(b)),R.css(\"opacity\",1),null!=I.onRefresh?I.onRefresh(s):void 0}}(this),U=function(t){return function(){return R.css(\"opacity\",.5),setTimeout(V,10)}}(this),U(),this.find(\".pvtAxisContainer\").sortable({update:function(t,n){return null==n.sender?U():void 0},connectWith:this.find(\".pvtAxisContainer\"),items:\"li\",placeholder:\"pvtPlaceholder\"})}catch(Z){m=Z,\"undefined\"!=typeof console&&null!==console&&console.error(m.stack),this.html(I.localeStrings.uiRenderError)}return this},t.fn.heatmap=function(n,e){var r,a,i,o,l,s,u,c,p,h,d;switch(null==n&&(n=\"heatmap\"),c=this.data(\"numrows\"),u=this.data(\"numcols\"),r=null!=e&&null!=(p=e.heatmap)?p.colorScaleGenerator:void 0,null==r&&(r=function(t){var n,e;return e=Math.min.apply(Math,t),n=Math.max.apply(Math,t),function(t){var r;return r=255-Math.round(255*(t-e)/(n-e)),\"rgb(255,\"+r+\",\"+r+\")\"}}),a=function(n){return function(e){var a,i,o;return i=function(r){return n.find(e).each(function(){var n;return n=t(this).data(\"value\"),null!=n&&isFinite(n)?r(n,t(this)):void 0})},o=[],i(function(t){return o.push(t)}),a=r(o),i(function(t,n){return n.css(\"background-color\",a(t))})}}(this),n){case\"heatmap\":a(\".pvtVal\");break;case\"rowheatmap\":for(i=l=0,h=c;h>=0?h>l:l>h;i=h>=0?++l:--l)a(\".pvtVal.row\"+i);break;case\"colheatmap\":for(o=s=0,d=u;d>=0?d>s:s>d;o=d>=0?++s:--s)a(\".pvtVal.col\"+o)}return a(\".pvtTotal.rowTotal\"),a(\".pvtTotal.colTotal\"),this},t.fn.barchart=function(){var n,e,r,a,i,o;for(i=this.data(\"numrows\"),a=this.data(\"numcols\"),n=function(n){return function(e){var r,a,i,o;return r=function(r){return n.find(e).each(function(){var n;return n=t(this).data(\"value\"),null!=n&&isFinite(n)?r(n,t(this)):void 0})},o=[],r(function(t){return o.push(t)}),a=Math.max.apply(Math,o),i=function(t){return 100*t/(1.4*a)},r(function(n,e){var r,a;return r=e.text(),a=t(\"<div>\").css({position:\"relative\",height:\"55px\"}),a.append(t(\"<div>\").css({position:\"absolute\",bottom:0,left:0,right:0,height:i(n)+\"%\",\"background-color\":\"gray\"})),a.append(t(\"<div>\").text(r).css({position:\"relative\",\"padding-left\":\"5px\",\"padding-right\":\"5px\"})),e.css({padding:0,\"padding-top\":\"5px\",\"text-align\":\"center\"}).html(a)})}}(this),e=r=0,o=i;o>=0?o>r:r>o;e=o>=0?++r:--r)n(\".pvtVal.row\"+e);return n(\".pvtTotal.colTotal\"),this}})}).call(this);\n//# sourceMappingURL=pivot.min.js.map"],"sourceRoot":"/source/"}