diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.js.js
index 581e3ecd4c73ad6b669b31bf6fa873548988b42c..f779625a4125c0bd14d02f0e59bd593d0fa4e34a 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.js.js
@@ -3,40 +3,48 @@
 
   callWithJQuery = function(pivotModule) {
     if (typeof exports === "object" && typeof module === "object") {
-      return pivotModule(require("jquery"));
+      return pivotModule(require("jquery"), require("c3"));
     } else if (typeof define === "function" && define.amd) {
-      return define(["jquery"], pivotModule);
+      return define(["jquery", "c3"], pivotModule);
     } else {
-      return pivotModule(jQuery);
+      return pivotModule(jQuery, c3);
     }
   };
 
-  callWithJQuery(function($) {
+  callWithJQuery(function($, c3) {
     var makeC3Chart;
     makeC3Chart = function(chartOpts) {
       if (chartOpts == null) {
         chartOpts = {};
       }
       return function(pivotData, opts) {
-        var agg, colKey, colKeys, columns, dataArray, datum, defaults, fullAggName, h, hAxisTitle, headers, i, j, len, len1, params, ref, renderArea, result, row, rowHeader, rowKey, rowKeys, tree2, vAxisTitle, val, x, y;
+        var agg, attrs, base, base1, base2, base3, base4, base5, base6, base7, c, categories, colKey, colKeys, columns, dataColumns, defaults, formatter, fullAggName, groupByTitle, h, hAxisTitle, headers, i, j, k, l, len, len1, len2, len3, len4, m, numCharsInHAxis, numSeries, params, ref, ref1, ref2, ref3, renderArea, result, rotationAngle, row, rowHeader, rowKey, rowKeys, s, scatterData, series, title, titleText, vAxisTitle, val, vals, x, xs, y;
         defaults = {
           localeStrings: {
             vs: "vs",
             by: "by"
           },
-          c3: {
-            width: function() {
-              return window.innerWidth / 1.4;
-            },
-            height: function() {
-              return window.innerHeight / 1.4;
-            }
-          }
+          c3: {}
         };
-        opts = $.extend(defaults, opts);
+        opts = $.extend(true, {}, defaults, opts);
+        if ((base = opts.c3).size == null) {
+          base.size = {};
+        }
+        if ((base1 = opts.c3.size).width == null) {
+          base1.width = window.innerWidth / 1.4;
+        }
+        if ((base2 = opts.c3.size).height == null) {
+          base2.height = window.innerHeight / 1.4 - 50;
+        }
         if (chartOpts.type == null) {
           chartOpts.type = "line";
         }
+        if (chartOpts.horizontal == null) {
+          chartOpts.horizontal = false;
+        }
+        if (chartOpts.stacked == null) {
+          chartOpts.stacked = false;
+        }
         rowKeys = pivotData.getRowKeys();
         if (rowKeys.length === 0) {
           rowKeys.push([]);
@@ -54,87 +62,152 @@
           }
           return results;
         })();
+        rotationAngle = 0;
         fullAggName = pivotData.aggregatorName;
         if (pivotData.valAttrs.length) {
           fullAggName += "(" + (pivotData.valAttrs.join(", ")) + ")";
         }
         if (chartOpts.type === "scatter") {
-          dataArray = [];
-          hAxisTitle = pivotData.colAttrs.join("-");
-          vAxisTitle = pivotData.rowAttrs.join("-");
-          ref = pivotData.tree;
-          for (y in ref) {
-            tree2 = ref[y];
-            for (x in tree2) {
-              agg = tree2[x];
-              datum = {};
-              datum[hAxisTitle] = parseFloat(x);
-              datum[vAxisTitle] = parseFloat(y);
-              datum["tooltip"] = agg.format(agg.value());
-              dataArray.push(datum);
-            }
+          scatterData = {
+            x: {},
+            y: {},
+            t: {}
+          };
+          attrs = pivotData.rowAttrs.concat(pivotData.colAttrs);
+          vAxisTitle = (ref = attrs[0]) != null ? ref : "";
+          hAxisTitle = (ref1 = attrs[1]) != null ? ref1 : "";
+          groupByTitle = attrs.slice(2).join("-");
+          titleText = vAxisTitle;
+          if (hAxisTitle !== "") {
+            titleText += " " + opts.localeStrings.vs + " " + hAxisTitle;
+          }
+          if (groupByTitle !== "") {
+            titleText += " " + opts.localeStrings.by + " " + groupByTitle;
           }
-        } else {
-          columns = [];
           for (i = 0, len = rowKeys.length; i < len; i++) {
             rowKey = rowKeys[i];
-            rowHeader = rowKey.join("-");
-            row = [rowHeader === "" ? pivotData.aggregatorName : rowHeader];
             for (j = 0, len1 = colKeys.length; j < len1; j++) {
               colKey = colKeys[j];
               agg = pivotData.getAggregator(rowKey, colKey);
               if (agg.value() != null) {
-                val = agg.value();
-                if ($.isNumeric(val)) {
-                  if (val < 1) {
-                    row.push(parseFloat(val.toPrecision(3)));
-                  } else {
-                    row.push(parseFloat(val.toFixed(3)));
-                  }
-                } else {
-                  row.push(val);
+                vals = rowKey.concat(colKey);
+                series = vals.slice(2).join("-");
+                if (series === "") {
+                  series = "series";
                 }
+                if ((base3 = scatterData.x)[series] == null) {
+                  base3[series] = [];
+                }
+                if ((base4 = scatterData.y)[series] == null) {
+                  base4[series] = [];
+                }
+                y = (ref2 = vals[0]) != null ? ref2 : 0;
+                x = (ref3 = vals[1]) != null ? ref3 : 0;
+                scatterData.y[series].push(y);
+                scatterData.x[series].push(x);
+                if ((base5 = scatterData.t)[series] == null) {
+                  base5[series] = {};
+                }
+                if ((base6 = scatterData.t[series])[x] == null) {
+                  base6[x] = {};
+                }
+                scatterData.t[series][x][y] = agg.value();
+              }
+            }
+          }
+        } else {
+          numCharsInHAxis = 0;
+          for (k = 0, len2 = headers.length; k < len2; k++) {
+            x = headers[k];
+            numCharsInHAxis += x.length;
+          }
+          if (numCharsInHAxis > 50) {
+            rotationAngle = 45;
+          }
+          columns = [];
+          for (l = 0, len3 = rowKeys.length; l < len3; l++) {
+            rowKey = rowKeys[l];
+            rowHeader = rowKey.join("-");
+            row = [rowHeader === "" ? fullAggName : rowHeader];
+            for (m = 0, len4 = colKeys.length; m < len4; m++) {
+              colKey = colKeys[m];
+              val = parseFloat(pivotData.getAggregator(rowKey, colKey).value());
+              if (isFinite(val)) {
+                row.push(val);
               } else {
                 row.push(null);
               }
             }
             columns.push(row);
           }
-          vAxisTitle = pivotData.aggregatorName + (pivotData.valAttrs.length ? "(" + (pivotData.valAttrs.join(", ")) + ")" : "");
-          hAxisTitle = pivotData.colAttrs.join("-");
+          vAxisTitle = fullAggName;
+          if (chartOpts.horizontal) {
+            hAxisTitle = pivotData.rowAttrs.join("-");
+            groupByTitle = pivotData.colAttrs.join("-");
+          } else {
+            hAxisTitle = pivotData.colAttrs.join("-");
+            groupByTitle = pivotData.rowAttrs.join("-");
+          }
+          titleText = fullAggName;
+          if (hAxisTitle !== "") {
+            titleText += " " + opts.localeStrings.vs + " " + hAxisTitle;
+          }
+          if (groupByTitle !== "") {
+            titleText += " " + opts.localeStrings.by + " " + groupByTitle;
+          }
         }
+        title = $("<p>", {
+          style: "text-align: center; font-weight: bold"
+        });
+        title.text(titleText);
+        formatter = pivotData.getAggregator([], []).format;
         params = {
-          size: {
-            height: opts.c3.height(),
-            width: opts.c3.width()
-          },
           axis: {
+            rotated: chartOpts.horizontal,
             y: {
-              label: vAxisTitle
+              label: vAxisTitle,
+              tick: {}
             },
             x: {
-              label: hAxisTitle
+              label: hAxisTitle,
+              tick: {
+                rotate: rotationAngle,
+                multiline: false
+              }
             }
           },
           data: {
-            type: chartOpts.type
+            type: chartOpts.type,
+            order: null
           },
           tooltip: {
             grouped: false
+          },
+          color: {
+            pattern: ["#3366cc", "#dc3912", "#ff9900", "#109618", "#990099", "#0099c6", "#dd4477", "#66aa00", "#b82e2e", "#316395", "#994499", "#22aa99", "#aaaa11", "#6633cc", "#e67300", "#8b0707", "#651067", "#329262", "#5574a6", "#3b3eac"]
           }
         };
+        params = $.extend(true, {}, params, opts.c3);
         if (chartOpts.type === "scatter") {
-          params.data.x = hAxisTitle;
+          xs = {};
+          numSeries = 0;
+          dataColumns = [];
+          for (s in scatterData.x) {
+            numSeries += 1;
+            xs[s] = s + "_x";
+            dataColumns.push([s + "_x"].concat(scatterData.x[s]));
+            dataColumns.push([s].concat(scatterData.y[s]));
+          }
+          params.data.xs = xs;
+          params.data.columns = dataColumns;
           params.axis.x.tick = {
             fit: false
           };
-          params.data.json = dataArray;
-          params.data.keys = {
-            value: [hAxisTitle, vAxisTitle]
-          };
-          params.legend = {
-            show: false
-          };
+          if (numSeries === 1) {
+            params.legend = {
+              show: false
+            };
+          }
           params.tooltip.format = {
             title: function() {
               return fullAggName;
@@ -142,27 +215,74 @@
             name: function() {
               return "";
             },
-            value: function(a, b, c, d) {
-              return dataArray[d].tooltip;
+            value: function(a, b, c, d, e) {
+              var ref4;
+              ref4 = e[0], series = ref4.name, y = ref4.value, x = ref4.x;
+              return formatter(scatterData.t[series][x][y]);
             }
           };
         } else {
           params.axis.x.type = 'category';
-          params.axis.x.categories = headers;
-          params.data.columns = columns;
-        }
-        if (chartOpts.stacked != null) {
-          params.data.groups = [
-            (function() {
-              var k, len2, results;
+          if ((base7 = params.axis.y.tick).format == null) {
+            base7.format = function(v) {
+              return formatter(v);
+            };
+          }
+          params.tooltip.format = {
+            value: function(v) {
+              return formatter(v);
+            }
+          };
+          if (chartOpts.horizontal) {
+            categories = (function() {
+              var len5, n, results;
               results = [];
-              for (k = 0, len2 = rowKeys.length; k < len2; k++) {
-                x = rowKeys[k];
-                results.push(x.join("-"));
+              for (n = 0, len5 = columns.length; n < len5; n++) {
+                c = columns[n];
+                results.push(c.shift());
               }
               return results;
-            })()
-          ];
+            })();
+            if (categories.length === 1 && categories[0] === fullAggName) {
+              categories = [""];
+            }
+            params.axis.x.categories = categories;
+            if (headers.length === 1 && headers[0] === "") {
+              headers = [fullAggName];
+            }
+            columns.unshift(headers);
+            params.data.rows = columns;
+          } else {
+            params.axis.x.categories = headers;
+            params.data.columns = columns;
+          }
+        }
+        if (chartOpts.stacked) {
+          if (chartOpts.horizontal) {
+            params.data.groups = [
+              (function() {
+                var len5, n, results;
+                results = [];
+                for (n = 0, len5 = colKeys.length; n < len5; n++) {
+                  x = colKeys[n];
+                  results.push(x.join("-"));
+                }
+                return results;
+              })()
+            ];
+          } else {
+            params.data.groups = [
+              (function() {
+                var len5, n, results;
+                results = [];
+                for (n = 0, len5 = rowKeys.length; n < len5; n++) {
+                  x = rowKeys[n];
+                  results.push(x.join("-"));
+                }
+                return results;
+              })()
+            ];
+          }
         }
         renderArea = $("<div>", {
           style: "display:none;"
@@ -172,11 +292,19 @@
         c3.generate(params);
         result.detach();
         renderArea.remove();
-        return result;
+        return $("<div>").append(title, result);
       };
     };
     return $.pivotUtilities.c3_renderers = {
-      "Line Chart": makeC3Chart(),
+      "Horizontal Bar Chart": makeC3Chart({
+        type: "bar",
+        horizontal: true
+      }),
+      "Horizontal Stacked Bar Chart": makeC3Chart({
+        type: "bar",
+        stacked: true,
+        horizontal: true
+      }),
       "Bar Chart": makeC3Chart({
         type: "bar"
       }),
@@ -184,6 +312,7 @@
         type: "bar",
         stacked: true
       }),
+      "Line Chart": makeC3Chart(),
       "Area Chart": makeC3Chart({
         type: "area",
         stacked: true
@@ -196,4 +325,4 @@
 
 }).call(this);
 
-//# sourceMappingURL=c3_renderers.js.map
\ No newline at end of file
+//# sourceMappingURL=c3_renderers.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.js.map.txt
index 8d3f1124b2e4bd96094aad588c853019b9c911f5..18ed1299a0460321b12f6045d8690c474c825e99 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["c3_renderers.coffee"],"names":[],"mappings":"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","file":"c3_renderers.js","sourceRoot":"/source/","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    makeC3Chart = (chartOpts = {}) -> (pivotData, opts) ->\n        defaults =\n            localeStrings:\n                vs: \"vs\"\n                by: \"by\"\n            c3:\n                width: -> window.innerWidth / 1.4\n                height: -> window.innerHeight / 1.4\n\n        opts = $.extend defaults, opts\n        chartOpts.type ?= \"line\"\n\n        rowKeys = pivotData.getRowKeys()\n        rowKeys.push [] if rowKeys.length == 0\n        colKeys = pivotData.getColKeys()\n        colKeys.push [] if colKeys.length == 0\n\n        headers = (h.join(\"-\") for h in colKeys)\n\n        fullAggName = pivotData.aggregatorName \n        if pivotData.valAttrs.length\n            fullAggName += \"(#{pivotData.valAttrs.join(\", \")})\"\n\n        if chartOpts.type == \"scatter\"\n            dataArray = []\n            hAxisTitle = pivotData.colAttrs.join(\"-\")\n            vAxisTitle = pivotData.rowAttrs.join(\"-\")\n            for y, tree2 of pivotData.tree\n                for x, agg of tree2\n                    datum = {}\n                    datum[hAxisTitle] = parseFloat(x)\n                    datum[vAxisTitle] = parseFloat(y)\n                    datum[\"tooltip\"] = agg.format(agg.value())\n                    dataArray.push datum\n        else\n            columns = []\n            for rowKey in rowKeys\n                rowHeader = rowKey.join(\"-\")\n                row = [if rowHeader == \"\" then pivotData.aggregatorName else rowHeader]\n                for colKey in colKeys\n                    agg = pivotData.getAggregator(rowKey, colKey)\n                    if agg.value()?\n                        val = agg.value()\n                        if $.isNumeric val\n                            if val < 1\n                                row.push parseFloat(val.toPrecision(3))\n                            else\n                                row.push parseFloat(val.toFixed(3))\n                        else\n                            row.push val\n\n                    else row.push null\n                columns.push row\n\n\n            vAxisTitle = pivotData.aggregatorName+ \n                if pivotData.valAttrs.length then \"(#{pivotData.valAttrs.join(\", \")})\" else \"\"\n            hAxisTitle = pivotData.colAttrs.join(\"-\")\n\n        params = \n            size:\n                height: opts.c3.height()\n                width: opts.c3.width()\n            axis: \n                y: label: vAxisTitle\n                x: label: hAxisTitle\n            data: \n                type: chartOpts.type\n            tooltip:\n                grouped: false\n\n        if chartOpts.type == \"scatter\"\n            params.data.x = hAxisTitle\n            params.axis.x.tick = fit: false\n            params.data.json = dataArray\n            params.data.keys = value: [hAxisTitle,vAxisTitle]\n            params.legend = show: false \n            params.tooltip.format =  \n                title: -> fullAggName\n                name: -> \"\"\n                value: (a,b,c,d) -> dataArray[d].tooltip\n        else\n            params.axis.x.type= 'category'\n            params.axis.x.categories = headers\n            params.data.columns = columns\n\n\n        if chartOpts.stacked?\n            params.data.groups = [x.join(\"-\") for x in rowKeys]\n        renderArea = $(\"<div>\", style: \"display:none;\").appendTo $(\"body\")\n        result = $(\"<div>\").appendTo renderArea\n        params.bindto = result[0]\n        c3.generate params\n        result.detach()\n        renderArea.remove()\n        return result\n\n    $.pivotUtilities.c3_renderers = \n        \"Line Chart\": makeC3Chart()\n        \"Bar Chart\": makeC3Chart(type: \"bar\")\n        \"Stacked Bar Chart\": makeC3Chart(type: \"bar\", stacked: true)\n        \"Area Chart\": makeC3Chart(type: \"area\", stacked: true)\n        \"Scatter Chart\": makeC3Chart(type: \"scatter\")\n"]}
\ No newline at end of file
+{"version":3,"file":"c3_renderers.js","sources":["c3_renderers.coffee"],"names":[],"mappings":"AAAA;AAAA,MAAA;;EAAA,cAAA,GAAiB,SAAC,WAAD;IACb,IAAG,OAAO,OAAP,KAAkB,QAAlB,IAA+B,OAAO,MAAP,KAAiB,QAAnD;aACI,WAAA,CAAY,OAAA,CAAQ,QAAR,CAAZ,EAA+B,OAAA,CAAQ,IAAR,CAA/B,EADJ;KAAA,MAEK,IAAG,OAAO,MAAP,KAAiB,UAAjB,IAAgC,MAAM,CAAC,GAA1C;aACD,MAAA,CAAO,CAAC,QAAD,EAAW,IAAX,CAAP,EAAyB,WAAzB,EADC;KAAA,MAAA;aAID,WAAA,CAAY,MAAZ,EAAoB,EAApB,EAJC;;EAHQ;;EASjB,cAAA,CAAe,SAAC,CAAD,EAAI,EAAJ;AAEX,QAAA;IAAA,WAAA,GAAc,SAAC,SAAD;;QAAC,YAAY;;aAAO,SAAC,SAAD,EAAY,IAAZ;AAC9B,YAAA;QAAA,QAAA,GACI;UAAA,aAAA,EAAe;YAAC,EAAA,EAAI,IAAL;YAAW,EAAA,EAAI,IAAf;WAAf;UACA,EAAA,EAAI,EADJ;;QAGJ,IAAA,GAAO,CAAC,CAAC,MAAF,CAAS,IAAT,EAAe,EAAf,EAAmB,QAAnB,EAA6B,IAA7B;;cACA,CAAC,OAAQ;;;eACJ,CAAC,QAAS,MAAM,CAAC,UAAP,GAAoB;;;eAC9B,CAAC,SAAU,MAAM,CAAC,WAAP,GAAqB,GAArB,GAA2B;;;UAClD,SAAS,CAAC,OAAQ;;;UAClB,SAAS,CAAC,aAAc;;;UACxB,SAAS,CAAC,UAAW;;QAErB,OAAA,GAAU,SAAS,CAAC,UAAV,CAAA;QACV,IAAmB,OAAO,CAAC,MAAR,KAAkB,CAArC;UAAA,OAAO,CAAC,IAAR,CAAa,EAAb,EAAA;;QACA,OAAA,GAAU,SAAS,CAAC,UAAV,CAAA;QACV,IAAmB,OAAO,CAAC,MAAR,KAAkB,CAArC;UAAA,OAAO,CAAC,IAAR,CAAa,EAAb,EAAA;;QAEA,OAAA;;AAAW;eAAA,yCAAA;;yBAAA,CAAC,CAAC,IAAF,CAAO,GAAP;AAAA;;;QACX,aAAA,GAAgB;QAEhB,WAAA,GAAc,SAAS,CAAC;QACxB,IAAG,SAAS,CAAC,QAAQ,CAAC,MAAtB;UACI,WAAA,IAAe,GAAA,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAnB,CAAwB,IAAxB,CAAD,CAAH,GAAkC,IADrD;;QAGA,IAAG,SAAS,CAAC,IAAV,KAAkB,SAArB;UACI,WAAA,GAAc;YAAA,CAAA,EAAE,EAAF;YAAM,CAAA,EAAE,EAAR;YAAY,CAAA,EAAE,EAAd;;UACd,KAAA,GAAQ,SAAS,CAAC,QAAQ,CAAC,MAAnB,CAA0B,SAAS,CAAC,QAApC;UACR,UAAA,oCAAwB;UACxB,UAAA,sCAAwB;UACxB,YAAA,GAAe,KAAK,CAAC,KAAN,CAAY,CAAZ,CAAc,CAAC,IAAf,CAAoB,GAApB;UACf,SAAA,GAAY;UACZ,IAA0D,UAAA,KAAc,EAAxE;YAAA,SAAA,IAAa,GAAA,GAAI,IAAI,CAAC,aAAa,CAAC,EAAvB,GAA0B,GAA1B,GAA6B,WAA1C;;UACA,IAA4D,YAAA,KAAgB,EAA5E;YAAA,SAAA,IAAa,GAAA,GAAI,IAAI,CAAC,aAAa,CAAC,EAAvB,GAA0B,GAA1B,GAA6B,aAA1C;;AACA,eAAA,yCAAA;;AACI,iBAAA,2CAAA;;cACI,GAAA,GAAM,SAAS,CAAC,aAAV,CAAwB,MAAxB,EAAgC,MAAhC;cACN,IAAG,mBAAH;gBACI,IAAA,GAAO,MAAM,CAAC,MAAP,CAAc,MAAd;gBACP,MAAA,GAAS,IAAI,CAAC,KAAL,CAAW,CAAX,CAAa,CAAC,IAAd,CAAmB,GAAnB;gBACT,IAAG,MAAA,KAAU,EAAb;kBAAqB,MAAA,GAAS,SAA9B;;;uBACc,CAAA,MAAA,IAAW;;;uBACX,CAAA,MAAA,IAAW;;gBACzB,CAAA,qCAAc;gBACd,CAAA,qCAAc;gBACd,WAAW,CAAC,CAAE,CAAA,MAAA,CAAO,CAAC,IAAtB,CAA2B,CAA3B;gBACA,WAAW,CAAC,CAAE,CAAA,MAAA,CAAO,CAAC,IAAtB,CAA2B,CAA3B;;uBACc,CAAA,MAAA,IAAW;;;uBACH,CAAA,CAAA,IAAM;;gBAC5B,WAAW,CAAC,CAAE,CAAA,MAAA,CAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAzB,GAA8B,GAAG,CAAC,KAAJ,CAAA,EAZlC;;AAFJ;AADJ,WATJ;SAAA,MAAA;UA0BI,eAAA,GAAkB;AAClB,eAAA,2CAAA;;YACI,eAAA,IAAmB,CAAC,CAAC;AADzB;UAEA,IAAG,eAAA,GAAkB,EAArB;YACI,aAAA,GAAgB,GADpB;;UAGA,OAAA,GAAU;AACV,eAAA,2CAAA;;YACI,SAAA,GAAY,MAAM,CAAC,IAAP,CAAY,GAAZ;YACZ,GAAA,GAAM,CAAI,SAAA,KAAa,EAAhB,GAAwB,WAAxB,GAAyC,SAA1C;AACN,iBAAA,2CAAA;;cACI,GAAA,GAAM,UAAA,CAAY,SAAS,CAAC,aAAV,CAAwB,MAAxB,EAAgC,MAAhC,CAAuC,CAAC,KAAxC,CAAA,CAAZ;cACN,IAAG,QAAA,CAAS,GAAT,CAAH;gBACI,GAAG,CAAC,IAAJ,CAAS,GAAT,EADJ;eAAA,MAAA;gBAGI,GAAG,CAAC,IAAJ,CAAS,IAAT,EAHJ;;AAFJ;YAMA,OAAO,CAAC,IAAR,CAAa,GAAb;AATJ;UAWA,UAAA,GAAa;UAEb,IAAG,SAAS,CAAC,UAAb;YACI,UAAA,GAAa,SAAS,CAAC,QAAQ,CAAC,IAAnB,CAAwB,GAAxB;YACb,YAAA,GAAe,SAAS,CAAC,QAAQ,CAAC,IAAnB,CAAwB,GAAxB,EAFnB;WAAA,MAAA;YAII,UAAA,GAAa,SAAS,CAAC,QAAQ,CAAC,IAAnB,CAAwB,GAAxB;YACb,YAAA,GAAe,SAAS,CAAC,QAAQ,CAAC,IAAnB,CAAwB,GAAxB,EALnB;;UAMA,SAAA,GAAY;UACZ,IAA0D,UAAA,KAAc,EAAxE;YAAA,SAAA,IAAa,GAAA,GAAI,IAAI,CAAC,aAAa,CAAC,EAAvB,GAA0B,GAA1B,GAA6B,WAA1C;;UACA,IAA4D,YAAA,KAAgB,EAA5E;YAAA,SAAA,IAAa,GAAA,GAAI,IAAI,CAAC,aAAa,CAAC,EAAvB,GAA0B,GAA1B,GAA6B,aAA1C;WAtDJ;;QAwDA,KAAA,GAAQ,CAAA,CAAE,KAAF,EAAS;UAAC,KAAA,EAAO,uCAAR;SAAT;QACR,KAAK,CAAC,IAAN,CAAW,SAAX;QAEA,SAAA,GAAY,SAAS,CAAC,aAAV,CAAwB,EAAxB,EAA4B,EAA5B,CAA+B,CAAC;QAE5C,MAAA,GACI;UAAA,IAAA,EACI;YAAA,OAAA,EAAS,SAAS,CAAC,UAAnB;YACA,CAAA,EACI;cAAA,KAAA,EAAO,UAAP;cACA,IAAA,EAAM,EADN;aAFJ;YAIA,CAAA,EACI;cAAA,KAAA,EAAO,UAAP;cACA,IAAA,EACI;gBAAA,MAAA,EAAQ,aAAR;gBACA,SAAA,EAAW,KADX;eAFJ;aALJ;WADJ;UAUA,IAAA,EACI;YAAA,IAAA,EAAM,SAAS,CAAC,IAAhB;YACA,KAAA,EAAO,IADP;WAXJ;UAaA,OAAA,EACI;YAAA,OAAA,EAAS,KAAT;WAdJ;UAeA,KAAA,EACI;YAAA,OAAA,EAAS,CAAE,SAAF,EAAa,SAAb,EAAwB,SAAxB,EAAmC,SAAnC,EACE,SADF,EACa,SADb,EACwB,SADxB,EACmC,SADnC,EAEE,SAFF,EAEa,SAFb,EAEwB,SAFxB,EAEmC,SAFnC,EAGE,SAHF,EAGa,SAHb,EAGwB,SAHxB,EAGmC,SAHnC,EAIE,SAJF,EAIa,SAJb,EAIwB,SAJxB,EAImC,SAJnC,CAAT;WAhBJ;;QAuBJ,MAAA,GAAS,CAAC,CAAC,MAAF,CAAS,IAAT,EAAe,EAAf,EAAmB,MAAnB,EAA2B,IAAI,CAAC,EAAhC;QACT,IAAG,SAAS,CAAC,IAAV,KAAkB,SAArB;UACI,EAAA,GAAK;UACL,SAAA,GAAY;UACZ,WAAA,GAAc;AACd,eAAA,kBAAA;YACI,SAAA,IAAa;YACb,EAAG,CAAA,CAAA,CAAH,GAAQ,CAAA,GAAE;YACV,WAAW,CAAC,IAAZ,CAAiB,CAAC,CAAA,GAAE,IAAH,CAAQ,CAAC,MAAT,CAAgB,WAAW,CAAC,CAAE,CAAA,CAAA,CAA9B,CAAjB;YACA,WAAW,CAAC,IAAZ,CAAiB,CAAC,CAAD,CAAG,CAAC,MAAJ,CAAW,WAAW,CAAC,CAAE,CAAA,CAAA,CAAzB,CAAjB;AAJJ;UAKA,MAAM,CAAC,IAAI,CAAC,EAAZ,GAAiB;UACjB,MAAM,CAAC,IAAI,CAAC,OAAZ,GAAsB;UACtB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAd,GAAqB;YAAA,GAAA,EAAK,KAAL;;UACrB,IAAG,SAAA,KAAa,CAAhB;YACI,MAAM,CAAC,MAAP,GAAgB;cAAA,IAAA,EAAM,KAAN;cADpB;;UAEA,MAAM,CAAC,OAAO,CAAC,MAAf,GACI;YAAA,KAAA,EAAO,SAAA;qBAAG;YAAH,CAAP;YACA,IAAA,EAAM,SAAA;qBAAG;YAAH,CADN;YAEA,KAAA,EAAO,SAAC,CAAD,EAAG,CAAH,EAAK,CAAL,EAAO,CAAP,EAAS,CAAT;AACH,kBAAA;cAAA,OAA8B,CAAE,CAAA,CAAA,CAAhC,EAAO,cAAN,IAAD,EAAsB,SAAP,KAAf,EAAyB;qBACzB,SAAA,CAAU,WAAW,CAAC,CAAE,CAAA,MAAA,CAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAnC;YAFG,CAFP;YAfR;SAAA,MAAA;UAqBI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAd,GAAoB;;iBACF,CAAC,SAAU,SAAC,CAAD;qBAAO,SAAA,CAAU,CAAV;YAAP;;UAC7B,MAAM,CAAC,OAAO,CAAC,MAAf,GAAwB;YAAA,KAAA,EAAO,SAAC,CAAD;qBAAO,SAAA,CAAU,CAAV;YAAP,CAAP;;UAExB,IAAG,SAAS,CAAC,UAAb;YACI,UAAA;;AAAc;mBAAA,2CAAA;;6BAAA,CAAC,CAAC,KAAF,CAAA;AAAA;;;YACd,IAAG,UAAU,CAAC,MAAX,KAAqB,CAArB,IAA2B,UAAW,CAAA,CAAA,CAAX,KAAiB,WAA/C;cACI,UAAA,GAAa,CAAC,EAAD,EADjB;;YAEA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAd,GAA2B;YAC3B,IAAG,OAAO,CAAC,MAAR,KAAkB,CAAlB,IAAwB,OAAQ,CAAA,CAAA,CAAR,KAAc,EAAzC;cACI,OAAA,GAAU,CAAC,WAAD,EADd;;YAEA,OAAO,CAAC,OAAR,CAAgB,OAAhB;YACA,MAAM,CAAC,IAAI,CAAC,IAAZ,GAAmB,QARvB;WAAA,MAAA;YAUI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAd,GAA2B;YAC3B,MAAM,CAAC,IAAI,CAAC,OAAZ,GAAsB,QAX1B;WAzBJ;;QAuCA,IAAG,SAAS,CAAC,OAAb;UACI,IAAG,SAAS,CAAC,UAAb;YACI,MAAM,CAAC,IAAI,CAAC,MAAZ,GAAqB;;;AAAC;qBAAA,2CAAA;;+BAAA,CAAC,CAAC,IAAF,CAAO,GAAP;AAAA;;kBAAD;cADzB;WAAA,MAAA;YAGI,MAAM,CAAC,IAAI,CAAC,MAAZ,GAAqB;;;AAAC;qBAAA,2CAAA;;+BAAA,CAAC,CAAC,IAAF,CAAO,GAAP;AAAA;;kBAAD;cAHzB;WADJ;;QAMA,UAAA,GAAa,CAAA,CAAE,OAAF,EAAW;UAAA,KAAA,EAAO,eAAP;SAAX,CAAkC,CAAC,QAAnC,CAA4C,CAAA,CAAE,MAAF,CAA5C;QACb,MAAA,GAAS,CAAA,CAAE,OAAF,CAAU,CAAC,QAAX,CAAoB,UAApB;QACT,MAAM,CAAC,MAAP,GAAgB,MAAO,CAAA,CAAA;QACvB,EAAE,CAAC,QAAH,CAAY,MAAZ;QACA,MAAM,CAAC,MAAP,CAAA;QACA,UAAU,CAAC,MAAX,CAAA;AACA,eAAO,CAAA,CAAE,OAAF,CAAU,CAAC,MAAX,CAAkB,KAAlB,EAAyB,MAAzB;MAlKuB;IAApB;WAoKd,CAAC,CAAC,cAAc,CAAC,YAAjB,GACI;MAAA,sBAAA,EAAwB,WAAA,CAAY;QAAA,IAAA,EAAM,KAAN;QAAa,UAAA,EAAY,IAAzB;OAAZ,CAAxB;MACA,8BAAA,EAAgC,WAAA,CAAY;QAAA,IAAA,EAAM,KAAN;QAAa,OAAA,EAAS,IAAtB;QAA4B,UAAA,EAAY,IAAxC;OAAZ,CADhC;MAEA,WAAA,EAAa,WAAA,CAAY;QAAA,IAAA,EAAM,KAAN;OAAZ,CAFb;MAGA,mBAAA,EAAqB,WAAA,CAAY;QAAA,IAAA,EAAM,KAAN;QAAa,OAAA,EAAS,IAAtB;OAAZ,CAHrB;MAIA,YAAA,EAAc,WAAA,CAAA,CAJd;MAKA,YAAA,EAAc,WAAA,CAAY;QAAA,IAAA,EAAM,MAAN;QAAc,OAAA,EAAS,IAAvB;OAAZ,CALd;MAMA,eAAA,EAAiB,WAAA,CAAY;QAAA,IAAA,EAAM,SAAN;OAAZ,CANjB;;EAvKO,CAAf;AATA","sourcesContent":["callWithJQuery = (pivotModule) ->\n    if typeof exports is \"object\" and typeof module is \"object\" # CommonJS\n        pivotModule require(\"jquery\"), require(\"c3\")\n    else if typeof define is \"function\" and define.amd # AMD\n        define [\"jquery\", \"c3\"], pivotModule\n    # Plain browser env\n    else\n        pivotModule jQuery, c3\n\ncallWithJQuery ($, c3) ->\n\n    makeC3Chart = (chartOpts = {}) -> (pivotData, opts) ->\n        defaults =\n            localeStrings: {vs: \"vs\", by: \"by\"}\n            c3: {}\n\n        opts = $.extend(true, {}, defaults, opts)\n        opts.c3.size ?= {}\n        opts.c3.size.width ?= window.innerWidth / 1.4\n        opts.c3.size.height ?= window.innerHeight / 1.4 - 50\n        chartOpts.type ?= \"line\"\n        chartOpts.horizontal ?= false\n        chartOpts.stacked ?= false\n\n        rowKeys = pivotData.getRowKeys()\n        rowKeys.push [] if rowKeys.length == 0\n        colKeys = pivotData.getColKeys()\n        colKeys.push [] if colKeys.length == 0\n\n        headers = (h.join(\"-\") for h in colKeys)\n        rotationAngle = 0\n\n        fullAggName = pivotData.aggregatorName\n        if pivotData.valAttrs.length\n            fullAggName += \"(#{pivotData.valAttrs.join(\", \")})\"\n\n        if chartOpts.type == \"scatter\"\n            scatterData = x:{}, y:{}, t:{}\n            attrs = pivotData.rowAttrs.concat(pivotData.colAttrs)\n            vAxisTitle = attrs[0] ? \"\"\n            hAxisTitle = attrs[1] ? \"\"\n            groupByTitle = attrs.slice(2).join(\"-\")\n            titleText = vAxisTitle\n            titleText += \" #{opts.localeStrings.vs} #{hAxisTitle}\" if hAxisTitle != \"\"\n            titleText += \" #{opts.localeStrings.by} #{groupByTitle}\" if groupByTitle != \"\"\n            for rowKey in rowKeys\n                for colKey in colKeys\n                    agg = pivotData.getAggregator(rowKey, colKey)\n                    if agg.value()?\n                        vals = rowKey.concat(colKey)\n                        series = vals.slice(2).join(\"-\")\n                        if series == \"\" then series = \"series\"\n                        scatterData.x[series] ?= []\n                        scatterData.y[series] ?= []\n                        y = vals[0] ? 0\n                        x = vals[1] ? 0\n                        scatterData.y[series].push y\n                        scatterData.x[series].push x\n                        scatterData.t[series] ?= {}\n                        scatterData.t[series][x] ?= {}\n                        scatterData.t[series][x][y] = agg.value()\n        else\n            numCharsInHAxis = 0\n            for x in headers\n                numCharsInHAxis += x.length\n            if numCharsInHAxis > 50\n                rotationAngle = 45\n\n            columns = []\n            for rowKey in rowKeys\n                rowHeader = rowKey.join(\"-\")\n                row = [if rowHeader == \"\" then fullAggName else rowHeader]\n                for colKey in colKeys\n                    val = parseFloat  pivotData.getAggregator(rowKey, colKey).value()\n                    if isFinite(val)\n                        row.push(val)\n                    else\n                        row.push(null)\n                columns.push row\n\n            vAxisTitle = fullAggName\n\n            if chartOpts.horizontal\n                hAxisTitle = pivotData.rowAttrs.join(\"-\")\n                groupByTitle = pivotData.colAttrs.join(\"-\")\n            else\n                hAxisTitle = pivotData.colAttrs.join(\"-\")\n                groupByTitle = pivotData.rowAttrs.join(\"-\")\n            titleText = fullAggName\n            titleText += \" #{opts.localeStrings.vs} #{hAxisTitle}\" if hAxisTitle != \"\"\n            titleText += \" #{opts.localeStrings.by} #{groupByTitle}\" if groupByTitle != \"\"\n\n        title = $(\"<p>\", {style: \"text-align: center; font-weight: bold\"})\n        title.text(titleText)\n\n        formatter = pivotData.getAggregator([], []).format\n\n        params =\n            axis:\n                rotated: chartOpts.horizontal\n                y:\n                    label: vAxisTitle\n                    tick: {}\n                x:\n                    label: hAxisTitle\n                    tick:\n                        rotate: rotationAngle\n                        multiline: false\n            data:\n                type: chartOpts.type\n                order: null\n            tooltip:\n                grouped: false\n            color:\n                pattern: [ \"#3366cc\", \"#dc3912\", \"#ff9900\", \"#109618\",\n                           \"#990099\", \"#0099c6\", \"#dd4477\", \"#66aa00\",\n                           \"#b82e2e\", \"#316395\", \"#994499\", \"#22aa99\",\n                           \"#aaaa11\", \"#6633cc\", \"#e67300\", \"#8b0707\",\n                           \"#651067\", \"#329262\", \"#5574a6\", \"#3b3eac\" ]\n\n\n        params = $.extend(true, {}, params, opts.c3)\n        if chartOpts.type == \"scatter\"\n            xs = {}\n            numSeries = 0\n            dataColumns = []\n            for s of scatterData.x\n                numSeries += 1\n                xs[s] = s+\"_x\"\n                dataColumns.push [s+\"_x\"].concat(scatterData.x[s])\n                dataColumns.push [s].concat(scatterData.y[s])\n            params.data.xs = xs\n            params.data.columns = dataColumns\n            params.axis.x.tick = fit: false\n            if numSeries == 1\n                params.legend = show: false\n            params.tooltip.format =\n                title: -> fullAggName\n                name: -> \"\"\n                value: (a,b,c,d,e) ->\n                    {name: series, value: y, x} = e[0]\n                    formatter(scatterData.t[series][x][y])\n        else\n            params.axis.x.type= 'category'\n            params.axis.y.tick.format ?= (v) -> formatter(v)\n            params.tooltip.format = value: (v) -> formatter(v)\n\n            if chartOpts.horizontal\n                categories = (c.shift() for c in columns)\n                if categories.length == 1 and categories[0] == fullAggName\n                    categories = [\"\"]\n                params.axis.x.categories = categories\n                if headers.length == 1 and headers[0] == \"\"\n                    headers = [fullAggName]\n                columns.unshift(headers)\n                params.data.rows = columns\n            else\n                params.axis.x.categories = headers\n                params.data.columns = columns\n\n\n        if chartOpts.stacked\n            if chartOpts.horizontal\n                params.data.groups = [x.join(\"-\") for x in colKeys]\n            else\n                params.data.groups = [x.join(\"-\") for x in rowKeys]\n\n        renderArea = $(\"<div>\", style: \"display:none;\").appendTo $(\"body\")\n        result = $(\"<div>\").appendTo renderArea\n        params.bindto = result[0]\n        c3.generate params\n        result.detach()\n        renderArea.remove()\n        return $(\"<div>\").append title, result\n\n    $.pivotUtilities.c3_renderers =\n        \"Horizontal Bar Chart\": makeC3Chart(type: \"bar\", horizontal: true)\n        \"Horizontal Stacked Bar Chart\": makeC3Chart(type: \"bar\", stacked: true, horizontal: true)\n        \"Bar Chart\": makeC3Chart(type: \"bar\")\n        \"Stacked Bar Chart\": makeC3Chart(type: \"bar\", stacked: true)\n        \"Line Chart\": makeC3Chart()\n        \"Area Chart\": makeC3Chart(type: \"area\", stacked: true)\n        \"Scatter Chart\": makeC3Chart(type: \"scatter\")\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.min.js.js
index 5043957bf2f6798716c692754ff9888a5ff8eed8..0107511a83884e1aafffe515ee918976ad951a06 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.min.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.min.js.js
@@ -1,2 +1,2 @@
-(function(){var t;(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 e;return e=function(e){return null==e&&(e={}),function(r,n){var a,o,i,l,u,s,c,p,h,d,g,f,y,v,j,x,m,b,w,A,k,C,F,N,q,S,B,K;if(c={localeStrings:{vs:"vs",by:"by"},c3:{width:function(){return window.innerWidth/1.4},height:function(){return window.innerHeight/1.4}}},n=t.extend(c,n),null==e.type&&(e.type="line"),F=r.getRowKeys(),0===F.length&&F.push([]),i=r.getColKeys(),0===i.length&&i.push([]),g=function(){var t,e,r;for(r=[],t=0,e=i.length;e>t;t++)h=i[t],r.push(h.join("-"));return r}(),p=r.aggregatorName,r.valAttrs.length&&(p+="("+r.valAttrs.join(", ")+")"),"scatter"===e.type){u=[],d=r.colAttrs.join("-"),q=r.rowAttrs.join("-"),m=r.tree;for(K in m){N=m[K];for(B in N)a=N[B],s={},s[d]=parseFloat(B),s[q]=parseFloat(K),s.tooltip=a.format(a.value()),u.push(s)}}else{for(l=[],f=0,v=F.length;v>f;f++){for(C=F[f],k=C.join("-"),A=[""===k?r.aggregatorName:k],y=0,j=i.length;j>y;y++)o=i[y],a=r.getAggregator(C,o),null!=a.value()?(S=a.value(),A.push(t.isNumeric(S)?1>S?parseFloat(S.toPrecision(3)):parseFloat(S.toFixed(3)):S)):A.push(null);l.push(A)}q=r.aggregatorName+(r.valAttrs.length?"("+r.valAttrs.join(", ")+")":""),d=r.colAttrs.join("-")}return x={size:{height:n.c3.height(),width:n.c3.width()},axis:{y:{label:q},x:{label:d}},data:{type:e.type},tooltip:{grouped:!1}},"scatter"===e.type?(x.data.x=d,x.axis.x.tick={fit:!1},x.data.json=u,x.data.keys={value:[d,q]},x.legend={show:!1},x.tooltip.format={title:function(){return p},name:function(){return""},value:function(t,e,r,n){return u[n].tooltip}}):(x.axis.x.type="category",x.axis.x.categories=g,x.data.columns=l),null!=e.stacked&&(x.data.groups=[function(){var t,e,r;for(r=[],t=0,e=F.length;e>t;t++)B=F[t],r.push(B.join("-"));return r}()]),b=t("<div>",{style:"display:none;"}).appendTo(t("body")),w=t("<div>").appendTo(b),x.bindto=w[0],c3.generate(x),w.detach(),b.remove(),w}},t.pivotUtilities.c3_renderers={"Line Chart":e(),"Bar Chart":e({type:"bar"}),"Stacked Bar Chart":e({type:"bar",stacked:!0}),"Area Chart":e({type:"area",stacked:!0}),"Scatter Chart":e({type:"scatter"})}})}).call(this);
-//# sourceMappingURL=c3_renderers.min.js.map
\ No newline at end of file
+(function(){var t;(t=function(t){return"object"==typeof exports&&"object"==typeof module?t(require("jquery"),require("c3")):"function"==typeof define&&define.amd?define(["jquery","c3"],t):t(jQuery,c3)})(function(t,e){var n;return n=function(n){return null==n&&(n={}),function(r,a){var o,l,i,u,s,c,h,g,p,d,f,y,v,x,b,j,m,z,w,k,A,C,S,q,B,H,_,F,K,T,L,N,Q,R,U,W,D,E,G,I,J,M,O,P,V,X,Y,Z,$,tt,et,nt,rt,at,ot,lt,it,ut;if(m={localeStrings:{vs:"vs",by:"by"},c3:{}},a=t.extend(!0,{},m,a),null==(i=a.c3).size&&(i.size={}),null==(u=a.c3.size).width&&(u.width=window.innerWidth/1.4),null==(s=a.c3.size).height&&(s.height=window.innerHeight/1.4-50),null==n.type&&(n.type="line"),null==n.horizontal&&(n.horizontal=!1),null==n.stacked&&(n.stacked=!1),Y=r.getRowKeys(),0===Y.length&&Y.push([]),x=r.getColKeys(),0===x.length&&x.push([]),S=function(){var t,e,n;for(n=[],t=0,e=x.length;t<e;t++)A=x[t],n.push(A.join("-"));return n}(),O=0,w=r.aggregatorName,r.valAttrs.length&&(w+="("+r.valAttrs.join(", ")+")"),"scatter"===n.type)for($={x:{},y:{},t:{}},l=r.rowAttrs.concat(r.colAttrs),rt=null!=(D=l[0])?D:"",C=null!=(E=l[1])?E:"",k=l.slice(2).join("-"),nt=rt,""!==C&&(nt+=" "+a.localeStrings.vs+" "+C),""!==k&&(nt+=" "+a.localeStrings.by+" "+k),q=0,F=Y.length;q<F;q++)for(X=Y[q],B=0,K=x.length;B<K;B++)v=x[B],o=r.getAggregator(X,v),null!=o.value()&&(ot=X.concat(v),tt=ot.slice(2).join("-"),""===tt&&(tt="series"),null==(c=$.x)[tt]&&(c[tt]=[]),null==(h=$.y)[tt]&&(h[tt]=[]),ut=null!=(G=ot[0])?G:0,lt=null!=(I=ot[1])?I:0,$.y[tt].push(ut),$.x[tt].push(lt),null==(g=$.t)[tt]&&(g[tt]={}),null==(p=$.t[tt])[lt]&&(p[lt]={}),$.t[tt][lt][ut]=o.value());else{for(R=0,H=0,T=S.length;H<T;H++)lt=S[H],R+=lt.length;for(R>50&&(O=45),b=[],_=0,L=Y.length;_<L;_++){for(X=Y[_],V=X.join("-"),P=[""===V?w:V],Q=0,N=x.length;Q<N;Q++)v=x[Q],at=parseFloat(r.getAggregator(X,v).value()),isFinite(at)?P.push(at):P.push(null);b.push(P)}rt=w,n.horizontal?(C=r.rowAttrs.join("-"),k=r.colAttrs.join("-")):(C=r.colAttrs.join("-"),k=r.rowAttrs.join("-")),nt=w,""!==C&&(nt+=" "+a.localeStrings.vs+" "+C),""!==k&&(nt+=" "+a.localeStrings.by+" "+k)}if(et=t("<p>",{style:"text-align: center; font-weight: bold"}),et.text(nt),z=r.getAggregator([],[]).format,W={axis:{rotated:n.horizontal,y:{label:rt,tick:{}},x:{label:C,tick:{rotate:O,multiline:!1}}},data:{type:n.type,order:null},tooltip:{grouped:!1},color:{pattern:["#3366cc","#dc3912","#ff9900","#109618","#990099","#0099c6","#dd4477","#66aa00","#b82e2e","#316395","#994499","#22aa99","#aaaa11","#6633cc","#e67300","#8b0707","#651067","#329262","#5574a6","#3b3eac"]}},W=t.extend(!0,{},W,a.c3),"scatter"===n.type){it={},U=0,j=[];for(Z in $.x)U+=1,it[Z]=Z+"_x",j.push([Z+"_x"].concat($.x[Z])),j.push([Z].concat($.y[Z]));W.data.xs=it,W.data.columns=j,W.axis.x.tick={fit:!1},1===U&&(W.legend={show:!1}),W.tooltip.format={title:function(){return w},name:function(){return""},value:function(t,e,n,r,a){var o;return o=a[0],tt=o.name,ut=o.value,lt=o.x,z($.t[tt][lt][ut])}}}else W.axis.x.type="category",null==(d=W.axis.y.tick).format&&(d.format=function(t){return z(t)}),W.tooltip.format={value:function(t){return z(t)}},n.horizontal?(y=function(){var t,e,n;for(n=[],e=0,t=b.length;e<t;e++)f=b[e],n.push(f.shift());return n}(),1===y.length&&y[0]===w&&(y=[""]),W.axis.x.categories=y,1===S.length&&""===S[0]&&(S=[w]),b.unshift(S),W.data.rows=b):(W.axis.x.categories=S,W.data.columns=b);return n.stacked&&(n.horizontal?W.data.groups=[function(){var t,e,n;for(n=[],e=0,t=x.length;e<t;e++)lt=x[e],n.push(lt.join("-"));return n}()]:W.data.groups=[function(){var t,e,n;for(n=[],e=0,t=Y.length;e<t;e++)lt=Y[e],n.push(lt.join("-"));return n}()]),J=t("<div>",{style:"display:none;"}).appendTo(t("body")),M=t("<div>").appendTo(J),W.bindto=M[0],e.generate(W),M.detach(),J.remove(),t("<div>").append(et,M)}},t.pivotUtilities.c3_renderers={"Horizontal Bar Chart":n({type:"bar",horizontal:!0}),"Horizontal Stacked Bar Chart":n({type:"bar",stacked:!0,horizontal:!0}),"Bar Chart":n({type:"bar"}),"Stacked Bar Chart":n({type:"bar",stacked:!0}),"Line Chart":n(),"Area Chart":n({type:"area",stacked:!0}),"Scatter Chart":n({type:"scatter"})}})}).call(this);
+//# sourceMappingURL=c3_renderers.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.min.js.map.txt
index a8f27761f91fa475944eaabd1a7265a16d527f3e..32daafc0e26007a66686bde8692feab5128f2827 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.min.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/c3_renderers.min.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["/source/c3_renderers.coffee","c3_renderers.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","makeC3Chart","chartOpts","pivotData","opts","agg","colKey","colKeys","columns","dataArray","datum","defaults","fullAggName","h","hAxisTitle","headers","i","j","len","len1","params","ref","renderArea","result","row","rowHeader","rowKey","rowKeys","tree2","vAxisTitle","val","x","y","localeStrings","vs","by","c3","width","window","innerWidth","height","innerHeight","extend","type","getRowKeys","length","push","getColKeys","results","join","aggregatorName","valAttrs","colAttrs","rowAttrs","tree","parseFloat","format","value","getAggregator","isNumeric","toPrecision","toFixed","size","axis","label","data","tooltip","grouped","tick","fit","json","keys","legend","show","title","name","a","b","c","d","categories","stacked","groups","k","len2","style","appendTo","bindto","generate","detach","remove","pivotUtilities","c3_renderers","Line Chart","Bar Chart","Stacked Bar Chart","Area Chart","Scatter Chart","call","this"],"mappings":"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","file":"c3_renderers.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    makeC3Chart = (chartOpts = {}) -> (pivotData, opts) ->\n        defaults =\n            localeStrings:\n                vs: \"vs\"\n                by: \"by\"\n            c3:\n                width: -> window.innerWidth / 1.4\n                height: -> window.innerHeight / 1.4\n\n        opts = $.extend defaults, opts\n        chartOpts.type ?= \"line\"\n\n        rowKeys = pivotData.getRowKeys()\n        rowKeys.push [] if rowKeys.length == 0\n        colKeys = pivotData.getColKeys()\n        colKeys.push [] if colKeys.length == 0\n\n        headers = (h.join(\"-\") for h in colKeys)\n\n        fullAggName = pivotData.aggregatorName \n        if pivotData.valAttrs.length\n            fullAggName += \"(#{pivotData.valAttrs.join(\", \")})\"\n\n        if chartOpts.type == \"scatter\"\n            dataArray = []\n            hAxisTitle = pivotData.colAttrs.join(\"-\")\n            vAxisTitle = pivotData.rowAttrs.join(\"-\")\n            for y, tree2 of pivotData.tree\n                for x, agg of tree2\n                    datum = {}\n                    datum[hAxisTitle] = parseFloat(x)\n                    datum[vAxisTitle] = parseFloat(y)\n                    datum[\"tooltip\"] = agg.format(agg.value())\n                    dataArray.push datum\n        else\n            columns = []\n            for rowKey in rowKeys\n                rowHeader = rowKey.join(\"-\")\n                row = [if rowHeader == \"\" then pivotData.aggregatorName else rowHeader]\n                for colKey in colKeys\n                    agg = pivotData.getAggregator(rowKey, colKey)\n                    if agg.value()?\n                        val = agg.value()\n                        if $.isNumeric val\n                            if val < 1\n                                row.push parseFloat(val.toPrecision(3))\n                            else\n                                row.push parseFloat(val.toFixed(3))\n                        else\n                            row.push val\n\n                    else row.push null\n                columns.push row\n\n\n            vAxisTitle = pivotData.aggregatorName+ \n                if pivotData.valAttrs.length then \"(#{pivotData.valAttrs.join(\", \")})\" else \"\"\n            hAxisTitle = pivotData.colAttrs.join(\"-\")\n\n        params = \n            size:\n                height: opts.c3.height()\n                width: opts.c3.width()\n            axis: \n                y: label: vAxisTitle\n                x: label: hAxisTitle\n            data: \n                type: chartOpts.type\n            tooltip:\n                grouped: false\n\n        if chartOpts.type == \"scatter\"\n            params.data.x = hAxisTitle\n            params.axis.x.tick = fit: false\n            params.data.json = dataArray\n            params.data.keys = value: [hAxisTitle,vAxisTitle]\n            params.legend = show: false \n            params.tooltip.format =  \n                title: -> fullAggName\n                name: -> \"\"\n                value: (a,b,c,d) -> dataArray[d].tooltip\n        else\n            params.axis.x.type= 'category'\n            params.axis.x.categories = headers\n            params.data.columns = columns\n\n\n        if chartOpts.stacked?\n            params.data.groups = [x.join(\"-\") for x in rowKeys]\n        renderArea = $(\"<div>\", style: \"display:none;\").appendTo $(\"body\")\n        result = $(\"<div>\").appendTo renderArea\n        params.bindto = result[0]\n        c3.generate params\n        result.detach()\n        renderArea.remove()\n        return result\n\n    $.pivotUtilities.c3_renderers = \n        \"Line Chart\": makeC3Chart()\n        \"Bar Chart\": makeC3Chart(type: \"bar\")\n        \"Stacked Bar Chart\": makeC3Chart(type: \"bar\", stacked: true)\n        \"Area Chart\": makeC3Chart(type: \"area\", stacked: true)\n        \"Scatter Chart\": makeC3Chart(type: \"scatter\")\n","(function(){var t;(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 e;return e=function(e){return null==e&&(e={}),function(r,n){var a,o,i,l,u,s,c,p,h,d,g,f,y,v,j,x,m,b,w,A,k,C,F,N,q,S,B,K;if(c={localeStrings:{vs:\"vs\",by:\"by\"},c3:{width:function(){return window.innerWidth/1.4},height:function(){return window.innerHeight/1.4}}},n=t.extend(c,n),null==e.type&&(e.type=\"line\"),F=r.getRowKeys(),0===F.length&&F.push([]),i=r.getColKeys(),0===i.length&&i.push([]),g=function(){var t,e,r;for(r=[],t=0,e=i.length;e>t;t++)h=i[t],r.push(h.join(\"-\"));return r}(),p=r.aggregatorName,r.valAttrs.length&&(p+=\"(\"+r.valAttrs.join(\", \")+\")\"),\"scatter\"===e.type){u=[],d=r.colAttrs.join(\"-\"),q=r.rowAttrs.join(\"-\"),m=r.tree;for(K in m){N=m[K];for(B in N)a=N[B],s={},s[d]=parseFloat(B),s[q]=parseFloat(K),s.tooltip=a.format(a.value()),u.push(s)}}else{for(l=[],f=0,v=F.length;v>f;f++){for(C=F[f],k=C.join(\"-\"),A=[\"\"===k?r.aggregatorName:k],y=0,j=i.length;j>y;y++)o=i[y],a=r.getAggregator(C,o),null!=a.value()?(S=a.value(),A.push(t.isNumeric(S)?1>S?parseFloat(S.toPrecision(3)):parseFloat(S.toFixed(3)):S)):A.push(null);l.push(A)}q=r.aggregatorName+(r.valAttrs.length?\"(\"+r.valAttrs.join(\", \")+\")\":\"\"),d=r.colAttrs.join(\"-\")}return x={size:{height:n.c3.height(),width:n.c3.width()},axis:{y:{label:q},x:{label:d}},data:{type:e.type},tooltip:{grouped:!1}},\"scatter\"===e.type?(x.data.x=d,x.axis.x.tick={fit:!1},x.data.json=u,x.data.keys={value:[d,q]},x.legend={show:!1},x.tooltip.format={title:function(){return p},name:function(){return\"\"},value:function(t,e,r,n){return u[n].tooltip}}):(x.axis.x.type=\"category\",x.axis.x.categories=g,x.data.columns=l),null!=e.stacked&&(x.data.groups=[function(){var t,e,r;for(r=[],t=0,e=F.length;e>t;t++)B=F[t],r.push(B.join(\"-\"));return r}()]),b=t(\"<div>\",{style:\"display:none;\"}).appendTo(t(\"body\")),w=t(\"<div>\").appendTo(b),x.bindto=w[0],c3.generate(x),w.detach(),b.remove(),w}},t.pivotUtilities.c3_renderers={\"Line Chart\":e(),\"Bar Chart\":e({type:\"bar\"}),\"Stacked Bar Chart\":e({type:\"bar\",stacked:!0}),\"Area Chart\":e({type:\"area\",stacked:!0}),\"Scatter Chart\":e({type:\"scatter\"})}})}).call(this);\n//# sourceMappingURL=c3_renderers.min.js.map"],"sourceRoot":"/source/"}
\ No newline at end of file
+{"version":3,"sources":["c3_renderers.coffee","c3_renderers.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","c3","$","makeC3Chart","chartOpts","pivotData","opts","agg","attrs","base","base1","base2","base3","base4","base5","base6","base7","c","categories","colKey","colKeys","columns","dataColumns","defaults","formatter","fullAggName","groupByTitle","h","hAxisTitle","headers","i","j","k","l","len","len1","len2","len3","len4","m","numCharsInHAxis","numSeries","params","ref","ref1","ref2","ref3","renderArea","result","rotationAngle","row","rowHeader","rowKey","rowKeys","s","scatterData","series","title","titleText","vAxisTitle","val","vals","x","xs","y","localeStrings","vs","by","extend","size","width","window","innerWidth","height","innerHeight","type","horizontal","stacked","getRowKeys","length","push","getColKeys","results","join","aggregatorName","valAttrs","t","rowAttrs","concat","colAttrs","slice","getAggregator","value","parseFloat","isFinite","style","text","format","axis","rotated","label","tick","rotate","multiline","data","order","tooltip","grouped","color","pattern","fit","legend","show","name","a","b","d","e","ref4","v","len5","n","shift","unshift","rows","groups","appendTo","bindto","generate","detach","remove","append","pivotUtilities","c3_renderers","Horizontal Bar Chart","Horizontal Stacked Bar Chart","Bar Chart","Stacked Bar Chart","Line Chart","Area Chart","Scatter Chart","call","this"],"mappings":"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","file":"c3_renderers.min.js","sourcesContent":["callWithJQuery = (pivotModule) ->\n    if typeof exports is \"object\" and typeof module is \"object\" # CommonJS\n        pivotModule require(\"jquery\"), require(\"c3\")\n    else if typeof define is \"function\" and define.amd # AMD\n        define [\"jquery\", \"c3\"], pivotModule\n    # Plain browser env\n    else\n        pivotModule jQuery, c3\n\ncallWithJQuery ($, c3) ->\n\n    makeC3Chart = (chartOpts = {}) -> (pivotData, opts) ->\n        defaults =\n            localeStrings: {vs: \"vs\", by: \"by\"}\n            c3: {}\n\n        opts = $.extend(true, {}, defaults, opts)\n        opts.c3.size ?= {}\n        opts.c3.size.width ?= window.innerWidth / 1.4\n        opts.c3.size.height ?= window.innerHeight / 1.4 - 50\n        chartOpts.type ?= \"line\"\n        chartOpts.horizontal ?= false\n        chartOpts.stacked ?= false\n\n        rowKeys = pivotData.getRowKeys()\n        rowKeys.push [] if rowKeys.length == 0\n        colKeys = pivotData.getColKeys()\n        colKeys.push [] if colKeys.length == 0\n\n        headers = (h.join(\"-\") for h in colKeys)\n        rotationAngle = 0\n\n        fullAggName = pivotData.aggregatorName\n        if pivotData.valAttrs.length\n            fullAggName += \"(#{pivotData.valAttrs.join(\", \")})\"\n\n        if chartOpts.type == \"scatter\"\n            scatterData = x:{}, y:{}, t:{}\n            attrs = pivotData.rowAttrs.concat(pivotData.colAttrs)\n            vAxisTitle = attrs[0] ? \"\"\n            hAxisTitle = attrs[1] ? \"\"\n            groupByTitle = attrs.slice(2).join(\"-\")\n            titleText = vAxisTitle\n            titleText += \" #{opts.localeStrings.vs} #{hAxisTitle}\" if hAxisTitle != \"\"\n            titleText += \" #{opts.localeStrings.by} #{groupByTitle}\" if groupByTitle != \"\"\n            for rowKey in rowKeys\n                for colKey in colKeys\n                    agg = pivotData.getAggregator(rowKey, colKey)\n                    if agg.value()?\n                        vals = rowKey.concat(colKey)\n                        series = vals.slice(2).join(\"-\")\n                        if series == \"\" then series = \"series\"\n                        scatterData.x[series] ?= []\n                        scatterData.y[series] ?= []\n                        y = vals[0] ? 0\n                        x = vals[1] ? 0\n                        scatterData.y[series].push y\n                        scatterData.x[series].push x\n                        scatterData.t[series] ?= {}\n                        scatterData.t[series][x] ?= {}\n                        scatterData.t[series][x][y] = agg.value()\n        else\n            numCharsInHAxis = 0\n            for x in headers\n                numCharsInHAxis += x.length\n            if numCharsInHAxis > 50\n                rotationAngle = 45\n\n            columns = []\n            for rowKey in rowKeys\n                rowHeader = rowKey.join(\"-\")\n                row = [if rowHeader == \"\" then fullAggName else rowHeader]\n                for colKey in colKeys\n                    val = parseFloat  pivotData.getAggregator(rowKey, colKey).value()\n                    if isFinite(val)\n                        row.push(val)\n                    else\n                        row.push(null)\n                columns.push row\n\n            vAxisTitle = fullAggName\n\n            if chartOpts.horizontal\n                hAxisTitle = pivotData.rowAttrs.join(\"-\")\n                groupByTitle = pivotData.colAttrs.join(\"-\")\n            else\n                hAxisTitle = pivotData.colAttrs.join(\"-\")\n                groupByTitle = pivotData.rowAttrs.join(\"-\")\n            titleText = fullAggName\n            titleText += \" #{opts.localeStrings.vs} #{hAxisTitle}\" if hAxisTitle != \"\"\n            titleText += \" #{opts.localeStrings.by} #{groupByTitle}\" if groupByTitle != \"\"\n\n        title = $(\"<p>\", {style: \"text-align: center; font-weight: bold\"})\n        title.text(titleText)\n\n        formatter = pivotData.getAggregator([], []).format\n\n        params =\n            axis:\n                rotated: chartOpts.horizontal\n                y:\n                    label: vAxisTitle\n                    tick: {}\n                x:\n                    label: hAxisTitle\n                    tick:\n                        rotate: rotationAngle\n                        multiline: false\n            data:\n                type: chartOpts.type\n                order: null\n            tooltip:\n                grouped: false\n            color:\n                pattern: [ \"#3366cc\", \"#dc3912\", \"#ff9900\", \"#109618\",\n                           \"#990099\", \"#0099c6\", \"#dd4477\", \"#66aa00\",\n                           \"#b82e2e\", \"#316395\", \"#994499\", \"#22aa99\",\n                           \"#aaaa11\", \"#6633cc\", \"#e67300\", \"#8b0707\",\n                           \"#651067\", \"#329262\", \"#5574a6\", \"#3b3eac\" ]\n\n\n        params = $.extend(true, {}, params, opts.c3)\n        if chartOpts.type == \"scatter\"\n            xs = {}\n            numSeries = 0\n            dataColumns = []\n            for s of scatterData.x\n                numSeries += 1\n                xs[s] = s+\"_x\"\n                dataColumns.push [s+\"_x\"].concat(scatterData.x[s])\n                dataColumns.push [s].concat(scatterData.y[s])\n            params.data.xs = xs\n            params.data.columns = dataColumns\n            params.axis.x.tick = fit: false\n            if numSeries == 1\n                params.legend = show: false\n            params.tooltip.format =\n                title: -> fullAggName\n                name: -> \"\"\n                value: (a,b,c,d,e) ->\n                    {name: series, value: y, x} = e[0]\n                    formatter(scatterData.t[series][x][y])\n        else\n            params.axis.x.type= 'category'\n            params.axis.y.tick.format ?= (v) -> formatter(v)\n            params.tooltip.format = value: (v) -> formatter(v)\n\n            if chartOpts.horizontal\n                categories = (c.shift() for c in columns)\n                if categories.length == 1 and categories[0] == fullAggName\n                    categories = [\"\"]\n                params.axis.x.categories = categories\n                if headers.length == 1 and headers[0] == \"\"\n                    headers = [fullAggName]\n                columns.unshift(headers)\n                params.data.rows = columns\n            else\n                params.axis.x.categories = headers\n                params.data.columns = columns\n\n\n        if chartOpts.stacked\n            if chartOpts.horizontal\n                params.data.groups = [x.join(\"-\") for x in colKeys]\n            else\n                params.data.groups = [x.join(\"-\") for x in rowKeys]\n\n        renderArea = $(\"<div>\", style: \"display:none;\").appendTo $(\"body\")\n        result = $(\"<div>\").appendTo renderArea\n        params.bindto = result[0]\n        c3.generate params\n        result.detach()\n        renderArea.remove()\n        return $(\"<div>\").append title, result\n\n    $.pivotUtilities.c3_renderers =\n        \"Horizontal Bar Chart\": makeC3Chart(type: \"bar\", horizontal: true)\n        \"Horizontal Stacked Bar Chart\": makeC3Chart(type: \"bar\", stacked: true, horizontal: true)\n        \"Bar Chart\": makeC3Chart(type: \"bar\")\n        \"Stacked Bar Chart\": makeC3Chart(type: \"bar\", stacked: true)\n        \"Line Chart\": makeC3Chart()\n        \"Area Chart\": makeC3Chart(type: \"area\", stacked: true)\n        \"Scatter Chart\": makeC3Chart(type: \"scatter\")\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"), require(\"c3\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\", \"c3\"], pivotModule);\n    } else {\n      return pivotModule(jQuery, c3);\n    }\n  };\n\n  callWithJQuery(function($, c3) {\n    var makeC3Chart;\n    makeC3Chart = function(chartOpts) {\n      if (chartOpts == null) {\n        chartOpts = {};\n      }\n      return function(pivotData, opts) {\n        var agg, attrs, base, base1, base2, base3, base4, base5, base6, base7, c, categories, colKey, colKeys, columns, dataColumns, defaults, formatter, fullAggName, groupByTitle, h, hAxisTitle, headers, i, j, k, l, len, len1, len2, len3, len4, m, numCharsInHAxis, numSeries, params, ref, ref1, ref2, ref3, renderArea, result, rotationAngle, row, rowHeader, rowKey, rowKeys, s, scatterData, series, title, titleText, vAxisTitle, val, vals, x, xs, y;\n        defaults = {\n          localeStrings: {\n            vs: \"vs\",\n            by: \"by\"\n          },\n          c3: {}\n        };\n        opts = $.extend(true, {}, defaults, opts);\n        if ((base = opts.c3).size == null) {\n          base.size = {};\n        }\n        if ((base1 = opts.c3.size).width == null) {\n          base1.width = window.innerWidth / 1.4;\n        }\n        if ((base2 = opts.c3.size).height == null) {\n          base2.height = window.innerHeight / 1.4 - 50;\n        }\n        if (chartOpts.type == null) {\n          chartOpts.type = \"line\";\n        }\n        if (chartOpts.horizontal == null) {\n          chartOpts.horizontal = false;\n        }\n        if (chartOpts.stacked == null) {\n          chartOpts.stacked = false;\n        }\n        rowKeys = pivotData.getRowKeys();\n        if (rowKeys.length === 0) {\n          rowKeys.push([]);\n        }\n        colKeys = pivotData.getColKeys();\n        if (colKeys.length === 0) {\n          colKeys.push([]);\n        }\n        headers = (function() {\n          var i, len, results;\n          results = [];\n          for (i = 0, len = colKeys.length; i < len; i++) {\n            h = colKeys[i];\n            results.push(h.join(\"-\"));\n          }\n          return results;\n        })();\n        rotationAngle = 0;\n        fullAggName = pivotData.aggregatorName;\n        if (pivotData.valAttrs.length) {\n          fullAggName += \"(\" + (pivotData.valAttrs.join(\", \")) + \")\";\n        }\n        if (chartOpts.type === \"scatter\") {\n          scatterData = {\n            x: {},\n            y: {},\n            t: {}\n          };\n          attrs = pivotData.rowAttrs.concat(pivotData.colAttrs);\n          vAxisTitle = (ref = attrs[0]) != null ? ref : \"\";\n          hAxisTitle = (ref1 = attrs[1]) != null ? ref1 : \"\";\n          groupByTitle = attrs.slice(2).join(\"-\");\n          titleText = vAxisTitle;\n          if (hAxisTitle !== \"\") {\n            titleText += \" \" + opts.localeStrings.vs + \" \" + hAxisTitle;\n          }\n          if (groupByTitle !== \"\") {\n            titleText += \" \" + opts.localeStrings.by + \" \" + groupByTitle;\n          }\n          for (i = 0, len = rowKeys.length; i < len; i++) {\n            rowKey = rowKeys[i];\n            for (j = 0, len1 = colKeys.length; j < len1; j++) {\n              colKey = colKeys[j];\n              agg = pivotData.getAggregator(rowKey, colKey);\n              if (agg.value() != null) {\n                vals = rowKey.concat(colKey);\n                series = vals.slice(2).join(\"-\");\n                if (series === \"\") {\n                  series = \"series\";\n                }\n                if ((base3 = scatterData.x)[series] == null) {\n                  base3[series] = [];\n                }\n                if ((base4 = scatterData.y)[series] == null) {\n                  base4[series] = [];\n                }\n                y = (ref2 = vals[0]) != null ? ref2 : 0;\n                x = (ref3 = vals[1]) != null ? ref3 : 0;\n                scatterData.y[series].push(y);\n                scatterData.x[series].push(x);\n                if ((base5 = scatterData.t)[series] == null) {\n                  base5[series] = {};\n                }\n                if ((base6 = scatterData.t[series])[x] == null) {\n                  base6[x] = {};\n                }\n                scatterData.t[series][x][y] = agg.value();\n              }\n            }\n          }\n        } else {\n          numCharsInHAxis = 0;\n          for (k = 0, len2 = headers.length; k < len2; k++) {\n            x = headers[k];\n            numCharsInHAxis += x.length;\n          }\n          if (numCharsInHAxis > 50) {\n            rotationAngle = 45;\n          }\n          columns = [];\n          for (l = 0, len3 = rowKeys.length; l < len3; l++) {\n            rowKey = rowKeys[l];\n            rowHeader = rowKey.join(\"-\");\n            row = [rowHeader === \"\" ? fullAggName : rowHeader];\n            for (m = 0, len4 = colKeys.length; m < len4; m++) {\n              colKey = colKeys[m];\n              val = parseFloat(pivotData.getAggregator(rowKey, colKey).value());\n              if (isFinite(val)) {\n                row.push(val);\n              } else {\n                row.push(null);\n              }\n            }\n            columns.push(row);\n          }\n          vAxisTitle = fullAggName;\n          if (chartOpts.horizontal) {\n            hAxisTitle = pivotData.rowAttrs.join(\"-\");\n            groupByTitle = pivotData.colAttrs.join(\"-\");\n          } else {\n            hAxisTitle = pivotData.colAttrs.join(\"-\");\n            groupByTitle = pivotData.rowAttrs.join(\"-\");\n          }\n          titleText = fullAggName;\n          if (hAxisTitle !== \"\") {\n            titleText += \" \" + opts.localeStrings.vs + \" \" + hAxisTitle;\n          }\n          if (groupByTitle !== \"\") {\n            titleText += \" \" + opts.localeStrings.by + \" \" + groupByTitle;\n          }\n        }\n        title = $(\"<p>\", {\n          style: \"text-align: center; font-weight: bold\"\n        });\n        title.text(titleText);\n        formatter = pivotData.getAggregator([], []).format;\n        params = {\n          axis: {\n            rotated: chartOpts.horizontal,\n            y: {\n              label: vAxisTitle,\n              tick: {}\n            },\n            x: {\n              label: hAxisTitle,\n              tick: {\n                rotate: rotationAngle,\n                multiline: false\n              }\n            }\n          },\n          data: {\n            type: chartOpts.type,\n            order: null\n          },\n          tooltip: {\n            grouped: false\n          },\n          color: {\n            pattern: [\"#3366cc\", \"#dc3912\", \"#ff9900\", \"#109618\", \"#990099\", \"#0099c6\", \"#dd4477\", \"#66aa00\", \"#b82e2e\", \"#316395\", \"#994499\", \"#22aa99\", \"#aaaa11\", \"#6633cc\", \"#e67300\", \"#8b0707\", \"#651067\", \"#329262\", \"#5574a6\", \"#3b3eac\"]\n          }\n        };\n        params = $.extend(true, {}, params, opts.c3);\n        if (chartOpts.type === \"scatter\") {\n          xs = {};\n          numSeries = 0;\n          dataColumns = [];\n          for (s in scatterData.x) {\n            numSeries += 1;\n            xs[s] = s + \"_x\";\n            dataColumns.push([s + \"_x\"].concat(scatterData.x[s]));\n            dataColumns.push([s].concat(scatterData.y[s]));\n          }\n          params.data.xs = xs;\n          params.data.columns = dataColumns;\n          params.axis.x.tick = {\n            fit: false\n          };\n          if (numSeries === 1) {\n            params.legend = {\n              show: false\n            };\n          }\n          params.tooltip.format = {\n            title: function() {\n              return fullAggName;\n            },\n            name: function() {\n              return \"\";\n            },\n            value: function(a, b, c, d, e) {\n              var ref4;\n              ref4 = e[0], series = ref4.name, y = ref4.value, x = ref4.x;\n              return formatter(scatterData.t[series][x][y]);\n            }\n          };\n        } else {\n          params.axis.x.type = 'category';\n          if ((base7 = params.axis.y.tick).format == null) {\n            base7.format = function(v) {\n              return formatter(v);\n            };\n          }\n          params.tooltip.format = {\n            value: function(v) {\n              return formatter(v);\n            }\n          };\n          if (chartOpts.horizontal) {\n            categories = (function() {\n              var len5, n, results;\n              results = [];\n              for (n = 0, len5 = columns.length; n < len5; n++) {\n                c = columns[n];\n                results.push(c.shift());\n              }\n              return results;\n            })();\n            if (categories.length === 1 && categories[0] === fullAggName) {\n              categories = [\"\"];\n            }\n            params.axis.x.categories = categories;\n            if (headers.length === 1 && headers[0] === \"\") {\n              headers = [fullAggName];\n            }\n            columns.unshift(headers);\n            params.data.rows = columns;\n          } else {\n            params.axis.x.categories = headers;\n            params.data.columns = columns;\n          }\n        }\n        if (chartOpts.stacked) {\n          if (chartOpts.horizontal) {\n            params.data.groups = [\n              (function() {\n                var len5, n, results;\n                results = [];\n                for (n = 0, len5 = colKeys.length; n < len5; n++) {\n                  x = colKeys[n];\n                  results.push(x.join(\"-\"));\n                }\n                return results;\n              })()\n            ];\n          } else {\n            params.data.groups = [\n              (function() {\n                var len5, n, results;\n                results = [];\n                for (n = 0, len5 = rowKeys.length; n < len5; n++) {\n                  x = rowKeys[n];\n                  results.push(x.join(\"-\"));\n                }\n                return results;\n              })()\n            ];\n          }\n        }\n        renderArea = $(\"<div>\", {\n          style: \"display:none;\"\n        }).appendTo($(\"body\"));\n        result = $(\"<div>\").appendTo(renderArea);\n        params.bindto = result[0];\n        c3.generate(params);\n        result.detach();\n        renderArea.remove();\n        return $(\"<div>\").append(title, result);\n      };\n    };\n    return $.pivotUtilities.c3_renderers = {\n      \"Horizontal Bar Chart\": makeC3Chart({\n        type: \"bar\",\n        horizontal: true\n      }),\n      \"Horizontal Stacked Bar Chart\": makeC3Chart({\n        type: \"bar\",\n        stacked: true,\n        horizontal: true\n      }),\n      \"Bar Chart\": makeC3Chart({\n        type: \"bar\"\n      }),\n      \"Stacked Bar Chart\": makeC3Chart({\n        type: \"bar\",\n        stacked: true\n      }),\n      \"Line Chart\": makeC3Chart(),\n      \"Area Chart\": makeC3Chart({\n        type: \"area\",\n        stacked: true\n      }),\n      \"Scatter Chart\": makeC3Chart({\n        type: \"scatter\"\n      })\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=c3_renderers.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.js.js
index bfb0d66bb4396d649cb57e016f8fd6e8a124493c..bc3bd8f40584338784d75db4d396fea568ae6374 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.js.js
@@ -3,15 +3,15 @@
 
   callWithJQuery = function(pivotModule) {
     if (typeof exports === "object" && typeof module === "object") {
-      return pivotModule(require("jquery"));
+      return pivotModule(require("jquery"), require("d3"));
     } else if (typeof define === "function" && define.amd) {
-      return define(["jquery"], pivotModule);
+      return define(["jquery", "d3"], pivotModule);
     } else {
-      return pivotModule(jQuery);
+      return pivotModule(jQuery, d3);
     }
   };
 
-  callWithJQuery(function($) {
+  callWithJQuery(function($, d3) {
     return $.pivotUtilities.d3_renderers = {
       Treemap: function(pivotData, opts) {
         var addToTree, color, defaults, height, i, len, ref, result, rowKey, tree, treemap, value, width;
@@ -26,7 +26,7 @@
             }
           }
         };
-        opts = $.extend(defaults, opts);
+        opts = $.extend(true, {}, defaults, opts);
         result = $("<div>").css({
           width: "100%",
           height: "100%"
@@ -102,4 +102,4 @@
 
 }).call(this);
 
-//# sourceMappingURL=d3_renderers.js.map
\ No newline at end of file
+//# sourceMappingURL=d3_renderers.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.js.map.txt
index 7f94a648f1c48880ef8bc5074e23abaf12f3fe06..91018fdbabc92090e1bf7abc79949edd924761eb 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["d3_renderers.coffee"],"names":[],"mappings":"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","file":"d3_renderers.js","sourceRoot":"/source/","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    $.pivotUtilities.d3_renderers = Treemap: (pivotData, opts) ->\n        defaults =\n            localeStrings: {}\n            d3:\n                width: -> $(window).width() / 1.4\n                height: -> $(window).height() / 1.4\n\n        opts = $.extend defaults, opts\n\n\n        result = $(\"<div>\").css(width: \"100%\", height: \"100%\")\n\n        tree = name: \"All\", children: []\n        addToTree = (tree, path, value) ->\n            if path.length == 0\n                tree.value = value\n                return\n            tree.children ?= []\n            x = path.shift()\n            for child in tree.children when child.name == x\n                addToTree(child, path, value)\n                return\n            newChild = name: x\n            addToTree(newChild, path, value)\n            tree.children.push newChild\n\n        for rowKey in pivotData.getRowKeys()\n            value = pivotData.getAggregator(rowKey, []).value()\n            if value?\n                addToTree(tree, rowKey, value)\n\n        color = d3.scale.category10()\n        width = opts.d3.width()\n        height = opts.d3.height()\n\n        treemap = d3.layout.treemap()\n            .size([width, height])\n            .sticky(true)\n            .value( (d) -> d.size )\n\n        d3.select(result[0])\n            .append(\"div\")\n                .style(\"position\", \"relative\")\n                .style(\"width\", width + \"px\")\n                .style(\"height\", height + \"px\")\n            .datum(tree).selectAll(\".node\")\n                .data(treemap.padding([15,0,0,0]).value( (d) -> d.value ).nodes)\n            .enter().append(\"div\")\n            .attr(\"class\", \"node\")\n            .style(\"background\", (d) -> if d.children? then \"lightgrey\" else color(d.name) )\n            .text( (d) -> d.name )\n            .call ->\n                    this.style(\"left\",  (d) -> d.x+\"px\" )\n                        .style(\"top\",   (d) -> d.y+\"px\" )\n                        .style(\"width\", (d) -> Math.max(0, d.dx - 1)+\"px\" )\n                        .style(\"height\",(d) -> Math.max(0, d.dy - 1)+\"px\" )\n                    return\n        \n        return result\n    \n\n\n"]}
\ No newline at end of file
+{"version":3,"file":"d3_renderers.js","sources":["d3_renderers.coffee"],"names":[],"mappings":"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","sourcesContent":["callWithJQuery = (pivotModule) ->\n    if typeof exports is \"object\" and typeof module is \"object\" # CommonJS\n        pivotModule require(\"jquery\"), require(\"d3\")\n    else if typeof define is \"function\" and define.amd # AMD\n        define [\"jquery\", \"d3\"], pivotModule\n    # Plain browser env\n    else\n        pivotModule jQuery, d3\n\ncallWithJQuery ($, d3) ->\n\n    $.pivotUtilities.d3_renderers = Treemap: (pivotData, opts) ->\n        defaults =\n            localeStrings: {}\n            d3:\n                width: -> $(window).width() / 1.4\n                height: -> $(window).height() / 1.4\n\n        opts = $.extend(true, {}, defaults, opts)\n\n\n        result = $(\"<div>\").css(width: \"100%\", height: \"100%\")\n\n        tree = name: \"All\", children: []\n        addToTree = (tree, path, value) ->\n            if path.length == 0\n                tree.value = value\n                return\n            tree.children ?= []\n            x = path.shift()\n            for child in tree.children when child.name == x\n                addToTree(child, path, value)\n                return\n            newChild = name: x\n            addToTree(newChild, path, value)\n            tree.children.push newChild\n\n        for rowKey in pivotData.getRowKeys()\n            value = pivotData.getAggregator(rowKey, []).value()\n            if value?\n                addToTree(tree, rowKey, value)\n\n        color = d3.scale.category10()\n        width = opts.d3.width()\n        height = opts.d3.height()\n\n        treemap = d3.layout.treemap()\n            .size([width, height])\n            .sticky(true)\n            .value( (d) -> d.size )\n\n        d3.select(result[0])\n            .append(\"div\")\n                .style(\"position\", \"relative\")\n                .style(\"width\", width + \"px\")\n                .style(\"height\", height + \"px\")\n            .datum(tree).selectAll(\".node\")\n                .data(treemap.padding([15,0,0,0]).value( (d) -> d.value ).nodes)\n            .enter().append(\"div\")\n            .attr(\"class\", \"node\")\n            .style(\"background\", (d) -> if d.children? then \"lightgrey\" else color(d.name) )\n            .text( (d) -> d.name )\n            .call ->\n                    this.style(\"left\",  (d) -> d.x+\"px\" )\n                        .style(\"top\",   (d) -> d.y+\"px\" )\n                        .style(\"width\", (d) -> Math.max(0, d.dx - 1)+\"px\" )\n                        .style(\"height\",(d) -> Math.max(0, d.dy - 1)+\"px\" )\n                    return\n\n        return result\n\n\n\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.min.js.js
index d526e71bc1cb6e16ed3f6d39ea8dccb294051db3..00709080feaefb740eb01279985dc6fc3661ed9e 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.min.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.min.js.js
@@ -1,2 +1,2 @@
-(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){return e.pivotUtilities.d3_renderers={Treemap:function(t,n){var i,r,u,l,d,o,a,c,h,f,s,p,y;for(u={localeStrings:{},d3:{width:function(){return e(window).width()/1.4},height:function(){return e(window).height()/1.4}}},n=e.extend(u,n),c=e("<div>").css({width:"100%",height:"100%"}),f={name:"All",children:[]},i=function(e,t,n){var r,u,l,d,o,a;if(0===t.length)return void(e.value=n);for(null==e.children&&(e.children=[]),a=t.shift(),o=e.children,u=0,l=o.length;l>u;u++)if(r=o[u],r.name===a)return void i(r,t,n);return d={name:a},i(d,t,n),e.children.push(d)},a=t.getRowKeys(),d=0,o=a.length;o>d;d++)h=a[d],p=t.getAggregator(h,[]).value(),null!=p&&i(f,h,p);return r=d3.scale.category10(),y=n.d3.width(),l=n.d3.height(),s=d3.layout.treemap().size([y,l]).sticky(!0).value(function(e){return e.size}),d3.select(c[0]).append("div").style("position","relative").style("width",y+"px").style("height",l+"px").datum(f).selectAll(".node").data(s.padding([15,0,0,0]).value(function(e){return e.value}).nodes).enter().append("div").attr("class","node").style("background",function(e){return null!=e.children?"lightgrey":r(e.name)}).text(function(e){return e.name}).call(function(){this.style("left",function(e){return e.x+"px"}).style("top",function(e){return e.y+"px"}).style("width",function(e){return Math.max(0,e.dx-1)+"px"}).style("height",function(e){return Math.max(0,e.dy-1)+"px"})}),c}}})}).call(this);
-//# sourceMappingURL=d3_renderers.min.js.map
\ No newline at end of file
+(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery"),require("d3")):"function"==typeof define&&define.amd?define(["jquery","d3"],e):e(jQuery,d3)})(function(e,t){return e.pivotUtilities.d3_renderers={Treemap:function(n,i){var r,u,l,d,o,a,c,h,f,s,p,y,g;for(l={localeStrings:{},d3:{width:function(){return e(window).width()/1.4},height:function(){return e(window).height()/1.4}}},i=e.extend(!0,{},l,i),h=e("<div>").css({width:"100%",height:"100%"}),s={name:"All",children:[]},r=function(e,t,n){var i,u,l,d,o,a;if(0===t.length)return void(e.value=n);for(null==e.children&&(e.children=[]),a=t.shift(),o=e.children,u=0,l=o.length;u<l;u++)if(i=o[u],i.name===a)return void r(i,t,n);return d={name:a},r(d,t,n),e.children.push(d)},c=n.getRowKeys(),o=0,a=c.length;o<a;o++)f=c[o],y=n.getAggregator(f,[]).value(),null!=y&&r(s,f,y);return u=t.scale.category10(),g=i.d3.width(),d=i.d3.height(),p=t.layout.treemap().size([g,d]).sticky(!0).value(function(e){return e.size}),t.select(h[0]).append("div").style("position","relative").style("width",g+"px").style("height",d+"px").datum(s).selectAll(".node").data(p.padding([15,0,0,0]).value(function(e){return e.value}).nodes).enter().append("div").attr("class","node").style("background",function(e){return null!=e.children?"lightgrey":u(e.name)}).text(function(e){return e.name}).call(function(){this.style("left",function(e){return e.x+"px"}).style("top",function(e){return e.y+"px"}).style("width",function(e){return Math.max(0,e.dx-1)+"px"}).style("height",function(e){return Math.max(0,e.dy-1)+"px"})}),h}}})}).call(this);
+//# sourceMappingURL=d3_renderers.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.min.js.map.txt
index faedf7f56dc9cb48791cee2d4204f3896f653e28..5a92702af49aadfb6537c6d039ff347702abe7d0 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.min.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/d3_renderers.min.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["/source/d3_renderers.coffee","d3_renderers.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","pivotUtilities","d3_renderers","Treemap","pivotData","opts","addToTree","color","defaults","height","i","len","ref","result","rowKey","tree","treemap","value","width","localeStrings","d3","window","extend","css","name","children","path","child","newChild","x","length","shift","push","getRowKeys","getAggregator","scale","category10","layout","size","sticky","d","select","append","style","datum","selectAll","data","padding","nodes","enter","attr","text","call","this","y","Math","max","dx","dy"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAlBC,UAAgD,gBAAjBC,QAC9BF,EAAYG,QAAQ,WACC,kBAAjBC,SAAgCA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GCKZ,MDHAA,GAAEC,eAAeC,cAAeC,QAAS,SAACC,EAAWC,GACjD,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAyBA,KAzBAV,GACIW,iBACAC,IACIF,MAAO,WCMT,MDNYlB,GAAEqB,QAAQH,QAAU,KAC9BT,OAAQ,WCQV,MDRaT,GAAEqB,QAAQZ,SAAW,OAExCJ,EAAOL,EAAEsB,OAAOd,EAAUH,GAG1BQ,EAASb,EAAE,SAASuB,KAAIL,MAAO,OAAQT,OAAQ,SAE/CM,GAAOS,KAAM,MAAOC,aACpBnB,EAAY,SAACS,EAAMW,EAAMT,GACrB,GAAAU,GAAAjB,EAAAC,EAAAiB,EAAAhB,EAAAiB,CAAA,IAAkB,IAAfH,EAAKI,OAEJ,YADAf,EAAKE,MAAQA,EAIjB,KCamB,MAAjBF,EAAKU,WDfPV,EAAKU,aACLI,EAAIH,EAAKK,QACTnB,EAAAG,EAAAU,SAAAf,EAAA,EAAAC,EAAAC,EAAAkB,OAAAnB,EAAAD,EAAAA,ICoBA,GADAiB,EAAQf,EAAIF,GDnBoBiB,EAAMH,OAAQK,EAE1C,WADAvB,GAAUqB,EAAOD,EAAMT,EC6B7B,OD3BEW,IAAWJ,KAAMK,GACjBvB,EAAUsB,EAAUF,EAAMT,GAC1BF,EAAKU,SAASO,KAAKJ,IAEvBhB,EAAAR,EAAA6B,aAAAvB,EAAA,EAAAC,EAAAC,EAAAkB,OAAAnB,EAAAD,EAAAA,IC2BEI,EAASF,EAAIF,GD1BXO,EAAQb,EAAU8B,cAAcpB,MAAYG,QACzC,MAAAA,GACCX,EAAUS,EAAMD,EAAQG,EA6BhC,OA3BAV,GAAQa,GAAGe,MAAMC,aACjBlB,EAAQb,EAAKe,GAAGF,QAChBT,EAASJ,EAAKe,GAAGX,SAEjBO,EAAUI,GAAGiB,OAAOrB,UACfsB,MAAMpB,EAAOT,IACb8B,QAAO,GACPtB,MAAO,SAACuB,GCyBX,MDzBiBA,GAAEF,OAErBlB,GAAGqB,OAAO5B,EAAO,IACZ6B,OAAO,OACHC,MAAM,WAAY,YAClBA,MAAM,QAASzB,EAAQ,MACvByB,MAAM,SAAUlC,EAAS,MAC7BmC,MAAM7B,GAAM8B,UAAU,SAClBC,KAAK9B,EAAQ+B,SAAS,GAAG,EAAE,EAAE,IAAI9B,MAAO,SAACuB,GCoBhD,MDpBsDA,GAAEvB,QAAQ+B,OAC7DC,QAAQP,OAAO,OACfQ,KAAK,QAAS,QACdP,MAAM,aAAc,SAACH,GAAM,MAAG,OAAAA,EAAAf,SAAiB,YAAiBlB,EAAMiC,EAAEhB,QACxE2B,KAAM,SAACX,GCwBV,MDxBgBA,GAAEhB,OACf4B,KAAK,WACEC,KAAKV,MAAM,OAAS,SAACH,GCyB7B,MDzBmCA,GAAEX,EAAE,OAC1Bc,MAAM,MAAS,SAACH,GC0B7B,MD1BmCA,GAAEc,EAAE,OAC1BX,MAAM,QAAS,SAACH,GC2B7B,MD3BmCe,MAAKC,IAAI,EAAGhB,EAAEiB,GAAK,GAAG,OAC5Cd,MAAM,SAAS,SAACH,GC4B7B,MD5BmCe,MAAKC,IAAI,EAAGhB,EAAEkB,GAAK,GAAG,SAGtD7C,QCiCZuC,KAAKC","file":"d3_renderers.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    $.pivotUtilities.d3_renderers = Treemap: (pivotData, opts) ->\n        defaults =\n            localeStrings: {}\n            d3:\n                width: -> $(window).width() / 1.4\n                height: -> $(window).height() / 1.4\n\n        opts = $.extend defaults, opts\n\n\n        result = $(\"<div>\").css(width: \"100%\", height: \"100%\")\n\n        tree = name: \"All\", children: []\n        addToTree = (tree, path, value) ->\n            if path.length == 0\n                tree.value = value\n                return\n            tree.children ?= []\n            x = path.shift()\n            for child in tree.children when child.name == x\n                addToTree(child, path, value)\n                return\n            newChild = name: x\n            addToTree(newChild, path, value)\n            tree.children.push newChild\n\n        for rowKey in pivotData.getRowKeys()\n            value = pivotData.getAggregator(rowKey, []).value()\n            if value?\n                addToTree(tree, rowKey, value)\n\n        color = d3.scale.category10()\n        width = opts.d3.width()\n        height = opts.d3.height()\n\n        treemap = d3.layout.treemap()\n            .size([width, height])\n            .sticky(true)\n            .value( (d) -> d.size )\n\n        d3.select(result[0])\n            .append(\"div\")\n                .style(\"position\", \"relative\")\n                .style(\"width\", width + \"px\")\n                .style(\"height\", height + \"px\")\n            .datum(tree).selectAll(\".node\")\n                .data(treemap.padding([15,0,0,0]).value( (d) -> d.value ).nodes)\n            .enter().append(\"div\")\n            .attr(\"class\", \"node\")\n            .style(\"background\", (d) -> if d.children? then \"lightgrey\" else color(d.name) )\n            .text( (d) -> d.name )\n            .call ->\n                    this.style(\"left\",  (d) -> d.x+\"px\" )\n                        .style(\"top\",   (d) -> d.y+\"px\" )\n                        .style(\"width\", (d) -> Math.max(0, d.dx - 1)+\"px\" )\n                        .style(\"height\",(d) -> Math.max(0, d.dy - 1)+\"px\" )\n                    return\n        \n        return result\n    \n\n\n","(function(){var e;(e=function(e){return\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"jquery\")):\"function\"==typeof define&&define.amd?define([\"jquery\"],e):e(jQuery)})(function(e){return e.pivotUtilities.d3_renderers={Treemap:function(t,n){var i,r,u,l,d,o,a,c,h,f,s,p,y;for(u={localeStrings:{},d3:{width:function(){return e(window).width()/1.4},height:function(){return e(window).height()/1.4}}},n=e.extend(u,n),c=e(\"<div>\").css({width:\"100%\",height:\"100%\"}),f={name:\"All\",children:[]},i=function(e,t,n){var r,u,l,d,o,a;if(0===t.length)return void(e.value=n);for(null==e.children&&(e.children=[]),a=t.shift(),o=e.children,u=0,l=o.length;l>u;u++)if(r=o[u],r.name===a)return void i(r,t,n);return d={name:a},i(d,t,n),e.children.push(d)},a=t.getRowKeys(),d=0,o=a.length;o>d;d++)h=a[d],p=t.getAggregator(h,[]).value(),null!=p&&i(f,h,p);return r=d3.scale.category10(),y=n.d3.width(),l=n.d3.height(),s=d3.layout.treemap().size([y,l]).sticky(!0).value(function(e){return e.size}),d3.select(c[0]).append(\"div\").style(\"position\",\"relative\").style(\"width\",y+\"px\").style(\"height\",l+\"px\").datum(f).selectAll(\".node\").data(s.padding([15,0,0,0]).value(function(e){return e.value}).nodes).enter().append(\"div\").attr(\"class\",\"node\").style(\"background\",function(e){return null!=e.children?\"lightgrey\":r(e.name)}).text(function(e){return e.name}).call(function(){this.style(\"left\",function(e){return e.x+\"px\"}).style(\"top\",function(e){return e.y+\"px\"}).style(\"width\",function(e){return Math.max(0,e.dx-1)+\"px\"}).style(\"height\",function(e){return Math.max(0,e.dy-1)+\"px\"})}),c}}})}).call(this);\n//# sourceMappingURL=d3_renderers.min.js.map"],"sourceRoot":"/source/"}
\ No newline at end of file
+{"version":3,"sources":["d3_renderers.coffee","d3_renderers.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","d3","$","pivotUtilities","d3_renderers","Treemap","pivotData","opts","addToTree","color","defaults","height","i","len","ref","result","rowKey","tree","treemap","value","width","localeStrings","window","extend","css","name","children","path","child","newChild","x","length","shift","push","getRowKeys","getAggregator","scale","category10","layout","size","sticky","d","select","append","style","datum","selectAll","data","padding","nodes","enter","attr","text","call","this","y","Math","max","dx","dy"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAXC,UAAyC,gBAAVC,QACrCF,EAAYG,QAAQ,UAAWA,QAAQ,OAClB,kBAAVC,SAAyBA,OAAOC,IAC3CD,QAAQ,SAAU,MAAOJ,GAGzBA,EAAYM,OAAQC,MAEb,SAACC,EAAGD,GCKf,MDHAC,GAAEC,eAAeC,cAAeC,QAAS,SAACC,EAAWC,GACjD,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAyBA,KAzBAV,GACIW,iBACApB,IACImB,MAAO,WCMT,MDNYlB,GAAEoB,QAAQF,QAAU,KAC9BT,OAAQ,WCQV,MDRaT,GAAEoB,QAAQX,SAAW,OAExCJ,EAAOL,EAAEqB,QAAO,KAAUb,EAAUH,GAGpCQ,EAASb,EAAE,SAASsB,KAAIJ,MAAO,OAAQT,OAAQ,SAE/CM,GAAOQ,KAAM,MAAOC,aACpBlB,EAAY,SAACS,EAAMU,EAAMR,GACrB,GAAAS,GAAAhB,EAAAC,EAAAgB,EAAAf,EAAAgB,CAAA,IAAkB,IAAfH,EAAKI,OAEJ,YADAd,EAAKE,MAAQA,EAIjB,KCamB,MAAjBF,EAAKS,WDfPT,EAAKS,aACLI,EAAIH,EAAKK,QACTlB,EAAAG,EAAAS,SAAAd,EAAA,EAAAC,EAAAC,EAAAiB,OAAAnB,EAAAC,EAAAD,ICoBA,GADAgB,EAAQd,EAAIF,GDnBoBgB,EAAMH,OAAQK,EAE1C,WADAtB,GAAUoB,EAAOD,EAAMR,EC6B7B,OD3BEU,IAAWJ,KAAMK,GACjBtB,EAAUqB,EAAUF,EAAMR,GAC1BF,EAAKS,SAASO,KAAKJ,IAEvBf,EAAAR,EAAA4B,aAAAtB,EAAA,EAAAC,EAAAC,EAAAiB,OAAAnB,EAAAC,EAAAD,IC2BEI,EAASF,EAAIF,GD1BXO,EAAQb,EAAU6B,cAAcnB,MAAYG,QACzC,MAAAA,GACCX,EAAUS,EAAMD,EAAQG,EA6BhC,OA3BAV,GAAQR,EAAGmC,MAAMC,aACjBjB,EAAQb,EAAKN,GAAGmB,QAChBT,EAASJ,EAAKN,GAAGU,SAEjBO,EAAUjB,EAAGqC,OAAOpB,UACfqB,MAAMnB,EAAOT,IACb6B,QAAO,GACPrB,MAAO,SAACsB,GCyBX,MDzBiBA,GAAEF,OAErBtC,EAAGyC,OAAO3B,EAAO,IACZ4B,OAAO,OACHC,MAAM,WAAY,YAClBA,MAAM,QAASxB,EAAQ,MACvBwB,MAAM,SAAUjC,EAAS,MAC7BkC,MAAM5B,GAAM6B,UAAU,SAClBC,KAAK7B,EAAQ8B,SAAS,GAAG,EAAE,EAAE,IAAI7B,MAAO,SAACsB,GCoBhD,MDpBsDA,GAAEtB,QAAQ8B,OAC7DC,QAAQP,OAAO,OACfQ,KAAK,QAAS,QACdP,MAAM,aAAc,SAACH,GAAM,MAAG,OAAAA,EAAAf,SAAiB,YAAiBjB,EAAMgC,EAAEhB,QACxE2B,KAAM,SAACX,GCwBV,MDxBgBA,GAAEhB,OACf4B,KAAK,WACEC,KAAKV,MAAM,OAAS,SAACH,GCyB7B,MDzBmCA,GAAEX,EAAE,OAC1Bc,MAAM,MAAS,SAACH,GC0B7B,MD1BmCA,GAAEc,EAAE,OAC1BX,MAAM,QAAS,SAACH,GC2B7B,MD3BmCe,MAAKC,IAAI,EAAGhB,EAAEiB,GAAK,GAAG,OAC5Cd,MAAM,SAAS,SAACH,GC4B7B,MD5BmCe,MAAKC,IAAI,EAAGhB,EAAEkB,GAAK,GAAG,SAGtD5C,QCiCZsC,KAAKC","file":"d3_renderers.min.js","sourcesContent":["callWithJQuery = (pivotModule) ->\n    if typeof exports is \"object\" and typeof module is \"object\" # CommonJS\n        pivotModule require(\"jquery\"), require(\"d3\")\n    else if typeof define is \"function\" and define.amd # AMD\n        define [\"jquery\", \"d3\"], pivotModule\n    # Plain browser env\n    else\n        pivotModule jQuery, d3\n\ncallWithJQuery ($, d3) ->\n\n    $.pivotUtilities.d3_renderers = Treemap: (pivotData, opts) ->\n        defaults =\n            localeStrings: {}\n            d3:\n                width: -> $(window).width() / 1.4\n                height: -> $(window).height() / 1.4\n\n        opts = $.extend(true, {}, defaults, opts)\n\n\n        result = $(\"<div>\").css(width: \"100%\", height: \"100%\")\n\n        tree = name: \"All\", children: []\n        addToTree = (tree, path, value) ->\n            if path.length == 0\n                tree.value = value\n                return\n            tree.children ?= []\n            x = path.shift()\n            for child in tree.children when child.name == x\n                addToTree(child, path, value)\n                return\n            newChild = name: x\n            addToTree(newChild, path, value)\n            tree.children.push newChild\n\n        for rowKey in pivotData.getRowKeys()\n            value = pivotData.getAggregator(rowKey, []).value()\n            if value?\n                addToTree(tree, rowKey, value)\n\n        color = d3.scale.category10()\n        width = opts.d3.width()\n        height = opts.d3.height()\n\n        treemap = d3.layout.treemap()\n            .size([width, height])\n            .sticky(true)\n            .value( (d) -> d.size )\n\n        d3.select(result[0])\n            .append(\"div\")\n                .style(\"position\", \"relative\")\n                .style(\"width\", width + \"px\")\n                .style(\"height\", height + \"px\")\n            .datum(tree).selectAll(\".node\")\n                .data(treemap.padding([15,0,0,0]).value( (d) -> d.value ).nodes)\n            .enter().append(\"div\")\n            .attr(\"class\", \"node\")\n            .style(\"background\", (d) -> if d.children? then \"lightgrey\" else color(d.name) )\n            .text( (d) -> d.name )\n            .call ->\n                    this.style(\"left\",  (d) -> d.x+\"px\" )\n                        .style(\"top\",   (d) -> d.y+\"px\" )\n                        .style(\"width\", (d) -> Math.max(0, d.dx - 1)+\"px\" )\n                        .style(\"height\",(d) -> Math.max(0, d.dy - 1)+\"px\" )\n                    return\n\n        return result\n\n\n\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"), require(\"d3\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\", \"d3\"], pivotModule);\n    } else {\n      return pivotModule(jQuery, d3);\n    }\n  };\n\n  callWithJQuery(function($, d3) {\n    return $.pivotUtilities.d3_renderers = {\n      Treemap: function(pivotData, opts) {\n        var addToTree, color, defaults, height, i, len, ref, result, rowKey, tree, treemap, value, width;\n        defaults = {\n          localeStrings: {},\n          d3: {\n            width: function() {\n              return $(window).width() / 1.4;\n            },\n            height: function() {\n              return $(window).height() / 1.4;\n            }\n          }\n        };\n        opts = $.extend(true, {}, defaults, opts);\n        result = $(\"<div>\").css({\n          width: \"100%\",\n          height: \"100%\"\n        });\n        tree = {\n          name: \"All\",\n          children: []\n        };\n        addToTree = function(tree, path, value) {\n          var child, i, len, newChild, ref, x;\n          if (path.length === 0) {\n            tree.value = value;\n            return;\n          }\n          if (tree.children == null) {\n            tree.children = [];\n          }\n          x = path.shift();\n          ref = tree.children;\n          for (i = 0, len = ref.length; i < len; i++) {\n            child = ref[i];\n            if (!(child.name === x)) {\n              continue;\n            }\n            addToTree(child, path, value);\n            return;\n          }\n          newChild = {\n            name: x\n          };\n          addToTree(newChild, path, value);\n          return tree.children.push(newChild);\n        };\n        ref = pivotData.getRowKeys();\n        for (i = 0, len = ref.length; i < len; i++) {\n          rowKey = ref[i];\n          value = pivotData.getAggregator(rowKey, []).value();\n          if (value != null) {\n            addToTree(tree, rowKey, value);\n          }\n        }\n        color = d3.scale.category10();\n        width = opts.d3.width();\n        height = opts.d3.height();\n        treemap = d3.layout.treemap().size([width, height]).sticky(true).value(function(d) {\n          return d.size;\n        });\n        d3.select(result[0]).append(\"div\").style(\"position\", \"relative\").style(\"width\", width + \"px\").style(\"height\", height + \"px\").datum(tree).selectAll(\".node\").data(treemap.padding([15, 0, 0, 0]).value(function(d) {\n          return d.value;\n        }).nodes).enter().append(\"div\").attr(\"class\", \"node\").style(\"background\", function(d) {\n          if (d.children != null) {\n            return \"lightgrey\";\n          } else {\n            return color(d.name);\n          }\n        }).text(function(d) {\n          return d.name;\n        }).call(function() {\n          this.style(\"left\", function(d) {\n            return d.x + \"px\";\n          }).style(\"top\", function(d) {\n            return d.y + \"px\";\n          }).style(\"width\", function(d) {\n            return Math.max(0, d.dx - 1) + \"px\";\n          }).style(\"height\", function(d) {\n            return Math.max(0, d.dy - 1) + \"px\";\n          });\n        });\n        return result;\n      }\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=d3_renderers.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.js.js
index 9bce81cc90173d4890035a4be1ce3fc6a399656e..a8f659a0b41d5e435938cfcf9b14c93d20a6b0fe 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.js.js
@@ -18,7 +18,7 @@
         defaults = {
           localeStrings: {}
         };
-        opts = $.extend(defaults, opts);
+        opts = $.extend(true, {}, defaults, opts);
         rowKeys = pivotData.getRowKeys();
         if (rowKeys.length === 0) {
           rowKeys.push([]);
@@ -77,4 +77,4 @@
 
 }).call(this);
 
-//# sourceMappingURL=export_renderers.js.map
\ No newline at end of file
+//# sourceMappingURL=export_renderers.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.js.map.txt
index f827dc98044725c509ba9bec843e410ed8cf3a76..9440add13c6cb2545e3958e72e4af7c6f8b1e61a 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["export_renderers.coffee"],"names":[],"mappings":"AAAA;AAAA,MAAA,cAAA;;AAAA,EAAA,cAAA,GAAiB,SAAC,WAAD,GAAA;AACb,IAAA,IAAG,MAAA,CAAA,OAAA,KAAkB,QAAlB,IAA+B,MAAA,CAAA,MAAA,KAAiB,QAAnD;aACI,WAAA,CAAY,OAAA,CAAQ,QAAR,CAAZ,EADJ;KAAA,MAEK,IAAG,MAAA,CAAA,MAAA,KAAiB,UAAjB,IAAgC,MAAM,CAAC,GAA1C;aACD,MAAA,CAAO,CAAC,QAAD,CAAP,EAAmB,WAAnB,EADC;KAAA,MAAA;aAID,WAAA,CAAY,MAAZ,EAJC;KAHQ;EAAA,CAAjB,CAAA;;AAAA,EASA,cAAA,CAAe,SAAC,CAAD,GAAA;WAEX,CAAC,CAAC,cAAc,CAAC,gBAAjB,GAAoC;AAAA,MAAA,YAAA,EAAc,SAAC,SAAD,EAAY,IAAZ,GAAA;AAC9C,YAAA,uJAAA;AAAA,QAAA,QAAA,GACI;AAAA,UAAA,aAAA,EAAe,EAAf;SADJ,CAAA;AAAA,QAGA,IAAA,GAAO,CAAC,CAAC,MAAF,CAAS,QAAT,EAAmB,IAAnB,CAHP,CAAA;AAAA,QAKA,OAAA,GAAU,SAAS,CAAC,UAAV,CAAA,CALV,CAAA;AAMA,QAAA,IAAmB,OAAO,CAAC,MAAR,KAAkB,CAArC;AAAA,UAAA,OAAO,CAAC,IAAR,CAAa,EAAb,CAAA,CAAA;SANA;AAAA,QAOA,OAAA,GAAU,SAAS,CAAC,UAAV,CAAA,CAPV,CAAA;AAQA,QAAA,IAAmB,OAAO,CAAC,MAAR,KAAkB,CAArC;AAAA,UAAA,OAAO,CAAC,IAAR,CAAa,EAAb,CAAA,CAAA;SARA;AAAA,QASA,QAAA,GAAW,SAAS,CAAC,QATrB,CAAA;AAAA,QAUA,QAAA,GAAW,SAAS,CAAC,QAVrB,CAAA;AAAA,QAYA,MAAA,GAAS,EAZT,CAAA;AAAA,QAcA,GAAA,GAAM,EAdN,CAAA;AAeA,aAAA,0CAAA;gCAAA;AACI,UAAA,GAAG,CAAC,IAAJ,CAAS,OAAT,CAAA,CADJ;AAAA,SAfA;AAiBA,QAAA,IAAG,OAAO,CAAC,MAAR,KAAkB,CAAlB,IAAwB,OAAQ,CAAA,CAAA,CAAE,CAAC,MAAX,KAAqB,CAAhD;AACI,UAAA,GAAG,CAAC,IAAJ,CAAS,SAAS,CAAC,cAAnB,CAAA,CADJ;SAAA,MAAA;AAGI,eAAA,2CAAA;gCAAA;AACI,YAAA,GAAG,CAAC,IAAJ,CAAS,MAAM,CAAC,IAAP,CAAY,GAAZ,CAAT,CAAA,CADJ;AAAA,WAHJ;SAjBA;AAAA,QAuBA,MAAM,CAAC,IAAP,CAAY,GAAZ,CAvBA,CAAA;AAyBA,aAAA,2CAAA;8BAAA;AACI,UAAA,GAAA,GAAM,EAAN,CAAA;AACA,eAAA,0CAAA;0BAAA;AACI,YAAA,GAAG,CAAC,IAAJ,CAAS,CAAT,CAAA,CADJ;AAAA,WADA;AAIA,eAAA,2CAAA;gCAAA;AACI,YAAA,GAAA,GAAM,SAAS,CAAC,aAAV,CAAwB,MAAxB,EAAgC,MAAhC,CAAN,CAAA;AACA,YAAA,IAAG,mBAAH;AACI,cAAA,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,KAAJ,CAAA,CAAT,CAAA,CADJ;aAAA,MAAA;AAGI,cAAA,GAAG,CAAC,IAAJ,CAAS,EAAT,CAAA,CAHJ;aAFJ;AAAA,WAJA;AAAA,UAUA,MAAM,CAAC,IAAP,CAAY,GAAZ,CAVA,CADJ;AAAA,SAzBA;AAAA,QAqCA,IAAA,GAAO,EArCP,CAAA;AAsCA,aAAA,0CAAA;wBAAA;AACI,UAAA,IAAA,IAAQ,CAAC,CAAC,IAAF,CAAO,IAAP,CAAA,GAAa,IAArB,CADJ;AAAA,SAtCA;AAyCA,eAAO,CAAA,CAAE,YAAF,CAAe,CAAC,IAAhB,CAAqB,IAArB,CAA0B,CAAC,GAA3B,CACC;AAAA,UAAA,KAAA,EAAO,CAAC,CAAA,CAAE,MAAF,CAAS,CAAC,KAAV,CAAA,CAAA,GAAoB,CAArB,CAAA,GAA0B,IAAjC;AAAA,UACA,MAAA,EAAQ,CAAC,CAAA,CAAE,MAAF,CAAS,CAAC,MAAV,CAAA,CAAA,GAAqB,CAAtB,CAAA,GAA2B,IADnC;SADD,CAAP,CA1C8C;MAAA,CAAd;MAFzB;EAAA,CAAf,CATA,CAAA;AAAA","file":"export_renderers.js","sourceRoot":"/source/","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    $.pivotUtilities.export_renderers = \"TSV Export\": (pivotData, opts) ->\n        defaults =\n            localeStrings: {}\n\n        opts = $.extend defaults, opts\n\n        rowKeys = pivotData.getRowKeys()\n        rowKeys.push [] if rowKeys.length == 0\n        colKeys = pivotData.getColKeys()\n        colKeys.push [] if colKeys.length == 0\n        rowAttrs = pivotData.rowAttrs\n        colAttrs = pivotData.colAttrs\n\n        result = []\n\n        row = []\n        for rowAttr in rowAttrs\n            row.push rowAttr\n        if colKeys.length == 1 and colKeys[0].length == 0\n            row.push pivotData.aggregatorName\n        else\n            for colKey in colKeys\n                row.push colKey.join(\"-\")\n\n        result.push row\n\n        for rowKey in rowKeys\n            row = []\n            for r in rowKey\n                row.push r\n\n            for colKey in colKeys\n                agg = pivotData.getAggregator(rowKey, colKey)\n                if agg.value()?\n                    row.push agg.value()\n                else\n                    row.push \"\"\n            result.push row\n        text = \"\"\n        for r in result\n            text += r.join(\"\\t\")+\"\\n\"\n        \n        return $(\"<textarea>\").text(text).css(\n                width: ($(window).width() / 2) + \"px\", \n                height: ($(window).height() / 2) + \"px\")\n    \n"]}
\ No newline at end of file
+{"version":3,"file":"export_renderers.js","sources":["export_renderers.coffee"],"names":[],"mappings":"AAAA;AAAA,MAAA;;EAAA,cAAA,GAAiB,SAAC,WAAD;IACb,IAAG,OAAO,OAAP,KAAkB,QAAlB,IAA+B,OAAO,MAAP,KAAiB,QAAnD;aACI,WAAA,CAAY,OAAA,CAAQ,QAAR,CAAZ,EADJ;KAAA,MAEK,IAAG,OAAO,MAAP,KAAiB,UAAjB,IAAgC,MAAM,CAAC,GAA1C;aACD,MAAA,CAAO,CAAC,QAAD,CAAP,EAAmB,WAAnB,EADC;KAAA,MAAA;aAID,WAAA,CAAY,MAAZ,EAJC;;EAHQ;;EASjB,cAAA,CAAe,SAAC,CAAD;WAEX,CAAC,CAAC,cAAc,CAAC,gBAAjB,GAAoC;MAAA,YAAA,EAAc,SAAC,SAAD,EAAY,IAAZ;AAC9C,YAAA;QAAA,QAAA,GAAW;UAAA,aAAA,EAAe,EAAf;;QAEX,IAAA,GAAO,CAAC,CAAC,MAAF,CAAS,IAAT,EAAe,EAAf,EAAmB,QAAnB,EAA6B,IAA7B;QAEP,OAAA,GAAU,SAAS,CAAC,UAAV,CAAA;QACV,IAAmB,OAAO,CAAC,MAAR,KAAkB,CAArC;UAAA,OAAO,CAAC,IAAR,CAAa,EAAb,EAAA;;QACA,OAAA,GAAU,SAAS,CAAC,UAAV,CAAA;QACV,IAAmB,OAAO,CAAC,MAAR,KAAkB,CAArC;UAAA,OAAO,CAAC,IAAR,CAAa,EAAb,EAAA;;QACA,QAAA,GAAW,SAAS,CAAC;QACrB,QAAA,GAAW,SAAS,CAAC;QAErB,MAAA,GAAS;QAET,GAAA,GAAM;AACN,aAAA,0CAAA;;UACI,GAAG,CAAC,IAAJ,CAAS,OAAT;AADJ;QAEA,IAAG,OAAO,CAAC,MAAR,KAAkB,CAAlB,IAAwB,OAAQ,CAAA,CAAA,CAAE,CAAC,MAAX,KAAqB,CAAhD;UACI,GAAG,CAAC,IAAJ,CAAS,SAAS,CAAC,cAAnB,EADJ;SAAA,MAAA;AAGI,eAAA,2CAAA;;YACI,GAAG,CAAC,IAAJ,CAAS,MAAM,CAAC,IAAP,CAAY,GAAZ,CAAT;AADJ,WAHJ;;QAMA,MAAM,CAAC,IAAP,CAAY,GAAZ;AAEA,aAAA,2CAAA;;UACI,GAAA,GAAM;AACN,eAAA,0CAAA;;YACI,GAAG,CAAC,IAAJ,CAAS,CAAT;AADJ;AAGA,eAAA,2CAAA;;YACI,GAAA,GAAM,SAAS,CAAC,aAAV,CAAwB,MAAxB,EAAgC,MAAhC;YACN,IAAG,mBAAH;cACI,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,KAAJ,CAAA,CAAT,EADJ;aAAA,MAAA;cAGI,GAAG,CAAC,IAAJ,CAAS,EAAT,EAHJ;;AAFJ;UAMA,MAAM,CAAC,IAAP,CAAY,GAAZ;AAXJ;QAYA,IAAA,GAAO;AACP,aAAA,0CAAA;;UACI,IAAA,IAAQ,CAAC,CAAC,IAAF,CAAO,IAAP,CAAA,GAAa;AADzB;AAGA,eAAO,CAAA,CAAE,YAAF,CAAe,CAAC,IAAhB,CAAqB,IAArB,CAA0B,CAAC,GAA3B,CACC;UAAA,KAAA,EAAO,CAAC,CAAA,CAAE,MAAF,CAAS,CAAC,KAAV,CAAA,CAAA,GAAoB,CAArB,CAAA,GAA0B,IAAjC;UACA,MAAA,EAAQ,CAAC,CAAA,CAAE,MAAF,CAAS,CAAC,MAAV,CAAA,CAAA,GAAqB,CAAtB,CAAA,GAA2B,IADnC;SADD;MAzCuC,CAAd;;EAFzB,CAAf;AATA","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    $.pivotUtilities.export_renderers = \"TSV Export\": (pivotData, opts) ->\n        defaults = localeStrings: {}\n\n        opts = $.extend(true, {}, defaults, opts)\n\n        rowKeys = pivotData.getRowKeys()\n        rowKeys.push [] if rowKeys.length == 0\n        colKeys = pivotData.getColKeys()\n        colKeys.push [] if colKeys.length == 0\n        rowAttrs = pivotData.rowAttrs\n        colAttrs = pivotData.colAttrs\n\n        result = []\n\n        row = []\n        for rowAttr in rowAttrs\n            row.push rowAttr\n        if colKeys.length == 1 and colKeys[0].length == 0\n            row.push pivotData.aggregatorName\n        else\n            for colKey in colKeys\n                row.push colKey.join(\"-\")\n\n        result.push row\n\n        for rowKey in rowKeys\n            row = []\n            for r in rowKey\n                row.push r\n\n            for colKey in colKeys\n                agg = pivotData.getAggregator(rowKey, colKey)\n                if agg.value()?\n                    row.push agg.value()\n                else\n                    row.push \"\"\n            result.push row\n        text = \"\"\n        for r in result\n            text += r.join(\"\\t\")+\"\\n\"\n\n        return $(\"<textarea>\").text(text).css(\n                width: ($(window).width() / 2) + \"px\",\n                height: ($(window).height() / 2) + \"px\")\n\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.min.js.js
index 5a7921b8585b0c1c689c1f08d8dfb408bc40bb6a..505e9a23e136fd270f7211c2067b47a040befa6e 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.min.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.min.js.js
@@ -1,2 +1,2 @@
-(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){return e.pivotUtilities.export_renderers={"TSV Export":function(t,n){var r,o,h,u,i,l,g,s,f,p,a,c,d,w,x,y,j,v,m,q,A,b,K,S,C;for(i={localeStrings:{}},n=e.extend(i,n),S=t.getRowKeys(),0===S.length&&S.push([]),u=t.getColKeys(),0===u.length&&u.push([]),b=t.rowAttrs,o=t.colAttrs,m=[],q=[],l=0,p=b.length;p>l;l++)A=b[l],q.push(A);if(1===u.length&&0===u[0].length)q.push(t.aggregatorName);else for(g=0,a=u.length;a>g;g++)h=u[g],q.push(h.join("-"));for(m.push(q),s=0,c=S.length;c>s;s++){for(K=S[s],q=[],f=0,d=K.length;d>f;f++)v=K[f],q.push(v);for(y=0,w=u.length;w>y;y++)h=u[y],r=t.getAggregator(K,h),q.push(null!=r.value()?r.value():"");m.push(q)}for(C="",j=0,x=m.length;x>j;j++)v=m[j],C+=v.join("	")+"\n";return e("<textarea>").text(C).css({width:e(window).width()/2+"px",height:e(window).height()/2+"px"})}}})}).call(this);
-//# sourceMappingURL=export_renderers.min.js.map
\ No newline at end of file
+(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){return e.pivotUtilities.export_renderers={"TSV Export":function(t,n){var r,o,h,u,i,l,g,s,p,f,a,c,d,w,x,y,j,v,m,q,A,b,K,S,C;for(i={localeStrings:{}},n=e.extend(!0,{},i,n),S=t.getRowKeys(),0===S.length&&S.push([]),u=t.getColKeys(),0===u.length&&u.push([]),b=t.rowAttrs,o=t.colAttrs,m=[],q=[],l=0,f=b.length;l<f;l++)A=b[l],q.push(A);if(1===u.length&&0===u[0].length)q.push(t.aggregatorName);else for(g=0,a=u.length;g<a;g++)h=u[g],q.push(h.join("-"));for(m.push(q),s=0,c=S.length;s<c;s++){for(K=S[s],q=[],p=0,d=K.length;p<d;p++)v=K[p],q.push(v);for(y=0,w=u.length;y<w;y++)h=u[y],r=t.getAggregator(K,h),null!=r.value()?q.push(r.value()):q.push("");m.push(q)}for(C="",j=0,x=m.length;j<x;j++)v=m[j],C+=v.join("\t")+"\n";return e("<textarea>").text(C).css({width:e(window).width()/2+"px",height:e(window).height()/2+"px"})}}})}).call(this);
+//# sourceMappingURL=export_renderers.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.min.js.map.txt
index d4bdb20f67024b3e34c349efb28f79189a8d5a77..995e5b24b74b4b85317ec88bcf01c12ae8fdcce6 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.min.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/export_renderers.min.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["/source/export_renderers.coffee","export_renderers.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","pivotUtilities","export_renderers","TSV Export","pivotData","opts","agg","colAttrs","colKey","colKeys","defaults","i","j","k","l","len","len1","len2","len3","len4","len5","m","n","r","result","row","rowAttr","rowAttrs","rowKey","rowKeys","text","localeStrings","extend","getRowKeys","length","push","getColKeys","aggregatorName","join","getAggregator","value","css","width","window","height","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAlBC,UAAgD,gBAAjBC,QAC9BF,EAAYG,QAAQ,WACC,kBAAjBC,SAAgCA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GCKZ,MDHAA,GAAEC,eAAeC,kBAAmBC,aAAc,SAACC,EAAWC,GAC1D,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAeA,KAfApB,GACIqB,kBAEJ1B,EAAOL,EAAEgC,OAAOtB,EAAUL,GAE1BwB,EAAUzB,EAAU6B,aACiB,IAAlBJ,EAAQK,QAA3BL,EAAQM,SACR1B,EAAUL,EAAUgC,aACiB,IAAlB3B,EAAQyB,QAA3BzB,EAAQ0B,SACRR,EAAWvB,EAAUuB,SACrBpB,EAAWH,EAAUG,SAErBiB,KAEAC,KACAd,EAAA,EAAAI,EAAAY,EAAAO,OAAAnB,EAAAJ,EAAAA,ICOEe,EAAUC,EAAShB,GDNjBc,EAAIU,KAAKT,EACb,IAAqB,IAAlBjB,EAAQyB,QAAqC,IAArBzB,EAAQ,GAAGyB,OAClCT,EAAIU,KAAK/B,EAAUiC,oBAEnB,KAAAzB,EAAA,EAAAI,EAAAP,EAAAyB,OAAAlB,EAAAJ,EAAAA,ICSAJ,EAASC,EAAQG,GDRba,EAAIU,KAAK3B,EAAO8B,KAAK,KAI7B,KAFAd,EAAOW,KAAKV,GAEZZ,EAAA,EAAAI,EAAAY,EAAAK,OAAAjB,EAAAJ,EAAAA,IAAA,CAEI,ICQFe,EAASC,EAAQhB,GDTfY,KACAX,EAAA,EAAAI,EAAAU,EAAAM,OAAAhB,EAAAJ,EAAAA,ICWAS,EAAIK,EAAOd,GDVPW,EAAIU,KAAKZ,EAEb,KAAAF,EAAA,EAAAF,EAAAV,EAAAyB,OAAAf,EAAAE,EAAAA,ICYAb,EAASC,EAAQY,GDXbf,EAAMF,EAAUmC,cAAcX,EAAQpB,GAElCiB,EAAIU,KADL,MAAA7B,EAAAkC,QACUlC,EAAIkC,QAEJ,GACjBhB,GAAOW,KAAKV,GAEhB,IADAK,EAAO,GACPR,EAAA,EAAAF,EAAAI,EAAAU,OAAAd,EAAAE,EAAAA,ICgBEC,EAAIC,EAAOF,GDfTQ,GAAQP,EAAEe,KAAK,KAAM,IAEzB,OAAOtC,GAAE,cAAc8B,KAAKA,GAAMW,KAC1BC,MAAQ1C,EAAE2C,QAAQD,QAAU,EAAK,KACjCE,OAAS5C,EAAE2C,QAAQC,SAAW,EAAK,aCsBhDC,KAAKC","file":"export_renderers.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    $.pivotUtilities.export_renderers = \"TSV Export\": (pivotData, opts) ->\n        defaults =\n            localeStrings: {}\n\n        opts = $.extend defaults, opts\n\n        rowKeys = pivotData.getRowKeys()\n        rowKeys.push [] if rowKeys.length == 0\n        colKeys = pivotData.getColKeys()\n        colKeys.push [] if colKeys.length == 0\n        rowAttrs = pivotData.rowAttrs\n        colAttrs = pivotData.colAttrs\n\n        result = []\n\n        row = []\n        for rowAttr in rowAttrs\n            row.push rowAttr\n        if colKeys.length == 1 and colKeys[0].length == 0\n            row.push pivotData.aggregatorName\n        else\n            for colKey in colKeys\n                row.push colKey.join(\"-\")\n\n        result.push row\n\n        for rowKey in rowKeys\n            row = []\n            for r in rowKey\n                row.push r\n\n            for colKey in colKeys\n                agg = pivotData.getAggregator(rowKey, colKey)\n                if agg.value()?\n                    row.push agg.value()\n                else\n                    row.push \"\"\n            result.push row\n        text = \"\"\n        for r in result\n            text += r.join(\"\\t\")+\"\\n\"\n        \n        return $(\"<textarea>\").text(text).css(\n                width: ($(window).width() / 2) + \"px\", \n                height: ($(window).height() / 2) + \"px\")\n    \n","(function(){var e;(e=function(e){return\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"jquery\")):\"function\"==typeof define&&define.amd?define([\"jquery\"],e):e(jQuery)})(function(e){return e.pivotUtilities.export_renderers={\"TSV Export\":function(t,n){var r,o,h,u,i,l,g,s,f,p,a,c,d,w,x,y,j,v,m,q,A,b,K,S,C;for(i={localeStrings:{}},n=e.extend(i,n),S=t.getRowKeys(),0===S.length&&S.push([]),u=t.getColKeys(),0===u.length&&u.push([]),b=t.rowAttrs,o=t.colAttrs,m=[],q=[],l=0,p=b.length;p>l;l++)A=b[l],q.push(A);if(1===u.length&&0===u[0].length)q.push(t.aggregatorName);else for(g=0,a=u.length;a>g;g++)h=u[g],q.push(h.join(\"-\"));for(m.push(q),s=0,c=S.length;c>s;s++){for(K=S[s],q=[],f=0,d=K.length;d>f;f++)v=K[f],q.push(v);for(y=0,w=u.length;w>y;y++)h=u[y],r=t.getAggregator(K,h),q.push(null!=r.value()?r.value():\"\");m.push(q)}for(C=\"\",j=0,x=m.length;x>j;j++)v=m[j],C+=v.join(\"\t\")+\"\\n\";return e(\"<textarea>\").text(C).css({width:e(window).width()/2+\"px\",height:e(window).height()/2+\"px\"})}}})}).call(this);\n//# sourceMappingURL=export_renderers.min.js.map"],"sourceRoot":"/source/"}
\ No newline at end of file
+{"version":3,"sources":["export_renderers.coffee","export_renderers.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","pivotUtilities","export_renderers","TSV Export","pivotData","opts","agg","colAttrs","colKey","colKeys","defaults","i","j","k","l","len","len1","len2","len3","len4","len5","m","n","r","result","row","rowAttr","rowAttrs","rowKey","rowKeys","text","localeStrings","extend","getRowKeys","length","push","getColKeys","aggregatorName","join","getAggregator","value","css","width","window","height","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAXC,UAAyC,gBAAVC,QACrCF,EAAYG,QAAQ,WACC,kBAAVC,SAAyBA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GCKZ,MDHAA,GAAEC,eAAeC,kBAAmBC,aAAc,SAACC,EAAWC,GAC1D,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAcA,KAdApB,GAAWqB,kBAEX1B,EAAOL,EAAEgC,QAAO,KAAUtB,EAAUL,GAEpCwB,EAAUzB,EAAU6B,aACiB,IAAlBJ,EAAQK,QAA3BL,EAAQM,SACR1B,EAAUL,EAAUgC,aACiB,IAAlB3B,EAAQyB,QAA3BzB,EAAQ0B,SACRR,EAAWvB,EAAUuB,SACrBpB,EAAWH,EAAUG,SAErBiB,KAEAC,KACAd,EAAA,EAAAI,EAAAY,EAAAO,OAAAvB,EAAAI,EAAAJ,ICQEe,EAAUC,EAAShB,GDPjBc,EAAIU,KAAKT,EACb,IAAqB,IAAlBjB,EAAQyB,QAAqC,IAArBzB,EAAQ,GAAGyB,OAClCT,EAAIU,KAAK/B,EAAUiC,oBAEnB,KAAAzB,EAAA,EAAAI,EAAAP,EAAAyB,OAAAtB,EAAAI,EAAAJ,ICUAJ,EAASC,EAAQG,GDTba,EAAIU,KAAK3B,EAAO8B,KAAK,KAI7B,KAFAd,EAAOW,KAAKV,GAEZZ,EAAA,EAAAI,EAAAY,EAAAK,OAAArB,EAAAI,EAAAJ,IAAA,CAEI,ICSFe,EAASC,EAAQhB,GDVfY,KACAX,EAAA,EAAAI,EAAAU,EAAAM,OAAApB,EAAAI,EAAAJ,ICYAS,EAAIK,EAAOd,GDXPW,EAAIU,KAAKZ,EAEb,KAAAF,EAAA,EAAAF,EAAAV,EAAAyB,OAAAb,EAAAF,EAAAE,ICaAb,EAASC,EAAQY,GDZbf,EAAMF,EAAUmC,cAAcX,EAAQpB,GACnC,MAAAF,EAAAkC,QACCf,EAAIU,KAAK7B,EAAIkC,SAEbf,EAAIU,KAAK,GACjBX,GAAOW,KAAKV,GAEhB,IADAK,EAAO,GACPR,EAAA,EAAAF,EAAAI,EAAAU,OAAAZ,EAAAF,EAAAE,ICiBEC,EAAIC,EAAOF,GDhBTQ,GAAQP,EAAEe,KAAK,MAAM,IAEzB,OAAOtC,GAAE,cAAc8B,KAAKA,GAAMW,KAC1BC,MAAQ1C,EAAE2C,QAAQD,QAAU,EAAK,KACjCE,OAAS5C,EAAE2C,QAAQC,SAAW,EAAK,aCuBhDC,KAAKC","file":"export_renderers.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    $.pivotUtilities.export_renderers = \"TSV Export\": (pivotData, opts) ->\n        defaults = localeStrings: {}\n\n        opts = $.extend(true, {}, defaults, opts)\n\n        rowKeys = pivotData.getRowKeys()\n        rowKeys.push [] if rowKeys.length == 0\n        colKeys = pivotData.getColKeys()\n        colKeys.push [] if colKeys.length == 0\n        rowAttrs = pivotData.rowAttrs\n        colAttrs = pivotData.colAttrs\n\n        result = []\n\n        row = []\n        for rowAttr in rowAttrs\n            row.push rowAttr\n        if colKeys.length == 1 and colKeys[0].length == 0\n            row.push pivotData.aggregatorName\n        else\n            for colKey in colKeys\n                row.push colKey.join(\"-\")\n\n        result.push row\n\n        for rowKey in rowKeys\n            row = []\n            for r in rowKey\n                row.push r\n\n            for colKey in colKeys\n                agg = pivotData.getAggregator(rowKey, colKey)\n                if agg.value()?\n                    row.push agg.value()\n                else\n                    row.push \"\"\n            result.push row\n        text = \"\"\n        for r in result\n            text += r.join(\"\\t\")+\"\\n\"\n\n        return $(\"<textarea>\").text(text).css(\n                width: ($(window).width() / 2) + \"px\",\n                height: ($(window).height() / 2) + \"px\")\n\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    return $.pivotUtilities.export_renderers = {\n      \"TSV Export\": function(pivotData, opts) {\n        var agg, colAttrs, colKey, colKeys, defaults, i, j, k, l, len, len1, len2, len3, len4, len5, m, n, r, result, row, rowAttr, rowAttrs, rowKey, rowKeys, text;\n        defaults = {\n          localeStrings: {}\n        };\n        opts = $.extend(true, {}, defaults, opts);\n        rowKeys = pivotData.getRowKeys();\n        if (rowKeys.length === 0) {\n          rowKeys.push([]);\n        }\n        colKeys = pivotData.getColKeys();\n        if (colKeys.length === 0) {\n          colKeys.push([]);\n        }\n        rowAttrs = pivotData.rowAttrs;\n        colAttrs = pivotData.colAttrs;\n        result = [];\n        row = [];\n        for (i = 0, len = rowAttrs.length; i < len; i++) {\n          rowAttr = rowAttrs[i];\n          row.push(rowAttr);\n        }\n        if (colKeys.length === 1 && colKeys[0].length === 0) {\n          row.push(pivotData.aggregatorName);\n        } else {\n          for (j = 0, len1 = colKeys.length; j < len1; j++) {\n            colKey = colKeys[j];\n            row.push(colKey.join(\"-\"));\n          }\n        }\n        result.push(row);\n        for (k = 0, len2 = rowKeys.length; k < len2; k++) {\n          rowKey = rowKeys[k];\n          row = [];\n          for (l = 0, len3 = rowKey.length; l < len3; l++) {\n            r = rowKey[l];\n            row.push(r);\n          }\n          for (m = 0, len4 = colKeys.length; m < len4; m++) {\n            colKey = colKeys[m];\n            agg = pivotData.getAggregator(rowKey, colKey);\n            if (agg.value() != null) {\n              row.push(agg.value());\n            } else {\n              row.push(\"\");\n            }\n          }\n          result.push(row);\n        }\n        text = \"\";\n        for (n = 0, len5 = result.length; n < len5; n++) {\n          r = result[n];\n          text += r.join(\"\\t\") + \"\\n\";\n        }\n        return $(\"<textarea>\").text(text).css({\n          width: ($(window).width() / 2) + \"px\",\n          height: ($(window).height() / 2) + \"px\"\n        });\n      }\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=export_renderers.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.js.js
index 5cb088b5aa0d1a191bc3898e7ac1810a847b5bae..994be10c6b1cf369df8c807e1ddff35764e2cc62 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.js.js
@@ -15,22 +15,21 @@
     var makeGoogleChart;
     makeGoogleChart = function(chartType, extraOptions) {
       return function(pivotData, opts) {
-        var agg, colKey, colKeys, dataArray, dataTable, defaults, fullAggName, groupByTitle, h, hAxisTitle, headers, i, j, k, len, len1, numCharsInHAxis, options, ref, result, row, rowKey, rowKeys, title, tree2, v, vAxisTitle, val, wrapper, x, y;
+        var agg, base, base1, colKey, colKeys, dataArray, dataTable, defaults, fullAggName, groupByTitle, h, hAxisTitle, headers, i, j, len, len1, numCharsInHAxis, options, ref, result, row, rowKey, rowKeys, title, tree2, vAxisTitle, val, wrapper, x, y;
         defaults = {
           localeStrings: {
             vs: "vs",
             by: "by"
           },
-          gchart: {
-            width: function() {
-              return window.innerWidth / 1.4;
-            },
-            height: function() {
-              return window.innerHeight / 1.4;
-            }
-          }
+          gchart: {}
         };
-        opts = $.extend(defaults, opts);
+        opts = $.extend(true, {}, defaults, opts);
+        if ((base = opts.gchart).width == null) {
+          base.width = window.innerWidth / 1.4;
+        }
+        if ((base1 = opts.gchart).height == null) {
+          base1.height = window.innerHeight / 1.4;
+        }
         rowKeys = pivotData.getRowKeys();
         if (rowKeys.length === 0) {
           rowKeys.push([]);
@@ -113,8 +112,6 @@
           }
         }
         options = {
-          width: opts.gchart.width(),
-          height: opts.gchart.height(),
           title: title,
           hAxis: {
             title: hAxisTitle,
@@ -146,10 +143,7 @@
             position: "none"
           };
         }
-        for (k in extraOptions) {
-          v = extraOptions[k];
-          options[k] = v;
-        }
+        options = $.extend(true, {}, options, opts.gchart, extraOptions);
         result = $("<div>").css({
           width: "100%",
           height: "100%"
@@ -186,4 +180,4 @@
 
 }).call(this);
 
-//# sourceMappingURL=gchart_renderers.js.map
\ No newline at end of file
+//# sourceMappingURL=gchart_renderers.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.js.map.txt
index b9a1130c0230c3cac090d6c466686c42d6392692..f90a0e2238c7bcf4080f14392966a79662d1b67f 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["gchart_renderers.coffee"],"names":[],"mappings":"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","file":"gchart_renderers.js","sourceRoot":"/source/","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    makeGoogleChart = (chartType, extraOptions) -> (pivotData, opts) ->\n        defaults =\n            localeStrings:\n                vs: \"vs\"\n                by: \"by\"\n            gchart:\n                width: -> window.innerWidth / 1.4\n                height: -> window.innerHeight / 1.4\n\n        opts = $.extend defaults, opts\n\n        rowKeys = pivotData.getRowKeys()\n        rowKeys.push [] if rowKeys.length == 0\n        colKeys = pivotData.getColKeys()\n        colKeys.push [] if colKeys.length == 0\n        fullAggName = pivotData.aggregatorName \n        if pivotData.valAttrs.length\n            fullAggName += \"(#{pivotData.valAttrs.join(\", \")})\"\n        headers = (h.join(\"-\") for h in rowKeys)\n        headers.unshift \"\"\n\n        numCharsInHAxis = 0\n        if chartType == \"ScatterChart\"\n            dataArray = []\n            for y, tree2 of pivotData.tree\n                for x, agg of tree2\n                     dataArray.push [\n                        parseFloat(x),\n                        parseFloat(y),\n                        fullAggName+\": \\n\"+agg.format(agg.value())\n                        ]\n            dataTable = new google.visualization.DataTable()\n            dataTable.addColumn 'number', pivotData.colAttrs.join(\"-\")\n            dataTable.addColumn 'number', pivotData.rowAttrs.join(\"-\") \n            dataTable.addColumn type: \"string\", role: \"tooltip\"\n            dataTable.addRows dataArray\n            hAxisTitle = pivotData.colAttrs.join(\"-\")\n            vAxisTitle = pivotData.rowAttrs.join(\"-\")\n            title = \"\"\n        else\n            dataArray = [headers]\n            for colKey in colKeys\n                row = [colKey.join(\"-\")]\n                numCharsInHAxis += row[0].length\n                for rowKey in rowKeys\n                    agg = pivotData.getAggregator(rowKey, colKey)\n                    if agg.value()?\n                        val = agg.value()\n                        if $.isNumeric val\n                            if val < 1\n                                row.push parseFloat(val.toPrecision(3))\n                            else\n                                row.push parseFloat(val.toFixed(3))\n                        else\n                            row.push val\n                    else row.push null\n                dataArray.push row\n\n            dataTable = google.visualization.arrayToDataTable(dataArray)\n\n            title = vAxisTitle = fullAggName\n            hAxisTitle = pivotData.colAttrs.join(\"-\")\n            title += \" #{opts.localeStrings.vs} #{hAxisTitle}\" if hAxisTitle != \"\"\n            groupByTitle = pivotData.rowAttrs.join(\"-\")\n            title += \" #{opts.localeStrings.by} #{groupByTitle}\" if groupByTitle != \"\"\n\n        options = \n            width: opts.gchart.width()\n            height: opts.gchart.height()\n            title: title\n            hAxis: {title: hAxisTitle, slantedText: numCharsInHAxis > 50}\n            vAxis: {title: vAxisTitle}\n            tooltip: { textStyle: { fontName: 'Arial', fontSize: 12 } }\n\n        if chartType == \"ColumnChart\"\n            options.vAxis.minValue = 0\n\n        if chartType == \"ScatterChart\"\n            options.legend = position: \"none\"\n            options.chartArea = {'width': '80%', 'height': '80%'}\n\n        else if dataArray[0].length == 2 and dataArray[0][1] ==  \"\"\n            options.legend = position: \"none\"\n\n        options[k] = v for k, v of extraOptions\n\n        result = $(\"<div>\").css(width: \"100%\", height: \"100%\")\n        wrapper = new google.visualization.ChartWrapper {dataTable, chartType, options}\n        wrapper.draw(result[0])    \n        result.bind \"dblclick\", -> \n            editor = new google.visualization.ChartEditor()\n            google.visualization.events.addListener editor, 'ok', -> \n                editor.getChartWrapper().draw(result[0])\n            editor.openDialog(wrapper)\n        return result\n\n    $.pivotUtilities.gchart_renderers = \n        \"Line Chart\": makeGoogleChart(\"LineChart\")\n        \"Bar Chart\": makeGoogleChart(\"ColumnChart\")\n        \"Stacked Bar Chart\": makeGoogleChart(\"ColumnChart\", isStacked: true)\n        \"Area Chart\": makeGoogleChart(\"AreaChart\", isStacked: true)\n        \"Scatter Chart\": makeGoogleChart(\"ScatterChart\")\n"]}
\ No newline at end of file
+{"version":3,"file":"gchart_renderers.js","sources":["gchart_renderers.coffee"],"names":[],"mappings":"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","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    makeGoogleChart = (chartType, extraOptions) -> (pivotData, opts) ->\n        defaults =\n            localeStrings:\n                vs: \"vs\"\n                by: \"by\"\n            gchart: {}\n\n        opts = $.extend(true, {}, defaults, opts)\n        opts.gchart.width ?= window.innerWidth / 1.4\n        opts.gchart.height ?= window.innerHeight / 1.4\n\n        rowKeys = pivotData.getRowKeys()\n        rowKeys.push [] if rowKeys.length == 0\n        colKeys = pivotData.getColKeys()\n        colKeys.push [] if colKeys.length == 0\n        fullAggName = pivotData.aggregatorName\n        if pivotData.valAttrs.length\n            fullAggName += \"(#{pivotData.valAttrs.join(\", \")})\"\n        headers = (h.join(\"-\") for h in rowKeys)\n        headers.unshift \"\"\n\n        numCharsInHAxis = 0\n        if chartType == \"ScatterChart\"\n            dataArray = []\n            for y, tree2 of pivotData.tree\n                for x, agg of tree2\n                     dataArray.push [\n                        parseFloat(x),\n                        parseFloat(y),\n                        fullAggName+\": \\n\"+agg.format(agg.value())\n                        ]\n            dataTable = new google.visualization.DataTable()\n            dataTable.addColumn 'number', pivotData.colAttrs.join(\"-\")\n            dataTable.addColumn 'number', pivotData.rowAttrs.join(\"-\")\n            dataTable.addColumn type: \"string\", role: \"tooltip\"\n            dataTable.addRows dataArray\n            hAxisTitle = pivotData.colAttrs.join(\"-\")\n            vAxisTitle = pivotData.rowAttrs.join(\"-\")\n            title = \"\"\n        else\n            dataArray = [headers]\n            for colKey in colKeys\n                row = [colKey.join(\"-\")]\n                numCharsInHAxis += row[0].length\n                for rowKey in rowKeys\n                    agg = pivotData.getAggregator(rowKey, colKey)\n                    if agg.value()?\n                        val = agg.value()\n                        if $.isNumeric val\n                            if val < 1\n                                row.push parseFloat(val.toPrecision(3))\n                            else\n                                row.push parseFloat(val.toFixed(3))\n                        else\n                            row.push val\n                    else row.push null\n                dataArray.push row\n\n            dataTable = google.visualization.arrayToDataTable(dataArray)\n\n            title = vAxisTitle = fullAggName\n            hAxisTitle = pivotData.colAttrs.join(\"-\")\n            title += \" #{opts.localeStrings.vs} #{hAxisTitle}\" if hAxisTitle != \"\"\n            groupByTitle = pivotData.rowAttrs.join(\"-\")\n            title += \" #{opts.localeStrings.by} #{groupByTitle}\" if groupByTitle != \"\"\n\n        options =\n            title: title\n            hAxis: {title: hAxisTitle, slantedText: numCharsInHAxis > 50}\n            vAxis: {title: vAxisTitle}\n            tooltip: { textStyle: { fontName: 'Arial', fontSize: 12 } }\n\n        if chartType == \"ColumnChart\"\n            options.vAxis.minValue = 0\n\n        if chartType == \"ScatterChart\"\n            options.legend = position: \"none\"\n            options.chartArea = {'width': '80%', 'height': '80%'}\n\n        else if dataArray[0].length == 2 and dataArray[0][1] ==  \"\"\n            options.legend = position: \"none\"\n\n        options = $.extend(true, {}, options, opts.gchart, extraOptions)\n\n        result = $(\"<div>\").css(width: \"100%\", height: \"100%\")\n        wrapper = new google.visualization.ChartWrapper {dataTable, chartType, options}\n        wrapper.draw(result[0])\n        result.bind \"dblclick\", ->\n            editor = new google.visualization.ChartEditor()\n            google.visualization.events.addListener editor, 'ok', ->\n                editor.getChartWrapper().draw(result[0])\n            editor.openDialog(wrapper)\n        return result\n\n    $.pivotUtilities.gchart_renderers =\n        \"Line Chart\": makeGoogleChart(\"LineChart\")\n        \"Bar Chart\": makeGoogleChart(\"ColumnChart\")\n        \"Stacked Bar Chart\": makeGoogleChart(\"ColumnChart\", isStacked: true)\n        \"Area Chart\": makeGoogleChart(\"AreaChart\", isStacked: true)\n        \"Scatter Chart\": makeGoogleChart(\"ScatterChart\")\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.min.js.js
index 7fa2c79fe5f351c7df07e1f453b889fac6f76b78..fb9692ef226401fc44189f6e245f7304077c3769 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.min.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.min.js.js
@@ -1,2 +1,2 @@
-(function(){var t;(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 e;return e=function(e,r){return function(n,i){var o,a,l,h,s,u,g,d,c,f,p,v,C,w,A,m,y,j,b,S,x,z,T,k,F,q,D,L,N,W,B;if(u={localeStrings:{vs:"vs",by:"by"},gchart:{width:function(){return window.innerWidth/1.4},height:function(){return window.innerHeight/1.4}}},i=t.extend(u,i),T=n.getRowKeys(),0===T.length&&T.push([]),l=n.getColKeys(),0===l.length&&l.push([]),g=n.aggregatorName,n.valAttrs.length&&(g+="("+n.valAttrs.join(", ")+")"),p=function(){var t,e,r;for(r=[],t=0,e=T.length;e>t;t++)c=T[t],r.push(c.join("-"));return r}(),p.unshift(""),y=0,"ScatterChart"===e){h=[],b=n.tree;for(B in b){F=b[B];for(W in F)o=F[W],h.push([parseFloat(W),parseFloat(B),g+": \n"+o.format(o.value())])}s=new google.visualization.DataTable,s.addColumn("number",n.colAttrs.join("-")),s.addColumn("number",n.rowAttrs.join("-")),s.addColumn({type:"string",role:"tooltip"}),s.addRows(h),f=n.colAttrs.join("-"),D=n.rowAttrs.join("-"),k=""}else{for(h=[p],v=0,A=l.length;A>v;v++){for(a=l[v],x=[a.join("-")],y+=x[0].length,C=0,m=T.length;m>C;C++)z=T[C],o=n.getAggregator(z,a),null!=o.value()?(L=o.value(),x.push(t.isNumeric(L)?1>L?parseFloat(L.toPrecision(3)):parseFloat(L.toFixed(3)):L)):x.push(null);h.push(x)}s=google.visualization.arrayToDataTable(h),k=D=g,f=n.colAttrs.join("-"),""!==f&&(k+=" "+i.localeStrings.vs+" "+f),d=n.rowAttrs.join("-"),""!==d&&(k+=" "+i.localeStrings.by+" "+d)}j={width:i.gchart.width(),height:i.gchart.height(),title:k,hAxis:{title:f,slantedText:y>50},vAxis:{title:D},tooltip:{textStyle:{fontName:"Arial",fontSize:12}}},"ColumnChart"===e&&(j.vAxis.minValue=0),"ScatterChart"===e?(j.legend={position:"none"},j.chartArea={width:"80%",height:"80%"}):2===h[0].length&&""===h[0][1]&&(j.legend={position:"none"});for(w in r)q=r[w],j[w]=q;return S=t("<div>").css({width:"100%",height:"100%"}),N=new google.visualization.ChartWrapper({dataTable:s,chartType:e,options:j}),N.draw(S[0]),S.bind("dblclick",function(){var t;return t=new google.visualization.ChartEditor,google.visualization.events.addListener(t,"ok",function(){return t.getChartWrapper().draw(S[0])}),t.openDialog(N)}),S}},t.pivotUtilities.gchart_renderers={"Line Chart":e("LineChart"),"Bar Chart":e("ColumnChart"),"Stacked Bar Chart":e("ColumnChart",{isStacked:!0}),"Area Chart":e("AreaChart",{isStacked:!0}),"Scatter Chart":e("ScatterChart")}})}).call(this);
-//# sourceMappingURL=gchart_renderers.min.js.map
\ No newline at end of file
+(function(){var t;(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 e;return e=function(e,r){return function(n,a){var o,i,l,h,s,u,g,d,c,p,f,v,C,w,A,m,y,j,b,S,x,z,T,k,F,q,D,L,N,W,B;if(d={localeStrings:{vs:"vs",by:"by"},gchart:{}},a=t.extend(!0,{},d,a),null==(i=a.gchart).width&&(i.width=window.innerWidth/1.4),null==(l=a.gchart).height&&(l.height=window.innerHeight/1.4),k=n.getRowKeys(),0===k.length&&k.push([]),s=n.getColKeys(),0===s.length&&s.push([]),c=n.aggregatorName,n.valAttrs.length&&(c+="("+n.valAttrs.join(", ")+")"),C=function(){var t,e,r;for(r=[],t=0,e=k.length;t<e;t++)f=k[t],r.push(f.join("-"));return r}(),C.unshift(""),j=0,"ScatterChart"===e){u=[],S=n.tree;for(B in S){q=S[B];for(W in q)o=q[W],u.push([parseFloat(W),parseFloat(B),c+": \n"+o.format(o.value())])}g=new google.visualization.DataTable,g.addColumn("number",n.colAttrs.join("-")),g.addColumn("number",n.rowAttrs.join("-")),g.addColumn({type:"string",role:"tooltip"}),g.addRows(u),v=n.colAttrs.join("-"),D=n.rowAttrs.join("-"),F=""}else{for(u=[C],w=0,m=s.length;w<m;w++){for(h=s[w],z=[h.join("-")],j+=z[0].length,A=0,y=k.length;A<y;A++)T=k[A],o=n.getAggregator(T,h),null!=o.value()?(L=o.value(),t.isNumeric(L)?L<1?z.push(parseFloat(L.toPrecision(3))):z.push(parseFloat(L.toFixed(3))):z.push(L)):z.push(null);u.push(z)}g=google.visualization.arrayToDataTable(u),F=D=c,v=n.colAttrs.join("-"),""!==v&&(F+=" "+a.localeStrings.vs+" "+v),p=n.rowAttrs.join("-"),""!==p&&(F+=" "+a.localeStrings.by+" "+p)}return b={title:F,hAxis:{title:v,slantedText:j>50},vAxis:{title:D},tooltip:{textStyle:{fontName:"Arial",fontSize:12}}},"ColumnChart"===e&&(b.vAxis.minValue=0),"ScatterChart"===e?(b.legend={position:"none"},b.chartArea={width:"80%",height:"80%"}):2===u[0].length&&""===u[0][1]&&(b.legend={position:"none"}),b=t.extend(!0,{},b,a.gchart,r),x=t("<div>").css({width:"100%",height:"100%"}),N=new google.visualization.ChartWrapper({dataTable:g,chartType:e,options:b}),N.draw(x[0]),x.bind("dblclick",function(){var t;return t=new google.visualization.ChartEditor,google.visualization.events.addListener(t,"ok",function(){return t.getChartWrapper().draw(x[0])}),t.openDialog(N)}),x}},t.pivotUtilities.gchart_renderers={"Line Chart":e("LineChart"),"Bar Chart":e("ColumnChart"),"Stacked Bar Chart":e("ColumnChart",{isStacked:!0}),"Area Chart":e("AreaChart",{isStacked:!0}),"Scatter Chart":e("ScatterChart")}})}).call(this);
+//# sourceMappingURL=gchart_renderers.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.min.js.map.txt
index a2bb19d940b761c543007f686c62df97d3ecad97..964aead1d30354401abf1141538168ec2106a5d7 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.min.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/gchart_renderers.min.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["/source/gchart_renderers.coffee","gchart_renderers.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","makeGoogleChart","chartType","extraOptions","pivotData","opts","agg","colKey","colKeys","dataArray","dataTable","defaults","fullAggName","groupByTitle","h","hAxisTitle","headers","i","j","k","len","len1","numCharsInHAxis","options","ref","result","row","rowKey","rowKeys","title","tree2","v","vAxisTitle","val","wrapper","x","y","localeStrings","vs","by","gchart","width","window","innerWidth","height","innerHeight","extend","getRowKeys","length","push","getColKeys","aggregatorName","valAttrs","join","results","unshift","tree","parseFloat","format","value","google","visualization","DataTable","addColumn","colAttrs","rowAttrs","type","role","addRows","getAggregator","isNumeric","toPrecision","toFixed","arrayToDataTable","hAxis","slantedText","vAxis","tooltip","textStyle","fontName","fontSize","minValue","legend","position","chartArea","css","ChartWrapper","draw","bind","editor","ChartEditor","events","addListener","getChartWrapper","openDialog","pivotUtilities","gchart_renderers","Line Chart","Bar Chart","Stacked Bar Chart","isStacked","Area Chart","Scatter Chart","call","this"],"mappings":"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","file":"gchart_renderers.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    makeGoogleChart = (chartType, extraOptions) -> (pivotData, opts) ->\n        defaults =\n            localeStrings:\n                vs: \"vs\"\n                by: \"by\"\n            gchart:\n                width: -> window.innerWidth / 1.4\n                height: -> window.innerHeight / 1.4\n\n        opts = $.extend defaults, opts\n\n        rowKeys = pivotData.getRowKeys()\n        rowKeys.push [] if rowKeys.length == 0\n        colKeys = pivotData.getColKeys()\n        colKeys.push [] if colKeys.length == 0\n        fullAggName = pivotData.aggregatorName \n        if pivotData.valAttrs.length\n            fullAggName += \"(#{pivotData.valAttrs.join(\", \")})\"\n        headers = (h.join(\"-\") for h in rowKeys)\n        headers.unshift \"\"\n\n        numCharsInHAxis = 0\n        if chartType == \"ScatterChart\"\n            dataArray = []\n            for y, tree2 of pivotData.tree\n                for x, agg of tree2\n                     dataArray.push [\n                        parseFloat(x),\n                        parseFloat(y),\n                        fullAggName+\": \\n\"+agg.format(agg.value())\n                        ]\n            dataTable = new google.visualization.DataTable()\n            dataTable.addColumn 'number', pivotData.colAttrs.join(\"-\")\n            dataTable.addColumn 'number', pivotData.rowAttrs.join(\"-\") \n            dataTable.addColumn type: \"string\", role: \"tooltip\"\n            dataTable.addRows dataArray\n            hAxisTitle = pivotData.colAttrs.join(\"-\")\n            vAxisTitle = pivotData.rowAttrs.join(\"-\")\n            title = \"\"\n        else\n            dataArray = [headers]\n            for colKey in colKeys\n                row = [colKey.join(\"-\")]\n                numCharsInHAxis += row[0].length\n                for rowKey in rowKeys\n                    agg = pivotData.getAggregator(rowKey, colKey)\n                    if agg.value()?\n                        val = agg.value()\n                        if $.isNumeric val\n                            if val < 1\n                                row.push parseFloat(val.toPrecision(3))\n                            else\n                                row.push parseFloat(val.toFixed(3))\n                        else\n                            row.push val\n                    else row.push null\n                dataArray.push row\n\n            dataTable = google.visualization.arrayToDataTable(dataArray)\n\n            title = vAxisTitle = fullAggName\n            hAxisTitle = pivotData.colAttrs.join(\"-\")\n            title += \" #{opts.localeStrings.vs} #{hAxisTitle}\" if hAxisTitle != \"\"\n            groupByTitle = pivotData.rowAttrs.join(\"-\")\n            title += \" #{opts.localeStrings.by} #{groupByTitle}\" if groupByTitle != \"\"\n\n        options = \n            width: opts.gchart.width()\n            height: opts.gchart.height()\n            title: title\n            hAxis: {title: hAxisTitle, slantedText: numCharsInHAxis > 50}\n            vAxis: {title: vAxisTitle}\n            tooltip: { textStyle: { fontName: 'Arial', fontSize: 12 } }\n\n        if chartType == \"ColumnChart\"\n            options.vAxis.minValue = 0\n\n        if chartType == \"ScatterChart\"\n            options.legend = position: \"none\"\n            options.chartArea = {'width': '80%', 'height': '80%'}\n\n        else if dataArray[0].length == 2 and dataArray[0][1] ==  \"\"\n            options.legend = position: \"none\"\n\n        options[k] = v for k, v of extraOptions\n\n        result = $(\"<div>\").css(width: \"100%\", height: \"100%\")\n        wrapper = new google.visualization.ChartWrapper {dataTable, chartType, options}\n        wrapper.draw(result[0])    \n        result.bind \"dblclick\", -> \n            editor = new google.visualization.ChartEditor()\n            google.visualization.events.addListener editor, 'ok', -> \n                editor.getChartWrapper().draw(result[0])\n            editor.openDialog(wrapper)\n        return result\n\n    $.pivotUtilities.gchart_renderers = \n        \"Line Chart\": makeGoogleChart(\"LineChart\")\n        \"Bar Chart\": makeGoogleChart(\"ColumnChart\")\n        \"Stacked Bar Chart\": makeGoogleChart(\"ColumnChart\", isStacked: true)\n        \"Area Chart\": makeGoogleChart(\"AreaChart\", isStacked: true)\n        \"Scatter Chart\": makeGoogleChart(\"ScatterChart\")\n","(function(){var t;(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 e;return e=function(e,r){return function(n,i){var o,a,l,h,s,u,g,d,c,f,p,v,C,w,A,m,y,j,b,S,x,z,T,k,F,q,D,L,N,W,B;if(u={localeStrings:{vs:\"vs\",by:\"by\"},gchart:{width:function(){return window.innerWidth/1.4},height:function(){return window.innerHeight/1.4}}},i=t.extend(u,i),T=n.getRowKeys(),0===T.length&&T.push([]),l=n.getColKeys(),0===l.length&&l.push([]),g=n.aggregatorName,n.valAttrs.length&&(g+=\"(\"+n.valAttrs.join(\", \")+\")\"),p=function(){var t,e,r;for(r=[],t=0,e=T.length;e>t;t++)c=T[t],r.push(c.join(\"-\"));return r}(),p.unshift(\"\"),y=0,\"ScatterChart\"===e){h=[],b=n.tree;for(B in b){F=b[B];for(W in F)o=F[W],h.push([parseFloat(W),parseFloat(B),g+\": \\n\"+o.format(o.value())])}s=new google.visualization.DataTable,s.addColumn(\"number\",n.colAttrs.join(\"-\")),s.addColumn(\"number\",n.rowAttrs.join(\"-\")),s.addColumn({type:\"string\",role:\"tooltip\"}),s.addRows(h),f=n.colAttrs.join(\"-\"),D=n.rowAttrs.join(\"-\"),k=\"\"}else{for(h=[p],v=0,A=l.length;A>v;v++){for(a=l[v],x=[a.join(\"-\")],y+=x[0].length,C=0,m=T.length;m>C;C++)z=T[C],o=n.getAggregator(z,a),null!=o.value()?(L=o.value(),x.push(t.isNumeric(L)?1>L?parseFloat(L.toPrecision(3)):parseFloat(L.toFixed(3)):L)):x.push(null);h.push(x)}s=google.visualization.arrayToDataTable(h),k=D=g,f=n.colAttrs.join(\"-\"),\"\"!==f&&(k+=\" \"+i.localeStrings.vs+\" \"+f),d=n.rowAttrs.join(\"-\"),\"\"!==d&&(k+=\" \"+i.localeStrings.by+\" \"+d)}j={width:i.gchart.width(),height:i.gchart.height(),title:k,hAxis:{title:f,slantedText:y>50},vAxis:{title:D},tooltip:{textStyle:{fontName:\"Arial\",fontSize:12}}},\"ColumnChart\"===e&&(j.vAxis.minValue=0),\"ScatterChart\"===e?(j.legend={position:\"none\"},j.chartArea={width:\"80%\",height:\"80%\"}):2===h[0].length&&\"\"===h[0][1]&&(j.legend={position:\"none\"});for(w in r)q=r[w],j[w]=q;return S=t(\"<div>\").css({width:\"100%\",height:\"100%\"}),N=new google.visualization.ChartWrapper({dataTable:s,chartType:e,options:j}),N.draw(S[0]),S.bind(\"dblclick\",function(){var t;return t=new google.visualization.ChartEditor,google.visualization.events.addListener(t,\"ok\",function(){return t.getChartWrapper().draw(S[0])}),t.openDialog(N)}),S}},t.pivotUtilities.gchart_renderers={\"Line Chart\":e(\"LineChart\"),\"Bar Chart\":e(\"ColumnChart\"),\"Stacked Bar Chart\":e(\"ColumnChart\",{isStacked:!0}),\"Area Chart\":e(\"AreaChart\",{isStacked:!0}),\"Scatter Chart\":e(\"ScatterChart\")}})}).call(this);\n//# sourceMappingURL=gchart_renderers.min.js.map"],"sourceRoot":"/source/"}
\ No newline at end of file
+{"version":3,"sources":["gchart_renderers.coffee","gchart_renderers.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","makeGoogleChart","chartType","extraOptions","pivotData","opts","agg","base","base1","colKey","colKeys","dataArray","dataTable","defaults","fullAggName","groupByTitle","h","hAxisTitle","headers","i","j","len","len1","numCharsInHAxis","options","ref","result","row","rowKey","rowKeys","title","tree2","vAxisTitle","val","wrapper","x","y","localeStrings","vs","by","gchart","extend","width","window","innerWidth","height","innerHeight","getRowKeys","length","push","getColKeys","aggregatorName","valAttrs","join","results","unshift","tree","parseFloat","format","value","google","visualization","DataTable","addColumn","colAttrs","rowAttrs","type","role","addRows","getAggregator","isNumeric","toPrecision","toFixed","arrayToDataTable","hAxis","slantedText","vAxis","tooltip","textStyle","fontName","fontSize","minValue","legend","position","chartArea","css","ChartWrapper","draw","bind","editor","ChartEditor","events","addListener","getChartWrapper","openDialog","pivotUtilities","gchart_renderers","Line Chart","Bar Chart","Stacked Bar Chart","isStacked","Area Chart","Scatter Chart","call","this"],"mappings":"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","file":"gchart_renderers.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    makeGoogleChart = (chartType, extraOptions) -> (pivotData, opts) ->\n        defaults =\n            localeStrings:\n                vs: \"vs\"\n                by: \"by\"\n            gchart: {}\n\n        opts = $.extend(true, {}, defaults, opts)\n        opts.gchart.width ?= window.innerWidth / 1.4\n        opts.gchart.height ?= window.innerHeight / 1.4\n\n        rowKeys = pivotData.getRowKeys()\n        rowKeys.push [] if rowKeys.length == 0\n        colKeys = pivotData.getColKeys()\n        colKeys.push [] if colKeys.length == 0\n        fullAggName = pivotData.aggregatorName\n        if pivotData.valAttrs.length\n            fullAggName += \"(#{pivotData.valAttrs.join(\", \")})\"\n        headers = (h.join(\"-\") for h in rowKeys)\n        headers.unshift \"\"\n\n        numCharsInHAxis = 0\n        if chartType == \"ScatterChart\"\n            dataArray = []\n            for y, tree2 of pivotData.tree\n                for x, agg of tree2\n                     dataArray.push [\n                        parseFloat(x),\n                        parseFloat(y),\n                        fullAggName+\": \\n\"+agg.format(agg.value())\n                        ]\n            dataTable = new google.visualization.DataTable()\n            dataTable.addColumn 'number', pivotData.colAttrs.join(\"-\")\n            dataTable.addColumn 'number', pivotData.rowAttrs.join(\"-\")\n            dataTable.addColumn type: \"string\", role: \"tooltip\"\n            dataTable.addRows dataArray\n            hAxisTitle = pivotData.colAttrs.join(\"-\")\n            vAxisTitle = pivotData.rowAttrs.join(\"-\")\n            title = \"\"\n        else\n            dataArray = [headers]\n            for colKey in colKeys\n                row = [colKey.join(\"-\")]\n                numCharsInHAxis += row[0].length\n                for rowKey in rowKeys\n                    agg = pivotData.getAggregator(rowKey, colKey)\n                    if agg.value()?\n                        val = agg.value()\n                        if $.isNumeric val\n                            if val < 1\n                                row.push parseFloat(val.toPrecision(3))\n                            else\n                                row.push parseFloat(val.toFixed(3))\n                        else\n                            row.push val\n                    else row.push null\n                dataArray.push row\n\n            dataTable = google.visualization.arrayToDataTable(dataArray)\n\n            title = vAxisTitle = fullAggName\n            hAxisTitle = pivotData.colAttrs.join(\"-\")\n            title += \" #{opts.localeStrings.vs} #{hAxisTitle}\" if hAxisTitle != \"\"\n            groupByTitle = pivotData.rowAttrs.join(\"-\")\n            title += \" #{opts.localeStrings.by} #{groupByTitle}\" if groupByTitle != \"\"\n\n        options =\n            title: title\n            hAxis: {title: hAxisTitle, slantedText: numCharsInHAxis > 50}\n            vAxis: {title: vAxisTitle}\n            tooltip: { textStyle: { fontName: 'Arial', fontSize: 12 } }\n\n        if chartType == \"ColumnChart\"\n            options.vAxis.minValue = 0\n\n        if chartType == \"ScatterChart\"\n            options.legend = position: \"none\"\n            options.chartArea = {'width': '80%', 'height': '80%'}\n\n        else if dataArray[0].length == 2 and dataArray[0][1] ==  \"\"\n            options.legend = position: \"none\"\n\n        options = $.extend(true, {}, options, opts.gchart, extraOptions)\n\n        result = $(\"<div>\").css(width: \"100%\", height: \"100%\")\n        wrapper = new google.visualization.ChartWrapper {dataTable, chartType, options}\n        wrapper.draw(result[0])\n        result.bind \"dblclick\", ->\n            editor = new google.visualization.ChartEditor()\n            google.visualization.events.addListener editor, 'ok', ->\n                editor.getChartWrapper().draw(result[0])\n            editor.openDialog(wrapper)\n        return result\n\n    $.pivotUtilities.gchart_renderers =\n        \"Line Chart\": makeGoogleChart(\"LineChart\")\n        \"Bar Chart\": makeGoogleChart(\"ColumnChart\")\n        \"Stacked Bar Chart\": makeGoogleChart(\"ColumnChart\", isStacked: true)\n        \"Area Chart\": makeGoogleChart(\"AreaChart\", isStacked: true)\n        \"Scatter Chart\": makeGoogleChart(\"ScatterChart\")\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    var makeGoogleChart;\n    makeGoogleChart = function(chartType, extraOptions) {\n      return function(pivotData, opts) {\n        var agg, base, base1, colKey, colKeys, dataArray, dataTable, defaults, fullAggName, groupByTitle, h, hAxisTitle, headers, i, j, len, len1, numCharsInHAxis, options, ref, result, row, rowKey, rowKeys, title, tree2, vAxisTitle, val, wrapper, x, y;\n        defaults = {\n          localeStrings: {\n            vs: \"vs\",\n            by: \"by\"\n          },\n          gchart: {}\n        };\n        opts = $.extend(true, {}, defaults, opts);\n        if ((base = opts.gchart).width == null) {\n          base.width = window.innerWidth / 1.4;\n        }\n        if ((base1 = opts.gchart).height == null) {\n          base1.height = window.innerHeight / 1.4;\n        }\n        rowKeys = pivotData.getRowKeys();\n        if (rowKeys.length === 0) {\n          rowKeys.push([]);\n        }\n        colKeys = pivotData.getColKeys();\n        if (colKeys.length === 0) {\n          colKeys.push([]);\n        }\n        fullAggName = pivotData.aggregatorName;\n        if (pivotData.valAttrs.length) {\n          fullAggName += \"(\" + (pivotData.valAttrs.join(\", \")) + \")\";\n        }\n        headers = (function() {\n          var i, len, results;\n          results = [];\n          for (i = 0, len = rowKeys.length; i < len; i++) {\n            h = rowKeys[i];\n            results.push(h.join(\"-\"));\n          }\n          return results;\n        })();\n        headers.unshift(\"\");\n        numCharsInHAxis = 0;\n        if (chartType === \"ScatterChart\") {\n          dataArray = [];\n          ref = pivotData.tree;\n          for (y in ref) {\n            tree2 = ref[y];\n            for (x in tree2) {\n              agg = tree2[x];\n              dataArray.push([parseFloat(x), parseFloat(y), fullAggName + \": \\n\" + agg.format(agg.value())]);\n            }\n          }\n          dataTable = new google.visualization.DataTable();\n          dataTable.addColumn('number', pivotData.colAttrs.join(\"-\"));\n          dataTable.addColumn('number', pivotData.rowAttrs.join(\"-\"));\n          dataTable.addColumn({\n            type: \"string\",\n            role: \"tooltip\"\n          });\n          dataTable.addRows(dataArray);\n          hAxisTitle = pivotData.colAttrs.join(\"-\");\n          vAxisTitle = pivotData.rowAttrs.join(\"-\");\n          title = \"\";\n        } else {\n          dataArray = [headers];\n          for (i = 0, len = colKeys.length; i < len; i++) {\n            colKey = colKeys[i];\n            row = [colKey.join(\"-\")];\n            numCharsInHAxis += row[0].length;\n            for (j = 0, len1 = rowKeys.length; j < len1; j++) {\n              rowKey = rowKeys[j];\n              agg = pivotData.getAggregator(rowKey, colKey);\n              if (agg.value() != null) {\n                val = agg.value();\n                if ($.isNumeric(val)) {\n                  if (val < 1) {\n                    row.push(parseFloat(val.toPrecision(3)));\n                  } else {\n                    row.push(parseFloat(val.toFixed(3)));\n                  }\n                } else {\n                  row.push(val);\n                }\n              } else {\n                row.push(null);\n              }\n            }\n            dataArray.push(row);\n          }\n          dataTable = google.visualization.arrayToDataTable(dataArray);\n          title = vAxisTitle = fullAggName;\n          hAxisTitle = pivotData.colAttrs.join(\"-\");\n          if (hAxisTitle !== \"\") {\n            title += \" \" + opts.localeStrings.vs + \" \" + hAxisTitle;\n          }\n          groupByTitle = pivotData.rowAttrs.join(\"-\");\n          if (groupByTitle !== \"\") {\n            title += \" \" + opts.localeStrings.by + \" \" + groupByTitle;\n          }\n        }\n        options = {\n          title: title,\n          hAxis: {\n            title: hAxisTitle,\n            slantedText: numCharsInHAxis > 50\n          },\n          vAxis: {\n            title: vAxisTitle\n          },\n          tooltip: {\n            textStyle: {\n              fontName: 'Arial',\n              fontSize: 12\n            }\n          }\n        };\n        if (chartType === \"ColumnChart\") {\n          options.vAxis.minValue = 0;\n        }\n        if (chartType === \"ScatterChart\") {\n          options.legend = {\n            position: \"none\"\n          };\n          options.chartArea = {\n            'width': '80%',\n            'height': '80%'\n          };\n        } else if (dataArray[0].length === 2 && dataArray[0][1] === \"\") {\n          options.legend = {\n            position: \"none\"\n          };\n        }\n        options = $.extend(true, {}, options, opts.gchart, extraOptions);\n        result = $(\"<div>\").css({\n          width: \"100%\",\n          height: \"100%\"\n        });\n        wrapper = new google.visualization.ChartWrapper({\n          dataTable: dataTable,\n          chartType: chartType,\n          options: options\n        });\n        wrapper.draw(result[0]);\n        result.bind(\"dblclick\", function() {\n          var editor;\n          editor = new google.visualization.ChartEditor();\n          google.visualization.events.addListener(editor, 'ok', function() {\n            return editor.getChartWrapper().draw(result[0]);\n          });\n          return editor.openDialog(wrapper);\n        });\n        return result;\n      };\n    };\n    return $.pivotUtilities.gchart_renderers = {\n      \"Line Chart\": makeGoogleChart(\"LineChart\"),\n      \"Bar Chart\": makeGoogleChart(\"ColumnChart\"),\n      \"Stacked Bar Chart\": makeGoogleChart(\"ColumnChart\", {\n        isStacked: true\n      }),\n      \"Area Chart\": makeGoogleChart(\"AreaChart\", {\n        isStacked: true\n      }),\n      \"Scatter Chart\": makeGoogleChart(\"ScatterChart\")\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=gchart_renderers.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..e3ca304bd5678551caa6dce909056249bb012d7c
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.js.js
@@ -0,0 +1,85 @@
+(function() {
+  var callWithJQuery;
+
+  callWithJQuery = function(pivotModule) {
+    if (typeof exports === "object" && typeof module === "object") {
+      return pivotModule(require("jquery"));
+    } else if (typeof define === "function" && define.amd) {
+      return define(["jquery"], pivotModule);
+    } else {
+      return pivotModule(jQuery);
+    }
+  };
+
+  callWithJQuery(function($) {
+    var csFmt, csFmtInt, csFmtPct, nf, tpl;
+    nf = $.pivotUtilities.numberFormat;
+    tpl = $.pivotUtilities.aggregatorTemplates;
+    csFmt = nf({
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    csFmtInt = nf({
+      digitsAfterDecimal: 0,
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    csFmtPct = nf({
+      digitsAfterDecimal: 1,
+      scaler: 100,
+      suffix: "%",
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    return $.pivotUtilities.locales.cs = {
+      localeStrings: {
+        renderError: "Došlo k chybě při vykreslování výsledků PivotTable.",
+        computeError: "Došlo k chybě při výpočtu výsledků PivotTable.",
+        uiRenderError: "Došlo k chybě při vykreslování PivotTable UI.",
+        selectAll: "Vybrat vše",
+        selectNone: "Zrušit výběr",
+        tooMany: "(příliš mnoho položek)",
+        filterResults: "Hodnoty pro filtr",
+        apply: "Použít",
+        cancel: "Zrušit",
+        totals: "Celkem",
+        vs: "ku",
+        by: "z"
+      },
+      aggregators: {
+        "Počet": tpl.count(csFmtInt),
+        "Počet unikátních hodnot": tpl.countUnique(csFmtInt),
+        "Výčet unikátních hodnot": tpl.listUnique(", "),
+        "Součet": tpl.sum(csFmt),
+        "Celočíselný součet": tpl.sum(csFmtInt),
+        "Průměr": tpl.average(csFmt),
+        "Medián": tpl.median(csFmt),
+        "Rozptyl": tpl["var"](1, csFmt),
+        "Směrodatná odchylka": tpl.stdev(1, csFmt),
+        "Minimum": tpl.min(csFmt),
+        "Maximum": tpl.max(csFmt),
+        "První": tpl.first(csFmt),
+        "Poslední": tpl.last(csFmt),
+        "Součet přes součet": tpl.sumOverSum(csFmt),
+        "80% horní hranice": tpl.sumOverSumBound80(true, csFmt),
+        "80% spodní hranice": tpl.sumOverSumBound80(false, csFmt),
+        "Součet jako poměr z celku": tpl.fractionOf(tpl.sum(), "total", csFmtPct),
+        "Součet jako poměr z řádků": tpl.fractionOf(tpl.sum(), "row", csFmtPct),
+        "Součet jako poměr ze sloupců": tpl.fractionOf(tpl.sum(), "col", csFmtPct),
+        "Počet jako poměr z celku": tpl.fractionOf(tpl.count(), "total", csFmtPct),
+        "Počet jako poměr z řádků": tpl.fractionOf(tpl.count(), "row", csFmtPct),
+        "Počet jako poměr ze sloupců": tpl.fractionOf(tpl.count(), "col", csFmtPct)
+      },
+      renderers: {
+        "Tabulka": $.pivotUtilities.renderers["Table"],
+        "Tabulka se sloupcovým grafem": $.pivotUtilities.renderers["Table Barchart"],
+        "Teplotní mapa": $.pivotUtilities.renderers["Heatmap"],
+        "Teplotní mapa z řádků": $.pivotUtilities.renderers["Row Heatmap"],
+        "Teplotní mapa ze sloupců": $.pivotUtilities.renderers["Col Heatmap"]
+      }
+    };
+  });
+
+}).call(this);
+
+//# sourceMappingURL=pivot.cs.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..920ff3f00e43ff238e0db73be381903189f10590
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"file":"pivot.cs.js","sources":["pivot.cs.coffee"],"names":[],"mappings":"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","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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    csFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    csFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    csFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.cs =\n        localeStrings:\n            renderError: \"Došlo k chybě při vykreslování výsledků PivotTable.\"\n            computeError: \"Došlo k chybě při výpočtu výsledků PivotTable.\"\n            uiRenderError: \"Došlo k chybě při vykreslování PivotTable UI.\"\n            selectAll: \"Vybrat vše\"\n            selectNone: \"Zrušit výběr\"\n            tooMany: \"(příliš mnoho položek)\"\n            filterResults: \"Hodnoty pro filtr\"\n            apply: \"Použít\"\n            cancel: \"Zrušit\"\n            totals: \"Celkem\"\n            vs: \"ku\"\n            by: \"z\"\n\n        aggregators: \n            \"Počet\":                        tpl.count(csFmtInt)\n            \"Počet unikátních hodnot\":      tpl.countUnique(csFmtInt)\n            \"Výčet unikátních hodnot\":      tpl.listUnique(\", \")\n            \"Součet\":                       tpl.sum(csFmt)\n            \"Celočíselný součet\":           tpl.sum(csFmtInt)\n            \"Průměr\":                       tpl.average(csFmt)\n            \"Medián\":                       tpl.median(csFmt),\n            \"Rozptyl\":                      tpl[\"var\"](1, csFmt),\n            \"Směrodatná odchylka\":          tpl.stdev(1, csFmt),\n            \"Minimum\":                      tpl.min(csFmt)\n            \"Maximum\":                      tpl.max(csFmt)\n            \"První\":                        tpl.first(csFmt)\n            \"Poslední\":                     tpl.last(csFmt)\n            \"Součet přes součet\":           tpl.sumOverSum(csFmt)\n            \"80% horní hranice\":            tpl.sumOverSumBound80(true, csFmt)\n            \"80% spodní hranice\":           tpl.sumOverSumBound80(false, csFmt)\n            \"Součet jako poměr z celku\":    tpl.fractionOf(tpl.sum(),       \"total\", csFmtPct)\n            \"Součet jako poměr z řádků\":    tpl.fractionOf(tpl.sum(),   \"row\",   csFmtPct)\n            \"Součet jako poměr ze sloupců\": tpl.fractionOf(tpl.sum(),   \"col\",   csFmtPct)\n            \"Počet jako poměr z celku\":     tpl.fractionOf(tpl.count(), \"total\", csFmtPct)\n            \"Počet jako poměr z řádků\":     tpl.fractionOf(tpl.count(), \"row\",   csFmtPct)\n            \"Počet jako poměr ze sloupců\":  tpl.fractionOf(tpl.count(), \"col\",   csFmtPct)\n\n        renderers:\n            \"Tabulka\":                      $.pivotUtilities.renderers[\"Table\"]\n            \"Tabulka se sloupcovým grafem\": $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Teplotní mapa\":                $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Teplotní mapa z řádků\":        $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Teplotní mapa ze sloupců\":     $.pivotUtilities.renderers[\"Col Heatmap\"]\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f599feebcee68e5e7e5810beb865b0343a71cf4f
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.cs.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..121551b58e1f8170844a356402ec926cd4eeeb69
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.cs.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.min.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..cfce01db737808f4356d256ff7dda3e0f2aa4dab
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.min.js.js
@@ -0,0 +1,2 @@
+(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var o,t,r,i,a;return i=e.pivotUtilities.numberFormat,a=e.pivotUtilities.aggregatorTemplates,o=i({thousandsSep:" ",decimalSep:","}),t=i({digitsAfterDecimal:0,thousandsSep:" ",decimalSep:","}),r=i({digitsAfterDecimal:1,scaler:100,suffix:"%",thousandsSep:" ",decimalSep:","}),e.pivotUtilities.locales.cs={localeStrings:{renderError:"Došlo k chybě při vykreslování výsledků PivotTable.",computeError:"Došlo k chybě při výpočtu výsledků PivotTable.",uiRenderError:"Došlo k chybě při vykreslování PivotTable UI.",selectAll:"Vybrat vše",selectNone:"Zrušit výběr",tooMany:"(příliš mnoho položek)",filterResults:"Hodnoty pro filtr",apply:"Použít",cancel:"Zrušit",totals:"Celkem",vs:"ku",by:"z"},aggregators:{"Počet":a.count(t),"Počet unikátních hodnot":a.countUnique(t),"Výčet unikátních hodnot":a.listUnique(", "),"Součet":a.sum(o),"Celočíselný součet":a.sum(t),"Průměr":a.average(o),"Medián":a.median(o),Rozptyl:a["var"](1,o),"Směrodatná odchylka":a.stdev(1,o),Minimum:a.min(o),Maximum:a.max(o),"První":a.first(o),"Poslední":a.last(o),"Součet přes součet":a.sumOverSum(o),"80% horní hranice":a.sumOverSumBound80(!0,o),"80% spodní hranice":a.sumOverSumBound80(!1,o),"Součet jako poměr z celku":a.fractionOf(a.sum(),"total",r),"Součet jako poměr z řádků":a.fractionOf(a.sum(),"row",r),"Součet jako poměr ze sloupců":a.fractionOf(a.sum(),"col",r),"Počet jako poměr z celku":a.fractionOf(a.count(),"total",r),"Počet jako poměr z řádků":a.fractionOf(a.count(),"row",r),"Počet jako poměr ze sloupců":a.fractionOf(a.count(),"col",r)},renderers:{Tabulka:e.pivotUtilities.renderers.Table,"Tabulka se sloupcovým grafem":e.pivotUtilities.renderers["Table Barchart"],"Teplotní mapa":e.pivotUtilities.renderers.Heatmap,"Teplotní mapa z řádků":e.pivotUtilities.renderers["Row Heatmap"],"Teplotní mapa ze sloupců":e.pivotUtilities.renderers["Col Heatmap"]}}})}).call(this);
+//# sourceMappingURL=pivot.cs.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.min.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b498f3f45fcea1689e40c44ded5b78a3f2921f6
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.min.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"sources":["pivot.cs.coffee","pivot.cs.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","csFmt","csFmtInt","csFmtPct","nf","tpl","pivotUtilities","numberFormat","aggregatorTemplates","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","cs","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","apply","cancel","totals","vs","by","aggregators","Počet","count","Počet unikátních hodnot","countUnique","Výčet unikátních hodnot","listUnique","Součet","sum","Celočíselný součet","Průměr","average","Medián","median","Rozptyl","Směrodatná odchylka","stdev","Minimum","min","Maximum","max","První","first","Poslední","last","Součet přes součet","sumOverSum","80% horní hranice","sumOverSumBound80","80% spodní hranice","Součet jako poměr z celku","fractionOf","Součet jako poměr z řádků","Součet jako poměr ze sloupců","Počet jako poměr z celku","Počet jako poměr z řádků","Počet jako poměr ze sloupců","renderers","Tabulka","Tabulka se sloupcovým grafem","Teplotní mapa","Teplotní mapa z řádků","Teplotní mapa ze sloupců","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAXC,UAAyC,gBAAVC,QACrCF,EAAYG,QAAQ,WACC,kBAAVC,SAAyBA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GACZ,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,CCuBA,ODvBAD,GAAKJ,EAAEM,eAAeC,aACtBF,EAAML,EAAEM,eAAeE,oBAEvBP,EAAWG,GAAGK,aAAc,IAAKC,WAAY,MAC7CR,EAAWE,GAAGO,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEP,EAAWC,GAAGO,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FV,EAAEM,eAAeQ,QAAQC,IACrBC,eACIC,YAAa,sDACbC,aAAc,iDACdC,cAAe,gDACfC,UAAW,aACXC,WAAY,eACZC,QAAS,yBACTC,cAAe,oBACfC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,GAAI,KACJC,GAAI,KAERC,aACIC,QAAgCzB,EAAI0B,MAAM7B,GAC1C8B,0BAAgC3B,EAAI4B,YAAY/B,GAChDgC,0BAAgC7B,EAAI8B,WAAW,MAC/CC,SAAgC/B,EAAIgC,IAAIpC,GACxCqC,qBAAgCjC,EAAIgC,IAAInC,GACxCqC,SAAgClC,EAAImC,QAAQvC,GAC5CwC,SAAgCpC,EAAIqC,OAAOzC,GAC3C0C,QAAgCtC,EAAI,OAAO,EAAGJ,GAC9C2C,sBAAgCvC,EAAIwC,MAAM,EAAG5C,GAC7C6C,QAAgCzC,EAAI0C,IAAI9C,GACxC+C,QAAgC3C,EAAI4C,IAAIhD,GACxCiD,QAAgC7C,EAAI8C,MAAMlD,GAC1CmD,WAAgC/C,EAAIgD,KAAKpD,GACzCqD,qBAAgCjD,EAAIkD,WAAWtD,GAC/CuD,oBAAgCnD,EAAIoD,mBAAkB,EAAMxD,GAC5DyD,qBAAgCrD,EAAIoD,mBAAkB,EAAOxD,GAC7D0D,4BAAgCtD,EAAIuD,WAAWvD,EAAIgC,MAAa,QAASlC,GACzE0D,4BAAgCxD,EAAIuD,WAAWvD,EAAIgC,MAAS,MAASlC,GACrE2D,+BAAgCzD,EAAIuD,WAAWvD,EAAIgC,MAAS,MAASlC,GACrE4D,2BAAgC1D,EAAIuD,WAAWvD,EAAI0B,QAAS,QAAS5B,GACrE6D,2BAAgC3D,EAAIuD,WAAWvD,EAAI0B,QAAS,MAAS5B,GACrE8D,8BAAgC5D,EAAIuD,WAAWvD,EAAI0B,QAAS,MAAS5B,IAEzE+D,WACIC,QAAgCnE,EAAEM,eAAe4D,UAAU,MAC3DE,+BAAgCpE,EAAEM,eAAe4D,UAAU,kBAC3DG,gBAAgCrE,EAAEM,eAAe4D,UAAU,QAC3DI,wBAAgCtE,EAAEM,eAAe4D,UAAU,eAC3DK,2BAAgCvE,EAAEM,eAAe4D,UAAU,qBCqBpEM,KAAKC","file":"pivot.cs.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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    csFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    csFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    csFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.cs =\n        localeStrings:\n            renderError: \"Došlo k chybě při vykreslování výsledků PivotTable.\"\n            computeError: \"Došlo k chybě při výpočtu výsledků PivotTable.\"\n            uiRenderError: \"Došlo k chybě při vykreslování PivotTable UI.\"\n            selectAll: \"Vybrat vše\"\n            selectNone: \"Zrušit výběr\"\n            tooMany: \"(příliš mnoho položek)\"\n            filterResults: \"Hodnoty pro filtr\"\n            apply: \"Použít\"\n            cancel: \"Zrušit\"\n            totals: \"Celkem\"\n            vs: \"ku\"\n            by: \"z\"\n\n        aggregators: \n            \"Počet\":                        tpl.count(csFmtInt)\n            \"Počet unikátních hodnot\":      tpl.countUnique(csFmtInt)\n            \"Výčet unikátních hodnot\":      tpl.listUnique(\", \")\n            \"Součet\":                       tpl.sum(csFmt)\n            \"Celočíselný součet\":           tpl.sum(csFmtInt)\n            \"Průměr\":                       tpl.average(csFmt)\n            \"Medián\":                       tpl.median(csFmt),\n            \"Rozptyl\":                      tpl[\"var\"](1, csFmt),\n            \"Směrodatná odchylka\":          tpl.stdev(1, csFmt),\n            \"Minimum\":                      tpl.min(csFmt)\n            \"Maximum\":                      tpl.max(csFmt)\n            \"První\":                        tpl.first(csFmt)\n            \"Poslední\":                     tpl.last(csFmt)\n            \"Součet přes součet\":           tpl.sumOverSum(csFmt)\n            \"80% horní hranice\":            tpl.sumOverSumBound80(true, csFmt)\n            \"80% spodní hranice\":           tpl.sumOverSumBound80(false, csFmt)\n            \"Součet jako poměr z celku\":    tpl.fractionOf(tpl.sum(),       \"total\", csFmtPct)\n            \"Součet jako poměr z řádků\":    tpl.fractionOf(tpl.sum(),   \"row\",   csFmtPct)\n            \"Součet jako poměr ze sloupců\": tpl.fractionOf(tpl.sum(),   \"col\",   csFmtPct)\n            \"Počet jako poměr z celku\":     tpl.fractionOf(tpl.count(), \"total\", csFmtPct)\n            \"Počet jako poměr z řádků\":     tpl.fractionOf(tpl.count(), \"row\",   csFmtPct)\n            \"Počet jako poměr ze sloupců\":  tpl.fractionOf(tpl.count(), \"col\",   csFmtPct)\n\n        renderers:\n            \"Tabulka\":                      $.pivotUtilities.renderers[\"Table\"]\n            \"Tabulka se sloupcovým grafem\": $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Teplotní mapa\":                $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Teplotní mapa z řádků\":        $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Teplotní mapa ze sloupců\":     $.pivotUtilities.renderers[\"Col Heatmap\"]\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    var csFmt, csFmtInt, csFmtPct, nf, tpl;\n    nf = $.pivotUtilities.numberFormat;\n    tpl = $.pivotUtilities.aggregatorTemplates;\n    csFmt = nf({\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    csFmtInt = nf({\n      digitsAfterDecimal: 0,\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    csFmtPct = nf({\n      digitsAfterDecimal: 1,\n      scaler: 100,\n      suffix: \"%\",\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    return $.pivotUtilities.locales.cs = {\n      localeStrings: {\n        renderError: \"Došlo k chybě při vykreslování výsledků PivotTable.\",\n        computeError: \"Došlo k chybě při výpočtu výsledků PivotTable.\",\n        uiRenderError: \"Došlo k chybě při vykreslování PivotTable UI.\",\n        selectAll: \"Vybrat vše\",\n        selectNone: \"Zrušit výběr\",\n        tooMany: \"(příliš mnoho položek)\",\n        filterResults: \"Hodnoty pro filtr\",\n        apply: \"Použít\",\n        cancel: \"Zrušit\",\n        totals: \"Celkem\",\n        vs: \"ku\",\n        by: \"z\"\n      },\n      aggregators: {\n        \"Počet\": tpl.count(csFmtInt),\n        \"Počet unikátních hodnot\": tpl.countUnique(csFmtInt),\n        \"Výčet unikátních hodnot\": tpl.listUnique(\", \"),\n        \"Součet\": tpl.sum(csFmt),\n        \"Celočíselný součet\": tpl.sum(csFmtInt),\n        \"Průměr\": tpl.average(csFmt),\n        \"Medián\": tpl.median(csFmt),\n        \"Rozptyl\": tpl[\"var\"](1, csFmt),\n        \"Směrodatná odchylka\": tpl.stdev(1, csFmt),\n        \"Minimum\": tpl.min(csFmt),\n        \"Maximum\": tpl.max(csFmt),\n        \"První\": tpl.first(csFmt),\n        \"Poslední\": tpl.last(csFmt),\n        \"Součet přes součet\": tpl.sumOverSum(csFmt),\n        \"80% horní hranice\": tpl.sumOverSumBound80(true, csFmt),\n        \"80% spodní hranice\": tpl.sumOverSumBound80(false, csFmt),\n        \"Součet jako poměr z celku\": tpl.fractionOf(tpl.sum(), \"total\", csFmtPct),\n        \"Součet jako poměr z řádků\": tpl.fractionOf(tpl.sum(), \"row\", csFmtPct),\n        \"Součet jako poměr ze sloupců\": tpl.fractionOf(tpl.sum(), \"col\", csFmtPct),\n        \"Počet jako poměr z celku\": tpl.fractionOf(tpl.count(), \"total\", csFmtPct),\n        \"Počet jako poměr z řádků\": tpl.fractionOf(tpl.count(), \"row\", csFmtPct),\n        \"Počet jako poměr ze sloupců\": tpl.fractionOf(tpl.count(), \"col\", csFmtPct)\n      },\n      renderers: {\n        \"Tabulka\": $.pivotUtilities.renderers[\"Table\"],\n        \"Tabulka se sloupcovým grafem\": $.pivotUtilities.renderers[\"Table Barchart\"],\n        \"Teplotní mapa\": $.pivotUtilities.renderers[\"Heatmap\"],\n        \"Teplotní mapa z řádků\": $.pivotUtilities.renderers[\"Row Heatmap\"],\n        \"Teplotní mapa ze sloupců\": $.pivotUtilities.renderers[\"Col Heatmap\"]\n      }\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot.cs.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.min.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.min.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a4598add2c9ccc03d61c5447d1393b334726cf02
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.min.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.cs.min.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.min.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.min.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..46c1b4d84819125f54701c4c2a0a2790b9af0b9c
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.cs.min.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.cs.min.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.css.css b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.css.css
index cd8b784624a757b958461cd410961013fcdbfd90..4df17e826205405ccff3b8b0e886a7fa6ee758c1 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.css.css
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.css.css
@@ -6,7 +6,7 @@ table.pvtTable {
     text-align: left;
     border-collapse: collapse;
 }
-table.pvtTable tr th, table.pvtTable tr th {
+table.pvtTable thead tr th, table.pvtTable tbody tr th {
     background-color: #e6EEEE;
     border: 1px solid #CDCDCD;
     font-size: 8pt;
@@ -16,7 +16,7 @@ table.pvtTable tr th, table.pvtTable tr th {
 table.pvtTable .pvtColLabel {text-align: center;}
 table.pvtTable .pvtTotalLabel {text-align: right;}
 
-table.pvtTable tr td {
+table.pvtTable tbody tr td {
     color: #3D3D3D;
     padding: 5px;
     background-color: #FFF;
@@ -27,7 +27,12 @@ table.pvtTable tr td {
 
 .pvtTotal, .pvtGrandTotal { font-weight: bold; }
 
-.pvtVals { text-align: center;}
+.pvtVals { text-align: center; white-space: nowrap;}
+.pvtRowOrder, .pvtColOrder {
+    cursor:pointer;
+    width: 15px;
+    margin-left: 5px;
+    display: inline-block; }
 .pvtAggregator { margin-bottom: 5px ;}
 
 .pvtAxisContainer, .pvtVals {
@@ -36,6 +41,12 @@ table.pvtTable tr td {
     padding: 5px;
     min-width: 20px;
     min-height: 20px;
+
+    user-select: none;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -khtml-user-select: none;
+    -ms-user-select: none;
 }
 .pvtAxisContainer li {
     padding: 8px 6px;
@@ -51,6 +62,7 @@ table.pvtTable tr td {
 }
 
 .pvtAxisContainer li span.pvtAttr {
+    -webkit-text-size-adjust: 100%;
     background: #F3F3F3;
     border: 1px solid #DEDEDE;
     padding: 2px 5px;
@@ -72,25 +84,31 @@ table.pvtTable tr td {
 
 .pvtFilterBox{
     z-index: 100;
-    width: 280px;
+    width: 300px;
     border: 1px solid gray;
     background-color: #fff;
     position: absolute;
-    padding: 20px;
     text-align: center;
 }
 
-.pvtFilterBox h4{ margin:0; }
-.pvtFilterBox p { margin: 1em auto; }
+.pvtFilterBox h4{ margin: 15px; }
+.pvtFilterBox p { margin: 10px auto; }
 .pvtFilterBox label { font-weight: normal; }
-.pvtFilterBox input[type='checkbox'] { margin-right: 5px; }
+.pvtFilterBox input[type='checkbox'] { margin-right: 10px; margin-left: 10px; }
+.pvtFilterBox input[type='text'] { width: 230px; }
+.pvtFilterBox .count { color: gray; font-weight: normal; margin-left: 3px;}
 
 .pvtCheckContainer{
     text-align: left;
-    overflow: scroll;
+    font-size: 14px;
+    white-space: nowrap;
+    overflow-y: scroll;
     width: 100%;
-    max-height: 200px;
+    max-height: 250px;
+    border-top: 1px solid lightgrey;
+    border-bottom: 1px solid lightgrey;
 }
+
 .pvtCheckContainer p{ margin: 5px; }
 
-.pvtRendererArea { padding: 5px;}
\ No newline at end of file
+.pvtRendererArea { padding: 5px;}
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.css.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.css.xml
index 0c92040bef2e5fb6a28a80e647d4c32629636030..cd292e69b98187a7f45822cc93ab253deeb51443 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.css.xml
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.css.xml
@@ -6,6 +6,10 @@
     </pickle>
     <pickle>
       <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
         <item>
             <key> <string>__name__</string> </key>
             <value> <string>pivot.css</string> </value>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..dc40abf27bf82cf4c5fe611da5e4cbd391627168
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.js.js
@@ -0,0 +1,78 @@
+(function() {
+  var callWithJQuery;
+
+  callWithJQuery = function(pivotModule) {
+    if (typeof exports === "object" && typeof module === "object") {
+      return pivotModule(require("jquery"));
+    } else if (typeof define === "function" && define.amd) {
+      return define(["jquery"], pivotModule);
+    } else {
+      return pivotModule(jQuery);
+    }
+  };
+
+  callWithJQuery(function($) {
+    var nf, o, r, t, tpl;
+    nf = $.pivotUtilities.numberFormat;
+    tpl = $.pivotUtilities.aggregatorTemplates;
+    r = nf({
+      thousandsSep: ".",
+      decimalSep: ","
+    });
+    t = nf({
+      digitsAfterDecimal: 0,
+      thousandsSep: ".",
+      decimalSep: ","
+    });
+    o = nf({
+      digitsAfterDecimal: 1,
+      scaler: 100,
+      suffix: "%",
+      thousandsSep: ".",
+      decimalSep: ","
+    });
+    return $.pivotUtilities.locales.da = {
+      localeStrings: {
+        renderError: "Der opstod en fejl, mens du trak i feltet",
+        computeError: "Der opstod en fejl ved beregningen af feltet",
+        uiRenderError: "Der opstod en fejl, mens den grafiske brugerflade blev beregnet",
+        selectAll: "Vælg alle",
+        selectNone: "Vælg ingen",
+        tooMany: "(for mange værdier til at vise)",
+        filterResults: "Filter værdier",
+        totals: "I alt",
+        vs: "vs",
+        by: "af"
+      },
+      aggregators: {
+        "Antal": tpl.count(t),
+        "Antal Unikke værdier": tpl.countUnique(t),
+        "Liste unikke værdier": tpl.listUnique(", "),
+        "Sum": tpl.sum(r),
+        "Sum i heltal": tpl.sum(t),
+        "Gennemsnit": tpl.average(r),
+        "Minimum": tpl.min(r),
+        "Maximum": tpl.max(r),
+        "Sum iforhold til sum": tpl.sumOverSum(r),
+        "Sum iforhold til sum, øverst 80%": tpl.sumOverSumBound80(!0, r),
+        "Sum iforhold til sum, lavest  80%": tpl.sumOverSumBound80(!1, r),
+        "Andel af i alt sum": tpl.fractionOf(tpl.sum(), "total", o),
+        "Andel af række sum": tpl.fractionOf(tpl.sum(), "row", o),
+        "Andel af kolonner sum": tpl.fractionOf(tpl.sum(), "col", o),
+        "Andel af i alt antal": tpl.fractionOf(tpl.count(), "total", o),
+        "Andel af række antal": tpl.fractionOf(tpl.count(), "row", o),
+        "Andel af kolonner antal": tpl.fractionOf(tpl.count(), "col", o)
+      },
+      renderers: {
+        "Tabel": $.pivotUtilities.renderers.Table,
+        "Tabel med søjler": $.pivotUtilities.renderers["Table Barchart"],
+        "Heatmap": $.pivotUtilities.renderers.Heatmap,
+        "Heatmap per række": $.pivotUtilities.renderers["Row Heatmap"],
+        "Heatmap per kolonne": $.pivotUtilities.renderers["Col Heatmap"]
+      }
+    };
+  });
+
+}).call(this);
+
+//# sourceMappingURL=pivot.da.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..533dd649293232b659fa68e73fe4b0a8d090b8cc
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"file":"pivot.da.js","sources":["pivot.da.coffee"],"names":[],"mappings":"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","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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    r = nf({\n            thousandsSep: \".\",\n            decimalSep: \",\"\n        })\n\n    t = nf({\n            digitsAfterDecimal: 0,\n            thousandsSep: \".\",\n            decimalSep: \",\"\n        })\n\n    o = nf({\n            digitsAfterDecimal: 1,\n            scaler: 100,\n            suffix: \"%\",\n            thousandsSep: \".\",\n            decimalSep: \",\"\n        })\n\n    $.pivotUtilities.locales.da = \n        localeStrings: \n            renderError: \"Der opstod en fejl, mens du trak i feltet\",\n            computeError: \"Der opstod en fejl ved beregningen af feltet\",\n            uiRenderError: \"Der opstod en fejl, mens den grafiske brugerflade blev beregnet\",\n            selectAll: \"Vælg alle\",\n            selectNone: \"Vælg ingen\",\n            tooMany: \"(for mange værdier til at vise)\",\n            filterResults: \"Filter værdier\",\n            totals: \"I alt\",\n            vs: \"vs\",\n            by: \"af\"\n        aggregators: \n            \"Antal\": tpl.count(t),\n            \"Antal Unikke værdier\": tpl.countUnique(t),\n            \"Liste unikke værdier\": tpl.listUnique(\", \"),\n            \"Sum\": tpl.sum(r),\n            \"Sum i heltal\": tpl.sum(t),\n            \"Gennemsnit\": tpl.average(r),\n            \"Minimum\": tpl.min(r),\n            \"Maximum\": tpl.max(r),\n            \"Sum iforhold til sum\": tpl.sumOverSum(r),\n            \"Sum iforhold til sum, øverst 80%\": tpl.sumOverSumBound80(!0, r),\n            \"Sum iforhold til sum, lavest  80%\": tpl.sumOverSumBound80(!1, r),\n            \"Andel af i alt sum\": tpl.fractionOf(tpl.sum(), \"total\", o),\n            \"Andel af række sum\": tpl.fractionOf(tpl.sum(), \"row\", o),\n            \"Andel af kolonner sum\": tpl.fractionOf(tpl.sum(), \"col\", o),\n            \"Andel af i alt antal\": tpl.fractionOf(tpl.count(), \"total\", o),\n            \"Andel af række antal\": tpl.fractionOf(tpl.count(), \"row\", o),\n            \"Andel af kolonner antal\": tpl.fractionOf(tpl.count(), \"col\", o)\n        renderers: \n            \"Tabel\": $.pivotUtilities.renderers.Table,\n            \"Tabel med søjler\": $.pivotUtilities.renderers[\"Table Barchart\"],\n            \"Heatmap\": $.pivotUtilities.renderers.Heatmap,\n            \"Heatmap per række\": $.pivotUtilities.renderers[\"Row Heatmap\"],\n            \"Heatmap per kolonne\": $.pivotUtilities.renderers[\"Col Heatmap\"]\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1be1d9a60395494d4c160e850f5efdf933fe127e
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.da.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..78e76135ec362efdfc4ecd4723224325096d0c66
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.da.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.min.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..c4ebdb22ec55146afd49013314e26117ea4ca2f7
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.min.js.js
@@ -0,0 +1,2 @@
+(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var t,r,i,a,n;return t=e.pivotUtilities.numberFormat,n=e.pivotUtilities.aggregatorTemplates,i=t({thousandsSep:".",decimalSep:","}),a=t({digitsAfterDecimal:0,thousandsSep:".",decimalSep:","}),r=t({digitsAfterDecimal:1,scaler:100,suffix:"%",thousandsSep:".",decimalSep:","}),e.pivotUtilities.locales.da={localeStrings:{renderError:"Der opstod en fejl, mens du trak i feltet",computeError:"Der opstod en fejl ved beregningen af feltet",uiRenderError:"Der opstod en fejl, mens den grafiske brugerflade blev beregnet",selectAll:"Vælg alle",selectNone:"Vælg ingen",tooMany:"(for mange værdier til at vise)",filterResults:"Filter værdier",totals:"I alt",vs:"vs",by:"af"},aggregators:{Antal:n.count(a),"Antal Unikke værdier":n.countUnique(a),"Liste unikke værdier":n.listUnique(", "),Sum:n.sum(i),"Sum i heltal":n.sum(a),Gennemsnit:n.average(i),Minimum:n.min(i),Maximum:n.max(i),"Sum iforhold til sum":n.sumOverSum(i),"Sum iforhold til sum, øverst 80%":n.sumOverSumBound80(!0,i),"Sum iforhold til sum, lavest  80%":n.sumOverSumBound80(!1,i),"Andel af i alt sum":n.fractionOf(n.sum(),"total",r),"Andel af række sum":n.fractionOf(n.sum(),"row",r),"Andel af kolonner sum":n.fractionOf(n.sum(),"col",r),"Andel af i alt antal":n.fractionOf(n.count(),"total",r),"Andel af række antal":n.fractionOf(n.count(),"row",r),"Andel af kolonner antal":n.fractionOf(n.count(),"col",r)},renderers:{Tabel:e.pivotUtilities.renderers.Table,"Tabel med søjler":e.pivotUtilities.renderers["Table Barchart"],Heatmap:e.pivotUtilities.renderers.Heatmap,"Heatmap per række":e.pivotUtilities.renderers["Row Heatmap"],"Heatmap per kolonne":e.pivotUtilities.renderers["Col Heatmap"]}}})}).call(this);
+//# sourceMappingURL=pivot.da.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.min.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..bbb16c197cee747cb3026272e983ec97f0f2f08b
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.min.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"sources":["pivot.da.coffee","pivot.da.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","nf","o","r","t","tpl","pivotUtilities","numberFormat","aggregatorTemplates","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","da","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","totals","vs","by","aggregators","Antal","count","Antal Unikke værdier","countUnique","Liste unikke værdier","listUnique","Sum","sum","Sum i heltal","Gennemsnit","average","Minimum","min","Maximum","max","Sum iforhold til sum","sumOverSum","Sum iforhold til sum, øverst 80%","sumOverSumBound80","Sum iforhold til sum, lavest  80%","Andel af i alt sum","fractionOf","Andel af række sum","Andel af kolonner sum","Andel af i alt antal","Andel af række antal","Andel af kolonner antal","renderers","Tabel","Table","Tabel med søjler","Heatmap","Heatmap per række","Heatmap per kolonne","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAXC,UAAyC,gBAAVC,QACrCF,EAAYG,QAAQ,WACC,kBAAVC,SAAyBA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GACZ,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,CCuBA,ODvBAJ,GAAKD,EAAEM,eAAeC,aACtBF,EAAML,EAAEM,eAAeE,oBAEvBL,EAAIF,GACIQ,aAAc,IACdC,WAAY,MAGpBN,EAAIH,GACIU,mBAAoB,EACpBF,aAAc,IACdC,WAAY,MAGpBR,EAAID,GACIU,mBAAoB,EACpBC,OAAQ,IACRC,OAAQ,IACRJ,aAAc,IACdC,WAAY,MAGpBV,EAAEM,eAAeQ,QAAQC,IACrBC,eACIC,YAAa,4CACbC,aAAc,+CACdC,cAAe,kEACfC,UAAW,YACXC,WAAY,aACZC,QAAS,kCACTC,cAAe,iBACfC,OAAQ,QACRC,GAAI,KACJC,GAAI,MACRC,aACIC,MAASvB,EAAIwB,MAAMzB,GACnB0B,uBAAwBzB,EAAI0B,YAAY3B,GACxC4B,uBAAwB3B,EAAI4B,WAAW,MACvCC,IAAO7B,EAAI8B,IAAIhC,GACfiC,eAAgB/B,EAAI8B,IAAI/B,GACxBiC,WAAchC,EAAIiC,QAAQnC,GAC1BoC,QAAWlC,EAAImC,IAAIrC,GACnBsC,QAAWpC,EAAIqC,IAAIvC,GACnBwC,uBAAwBtC,EAAIuC,WAAWzC,GACvC0C,mCAAoCxC,EAAIyC,mBAAkB,EAAI3C,GAC9D4C,oCAAqC1C,EAAIyC,mBAAkB,EAAI3C,GAC/D6C,qBAAsB3C,EAAI4C,WAAW5C,EAAI8B,MAAO,QAASjC,GACzDgD,qBAAsB7C,EAAI4C,WAAW5C,EAAI8B,MAAO,MAAOjC,GACvDiD,wBAAyB9C,EAAI4C,WAAW5C,EAAI8B,MAAO,MAAOjC,GAC1DkD,uBAAwB/C,EAAI4C,WAAW5C,EAAIwB,QAAS,QAAS3B,GAC7DmD,uBAAwBhD,EAAI4C,WAAW5C,EAAIwB,QAAS,MAAO3B,GAC3DoD,0BAA2BjD,EAAI4C,WAAW5C,EAAIwB,QAAS,MAAO3B,IAClEqD,WACIC,MAASxD,EAAEM,eAAeiD,UAAUE,MACpCC,mBAAoB1D,EAAEM,eAAeiD,UAAU,kBAC/CI,QAAW3D,EAAEM,eAAeiD,UAAUI,QACtCC,oBAAqB5D,EAAEM,eAAeiD,UAAU,eAChDM,sBAAuB7D,EAAEM,eAAeiD,UAAU,qBCQ3DO,KAAKC","file":"pivot.da.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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    r = nf({\n            thousandsSep: \".\",\n            decimalSep: \",\"\n        })\n\n    t = nf({\n            digitsAfterDecimal: 0,\n            thousandsSep: \".\",\n            decimalSep: \",\"\n        })\n\n    o = nf({\n            digitsAfterDecimal: 1,\n            scaler: 100,\n            suffix: \"%\",\n            thousandsSep: \".\",\n            decimalSep: \",\"\n        })\n\n    $.pivotUtilities.locales.da = \n        localeStrings: \n            renderError: \"Der opstod en fejl, mens du trak i feltet\",\n            computeError: \"Der opstod en fejl ved beregningen af feltet\",\n            uiRenderError: \"Der opstod en fejl, mens den grafiske brugerflade blev beregnet\",\n            selectAll: \"Vælg alle\",\n            selectNone: \"Vælg ingen\",\n            tooMany: \"(for mange værdier til at vise)\",\n            filterResults: \"Filter værdier\",\n            totals: \"I alt\",\n            vs: \"vs\",\n            by: \"af\"\n        aggregators: \n            \"Antal\": tpl.count(t),\n            \"Antal Unikke værdier\": tpl.countUnique(t),\n            \"Liste unikke værdier\": tpl.listUnique(\", \"),\n            \"Sum\": tpl.sum(r),\n            \"Sum i heltal\": tpl.sum(t),\n            \"Gennemsnit\": tpl.average(r),\n            \"Minimum\": tpl.min(r),\n            \"Maximum\": tpl.max(r),\n            \"Sum iforhold til sum\": tpl.sumOverSum(r),\n            \"Sum iforhold til sum, øverst 80%\": tpl.sumOverSumBound80(!0, r),\n            \"Sum iforhold til sum, lavest  80%\": tpl.sumOverSumBound80(!1, r),\n            \"Andel af i alt sum\": tpl.fractionOf(tpl.sum(), \"total\", o),\n            \"Andel af række sum\": tpl.fractionOf(tpl.sum(), \"row\", o),\n            \"Andel af kolonner sum\": tpl.fractionOf(tpl.sum(), \"col\", o),\n            \"Andel af i alt antal\": tpl.fractionOf(tpl.count(), \"total\", o),\n            \"Andel af række antal\": tpl.fractionOf(tpl.count(), \"row\", o),\n            \"Andel af kolonner antal\": tpl.fractionOf(tpl.count(), \"col\", o)\n        renderers: \n            \"Tabel\": $.pivotUtilities.renderers.Table,\n            \"Tabel med søjler\": $.pivotUtilities.renderers[\"Table Barchart\"],\n            \"Heatmap\": $.pivotUtilities.renderers.Heatmap,\n            \"Heatmap per række\": $.pivotUtilities.renderers[\"Row Heatmap\"],\n            \"Heatmap per kolonne\": $.pivotUtilities.renderers[\"Col Heatmap\"]\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    var nf, o, r, t, tpl;\n    nf = $.pivotUtilities.numberFormat;\n    tpl = $.pivotUtilities.aggregatorTemplates;\n    r = nf({\n      thousandsSep: \".\",\n      decimalSep: \",\"\n    });\n    t = nf({\n      digitsAfterDecimal: 0,\n      thousandsSep: \".\",\n      decimalSep: \",\"\n    });\n    o = nf({\n      digitsAfterDecimal: 1,\n      scaler: 100,\n      suffix: \"%\",\n      thousandsSep: \".\",\n      decimalSep: \",\"\n    });\n    return $.pivotUtilities.locales.da = {\n      localeStrings: {\n        renderError: \"Der opstod en fejl, mens du trak i feltet\",\n        computeError: \"Der opstod en fejl ved beregningen af feltet\",\n        uiRenderError: \"Der opstod en fejl, mens den grafiske brugerflade blev beregnet\",\n        selectAll: \"Vælg alle\",\n        selectNone: \"Vælg ingen\",\n        tooMany: \"(for mange værdier til at vise)\",\n        filterResults: \"Filter værdier\",\n        totals: \"I alt\",\n        vs: \"vs\",\n        by: \"af\"\n      },\n      aggregators: {\n        \"Antal\": tpl.count(t),\n        \"Antal Unikke værdier\": tpl.countUnique(t),\n        \"Liste unikke værdier\": tpl.listUnique(\", \"),\n        \"Sum\": tpl.sum(r),\n        \"Sum i heltal\": tpl.sum(t),\n        \"Gennemsnit\": tpl.average(r),\n        \"Minimum\": tpl.min(r),\n        \"Maximum\": tpl.max(r),\n        \"Sum iforhold til sum\": tpl.sumOverSum(r),\n        \"Sum iforhold til sum, øverst 80%\": tpl.sumOverSumBound80(!0, r),\n        \"Sum iforhold til sum, lavest  80%\": tpl.sumOverSumBound80(!1, r),\n        \"Andel af i alt sum\": tpl.fractionOf(tpl.sum(), \"total\", o),\n        \"Andel af række sum\": tpl.fractionOf(tpl.sum(), \"row\", o),\n        \"Andel af kolonner sum\": tpl.fractionOf(tpl.sum(), \"col\", o),\n        \"Andel af i alt antal\": tpl.fractionOf(tpl.count(), \"total\", o),\n        \"Andel af række antal\": tpl.fractionOf(tpl.count(), \"row\", o),\n        \"Andel af kolonner antal\": tpl.fractionOf(tpl.count(), \"col\", o)\n      },\n      renderers: {\n        \"Tabel\": $.pivotUtilities.renderers.Table,\n        \"Tabel med søjler\": $.pivotUtilities.renderers[\"Table Barchart\"],\n        \"Heatmap\": $.pivotUtilities.renderers.Heatmap,\n        \"Heatmap per række\": $.pivotUtilities.renderers[\"Row Heatmap\"],\n        \"Heatmap per kolonne\": $.pivotUtilities.renderers[\"Col Heatmap\"]\n      }\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot.da.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.min.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.min.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..04def59568d40b0378b5e7253623f493b49e067a
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.min.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.da.min.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.min.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.min.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c0996a933006cf4f87da452fc4bf4167690f0c0a
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.da.min.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.da.min.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..97dbaff613dfd4bd58065274492a4d4d0a8ae267
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.js.js
@@ -0,0 +1,78 @@
+(function() {
+  var callWithJQuery;
+
+  callWithJQuery = function(pivotModule) {
+    if (typeof exports === "object" && typeof module === "object") {
+      return pivotModule(require("jquery"));
+    } else if (typeof define === "function" && define.amd) {
+      return define(["jquery"], pivotModule);
+    } else {
+      return pivotModule(jQuery);
+    }
+  };
+
+  callWithJQuery(function($) {
+    var frFmt, frFmtInt, frFmtPct, nf, tpl;
+    nf = $.pivotUtilities.numberFormat;
+    tpl = $.pivotUtilities.aggregatorTemplates;
+    frFmt = nf({
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    frFmtInt = nf({
+      digitsAfterDecimal: 0,
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    frFmtPct = nf({
+      digitsAfterDecimal: 1,
+      scaler: 100,
+      suffix: "%",
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    return $.pivotUtilities.locales.de = {
+      localeStrings: {
+        renderError: "Bei der Darstellung der Pivot-Tabelle ist ein Fehler aufgetreten.",
+        computeError: "Bei der Berechnung der Pivot-Tabelle ist ein Fehler aufgetreten.",
+        uiRenderError: "Bei der Darstellung Oberfläche der Pivot-Tabelle ist ein Fehler aufgetreten.",
+        selectAll: "Alles auswählen",
+        selectNone: "Nichts auswählen",
+        tooMany: "(zu viele für Liste)",
+        filterResults: "Ergebnisse filtern",
+        totals: "Gesamt",
+        vs: "gegen",
+        by: "pro"
+      },
+      aggregators: {
+        "Anzahl": tpl.count(frFmtInt),
+        "Anzahl eindeutiger Werte": tpl.countUnique(frFmtInt),
+        "Liste eindeutiger Werte": tpl.listUnique(", "),
+        "Summe": tpl.sum(frFmt),
+        "Ganzzahlige Summe": tpl.sum(frFmtInt),
+        "Durchschnitt": tpl.average(frFmt),
+        "Minimum": tpl.min(frFmt),
+        "Maximum": tpl.max(frFmt),
+        "Summe über Summe": tpl.sumOverSum(frFmt),
+        "80% Obergrenze": tpl.sumOverSumBound80(true, frFmt),
+        "80% Untergrenze": tpl.sumOverSumBound80(false, frFmt),
+        "Summe als Anteil von Gesamt": tpl.fractionOf(tpl.sum(), "total", frFmtPct),
+        "Summe als Anteil von Zeile": tpl.fractionOf(tpl.sum(), "row", frFmtPct),
+        "Summe als Anteil von Spalte": tpl.fractionOf(tpl.sum(), "col", frFmtPct),
+        "Anzahl als Anteil von Gesamt": tpl.fractionOf(tpl.count(), "total", frFmtPct),
+        "Anzahl als Anteil von Zeile": tpl.fractionOf(tpl.count(), "row", frFmtPct),
+        "Anzahl als Anteil von Spalte": tpl.fractionOf(tpl.count(), "col", frFmtPct)
+      },
+      renderers: {
+        "Tabelle": $.pivotUtilities.renderers["Table"],
+        "Tabelle mit Balkendiagramm": $.pivotUtilities.renderers["Table Barchart"],
+        "Heatmap": $.pivotUtilities.renderers["Heatmap"],
+        "Heatmap pro Zeile": $.pivotUtilities.renderers["Row Heatmap"],
+        "Heatmap pro Spalte": $.pivotUtilities.renderers["Col Heatmap"]
+      }
+    };
+  });
+
+}).call(this);
+
+//# sourceMappingURL=pivot.de.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d912e3b1d95f65f55c8f8f65ee95d01a2d0c56a7
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"file":"pivot.de.js","sources":["pivot.de.coffee"],"names":[],"mappings":"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","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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.de = \n        localeStrings:\n            renderError: \"Bei der Darstellung der Pivot-Tabelle ist ein Fehler aufgetreten.\"\n            computeError: \"Bei der Berechnung der Pivot-Tabelle ist ein Fehler aufgetreten.\"\n            uiRenderError: \"Bei der Darstellung Oberfläche der Pivot-Tabelle ist ein Fehler aufgetreten.\"\n            selectAll: \"Alles auswählen\"\n            selectNone: \"Nichts auswählen\"\n            tooMany: \"(zu viele für Liste)\"\n            filterResults: \"Ergebnisse filtern\"\n            totals: \"Gesamt\"\n            vs: \"gegen\"\n            by: \"pro\"\n\n        aggregators: \n            \"Anzahl\":                       tpl.count(frFmtInt)\n            \"Anzahl eindeutiger Werte\":     tpl.countUnique(frFmtInt)\n            \"Liste eindeutiger Werte\":      tpl.listUnique(\", \")\n            \"Summe\":                        tpl.sum(frFmt)\n            \"Ganzzahlige Summe\":\t\t\ttpl.sum(frFmtInt)\n            \"Durchschnitt\":                 tpl.average(frFmt)\n            \"Minimum\":                      tpl.min(frFmt)\n            \"Maximum\":                      tpl.max(frFmt)\n            \"Summe über Summe\":             tpl.sumOverSum(frFmt)\n            \"80% Obergrenze\":               tpl.sumOverSumBound80(true, frFmt)\n            \"80% Untergrenze\":        \t\ttpl.sumOverSumBound80(false, frFmt)\n            \"Summe als Anteil von Gesamt\":  tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Summe als Anteil von Zeile\":   tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Summe als Anteil von Spalte\":  tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Anzahl als Anteil von Gesamt\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Anzahl als Anteil von Zeile\":  tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Anzahl als Anteil von Spalte\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Tabelle\":                      $.pivotUtilities.renderers[\"Table\"]\n            \"Tabelle mit Balkendiagramm\":   $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Heatmap\":                      $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Heatmap pro Zeile\":            $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Heatmap pro Spalte\":           $.pivotUtilities.renderers[\"Col Heatmap\"]\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2a8ec38a90b7f51ce4f23c54ccdddeff152174cc
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.de.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9811a8df9ed17aeaf488dbedf6da7ccc47e096fd
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.de.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.min.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..17274fadc95fd0fff61d620050d467db08e9b866
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.min.js.js
@@ -0,0 +1,2 @@
+(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var t,i,r,l,a;return l=e.pivotUtilities.numberFormat,a=e.pivotUtilities.aggregatorTemplates,t=l({thousandsSep:" ",decimalSep:","}),i=l({digitsAfterDecimal:0,thousandsSep:" ",decimalSep:","}),r=l({digitsAfterDecimal:1,scaler:100,suffix:"%",thousandsSep:" ",decimalSep:","}),e.pivotUtilities.locales.de={localeStrings:{renderError:"Bei der Darstellung der Pivot-Tabelle ist ein Fehler aufgetreten.",computeError:"Bei der Berechnung der Pivot-Tabelle ist ein Fehler aufgetreten.",uiRenderError:"Bei der Darstellung Oberfläche der Pivot-Tabelle ist ein Fehler aufgetreten.",selectAll:"Alles auswählen",selectNone:"Nichts auswählen",tooMany:"(zu viele für Liste)",filterResults:"Ergebnisse filtern",totals:"Gesamt",vs:"gegen",by:"pro"},aggregators:{Anzahl:a.count(i),"Anzahl eindeutiger Werte":a.countUnique(i),"Liste eindeutiger Werte":a.listUnique(", "),Summe:a.sum(t),"Ganzzahlige Summe":a.sum(i),Durchschnitt:a.average(t),Minimum:a.min(t),Maximum:a.max(t),"Summe über Summe":a.sumOverSum(t),"80% Obergrenze":a.sumOverSumBound80(!0,t),"80% Untergrenze":a.sumOverSumBound80(!1,t),"Summe als Anteil von Gesamt":a.fractionOf(a.sum(),"total",r),"Summe als Anteil von Zeile":a.fractionOf(a.sum(),"row",r),"Summe als Anteil von Spalte":a.fractionOf(a.sum(),"col",r),"Anzahl als Anteil von Gesamt":a.fractionOf(a.count(),"total",r),"Anzahl als Anteil von Zeile":a.fractionOf(a.count(),"row",r),"Anzahl als Anteil von Spalte":a.fractionOf(a.count(),"col",r)},renderers:{Tabelle:e.pivotUtilities.renderers.Table,"Tabelle mit Balkendiagramm":e.pivotUtilities.renderers["Table Barchart"],Heatmap:e.pivotUtilities.renderers.Heatmap,"Heatmap pro Zeile":e.pivotUtilities.renderers["Row Heatmap"],"Heatmap pro Spalte":e.pivotUtilities.renderers["Col Heatmap"]}}})}).call(this);
+//# sourceMappingURL=pivot.de.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.min.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..acd4bcc03741bb6679bc2e33b40a527b2de12631
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.min.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"sources":["pivot.de.coffee","pivot.de.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","frFmt","frFmtInt","frFmtPct","nf","tpl","pivotUtilities","numberFormat","aggregatorTemplates","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","de","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","totals","vs","by","aggregators","Anzahl","count","Anzahl eindeutiger Werte","countUnique","Liste eindeutiger Werte","listUnique","Summe","sum","Ganzzahlige Summe","Durchschnitt","average","Minimum","min","Maximum","max","Summe über Summe","sumOverSum","80% Obergrenze","sumOverSumBound80","80% Untergrenze","Summe als Anteil von Gesamt","fractionOf","Summe als Anteil von Zeile","Summe als Anteil von Spalte","Anzahl als Anteil von Gesamt","Anzahl als Anteil von Zeile","Anzahl als Anteil von Spalte","renderers","Tabelle","Tabelle mit Balkendiagramm","Heatmap","Heatmap pro Zeile","Heatmap pro Spalte","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAXC,UAAyC,gBAAVC,QACrCF,EAAYG,QAAQ,WACC,kBAAVC,SAAyBA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GACZ,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,CCuBA,ODvBAD,GAAKJ,EAAEM,eAAeC,aACtBF,EAAML,EAAEM,eAAeE,oBAEvBP,EAAWG,GAAGK,aAAc,IAAKC,WAAY,MAC7CR,EAAWE,GAAGO,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEP,EAAWC,GAAGO,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FV,EAAEM,eAAeQ,QAAQC,IACrBC,eACIC,YAAa,oEACbC,aAAc,mEACdC,cAAe,+EACfC,UAAW,kBACXC,WAAY,mBACZC,QAAS,uBACTC,cAAe,qBACfC,OAAQ,SACRC,GAAI,QACJC,GAAI,OAERC,aACIC,OAAgCvB,EAAIwB,MAAM3B,GAC1C4B,2BAAgCzB,EAAI0B,YAAY7B,GAChD8B,0BAAgC3B,EAAI4B,WAAW,MAC/CC,MAAgC7B,EAAI8B,IAAIlC,GACxCmC,oBAAuB/B,EAAI8B,IAAIjC,GAC/BmC,aAAgChC,EAAIiC,QAAQrC,GAC5CsC,QAAgClC,EAAImC,IAAIvC,GACxCwC,QAAgCpC,EAAIqC,IAAIzC,GACxC0C,mBAAgCtC,EAAIuC,WAAW3C,GAC/C4C,iBAAgCxC,EAAIyC,mBAAkB,EAAM7C,GAC5D8C,kBAA4B1C,EAAIyC,mBAAkB,EAAO7C,GACzD+C,8BAAgC3C,EAAI4C,WAAW5C,EAAI8B,MAAS,QAAShC,GACrE+C,6BAAgC7C,EAAI4C,WAAW5C,EAAI8B,MAAS,MAAShC,GACrEgD,8BAAgC9C,EAAI4C,WAAW5C,EAAI8B,MAAS,MAAShC,GACrEiD,+BAAgC/C,EAAI4C,WAAW5C,EAAIwB,QAAS,QAAS1B,GACrEkD,8BAAgChD,EAAI4C,WAAW5C,EAAIwB,QAAS,MAAS1B,GACrEmD,+BAAgCjD,EAAI4C,WAAW5C,EAAIwB,QAAS,MAAS1B,IAEzEoD,WACIC,QAAgCxD,EAAEM,eAAeiD,UAAU,MAC3DE,6BAAgCzD,EAAEM,eAAeiD,UAAU,kBAC3DG,QAAgC1D,EAAEM,eAAeiD,UAAU,QAC3DI,oBAAgC3D,EAAEM,eAAeiD,UAAU,eAC3DK,qBAAgC5D,EAAEM,eAAeiD,UAAU,qBCqBpEM,KAAKC","file":"pivot.de.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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.de = \n        localeStrings:\n            renderError: \"Bei der Darstellung der Pivot-Tabelle ist ein Fehler aufgetreten.\"\n            computeError: \"Bei der Berechnung der Pivot-Tabelle ist ein Fehler aufgetreten.\"\n            uiRenderError: \"Bei der Darstellung Oberfläche der Pivot-Tabelle ist ein Fehler aufgetreten.\"\n            selectAll: \"Alles auswählen\"\n            selectNone: \"Nichts auswählen\"\n            tooMany: \"(zu viele für Liste)\"\n            filterResults: \"Ergebnisse filtern\"\n            totals: \"Gesamt\"\n            vs: \"gegen\"\n            by: \"pro\"\n\n        aggregators: \n            \"Anzahl\":                       tpl.count(frFmtInt)\n            \"Anzahl eindeutiger Werte\":     tpl.countUnique(frFmtInt)\n            \"Liste eindeutiger Werte\":      tpl.listUnique(\", \")\n            \"Summe\":                        tpl.sum(frFmt)\n            \"Ganzzahlige Summe\":\t\t\ttpl.sum(frFmtInt)\n            \"Durchschnitt\":                 tpl.average(frFmt)\n            \"Minimum\":                      tpl.min(frFmt)\n            \"Maximum\":                      tpl.max(frFmt)\n            \"Summe über Summe\":             tpl.sumOverSum(frFmt)\n            \"80% Obergrenze\":               tpl.sumOverSumBound80(true, frFmt)\n            \"80% Untergrenze\":        \t\ttpl.sumOverSumBound80(false, frFmt)\n            \"Summe als Anteil von Gesamt\":  tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Summe als Anteil von Zeile\":   tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Summe als Anteil von Spalte\":  tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Anzahl als Anteil von Gesamt\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Anzahl als Anteil von Zeile\":  tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Anzahl als Anteil von Spalte\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Tabelle\":                      $.pivotUtilities.renderers[\"Table\"]\n            \"Tabelle mit Balkendiagramm\":   $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Heatmap\":                      $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Heatmap pro Zeile\":            $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Heatmap pro Spalte\":           $.pivotUtilities.renderers[\"Col Heatmap\"]\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    var frFmt, frFmtInt, frFmtPct, nf, tpl;\n    nf = $.pivotUtilities.numberFormat;\n    tpl = $.pivotUtilities.aggregatorTemplates;\n    frFmt = nf({\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    frFmtInt = nf({\n      digitsAfterDecimal: 0,\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    frFmtPct = nf({\n      digitsAfterDecimal: 1,\n      scaler: 100,\n      suffix: \"%\",\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    return $.pivotUtilities.locales.de = {\n      localeStrings: {\n        renderError: \"Bei der Darstellung der Pivot-Tabelle ist ein Fehler aufgetreten.\",\n        computeError: \"Bei der Berechnung der Pivot-Tabelle ist ein Fehler aufgetreten.\",\n        uiRenderError: \"Bei der Darstellung Oberfläche der Pivot-Tabelle ist ein Fehler aufgetreten.\",\n        selectAll: \"Alles auswählen\",\n        selectNone: \"Nichts auswählen\",\n        tooMany: \"(zu viele für Liste)\",\n        filterResults: \"Ergebnisse filtern\",\n        totals: \"Gesamt\",\n        vs: \"gegen\",\n        by: \"pro\"\n      },\n      aggregators: {\n        \"Anzahl\": tpl.count(frFmtInt),\n        \"Anzahl eindeutiger Werte\": tpl.countUnique(frFmtInt),\n        \"Liste eindeutiger Werte\": tpl.listUnique(\", \"),\n        \"Summe\": tpl.sum(frFmt),\n        \"Ganzzahlige Summe\": tpl.sum(frFmtInt),\n        \"Durchschnitt\": tpl.average(frFmt),\n        \"Minimum\": tpl.min(frFmt),\n        \"Maximum\": tpl.max(frFmt),\n        \"Summe über Summe\": tpl.sumOverSum(frFmt),\n        \"80% Obergrenze\": tpl.sumOverSumBound80(true, frFmt),\n        \"80% Untergrenze\": tpl.sumOverSumBound80(false, frFmt),\n        \"Summe als Anteil von Gesamt\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct),\n        \"Summe als Anteil von Zeile\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct),\n        \"Summe als Anteil von Spalte\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct),\n        \"Anzahl als Anteil von Gesamt\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct),\n        \"Anzahl als Anteil von Zeile\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct),\n        \"Anzahl als Anteil von Spalte\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n      },\n      renderers: {\n        \"Tabelle\": $.pivotUtilities.renderers[\"Table\"],\n        \"Tabelle mit Balkendiagramm\": $.pivotUtilities.renderers[\"Table Barchart\"],\n        \"Heatmap\": $.pivotUtilities.renderers[\"Heatmap\"],\n        \"Heatmap pro Zeile\": $.pivotUtilities.renderers[\"Row Heatmap\"],\n        \"Heatmap pro Spalte\": $.pivotUtilities.renderers[\"Col Heatmap\"]\n      }\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot.de.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.min.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.min.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d30d5e693671d0651844b44a350e9b54ab0d2560
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.min.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.de.min.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.min.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.min.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0e4b18344cab4e8eed5a49797d44f7b75996f5a1
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.de.min.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.de.min.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.js.js
index 0220a5ff4415b6ff1d86fb00ec90c4190a8b0b39..46680741d23378f44a0e47a1d188fe5944213031 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.js.js
@@ -33,35 +33,42 @@
     });
     return $.pivotUtilities.locales.es = {
       localeStrings: {
-        renderError: "Ocurri&oacute; un error durante la interpretaci&oacute;n de la tabla din&acute;mica.",
-        computeError: "Ocurri&oacute; un error durante el c&acute;lculo de la tabla din&acute;mica.",
-        uiRenderError: "Ocurri&oacute; un error durante el dibujado de la tabla din&acute;mica.",
+        renderError: "Ocurrió un error durante la interpretación de la tabla dinámica.",
+        computeError: "Ocurrió un error durante el cálculo de la tabla dinámica.",
+        uiRenderError: "Ocurrió un error durante el dibujado de la tabla dinámica.",
         selectAll: "Seleccionar todo",
         selectNone: "Deseleccionar todo",
         tooMany: "(demasiados valores)",
         filterResults: "Filtrar resultados",
         totals: "Totales",
         vs: "vs",
-        by: "por"
+        by: "por",
+        apply: "Aplicar",
+        cancel: "Cancelar"
       },
       aggregators: {
         "Cuenta": tpl.count(frFmtInt),
-        "Cuenta de valores &uacute;nicos": tpl.countUnique(frFmtInt),
-        "Lista de valores &uacute;nicos": tpl.listUnique(", "),
+        "Cuenta de valores únicos": tpl.countUnique(frFmtInt),
+        "Lista de valores únicos": tpl.listUnique(", "),
         "Suma": tpl.sum(frFmt),
         "Suma de enteros": tpl.sum(frFmtInt),
         "Promedio": tpl.average(frFmt),
+        "Mediana": tpl.median(frFmt),
+        "Diferencia": tpl["var"](1, frFmt),
+        "Desviación estándar de la muestra": tpl.stdev(1, frFmt),
         "Mínimo": tpl.min(frFmt),
         "Máximo": tpl.max(frFmt),
+        "Primero": tpl.first(frFmt),
+        "Pasado": tpl.last(frFmt),
         "Suma de sumas": tpl.sumOverSum(frFmt),
         "Cota 80% superior": tpl.sumOverSumBound80(true, frFmt),
         "Cota 80% inferior": tpl.sumOverSumBound80(false, frFmt),
-        "Proporci&oacute;n del total (suma)": tpl.fractionOf(tpl.sum(), "total", frFmtPct),
-        "Proporci&oacute;n de la fila (suma)": tpl.fractionOf(tpl.sum(), "row", frFmtPct),
-        "Proporci&oacute;n de la columna (suma)": tpl.fractionOf(tpl.sum(), "col", frFmtPct),
-        "Proporci&oacute;n del total (cuenta)": tpl.fractionOf(tpl.count(), "total", frFmtPct),
-        "Proporci&oacute;n de la fila (cuenta)": tpl.fractionOf(tpl.count(), "row", frFmtPct),
-        "Proporci&oacute;n de la columna (cuenta)": tpl.fractionOf(tpl.count(), "col", frFmtPct)
+        "Proporción del total (suma)": tpl.fractionOf(tpl.sum(), "total", frFmtPct),
+        "Proporción de la fila (suma)": tpl.fractionOf(tpl.sum(), "row", frFmtPct),
+        "Proporción de la columna (suma)": tpl.fractionOf(tpl.sum(), "col", frFmtPct),
+        "Proporción del total (cuenta)": tpl.fractionOf(tpl.count(), "total", frFmtPct),
+        "Proporción de la fila (cuenta)": tpl.fractionOf(tpl.count(), "row", frFmtPct),
+        "Proporción de la columna (cuenta)": tpl.fractionOf(tpl.count(), "col", frFmtPct)
       },
       renderers: {
         "Tabla": $.pivotUtilities.renderers["Table"],
@@ -75,4 +82,4 @@
 
 }).call(this);
 
-//# sourceMappingURL=pivot.es.js.map
\ No newline at end of file
+//# sourceMappingURL=pivot.es.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.js.map.txt
index 78a8cdddb6d639d2962b6056a8008f591222387b..9026a18e28b420c996c557f75aae7c3b328e2b42 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["pivot.es.coffee"],"names":[],"mappings":"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","file":"pivot.es.js","sourceRoot":"/source/","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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.es = \n\n        localeStrings:\n            renderError: \"Ocurri&oacute; un error durante la interpretaci&oacute;n de la tabla din&acute;mica.\"\n            computeError: \"Ocurri&oacute; un error durante el c&acute;lculo de la tabla din&acute;mica.\"\n            uiRenderError: \"Ocurri&oacute; un error durante el dibujado de la tabla din&acute;mica.\"\n            selectAll: \"Seleccionar todo\"\n            selectNone: \"Deseleccionar todo\"\n            tooMany: \"(demasiados valores)\"\n            filterResults: \"Filtrar resultados\"\n            totals: \"Totales\"\n            vs: \"vs\"\n            by: \"por\"\n        aggregators: \n            \"Cuenta\":                             tpl.count(frFmtInt)\n            \"Cuenta de valores &uacute;nicos\":          tpl.countUnique(frFmtInt)\n            \"Lista de valores &uacute;nicos\":           tpl.listUnique(\", \")\n            \"Suma\":                              tpl.sum(frFmt)\n            \"Suma de enteros\":                   tpl.sum(frFmtInt)\n            \"Promedio\":                            tpl.average(frFmt)\n            \"Mínimo\":                                       tpl.min(frFmt)\n            \"Máximo\":                                       tpl.max(frFmt)\n            \"Suma de sumas\":                    tpl.sumOverSum(frFmt)\n            \"Cota 80% superior\":        tpl.sumOverSumBound80(true, frFmt)\n            \"Cota 80% inferior\":        tpl.sumOverSumBound80(false, frFmt)\n            \"Proporci&oacute;n del total (suma)\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Proporci&oacute;n de la fila (suma)\":    tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Proporci&oacute;n de la columna (suma)\":  tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Proporci&oacute;n del total (cuenta)\":     tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Proporci&oacute;n de la fila (cuenta)\":   tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Proporci&oacute;n de la columna (cuenta)\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Tabla\":                           $.pivotUtilities.renderers[\"Table\"]\n            \"Tabla con barras\":               $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Heatmap\":                $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Heatmap por filas\":      $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Heatmap por columnas\":    $.pivotUtilities.renderers[\"Col Heatmap\"]\n\n\n"]}
\ No newline at end of file
+{"version":3,"file":"pivot.es.js","sources":["pivot.es.coffee"],"names":[],"mappings":"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","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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.es = \n\n        localeStrings:\n            renderError: \"Ocurrió un error durante la interpretación de la tabla dinámica.\"\n            computeError: \"Ocurrió un error durante el cálculo de la tabla dinámica.\"\n            uiRenderError: \"Ocurrió un error durante el dibujado de la tabla dinámica.\"\n            selectAll: \"Seleccionar todo\"\n            selectNone: \"Deseleccionar todo\"\n            tooMany: \"(demasiados valores)\"\n            filterResults: \"Filtrar resultados\"\n            totals: \"Totales\"\n            vs: \"vs\"\n            by: \"por\"\n            apply: \"Aplicar\"\n            cancel: \"Cancelar\"\n\n        aggregators: \n            \"Cuenta\":                             tpl.count(frFmtInt)\n            \"Cuenta de valores únicos\":          tpl.countUnique(frFmtInt)\n            \"Lista de valores únicos\":           tpl.listUnique(\", \")\n            \"Suma\":                              tpl.sum(frFmt)\n            \"Suma de enteros\":                   tpl.sum(frFmtInt)\n            \"Promedio\":                            tpl.average(frFmt)\n            \"Mediana\":                             tpl.median(frFmt)\n            \"Diferencia\":                          tpl.var(1, frFmt)\n            \"Desviación estándar de la muestra\":            tpl.stdev(1, frFmt)\n            \"Mínimo\":                                       tpl.min(frFmt)\n            \"Máximo\":                                       tpl.max(frFmt)\n            \"Primero\":                                     tpl.first(frFmt),\n            \"Pasado\":                                      tpl.last(frFmt),\n            \"Suma de sumas\":                    tpl.sumOverSum(frFmt)\n            \"Cota 80% superior\":        tpl.sumOverSumBound80(true, frFmt)\n            \"Cota 80% inferior\":        tpl.sumOverSumBound80(false, frFmt)\n            \"Proporción del total (suma)\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Proporción de la fila (suma)\":    tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Proporción de la columna (suma)\":  tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Proporción del total (cuenta)\":     tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Proporción de la fila (cuenta)\":   tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Proporción de la columna (cuenta)\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Tabla\":                           $.pivotUtilities.renderers[\"Table\"]\n            \"Tabla con barras\":               $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Heatmap\":                $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Heatmap por filas\":      $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Heatmap por columnas\":    $.pivotUtilities.renderers[\"Col Heatmap\"]\n\n\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.min.js.js
index 2f9c6d4db1075e50ed7c9dd9b683420158730c57..5840c10ae2ce5662ace02351daf18d353392e982 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.min.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.min.js.js
@@ -1,2 +1,2 @@
-(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var a,t,r,o,i;return o=e.pivotUtilities.numberFormat,i=e.pivotUtilities.aggregatorTemplates,a=o({thousandsSep:" ",decimalSep:","}),t=o({digitsAfterDecimal:0,thousandsSep:" ",decimalSep:","}),r=o({digitsAfterDecimal:1,scaler:100,suffix:"%",thousandsSep:" ",decimalSep:","}),e.pivotUtilities.locales.es={localeStrings:{renderError:"Ocurri&oacute; un error durante la interpretaci&oacute;n de la tabla din&acute;mica.",computeError:"Ocurri&oacute; un error durante el c&acute;lculo de la tabla din&acute;mica.",uiRenderError:"Ocurri&oacute; un error durante el dibujado de la tabla din&acute;mica.",selectAll:"Seleccionar todo",selectNone:"Deseleccionar todo",tooMany:"(demasiados valores)",filterResults:"Filtrar resultados",totals:"Totales",vs:"vs",by:"por"},aggregators:{Cuenta:i.count(t),"Cuenta de valores &uacute;nicos":i.countUnique(t),"Lista de valores &uacute;nicos":i.listUnique(", "),Suma:i.sum(a),"Suma de enteros":i.sum(t),Promedio:i.average(a),"Mínimo":i.min(a),"Máximo":i.max(a),"Suma de sumas":i.sumOverSum(a),"Cota 80% superior":i.sumOverSumBound80(!0,a),"Cota 80% inferior":i.sumOverSumBound80(!1,a),"Proporci&oacute;n del total (suma)":i.fractionOf(i.sum(),"total",r),"Proporci&oacute;n de la fila (suma)":i.fractionOf(i.sum(),"row",r),"Proporci&oacute;n de la columna (suma)":i.fractionOf(i.sum(),"col",r),"Proporci&oacute;n del total (cuenta)":i.fractionOf(i.count(),"total",r),"Proporci&oacute;n de la fila (cuenta)":i.fractionOf(i.count(),"row",r),"Proporci&oacute;n de la columna (cuenta)":i.fractionOf(i.count(),"col",r)},renderers:{Tabla:e.pivotUtilities.renderers.Table,"Tabla con barras":e.pivotUtilities.renderers["Table Barchart"],Heatmap:e.pivotUtilities.renderers.Heatmap,"Heatmap por filas":e.pivotUtilities.renderers["Row Heatmap"],"Heatmap por columnas":e.pivotUtilities.renderers["Col Heatmap"]}}})}).call(this);
-//# sourceMappingURL=pivot.es.min.js.map
\ No newline at end of file
+(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var a,r,t,i,o;return i=e.pivotUtilities.numberFormat,o=e.pivotUtilities.aggregatorTemplates,a=i({thousandsSep:" ",decimalSep:","}),r=i({digitsAfterDecimal:0,thousandsSep:" ",decimalSep:","}),t=i({digitsAfterDecimal:1,scaler:100,suffix:"%",thousandsSep:" ",decimalSep:","}),e.pivotUtilities.locales.es={localeStrings:{renderError:"Ocurrió un error durante la interpretación de la tabla dinámica.",computeError:"Ocurrió un error durante el cálculo de la tabla dinámica.",uiRenderError:"Ocurrió un error durante el dibujado de la tabla dinámica.",selectAll:"Seleccionar todo",selectNone:"Deseleccionar todo",tooMany:"(demasiados valores)",filterResults:"Filtrar resultados",totals:"Totales",vs:"vs",by:"por",apply:"Aplicar",cancel:"Cancelar"},aggregators:{Cuenta:o.count(r),"Cuenta de valores únicos":o.countUnique(r),"Lista de valores únicos":o.listUnique(", "),Suma:o.sum(a),"Suma de enteros":o.sum(r),Promedio:o.average(a),Mediana:o.median(a),Diferencia:o["var"](1,a),"Desviación estándar de la muestra":o.stdev(1,a),"Mínimo":o.min(a),"Máximo":o.max(a),Primero:o.first(a),Pasado:o.last(a),"Suma de sumas":o.sumOverSum(a),"Cota 80% superior":o.sumOverSumBound80(!0,a),"Cota 80% inferior":o.sumOverSumBound80(!1,a),"Proporción del total (suma)":o.fractionOf(o.sum(),"total",t),"Proporción de la fila (suma)":o.fractionOf(o.sum(),"row",t),"Proporción de la columna (suma)":o.fractionOf(o.sum(),"col",t),"Proporción del total (cuenta)":o.fractionOf(o.count(),"total",t),"Proporción de la fila (cuenta)":o.fractionOf(o.count(),"row",t),"Proporción de la columna (cuenta)":o.fractionOf(o.count(),"col",t)},renderers:{Tabla:e.pivotUtilities.renderers.Table,"Tabla con barras":e.pivotUtilities.renderers["Table Barchart"],Heatmap:e.pivotUtilities.renderers.Heatmap,"Heatmap por filas":e.pivotUtilities.renderers["Row Heatmap"],"Heatmap por columnas":e.pivotUtilities.renderers["Col Heatmap"]}}})}).call(this);
+//# sourceMappingURL=pivot.es.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.min.js.map.txt
index 548beb02b838c69ee36ee613439d1f0d2deda9fb..4abbde58e1e46726639ede04ca39797548e6f937 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.min.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.es.min.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["/source/pivot.es.coffee","pivot.es.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","frFmt","frFmtInt","frFmtPct","nf","tpl","pivotUtilities","numberFormat","aggregatorTemplates","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","es","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","totals","vs","by","aggregators","Cuenta","count","Cuenta de valores &uacute;nicos","countUnique","Lista de valores &uacute;nicos","listUnique","Suma","sum","Suma de enteros","Promedio","average","Mínimo","min","Máximo","max","Suma de sumas","sumOverSum","Cota 80% superior","sumOverSumBound80","Cota 80% inferior","Proporci&oacute;n del total (suma)","fractionOf","Proporci&oacute;n de la fila (suma)","Proporci&oacute;n de la columna (suma)","Proporci&oacute;n del total (cuenta)","Proporci&oacute;n de la fila (cuenta)","Proporci&oacute;n de la columna (cuenta)","renderers","Tabla","Tabla con barras","Heatmap","Heatmap por filas","Heatmap por columnas","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAlBC,UAAgD,gBAAjBC,QAC9BF,EAAYG,QAAQ,WACC,kBAAjBC,SAAgCA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GACZ,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,CCuBA,ODvBAD,GAAKJ,EAAEM,eAAeC,aACtBF,EAAML,EAAEM,eAAeE,oBAEvBP,EAAWG,GAAGK,aAAc,IAAKC,WAAY,MAC7CR,EAAWE,GAAGO,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEP,EAAWC,GAAGO,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FV,EAAEM,eAAeQ,QAAQC,IAErBC,eACIC,YAAa,uFACbC,aAAc,+EACdC,cAAe,0EACfC,UAAW,mBACXC,WAAY,qBACZC,QAAS,uBACTC,cAAe,qBACfC,OAAQ,UACRC,GAAI,KACJC,GAAI,OACRC,aACIC,OAAsCvB,EAAIwB,MAAM3B,GAChD4B,kCAA4CzB,EAAI0B,YAAY7B,GAC5D8B,iCAA4C3B,EAAI4B,WAAW,MAC3DC,KAAqC7B,EAAI8B,IAAIlC,GAC7CmC,kBAAqC/B,EAAI8B,IAAIjC,GAC7CmC,SAAuChC,EAAIiC,QAAQrC,GACnDsC,SAAgDlC,EAAImC,IAAIvC,GACxDwC,SAAgDpC,EAAIqC,IAAIzC,GACxD0C,gBAAoCtC,EAAIuC,WAAW3C,GACnD4C,oBAA4BxC,EAAIyC,mBAAkB,EAAM7C,GACxD8C,oBAA4B1C,EAAIyC,mBAAkB,EAAO7C,GACzD+C,qCAA2C3C,EAAI4C,WAAW5C,EAAI8B,MAAS,QAAShC,GAChF+C,sCAA0C7C,EAAI4C,WAAW5C,EAAI8B,MAAS,MAAShC,GAC/EgD,yCAA2C9C,EAAI4C,WAAW5C,EAAI8B,MAAS,MAAShC,GAChFiD,uCAA4C/C,EAAI4C,WAAW5C,EAAIwB,QAAS,QAAS1B,GACjFkD,wCAA2ChD,EAAI4C,WAAW5C,EAAIwB,QAAS,MAAS1B,GAChFmD,2CAA4CjD,EAAI4C,WAAW5C,EAAIwB,QAAS,MAAS1B,IAErFoD,WACIC,MAAmCxD,EAAEM,eAAeiD,UAAU,MAC9DE,mBAAkCzD,EAAEM,eAAeiD,UAAU,kBAC7DG,QAA0B1D,EAAEM,eAAeiD,UAAU,QACrDI,oBAA0B3D,EAAEM,eAAeiD,UAAU,eACrDK,uBAA2B5D,EAAEM,eAAeiD,UAAU,qBCqB/DM,KAAKC","file":"pivot.es.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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.es = \n\n        localeStrings:\n            renderError: \"Ocurri&oacute; un error durante la interpretaci&oacute;n de la tabla din&acute;mica.\"\n            computeError: \"Ocurri&oacute; un error durante el c&acute;lculo de la tabla din&acute;mica.\"\n            uiRenderError: \"Ocurri&oacute; un error durante el dibujado de la tabla din&acute;mica.\"\n            selectAll: \"Seleccionar todo\"\n            selectNone: \"Deseleccionar todo\"\n            tooMany: \"(demasiados valores)\"\n            filterResults: \"Filtrar resultados\"\n            totals: \"Totales\"\n            vs: \"vs\"\n            by: \"por\"\n        aggregators: \n            \"Cuenta\":                             tpl.count(frFmtInt)\n            \"Cuenta de valores &uacute;nicos\":          tpl.countUnique(frFmtInt)\n            \"Lista de valores &uacute;nicos\":           tpl.listUnique(\", \")\n            \"Suma\":                              tpl.sum(frFmt)\n            \"Suma de enteros\":                   tpl.sum(frFmtInt)\n            \"Promedio\":                            tpl.average(frFmt)\n            \"Mínimo\":                                       tpl.min(frFmt)\n            \"Máximo\":                                       tpl.max(frFmt)\n            \"Suma de sumas\":                    tpl.sumOverSum(frFmt)\n            \"Cota 80% superior\":        tpl.sumOverSumBound80(true, frFmt)\n            \"Cota 80% inferior\":        tpl.sumOverSumBound80(false, frFmt)\n            \"Proporci&oacute;n del total (suma)\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Proporci&oacute;n de la fila (suma)\":    tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Proporci&oacute;n de la columna (suma)\":  tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Proporci&oacute;n del total (cuenta)\":     tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Proporci&oacute;n de la fila (cuenta)\":   tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Proporci&oacute;n de la columna (cuenta)\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Tabla\":                           $.pivotUtilities.renderers[\"Table\"]\n            \"Tabla con barras\":               $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Heatmap\":                $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Heatmap por filas\":      $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Heatmap por columnas\":    $.pivotUtilities.renderers[\"Col Heatmap\"]\n\n\n","(function(){var e;(e=function(e){return\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"jquery\")):\"function\"==typeof define&&define.amd?define([\"jquery\"],e):e(jQuery)})(function(e){var a,t,r,o,i;return o=e.pivotUtilities.numberFormat,i=e.pivotUtilities.aggregatorTemplates,a=o({thousandsSep:\" \",decimalSep:\",\"}),t=o({digitsAfterDecimal:0,thousandsSep:\" \",decimalSep:\",\"}),r=o({digitsAfterDecimal:1,scaler:100,suffix:\"%\",thousandsSep:\" \",decimalSep:\",\"}),e.pivotUtilities.locales.es={localeStrings:{renderError:\"Ocurri&oacute; un error durante la interpretaci&oacute;n de la tabla din&acute;mica.\",computeError:\"Ocurri&oacute; un error durante el c&acute;lculo de la tabla din&acute;mica.\",uiRenderError:\"Ocurri&oacute; un error durante el dibujado de la tabla din&acute;mica.\",selectAll:\"Seleccionar todo\",selectNone:\"Deseleccionar todo\",tooMany:\"(demasiados valores)\",filterResults:\"Filtrar resultados\",totals:\"Totales\",vs:\"vs\",by:\"por\"},aggregators:{Cuenta:i.count(t),\"Cuenta de valores &uacute;nicos\":i.countUnique(t),\"Lista de valores &uacute;nicos\":i.listUnique(\", \"),Suma:i.sum(a),\"Suma de enteros\":i.sum(t),Promedio:i.average(a),\"Mínimo\":i.min(a),\"Máximo\":i.max(a),\"Suma de sumas\":i.sumOverSum(a),\"Cota 80% superior\":i.sumOverSumBound80(!0,a),\"Cota 80% inferior\":i.sumOverSumBound80(!1,a),\"Proporci&oacute;n del total (suma)\":i.fractionOf(i.sum(),\"total\",r),\"Proporci&oacute;n de la fila (suma)\":i.fractionOf(i.sum(),\"row\",r),\"Proporci&oacute;n de la columna (suma)\":i.fractionOf(i.sum(),\"col\",r),\"Proporci&oacute;n del total (cuenta)\":i.fractionOf(i.count(),\"total\",r),\"Proporci&oacute;n de la fila (cuenta)\":i.fractionOf(i.count(),\"row\",r),\"Proporci&oacute;n de la columna (cuenta)\":i.fractionOf(i.count(),\"col\",r)},renderers:{Tabla:e.pivotUtilities.renderers.Table,\"Tabla con barras\":e.pivotUtilities.renderers[\"Table Barchart\"],Heatmap:e.pivotUtilities.renderers.Heatmap,\"Heatmap por filas\":e.pivotUtilities.renderers[\"Row Heatmap\"],\"Heatmap por columnas\":e.pivotUtilities.renderers[\"Col Heatmap\"]}}})}).call(this);\n//# sourceMappingURL=pivot.es.min.js.map"],"sourceRoot":"/source/"}
\ No newline at end of file
+{"version":3,"sources":["pivot.es.coffee","pivot.es.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","frFmt","frFmtInt","frFmtPct","nf","tpl","pivotUtilities","numberFormat","aggregatorTemplates","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","es","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","totals","vs","by","apply","cancel","aggregators","Cuenta","count","Cuenta de valores únicos","countUnique","Lista de valores únicos","listUnique","Suma","sum","Suma de enteros","Promedio","average","Mediana","median","Diferencia","Desviación estándar de la muestra","stdev","Mínimo","min","Máximo","max","Primero","first","Pasado","last","Suma de sumas","sumOverSum","Cota 80% superior","sumOverSumBound80","Cota 80% inferior","Proporción del total (suma)","fractionOf","Proporción de la fila (suma)","Proporción de la columna (suma)","Proporción del total (cuenta)","Proporción de la fila (cuenta)","Proporción de la columna (cuenta)","renderers","Tabla","Tabla con barras","Heatmap","Heatmap por filas","Heatmap por columnas","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAXC,UAAyC,gBAAVC,QACrCF,EAAYG,QAAQ,WACC,kBAAVC,SAAyBA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GACZ,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,CCuBA,ODvBAD,GAAKJ,EAAEM,eAAeC,aACtBF,EAAML,EAAEM,eAAeE,oBAEvBP,EAAWG,GAAGK,aAAc,IAAKC,WAAY,MAC7CR,EAAWE,GAAGO,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEP,EAAWC,GAAGO,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FV,EAAEM,eAAeQ,QAAQC,IAErBC,eACIC,YAAa,mEACbC,aAAc,4DACdC,cAAe,6DACfC,UAAW,mBACXC,WAAY,qBACZC,QAAS,uBACTC,cAAe,qBACfC,OAAQ,UACRC,GAAI,KACJC,GAAI,MACJC,MAAO,UACPC,OAAQ,YAEZC,aACIC,OAAsCzB,EAAI0B,MAAM7B,GAChD8B,2BAAqC3B,EAAI4B,YAAY/B,GACrDgC,0BAAqC7B,EAAI8B,WAAW,MACpDC,KAAqC/B,EAAIgC,IAAIpC,GAC7CqC,kBAAqCjC,EAAIgC,IAAInC,GAC7CqC,SAAuClC,EAAImC,QAAQvC,GACnDwC,QAAuCpC,EAAIqC,OAAOzC,GAClD0C,WAAuCtC,EAAG,OAAK,EAAGJ,GAClD2C,oCAAgDvC,EAAIwC,MAAM,EAAG5C,GAC7D6C,SAAgDzC,EAAI0C,IAAI9C,GACxD+C,SAAgD3C,EAAI4C,IAAIhD,GACxDiD,QAA+C7C,EAAI8C,MAAMlD,GACzDmD,OAA+C/C,EAAIgD,KAAKpD,GACxDqD,gBAAoCjD,EAAIkD,WAAWtD,GACnDuD,oBAA4BnD,EAAIoD,mBAAkB,EAAMxD,GACxDyD,oBAA4BrD,EAAIoD,mBAAkB,EAAOxD,GACzD0D,8BAAoCtD,EAAIuD,WAAWvD,EAAIgC,MAAS,QAASlC,GACzE0D,+BAAmCxD,EAAIuD,WAAWvD,EAAIgC,MAAS,MAASlC,GACxE2D,kCAAoCzD,EAAIuD,WAAWvD,EAAIgC,MAAS,MAASlC,GACzE4D,gCAAqC1D,EAAIuD,WAAWvD,EAAI0B,QAAS,QAAS5B,GAC1E6D,iCAAoC3D,EAAIuD,WAAWvD,EAAI0B,QAAS,MAAS5B,GACzE8D,oCAAqC5D,EAAIuD,WAAWvD,EAAI0B,QAAS,MAAS5B,IAE9E+D,WACIC,MAAmCnE,EAAEM,eAAe4D,UAAU,MAC9DE,mBAAkCpE,EAAEM,eAAe4D,UAAU,kBAC7DG,QAA0BrE,EAAEM,eAAe4D,UAAU,QACrDI,oBAA0BtE,EAAEM,eAAe4D,UAAU,eACrDK,uBAA2BvE,EAAEM,eAAe4D,UAAU,qBCoB/DM,KAAKC","file":"pivot.es.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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.es = \n\n        localeStrings:\n            renderError: \"Ocurrió un error durante la interpretación de la tabla dinámica.\"\n            computeError: \"Ocurrió un error durante el cálculo de la tabla dinámica.\"\n            uiRenderError: \"Ocurrió un error durante el dibujado de la tabla dinámica.\"\n            selectAll: \"Seleccionar todo\"\n            selectNone: \"Deseleccionar todo\"\n            tooMany: \"(demasiados valores)\"\n            filterResults: \"Filtrar resultados\"\n            totals: \"Totales\"\n            vs: \"vs\"\n            by: \"por\"\n            apply: \"Aplicar\"\n            cancel: \"Cancelar\"\n\n        aggregators: \n            \"Cuenta\":                             tpl.count(frFmtInt)\n            \"Cuenta de valores únicos\":          tpl.countUnique(frFmtInt)\n            \"Lista de valores únicos\":           tpl.listUnique(\", \")\n            \"Suma\":                              tpl.sum(frFmt)\n            \"Suma de enteros\":                   tpl.sum(frFmtInt)\n            \"Promedio\":                            tpl.average(frFmt)\n            \"Mediana\":                             tpl.median(frFmt)\n            \"Diferencia\":                          tpl.var(1, frFmt)\n            \"Desviación estándar de la muestra\":            tpl.stdev(1, frFmt)\n            \"Mínimo\":                                       tpl.min(frFmt)\n            \"Máximo\":                                       tpl.max(frFmt)\n            \"Primero\":                                     tpl.first(frFmt),\n            \"Pasado\":                                      tpl.last(frFmt),\n            \"Suma de sumas\":                    tpl.sumOverSum(frFmt)\n            \"Cota 80% superior\":        tpl.sumOverSumBound80(true, frFmt)\n            \"Cota 80% inferior\":        tpl.sumOverSumBound80(false, frFmt)\n            \"Proporción del total (suma)\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Proporción de la fila (suma)\":    tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Proporción de la columna (suma)\":  tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Proporción del total (cuenta)\":     tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Proporción de la fila (cuenta)\":   tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Proporción de la columna (cuenta)\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Tabla\":                           $.pivotUtilities.renderers[\"Table\"]\n            \"Tabla con barras\":               $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Heatmap\":                $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Heatmap por filas\":      $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Heatmap por columnas\":    $.pivotUtilities.renderers[\"Col Heatmap\"]\n\n\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    var frFmt, frFmtInt, frFmtPct, nf, tpl;\n    nf = $.pivotUtilities.numberFormat;\n    tpl = $.pivotUtilities.aggregatorTemplates;\n    frFmt = nf({\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    frFmtInt = nf({\n      digitsAfterDecimal: 0,\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    frFmtPct = nf({\n      digitsAfterDecimal: 1,\n      scaler: 100,\n      suffix: \"%\",\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    return $.pivotUtilities.locales.es = {\n      localeStrings: {\n        renderError: \"Ocurrió un error durante la interpretación de la tabla dinámica.\",\n        computeError: \"Ocurrió un error durante el cálculo de la tabla dinámica.\",\n        uiRenderError: \"Ocurrió un error durante el dibujado de la tabla dinámica.\",\n        selectAll: \"Seleccionar todo\",\n        selectNone: \"Deseleccionar todo\",\n        tooMany: \"(demasiados valores)\",\n        filterResults: \"Filtrar resultados\",\n        totals: \"Totales\",\n        vs: \"vs\",\n        by: \"por\",\n        apply: \"Aplicar\",\n        cancel: \"Cancelar\"\n      },\n      aggregators: {\n        \"Cuenta\": tpl.count(frFmtInt),\n        \"Cuenta de valores únicos\": tpl.countUnique(frFmtInt),\n        \"Lista de valores únicos\": tpl.listUnique(\", \"),\n        \"Suma\": tpl.sum(frFmt),\n        \"Suma de enteros\": tpl.sum(frFmtInt),\n        \"Promedio\": tpl.average(frFmt),\n        \"Mediana\": tpl.median(frFmt),\n        \"Diferencia\": tpl[\"var\"](1, frFmt),\n        \"Desviación estándar de la muestra\": tpl.stdev(1, frFmt),\n        \"Mínimo\": tpl.min(frFmt),\n        \"Máximo\": tpl.max(frFmt),\n        \"Primero\": tpl.first(frFmt),\n        \"Pasado\": tpl.last(frFmt),\n        \"Suma de sumas\": tpl.sumOverSum(frFmt),\n        \"Cota 80% superior\": tpl.sumOverSumBound80(true, frFmt),\n        \"Cota 80% inferior\": tpl.sumOverSumBound80(false, frFmt),\n        \"Proporción del total (suma)\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct),\n        \"Proporción de la fila (suma)\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct),\n        \"Proporción de la columna (suma)\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct),\n        \"Proporción del total (cuenta)\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct),\n        \"Proporción de la fila (cuenta)\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct),\n        \"Proporción de la columna (cuenta)\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n      },\n      renderers: {\n        \"Tabla\": $.pivotUtilities.renderers[\"Table\"],\n        \"Tabla con barras\": $.pivotUtilities.renderers[\"Table Barchart\"],\n        \"Heatmap\": $.pivotUtilities.renderers[\"Heatmap\"],\n        \"Heatmap por filas\": $.pivotUtilities.renderers[\"Row Heatmap\"],\n        \"Heatmap por columnas\": $.pivotUtilities.renderers[\"Col Heatmap\"]\n      }\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot.es.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.js.js
index ae0eec7eaaf303999bef2a3bde710be282dbdd5d..e18f0fdad6e434f46711eec3911f56b852887485 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.js.js
@@ -33,16 +33,18 @@
     });
     return $.pivotUtilities.locales.fr = {
       localeStrings: {
-        renderError: "Une erreur est survenue en dessinant le tableau crois&eacute;.",
-        computeError: "Une erreur est survenue en calculant le tableau crois&eacute;.",
-        uiRenderError: "Une erreur est survenue en dessinant l'interface du tableau crois&eacute; dynamique.",
-        selectAll: "S&eacute;lectionner tout",
-        selectNone: "S&eacute;lectionner rien",
-        tooMany: "(trop de valeurs &agrave; afficher)",
+        renderError: "Une erreur est survenue en dessinant le tableau croisé.",
+        computeError: "Une erreur est survenue en calculant le tableau croisé.",
+        uiRenderError: "Une erreur est survenue en dessinant l'interface du tableau croisé dynamique.",
+        selectAll: "Sélectionner tout",
+        selectNone: "Sélectionner rien",
+        tooMany: "(trop de valeurs à afficher)",
         filterResults: "Filtrer les valeurs",
         totals: "Totaux",
         vs: "sur",
-        by: "par"
+        by: "par",
+        apply: "Appliquer",
+        cancel: "Annuler"
       },
       aggregators: {
         "Nombre": tpl.count(frFmtInt),
@@ -53,9 +55,11 @@
         "Moyenne": tpl.average(frFmt),
         "Minimum": tpl.min(frFmt),
         "Maximum": tpl.max(frFmt),
+        "Premier": tpl.first(frFmt),
+        "Dernier": tpl.last(frFmt),
         "Ratio de sommes": tpl.sumOverSum(frFmt),
-        "Borne sup&eacute;rieure 80%": tpl.sumOverSumBound80(true, frFmt),
-        "Borne inf&eacute;rieure 80%": tpl.sumOverSumBound80(false, frFmt),
+        "Borne supérieure 80%": tpl.sumOverSumBound80(true, frFmt),
+        "Borne inférieure 80%": tpl.sumOverSumBound80(false, frFmt),
         "Somme en proportion du totale": tpl.fractionOf(tpl.sum(), "total", frFmtPct),
         "Somme en proportion de la ligne": tpl.fractionOf(tpl.sum(), "row", frFmtPct),
         "Somme en proportion de la colonne": tpl.fractionOf(tpl.sum(), "col", frFmtPct),
@@ -75,4 +79,4 @@
 
 }).call(this);
 
-//# sourceMappingURL=pivot.fr.js.map
\ No newline at end of file
+//# sourceMappingURL=pivot.fr.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.js.map.txt
index 938fbfa2ae54f5dc78ad0277a738daff21201264..72cf79d4f2f10b860cffc61302892c99dd443a80 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["pivot.fr.coffee"],"names":[],"mappings":"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","file":"pivot.fr.js","sourceRoot":"/source/","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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.fr = \n        localeStrings:\n            renderError: \"Une erreur est survenue en dessinant le tableau crois&eacute;.\"\n            computeError: \"Une erreur est survenue en calculant le tableau crois&eacute;.\"\n            uiRenderError: \"Une erreur est survenue en dessinant l'interface du tableau crois&eacute; dynamique.\"\n            selectAll: \"S&eacute;lectionner tout\"\n            selectNone: \"S&eacute;lectionner rien\"\n            tooMany: \"(trop de valeurs &agrave; afficher)\"\n            filterResults: \"Filtrer les valeurs\"\n            totals: \"Totaux\"\n            vs: \"sur\"\n            by: \"par\"\n\n        aggregators: \n            \"Nombre\":                             tpl.count(frFmtInt)\n            \"Nombre de valeurs uniques\":          tpl.countUnique(frFmtInt)\n            \"Liste de valeurs uniques\":           tpl.listUnique(\", \")\n            \"Somme\":                              tpl.sum(frFmt)\n            \"Somme en entiers\":                   tpl.sum(frFmtInt)\n            \"Moyenne\":                            tpl.average(frFmt)\n            \"Minimum\":                            tpl.min(frFmt)\n            \"Maximum\":                            tpl.max(frFmt)\n            \"Ratio de sommes\":                    tpl.sumOverSum(frFmt)\n            \"Borne sup&eacute;rieure 80%\":        tpl.sumOverSumBound80(true, frFmt)\n            \"Borne inf&eacute;rieure 80%\":        tpl.sumOverSumBound80(false, frFmt)\n            \"Somme en proportion du totale\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Somme en proportion de la ligne\":    tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Somme en proportion de la colonne\":  tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Nombre en proportion du totale\":     tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Nombre en proportion de la ligne\":   tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Nombre en proportion de la colonne\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Table\":                           $.pivotUtilities.renderers[\"Table\"]\n            \"Table avec barres\":               $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Carte de chaleur\":                $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Carte de chaleur par ligne\":      $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Carte de chaleur par colonne\":    $.pivotUtilities.renderers[\"Col Heatmap\"]\n\n\n"]}
\ No newline at end of file
+{"version":3,"file":"pivot.fr.js","sources":["pivot.fr.coffee"],"names":[],"mappings":"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","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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.fr =\n        localeStrings:\n            renderError: \"Une erreur est survenue en dessinant le tableau croisé.\"\n            computeError: \"Une erreur est survenue en calculant le tableau croisé.\"\n            uiRenderError: \"Une erreur est survenue en dessinant l'interface du tableau croisé dynamique.\"\n            selectAll: \"Sélectionner tout\"\n            selectNone: \"Sélectionner rien\"\n            tooMany: \"(trop de valeurs à afficher)\"\n            filterResults: \"Filtrer les valeurs\"\n            totals: \"Totaux\"\n            vs: \"sur\"\n            by: \"par\"\n            apply: \"Appliquer\"\n            cancel: \"Annuler\"\n\n        aggregators:\n            \"Nombre\":                             tpl.count(frFmtInt)\n            \"Nombre de valeurs uniques\":          tpl.countUnique(frFmtInt)\n            \"Liste de valeurs uniques\":           tpl.listUnique(\", \")\n            \"Somme\":                              tpl.sum(frFmt)\n            \"Somme en entiers\":                   tpl.sum(frFmtInt)\n            \"Moyenne\":                            tpl.average(frFmt)\n            \"Minimum\":                            tpl.min(frFmt)\n            \"Maximum\":                            tpl.max(frFmt)\n            \"Premier\":                            tpl.first(frFmt)\n            \"Dernier\":                            tpl.last(frFmt)\n            \"Ratio de sommes\":                    tpl.sumOverSum(frFmt)\n            \"Borne supérieure 80%\":               tpl.sumOverSumBound80(true, frFmt)\n            \"Borne inférieure 80%\":               tpl.sumOverSumBound80(false, frFmt)\n            \"Somme en proportion du totale\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Somme en proportion de la ligne\":    tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Somme en proportion de la colonne\":  tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Nombre en proportion du totale\":     tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Nombre en proportion de la ligne\":   tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Nombre en proportion de la colonne\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Table\":                           $.pivotUtilities.renderers[\"Table\"]\n            \"Table avec barres\":               $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Carte de chaleur\":                $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Carte de chaleur par ligne\":      $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Carte de chaleur par colonne\":    $.pivotUtilities.renderers[\"Col Heatmap\"]\n\n\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.min.js.js
index 153917f1e6aaf0378d636d7561f67d7680200c4a..08d56a83399eefeb0d4a911df541a70d19f7a5ce 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.min.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.min.js.js
@@ -1,2 +1,2 @@
-(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var r,t,o,i,n;return i=e.pivotUtilities.numberFormat,n=e.pivotUtilities.aggregatorTemplates,r=i({thousandsSep:" ",decimalSep:","}),t=i({digitsAfterDecimal:0,thousandsSep:" ",decimalSep:","}),o=i({digitsAfterDecimal:1,scaler:100,suffix:"%",thousandsSep:" ",decimalSep:","}),e.pivotUtilities.locales.fr={localeStrings:{renderError:"Une erreur est survenue en dessinant le tableau crois&eacute;.",computeError:"Une erreur est survenue en calculant le tableau crois&eacute;.",uiRenderError:"Une erreur est survenue en dessinant l'interface du tableau crois&eacute; dynamique.",selectAll:"S&eacute;lectionner tout",selectNone:"S&eacute;lectionner rien",tooMany:"(trop de valeurs &agrave; afficher)",filterResults:"Filtrer les valeurs",totals:"Totaux",vs:"sur",by:"par"},aggregators:{Nombre:n.count(t),"Nombre de valeurs uniques":n.countUnique(t),"Liste de valeurs uniques":n.listUnique(", "),Somme:n.sum(r),"Somme en entiers":n.sum(t),Moyenne:n.average(r),Minimum:n.min(r),Maximum:n.max(r),"Ratio de sommes":n.sumOverSum(r),"Borne sup&eacute;rieure 80%":n.sumOverSumBound80(!0,r),"Borne inf&eacute;rieure 80%":n.sumOverSumBound80(!1,r),"Somme en proportion du totale":n.fractionOf(n.sum(),"total",o),"Somme en proportion de la ligne":n.fractionOf(n.sum(),"row",o),"Somme en proportion de la colonne":n.fractionOf(n.sum(),"col",o),"Nombre en proportion du totale":n.fractionOf(n.count(),"total",o),"Nombre en proportion de la ligne":n.fractionOf(n.count(),"row",o),"Nombre en proportion de la colonne":n.fractionOf(n.count(),"col",o)},renderers:{Table:e.pivotUtilities.renderers.Table,"Table avec barres":e.pivotUtilities.renderers["Table Barchart"],"Carte de chaleur":e.pivotUtilities.renderers.Heatmap,"Carte de chaleur par ligne":e.pivotUtilities.renderers["Row Heatmap"],"Carte de chaleur par colonne":e.pivotUtilities.renderers["Col Heatmap"]}}})}).call(this);
-//# sourceMappingURL=pivot.fr.min.js.map
\ No newline at end of file
+(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var r,t,o,i,n;return i=e.pivotUtilities.numberFormat,n=e.pivotUtilities.aggregatorTemplates,r=i({thousandsSep:" ",decimalSep:","}),t=i({digitsAfterDecimal:0,thousandsSep:" ",decimalSep:","}),o=i({digitsAfterDecimal:1,scaler:100,suffix:"%",thousandsSep:" ",decimalSep:","}),e.pivotUtilities.locales.fr={localeStrings:{renderError:"Une erreur est survenue en dessinant le tableau croisé.",computeError:"Une erreur est survenue en calculant le tableau croisé.",uiRenderError:"Une erreur est survenue en dessinant l'interface du tableau croisé dynamique.",selectAll:"Sélectionner tout",selectNone:"Sélectionner rien",tooMany:"(trop de valeurs à afficher)",filterResults:"Filtrer les valeurs",totals:"Totaux",vs:"sur",by:"par",apply:"Appliquer",cancel:"Annuler"},aggregators:{Nombre:n.count(t),"Nombre de valeurs uniques":n.countUnique(t),"Liste de valeurs uniques":n.listUnique(", "),Somme:n.sum(r),"Somme en entiers":n.sum(t),Moyenne:n.average(r),Minimum:n.min(r),Maximum:n.max(r),Premier:n.first(r),Dernier:n.last(r),"Ratio de sommes":n.sumOverSum(r),"Borne supérieure 80%":n.sumOverSumBound80(!0,r),"Borne inférieure 80%":n.sumOverSumBound80(!1,r),"Somme en proportion du totale":n.fractionOf(n.sum(),"total",o),"Somme en proportion de la ligne":n.fractionOf(n.sum(),"row",o),"Somme en proportion de la colonne":n.fractionOf(n.sum(),"col",o),"Nombre en proportion du totale":n.fractionOf(n.count(),"total",o),"Nombre en proportion de la ligne":n.fractionOf(n.count(),"row",o),"Nombre en proportion de la colonne":n.fractionOf(n.count(),"col",o)},renderers:{Table:e.pivotUtilities.renderers.Table,"Table avec barres":e.pivotUtilities.renderers["Table Barchart"],"Carte de chaleur":e.pivotUtilities.renderers.Heatmap,"Carte de chaleur par ligne":e.pivotUtilities.renderers["Row Heatmap"],"Carte de chaleur par colonne":e.pivotUtilities.renderers["Col Heatmap"]}}})}).call(this);
+//# sourceMappingURL=pivot.fr.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.min.js.map.txt
index d5fbdfb34178abf766a2ed3327074af343120d61..3c09747fa23b6016fb8c1919c36f1eb05709c420 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.min.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.fr.min.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["/source/pivot.fr.coffee","pivot.fr.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","frFmt","frFmtInt","frFmtPct","nf","tpl","pivotUtilities","numberFormat","aggregatorTemplates","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","fr","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","totals","vs","by","aggregators","Nombre","count","Nombre de valeurs uniques","countUnique","Liste de valeurs uniques","listUnique","Somme","sum","Somme en entiers","Moyenne","average","Minimum","min","Maximum","max","Ratio de sommes","sumOverSum","Borne sup&eacute;rieure 80%","sumOverSumBound80","Borne inf&eacute;rieure 80%","Somme en proportion du totale","fractionOf","Somme en proportion de la ligne","Somme en proportion de la colonne","Nombre en proportion du totale","Nombre en proportion de la ligne","Nombre en proportion de la colonne","renderers","Table","Table avec barres","Carte de chaleur","Carte de chaleur par ligne","Carte de chaleur par colonne","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAlBC,UAAgD,gBAAjBC,QAC9BF,EAAYG,QAAQ,WACC,kBAAjBC,SAAgCA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GACZ,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,CCuBA,ODvBAD,GAAKJ,EAAEM,eAAeC,aACtBF,EAAML,EAAEM,eAAeE,oBAEvBP,EAAWG,GAAGK,aAAc,IAAKC,WAAY,MAC7CR,EAAWE,GAAGO,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEP,EAAWC,GAAGO,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FV,EAAEM,eAAeQ,QAAQC,IACrBC,eACIC,YAAa,iEACbC,aAAc,iEACdC,cAAe,uFACfC,UAAW,2BACXC,WAAY,2BACZC,QAAS,sCACTC,cAAe,sBACfC,OAAQ,SACRC,GAAI,MACJC,GAAI,OAERC,aACIC,OAAsCvB,EAAIwB,MAAM3B,GAChD4B,4BAAsCzB,EAAI0B,YAAY7B,GACtD8B,2BAAsC3B,EAAI4B,WAAW,MACrDC,MAAsC7B,EAAI8B,IAAIlC,GAC9CmC,mBAAsC/B,EAAI8B,IAAIjC,GAC9CmC,QAAsChC,EAAIiC,QAAQrC,GAClDsC,QAAsClC,EAAImC,IAAIvC,GAC9CwC,QAAsCpC,EAAIqC,IAAIzC,GAC9C0C,kBAAsCtC,EAAIuC,WAAW3C,GACrD4C,8BAAsCxC,EAAIyC,mBAAkB,EAAM7C,GAClE8C,8BAAsC1C,EAAIyC,mBAAkB,EAAO7C,GACnE+C,gCAAsC3C,EAAI4C,WAAW5C,EAAI8B,MAAS,QAAShC,GAC3E+C,kCAAsC7C,EAAI4C,WAAW5C,EAAI8B,MAAS,MAAShC,GAC3EgD,oCAAsC9C,EAAI4C,WAAW5C,EAAI8B,MAAS,MAAShC,GAC3EiD,iCAAsC/C,EAAI4C,WAAW5C,EAAIwB,QAAS,QAAS1B,GAC3EkD,mCAAsChD,EAAI4C,WAAW5C,EAAIwB,QAAS,MAAS1B,GAC3EmD,qCAAsCjD,EAAI4C,WAAW5C,EAAIwB,QAAS,MAAS1B,IAE/EoD,WACIC,MAAmCxD,EAAEM,eAAeiD,UAAU,MAC9DE,oBAAmCzD,EAAEM,eAAeiD,UAAU,kBAC9DG,mBAAmC1D,EAAEM,eAAeiD,UAAU,QAC9DI,6BAAmC3D,EAAEM,eAAeiD,UAAU,eAC9DK,+BAAmC5D,EAAEM,eAAeiD,UAAU,qBCqBvEM,KAAKC","file":"pivot.fr.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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.fr = \n        localeStrings:\n            renderError: \"Une erreur est survenue en dessinant le tableau crois&eacute;.\"\n            computeError: \"Une erreur est survenue en calculant le tableau crois&eacute;.\"\n            uiRenderError: \"Une erreur est survenue en dessinant l'interface du tableau crois&eacute; dynamique.\"\n            selectAll: \"S&eacute;lectionner tout\"\n            selectNone: \"S&eacute;lectionner rien\"\n            tooMany: \"(trop de valeurs &agrave; afficher)\"\n            filterResults: \"Filtrer les valeurs\"\n            totals: \"Totaux\"\n            vs: \"sur\"\n            by: \"par\"\n\n        aggregators: \n            \"Nombre\":                             tpl.count(frFmtInt)\n            \"Nombre de valeurs uniques\":          tpl.countUnique(frFmtInt)\n            \"Liste de valeurs uniques\":           tpl.listUnique(\", \")\n            \"Somme\":                              tpl.sum(frFmt)\n            \"Somme en entiers\":                   tpl.sum(frFmtInt)\n            \"Moyenne\":                            tpl.average(frFmt)\n            \"Minimum\":                            tpl.min(frFmt)\n            \"Maximum\":                            tpl.max(frFmt)\n            \"Ratio de sommes\":                    tpl.sumOverSum(frFmt)\n            \"Borne sup&eacute;rieure 80%\":        tpl.sumOverSumBound80(true, frFmt)\n            \"Borne inf&eacute;rieure 80%\":        tpl.sumOverSumBound80(false, frFmt)\n            \"Somme en proportion du totale\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Somme en proportion de la ligne\":    tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Somme en proportion de la colonne\":  tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Nombre en proportion du totale\":     tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Nombre en proportion de la ligne\":   tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Nombre en proportion de la colonne\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Table\":                           $.pivotUtilities.renderers[\"Table\"]\n            \"Table avec barres\":               $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Carte de chaleur\":                $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Carte de chaleur par ligne\":      $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Carte de chaleur par colonne\":    $.pivotUtilities.renderers[\"Col Heatmap\"]\n\n\n","(function(){var e;(e=function(e){return\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"jquery\")):\"function\"==typeof define&&define.amd?define([\"jquery\"],e):e(jQuery)})(function(e){var r,t,o,i,n;return i=e.pivotUtilities.numberFormat,n=e.pivotUtilities.aggregatorTemplates,r=i({thousandsSep:\" \",decimalSep:\",\"}),t=i({digitsAfterDecimal:0,thousandsSep:\" \",decimalSep:\",\"}),o=i({digitsAfterDecimal:1,scaler:100,suffix:\"%\",thousandsSep:\" \",decimalSep:\",\"}),e.pivotUtilities.locales.fr={localeStrings:{renderError:\"Une erreur est survenue en dessinant le tableau crois&eacute;.\",computeError:\"Une erreur est survenue en calculant le tableau crois&eacute;.\",uiRenderError:\"Une erreur est survenue en dessinant l'interface du tableau crois&eacute; dynamique.\",selectAll:\"S&eacute;lectionner tout\",selectNone:\"S&eacute;lectionner rien\",tooMany:\"(trop de valeurs &agrave; afficher)\",filterResults:\"Filtrer les valeurs\",totals:\"Totaux\",vs:\"sur\",by:\"par\"},aggregators:{Nombre:n.count(t),\"Nombre de valeurs uniques\":n.countUnique(t),\"Liste de valeurs uniques\":n.listUnique(\", \"),Somme:n.sum(r),\"Somme en entiers\":n.sum(t),Moyenne:n.average(r),Minimum:n.min(r),Maximum:n.max(r),\"Ratio de sommes\":n.sumOverSum(r),\"Borne sup&eacute;rieure 80%\":n.sumOverSumBound80(!0,r),\"Borne inf&eacute;rieure 80%\":n.sumOverSumBound80(!1,r),\"Somme en proportion du totale\":n.fractionOf(n.sum(),\"total\",o),\"Somme en proportion de la ligne\":n.fractionOf(n.sum(),\"row\",o),\"Somme en proportion de la colonne\":n.fractionOf(n.sum(),\"col\",o),\"Nombre en proportion du totale\":n.fractionOf(n.count(),\"total\",o),\"Nombre en proportion de la ligne\":n.fractionOf(n.count(),\"row\",o),\"Nombre en proportion de la colonne\":n.fractionOf(n.count(),\"col\",o)},renderers:{Table:e.pivotUtilities.renderers.Table,\"Table avec barres\":e.pivotUtilities.renderers[\"Table Barchart\"],\"Carte de chaleur\":e.pivotUtilities.renderers.Heatmap,\"Carte de chaleur par ligne\":e.pivotUtilities.renderers[\"Row Heatmap\"],\"Carte de chaleur par colonne\":e.pivotUtilities.renderers[\"Col Heatmap\"]}}})}).call(this);\n//# sourceMappingURL=pivot.fr.min.js.map"],"sourceRoot":"/source/"}
\ No newline at end of file
+{"version":3,"sources":["pivot.fr.coffee","pivot.fr.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","frFmt","frFmtInt","frFmtPct","nf","tpl","pivotUtilities","numberFormat","aggregatorTemplates","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","fr","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","totals","vs","by","apply","cancel","aggregators","Nombre","count","Nombre de valeurs uniques","countUnique","Liste de valeurs uniques","listUnique","Somme","sum","Somme en entiers","Moyenne","average","Minimum","min","Maximum","max","Premier","first","Dernier","last","Ratio de sommes","sumOverSum","Borne supérieure 80%","sumOverSumBound80","Borne inférieure 80%","Somme en proportion du totale","fractionOf","Somme en proportion de la ligne","Somme en proportion de la colonne","Nombre en proportion du totale","Nombre en proportion de la ligne","Nombre en proportion de la colonne","renderers","Table","Table avec barres","Carte de chaleur","Carte de chaleur par ligne","Carte de chaleur par colonne","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAXC,UAAyC,gBAAVC,QACrCF,EAAYG,QAAQ,WACC,kBAAVC,SAAyBA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GACZ,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,CCuBA,ODvBAD,GAAKJ,EAAEM,eAAeC,aACtBF,EAAML,EAAEM,eAAeE,oBAEvBP,EAAWG,GAAGK,aAAc,IAAKC,WAAY,MAC7CR,EAAWE,GAAGO,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEP,EAAWC,GAAGO,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FV,EAAEM,eAAeQ,QAAQC,IACrBC,eACIC,YAAa,0DACbC,aAAc,0DACdC,cAAe,gFACfC,UAAW,oBACXC,WAAY,oBACZC,QAAS,+BACTC,cAAe,sBACfC,OAAQ,SACRC,GAAI,MACJC,GAAI,MACJC,MAAO,YACPC,OAAQ,WAEZC,aACIC,OAAsCzB,EAAI0B,MAAM7B,GAChD8B,4BAAsC3B,EAAI4B,YAAY/B,GACtDgC,2BAAsC7B,EAAI8B,WAAW,MACrDC,MAAsC/B,EAAIgC,IAAIpC,GAC9CqC,mBAAsCjC,EAAIgC,IAAInC,GAC9CqC,QAAsClC,EAAImC,QAAQvC,GAClDwC,QAAsCpC,EAAIqC,IAAIzC,GAC9C0C,QAAsCtC,EAAIuC,IAAI3C,GAC9C4C,QAAsCxC,EAAIyC,MAAM7C,GAChD8C,QAAsC1C,EAAI2C,KAAK/C,GAC/CgD,kBAAsC5C,EAAI6C,WAAWjD,GACrDkD,uBAAsC9C,EAAI+C,mBAAkB,EAAMnD,GAClEoD,uBAAsChD,EAAI+C,mBAAkB,EAAOnD,GACnEqD,gCAAsCjD,EAAIkD,WAAWlD,EAAIgC,MAAS,QAASlC,GAC3EqD,kCAAsCnD,EAAIkD,WAAWlD,EAAIgC,MAAS,MAASlC,GAC3EsD,oCAAsCpD,EAAIkD,WAAWlD,EAAIgC,MAAS,MAASlC,GAC3EuD,iCAAsCrD,EAAIkD,WAAWlD,EAAI0B,QAAS,QAAS5B,GAC3EwD,mCAAsCtD,EAAIkD,WAAWlD,EAAI0B,QAAS,MAAS5B,GAC3EyD,qCAAsCvD,EAAIkD,WAAWlD,EAAI0B,QAAS,MAAS5B,IAE/E0D,WACIC,MAAmC9D,EAAEM,eAAeuD,UAAU,MAC9DE,oBAAmC/D,EAAEM,eAAeuD,UAAU,kBAC9DG,mBAAmChE,EAAEM,eAAeuD,UAAU,QAC9DI,6BAAmCjE,EAAEM,eAAeuD,UAAU,eAC9DK,+BAAmClE,EAAEM,eAAeuD,UAAU,qBCqBvEM,KAAKC","file":"pivot.fr.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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.fr =\n        localeStrings:\n            renderError: \"Une erreur est survenue en dessinant le tableau croisé.\"\n            computeError: \"Une erreur est survenue en calculant le tableau croisé.\"\n            uiRenderError: \"Une erreur est survenue en dessinant l'interface du tableau croisé dynamique.\"\n            selectAll: \"Sélectionner tout\"\n            selectNone: \"Sélectionner rien\"\n            tooMany: \"(trop de valeurs à afficher)\"\n            filterResults: \"Filtrer les valeurs\"\n            totals: \"Totaux\"\n            vs: \"sur\"\n            by: \"par\"\n            apply: \"Appliquer\"\n            cancel: \"Annuler\"\n\n        aggregators:\n            \"Nombre\":                             tpl.count(frFmtInt)\n            \"Nombre de valeurs uniques\":          tpl.countUnique(frFmtInt)\n            \"Liste de valeurs uniques\":           tpl.listUnique(\", \")\n            \"Somme\":                              tpl.sum(frFmt)\n            \"Somme en entiers\":                   tpl.sum(frFmtInt)\n            \"Moyenne\":                            tpl.average(frFmt)\n            \"Minimum\":                            tpl.min(frFmt)\n            \"Maximum\":                            tpl.max(frFmt)\n            \"Premier\":                            tpl.first(frFmt)\n            \"Dernier\":                            tpl.last(frFmt)\n            \"Ratio de sommes\":                    tpl.sumOverSum(frFmt)\n            \"Borne supérieure 80%\":               tpl.sumOverSumBound80(true, frFmt)\n            \"Borne inférieure 80%\":               tpl.sumOverSumBound80(false, frFmt)\n            \"Somme en proportion du totale\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Somme en proportion de la ligne\":    tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Somme en proportion de la colonne\":  tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Nombre en proportion du totale\":     tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Nombre en proportion de la ligne\":   tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Nombre en proportion de la colonne\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Table\":                           $.pivotUtilities.renderers[\"Table\"]\n            \"Table avec barres\":               $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Carte de chaleur\":                $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Carte de chaleur par ligne\":      $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Carte de chaleur par colonne\":    $.pivotUtilities.renderers[\"Col Heatmap\"]\n\n\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    var frFmt, frFmtInt, frFmtPct, nf, tpl;\n    nf = $.pivotUtilities.numberFormat;\n    tpl = $.pivotUtilities.aggregatorTemplates;\n    frFmt = nf({\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    frFmtInt = nf({\n      digitsAfterDecimal: 0,\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    frFmtPct = nf({\n      digitsAfterDecimal: 1,\n      scaler: 100,\n      suffix: \"%\",\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    return $.pivotUtilities.locales.fr = {\n      localeStrings: {\n        renderError: \"Une erreur est survenue en dessinant le tableau croisé.\",\n        computeError: \"Une erreur est survenue en calculant le tableau croisé.\",\n        uiRenderError: \"Une erreur est survenue en dessinant l'interface du tableau croisé dynamique.\",\n        selectAll: \"Sélectionner tout\",\n        selectNone: \"Sélectionner rien\",\n        tooMany: \"(trop de valeurs à afficher)\",\n        filterResults: \"Filtrer les valeurs\",\n        totals: \"Totaux\",\n        vs: \"sur\",\n        by: \"par\",\n        apply: \"Appliquer\",\n        cancel: \"Annuler\"\n      },\n      aggregators: {\n        \"Nombre\": tpl.count(frFmtInt),\n        \"Nombre de valeurs uniques\": tpl.countUnique(frFmtInt),\n        \"Liste de valeurs uniques\": tpl.listUnique(\", \"),\n        \"Somme\": tpl.sum(frFmt),\n        \"Somme en entiers\": tpl.sum(frFmtInt),\n        \"Moyenne\": tpl.average(frFmt),\n        \"Minimum\": tpl.min(frFmt),\n        \"Maximum\": tpl.max(frFmt),\n        \"Premier\": tpl.first(frFmt),\n        \"Dernier\": tpl.last(frFmt),\n        \"Ratio de sommes\": tpl.sumOverSum(frFmt),\n        \"Borne supérieure 80%\": tpl.sumOverSumBound80(true, frFmt),\n        \"Borne inférieure 80%\": tpl.sumOverSumBound80(false, frFmt),\n        \"Somme en proportion du totale\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct),\n        \"Somme en proportion de la ligne\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct),\n        \"Somme en proportion de la colonne\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct),\n        \"Nombre en proportion du totale\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct),\n        \"Nombre en proportion de la ligne\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct),\n        \"Nombre en proportion de la colonne\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n      },\n      renderers: {\n        \"Table\": $.pivotUtilities.renderers[\"Table\"],\n        \"Table avec barres\": $.pivotUtilities.renderers[\"Table Barchart\"],\n        \"Carte de chaleur\": $.pivotUtilities.renderers[\"Heatmap\"],\n        \"Carte de chaleur par ligne\": $.pivotUtilities.renderers[\"Row Heatmap\"],\n        \"Carte de chaleur par colonne\": $.pivotUtilities.renderers[\"Col Heatmap\"]\n      }\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot.fr.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..e767e4e57e3faef524b71ebbf8d1b2b0b248a659
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.js.js
@@ -0,0 +1,80 @@
+(function() {
+  var callWithJQuery;
+
+  callWithJQuery = function(pivotModule) {
+    if (typeof exports === "object" && typeof module === "object") {
+      return pivotModule(require("jquery"));
+    } else if (typeof define === "function" && define.amd) {
+      return define(["jquery"], pivotModule);
+    } else {
+      return pivotModule(jQuery);
+    }
+  };
+
+  callWithJQuery(function($) {
+    var frFmt, frFmtInt, frFmtPct, nf, tpl;
+    nf = $.pivotUtilities.numberFormat;
+    tpl = $.pivotUtilities.aggregatorTemplates;
+    frFmt = nf({
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    frFmtInt = nf({
+      digitsAfterDecimal: 0,
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    frFmtPct = nf({
+      digitsAfterDecimal: 1,
+      scaler: 100,
+      suffix: "%",
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    return $.pivotUtilities.locales.it = {
+      localeStrings: {
+        renderError: "Si è verificato un errore durante la creazione della tabella.",
+        computeError: "Si è verificato un errore di calcolo nella tabella.",
+        uiRenderError: "Si è verificato un errore durante il disegno di interfaccia della tabella pivot.",
+        selectAll: "Seleziona tutto",
+        selectNone: "Deseleziona tutto",
+        tooMany: "(troppi valori da visualizzare)",
+        filterResults: "Filtra i valori",
+        apply: "Applica",
+        cancel: "Annulla",
+        totals: "Totali",
+        vs: "su",
+        by: "da"
+      },
+      aggregators: {
+        "Numero": tpl.count(frFmtInt),
+        "Numero di valori unici": tpl.countUnique(frFmtInt),
+        "Elenco di valori unici": tpl.listUnique(", "),
+        "Somma": tpl.sum(frFmt),
+        "Somma intera": tpl.sum(frFmtInt),
+        "Media": tpl.average(frFmt),
+        "Minimo": tpl.min(frFmt),
+        "Massimo": tpl.max(frFmt),
+        "Rapporto": tpl.sumOverSum(frFmt),
+        "Limite superiore 80%": tpl.sumOverSumBound80(true, frFmt),
+        "limite inferiore 80%": tpl.sumOverSumBound80(false, frFmt),
+        "Somma proporzionale al totale": tpl.fractionOf(tpl.sum(), "total", frFmtPct),
+        "Somma proporzionale alla riga": tpl.fractionOf(tpl.sum(), "row", frFmtPct),
+        "Somma proporzionale alla colonna": tpl.fractionOf(tpl.sum(), "col", frFmtPct),
+        "Numero proporzionale al totale": tpl.fractionOf(tpl.count(), "total", frFmtPct),
+        "Numero proporzionale alla riga": tpl.fractionOf(tpl.count(), "row", frFmtPct),
+        "Numero proporzionale alla colonna": tpl.fractionOf(tpl.count(), "col", frFmtPct)
+      },
+      renderers: {
+        "Tabella": $.pivotUtilities.renderers["Table"],
+        "Tabella con grafico": $.pivotUtilities.renderers["Table Barchart"],
+        "Mappa di calore": $.pivotUtilities.renderers["Heatmap"],
+        "Mappa di calore per righe": $.pivotUtilities.renderers["Row Heatmap"],
+        "Mappa di calore per colonne": $.pivotUtilities.renderers["Col Heatmap"]
+      }
+    };
+  });
+
+}).call(this);
+
+//# sourceMappingURL=pivot.it.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0938ccc150aec36d4f3f702860ffe5af1345e57c
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"file":"pivot.it.js","sources":["pivot.it.coffee"],"names":[],"mappings":"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","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  nf = $.pivotUtilities.numberFormat\n  tpl = $.pivotUtilities.aggregatorTemplates\n\n  frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n  frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n  frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n  $.pivotUtilities.locales.it =\n    localeStrings:\n      renderError: \"Si è verificato un errore durante la creazione della tabella.\"\n      computeError: \"Si è verificato un errore di calcolo nella tabella.\"\n      uiRenderError: \"Si è verificato un errore durante il disegno di interfaccia della tabella pivot.\"\n      selectAll: \"Seleziona tutto\"\n      selectNone: \"Deseleziona tutto\"\n      tooMany: \"(troppi valori da visualizzare)\"\n      filterResults: \"Filtra i valori\"\n      apply: \"Applica\"\n      cancel: \"Annulla\"\n      totals: \"Totali\"\n      vs: \"su\"\n      by: \"da\"\n\n    aggregators:\n      \"Numero\":                             tpl.count(frFmtInt)\n      \"Numero di valori unici\":             tpl.countUnique(frFmtInt)\n      \"Elenco di valori unici\":             tpl.listUnique(\", \")\n      \"Somma\":                              tpl.sum(frFmt)\n      \"Somma intera\":                       tpl.sum(frFmtInt)\n      \"Media\":                              tpl.average(frFmt)\n      \"Minimo\":                             tpl.min(frFmt)\n      \"Massimo\":                            tpl.max(frFmt)\n      \"Rapporto\":                           tpl.sumOverSum(frFmt)\n      \"Limite superiore 80%\":               tpl.sumOverSumBound80(true, frFmt)\n      \"limite inferiore 80%\":               tpl.sumOverSumBound80(false, frFmt)\n      \"Somma proporzionale al totale\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n      \"Somma proporzionale alla riga\":      tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n      \"Somma proporzionale alla colonna\":   tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n      \"Numero proporzionale al totale\":     tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n      \"Numero proporzionale alla riga\":     tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n      \"Numero proporzionale alla colonna\":  tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n    renderers:\n      \"Tabella\":                           $.pivotUtilities.renderers[\"Table\"]\n      \"Tabella con grafico\":               $.pivotUtilities.renderers[\"Table Barchart\"]\n      \"Mappa di calore\":                   $.pivotUtilities.renderers[\"Heatmap\"]\n      \"Mappa di calore per righe\":         $.pivotUtilities.renderers[\"Row Heatmap\"]\n      \"Mappa di calore per colonne\":       $.pivotUtilities.renderers[\"Col Heatmap\"]\n\n\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..18d1f6db39c2ff9f4ac9a3249d56f9864e20f685
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.it.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..593b0723c86c0b3b0138745dde9a70f7c8210ec1
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.it.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.min.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..86288b38efb18072035043391e41d3a87b9e85d5
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.min.js.js
@@ -0,0 +1,2 @@
+(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var i,o,a,r,t;return r=e.pivotUtilities.numberFormat,t=e.pivotUtilities.aggregatorTemplates,i=r({thousandsSep:" ",decimalSep:","}),o=r({digitsAfterDecimal:0,thousandsSep:" ",decimalSep:","}),a=r({digitsAfterDecimal:1,scaler:100,suffix:"%",thousandsSep:" ",decimalSep:","}),e.pivotUtilities.locales.it={localeStrings:{renderError:"Si è verificato un errore durante la creazione della tabella.",computeError:"Si è verificato un errore di calcolo nella tabella.",uiRenderError:"Si è verificato un errore durante il disegno di interfaccia della tabella pivot.",selectAll:"Seleziona tutto",selectNone:"Deseleziona tutto",tooMany:"(troppi valori da visualizzare)",filterResults:"Filtra i valori",apply:"Applica",cancel:"Annulla",totals:"Totali",vs:"su",by:"da"},aggregators:{Numero:t.count(o),"Numero di valori unici":t.countUnique(o),"Elenco di valori unici":t.listUnique(", "),Somma:t.sum(i),"Somma intera":t.sum(o),Media:t.average(i),Minimo:t.min(i),Massimo:t.max(i),Rapporto:t.sumOverSum(i),"Limite superiore 80%":t.sumOverSumBound80(!0,i),"limite inferiore 80%":t.sumOverSumBound80(!1,i),"Somma proporzionale al totale":t.fractionOf(t.sum(),"total",a),"Somma proporzionale alla riga":t.fractionOf(t.sum(),"row",a),"Somma proporzionale alla colonna":t.fractionOf(t.sum(),"col",a),"Numero proporzionale al totale":t.fractionOf(t.count(),"total",a),"Numero proporzionale alla riga":t.fractionOf(t.count(),"row",a),"Numero proporzionale alla colonna":t.fractionOf(t.count(),"col",a)},renderers:{Tabella:e.pivotUtilities.renderers.Table,"Tabella con grafico":e.pivotUtilities.renderers["Table Barchart"],"Mappa di calore":e.pivotUtilities.renderers.Heatmap,"Mappa di calore per righe":e.pivotUtilities.renderers["Row Heatmap"],"Mappa di calore per colonne":e.pivotUtilities.renderers["Col Heatmap"]}}})}).call(this);
+//# sourceMappingURL=pivot.it.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.min.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2bea067d2a38cac03714577cfe163edd54ae5c57
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.min.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"sources":["pivot.it.coffee","pivot.it.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","frFmt","frFmtInt","frFmtPct","nf","tpl","pivotUtilities","numberFormat","aggregatorTemplates","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","it","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","apply","cancel","totals","vs","by","aggregators","Numero","count","Numero di valori unici","countUnique","Elenco di valori unici","listUnique","Somma","sum","Somma intera","Media","average","Minimo","min","Massimo","max","Rapporto","sumOverSum","Limite superiore 80%","sumOverSumBound80","limite inferiore 80%","Somma proporzionale al totale","fractionOf","Somma proporzionale alla riga","Somma proporzionale alla colonna","Numero proporzionale al totale","Numero proporzionale alla riga","Numero proporzionale alla colonna","renderers","Tabella","Tabella con grafico","Mappa di calore","Mappa di calore per righe","Mappa di calore per colonne","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GAChB,MAAqB,gBAAXC,UAAyC,gBAAVC,QACvCF,EAAYG,QAAQ,WACG,kBAAVC,SAAyBA,OAAOC,IAC7CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAED,SAACC,GACd,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,CCuBE,ODvBFD,GAAKJ,EAAEM,eAAeC,aACtBF,EAAML,EAAEM,eAAeE,oBAEvBP,EAAWG,GAAGK,aAAc,IAAKC,WAAY,MAC7CR,EAAWE,GAAGO,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEP,EAAWC,GAAGO,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FV,EAAEM,eAAeQ,QAAQC,IACvBC,eACEC,YAAa,gEACbC,aAAc,sDACdC,cAAe,mFACfC,UAAW,kBACXC,WAAY,oBACZC,QAAS,kCACTC,cAAe,kBACfC,MAAO,UACPC,OAAQ,UACRC,OAAQ,SACRC,GAAI,KACJC,GAAI,MAENC,aACEC,OAAsCzB,EAAI0B,MAAM7B,GAChD8B,yBAAsC3B,EAAI4B,YAAY/B,GACtDgC,yBAAsC7B,EAAI8B,WAAW,MACrDC,MAAsC/B,EAAIgC,IAAIpC,GAC9CqC,eAAsCjC,EAAIgC,IAAInC,GAC9CqC,MAAsClC,EAAImC,QAAQvC,GAClDwC,OAAsCpC,EAAIqC,IAAIzC,GAC9C0C,QAAsCtC,EAAIuC,IAAI3C,GAC9C4C,SAAsCxC,EAAIyC,WAAW7C,GACrD8C,uBAAsC1C,EAAI2C,mBAAkB,EAAM/C,GAClEgD,uBAAsC5C,EAAI2C,mBAAkB,EAAO/C,GACnEiD,gCAAsC7C,EAAI8C,WAAW9C,EAAIgC,MAAS,QAASlC,GAC3EiD,gCAAsC/C,EAAI8C,WAAW9C,EAAIgC,MAAS,MAASlC,GAC3EkD,mCAAsChD,EAAI8C,WAAW9C,EAAIgC,MAAS,MAASlC,GAC3EmD,iCAAsCjD,EAAI8C,WAAW9C,EAAI0B,QAAS,QAAS5B,GAC3EoD,iCAAsClD,EAAI8C,WAAW9C,EAAI0B,QAAS,MAAS5B,GAC3EqD,oCAAsCnD,EAAI8C,WAAW9C,EAAI0B,QAAS,MAAS5B,IAE7EsD,WACEC,QAAqC1D,EAAEM,eAAemD,UAAU,MAChEE,sBAAqC3D,EAAEM,eAAemD,UAAU,kBAChEG,kBAAqC5D,EAAEM,eAAemD,UAAU,QAChEI,4BAAqC7D,EAAEM,eAAemD,UAAU,eAChEK,8BAAqC9D,EAAEM,eAAemD,UAAU,qBCqBnEM,KAAKC","file":"pivot.it.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  nf = $.pivotUtilities.numberFormat\n  tpl = $.pivotUtilities.aggregatorTemplates\n\n  frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n  frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n  frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n  $.pivotUtilities.locales.it =\n    localeStrings:\n      renderError: \"Si è verificato un errore durante la creazione della tabella.\"\n      computeError: \"Si è verificato un errore di calcolo nella tabella.\"\n      uiRenderError: \"Si è verificato un errore durante il disegno di interfaccia della tabella pivot.\"\n      selectAll: \"Seleziona tutto\"\n      selectNone: \"Deseleziona tutto\"\n      tooMany: \"(troppi valori da visualizzare)\"\n      filterResults: \"Filtra i valori\"\n      apply: \"Applica\"\n      cancel: \"Annulla\"\n      totals: \"Totali\"\n      vs: \"su\"\n      by: \"da\"\n\n    aggregators:\n      \"Numero\":                             tpl.count(frFmtInt)\n      \"Numero di valori unici\":             tpl.countUnique(frFmtInt)\n      \"Elenco di valori unici\":             tpl.listUnique(\", \")\n      \"Somma\":                              tpl.sum(frFmt)\n      \"Somma intera\":                       tpl.sum(frFmtInt)\n      \"Media\":                              tpl.average(frFmt)\n      \"Minimo\":                             tpl.min(frFmt)\n      \"Massimo\":                            tpl.max(frFmt)\n      \"Rapporto\":                           tpl.sumOverSum(frFmt)\n      \"Limite superiore 80%\":               tpl.sumOverSumBound80(true, frFmt)\n      \"limite inferiore 80%\":               tpl.sumOverSumBound80(false, frFmt)\n      \"Somma proporzionale al totale\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n      \"Somma proporzionale alla riga\":      tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n      \"Somma proporzionale alla colonna\":   tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n      \"Numero proporzionale al totale\":     tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n      \"Numero proporzionale alla riga\":     tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n      \"Numero proporzionale alla colonna\":  tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n    renderers:\n      \"Tabella\":                           $.pivotUtilities.renderers[\"Table\"]\n      \"Tabella con grafico\":               $.pivotUtilities.renderers[\"Table Barchart\"]\n      \"Mappa di calore\":                   $.pivotUtilities.renderers[\"Heatmap\"]\n      \"Mappa di calore per righe\":         $.pivotUtilities.renderers[\"Row Heatmap\"]\n      \"Mappa di calore per colonne\":       $.pivotUtilities.renderers[\"Col Heatmap\"]\n\n\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    var frFmt, frFmtInt, frFmtPct, nf, tpl;\n    nf = $.pivotUtilities.numberFormat;\n    tpl = $.pivotUtilities.aggregatorTemplates;\n    frFmt = nf({\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    frFmtInt = nf({\n      digitsAfterDecimal: 0,\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    frFmtPct = nf({\n      digitsAfterDecimal: 1,\n      scaler: 100,\n      suffix: \"%\",\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    return $.pivotUtilities.locales.it = {\n      localeStrings: {\n        renderError: \"Si è verificato un errore durante la creazione della tabella.\",\n        computeError: \"Si è verificato un errore di calcolo nella tabella.\",\n        uiRenderError: \"Si è verificato un errore durante il disegno di interfaccia della tabella pivot.\",\n        selectAll: \"Seleziona tutto\",\n        selectNone: \"Deseleziona tutto\",\n        tooMany: \"(troppi valori da visualizzare)\",\n        filterResults: \"Filtra i valori\",\n        apply: \"Applica\",\n        cancel: \"Annulla\",\n        totals: \"Totali\",\n        vs: \"su\",\n        by: \"da\"\n      },\n      aggregators: {\n        \"Numero\": tpl.count(frFmtInt),\n        \"Numero di valori unici\": tpl.countUnique(frFmtInt),\n        \"Elenco di valori unici\": tpl.listUnique(\", \"),\n        \"Somma\": tpl.sum(frFmt),\n        \"Somma intera\": tpl.sum(frFmtInt),\n        \"Media\": tpl.average(frFmt),\n        \"Minimo\": tpl.min(frFmt),\n        \"Massimo\": tpl.max(frFmt),\n        \"Rapporto\": tpl.sumOverSum(frFmt),\n        \"Limite superiore 80%\": tpl.sumOverSumBound80(true, frFmt),\n        \"limite inferiore 80%\": tpl.sumOverSumBound80(false, frFmt),\n        \"Somma proporzionale al totale\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct),\n        \"Somma proporzionale alla riga\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct),\n        \"Somma proporzionale alla colonna\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct),\n        \"Numero proporzionale al totale\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct),\n        \"Numero proporzionale alla riga\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct),\n        \"Numero proporzionale alla colonna\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n      },\n      renderers: {\n        \"Tabella\": $.pivotUtilities.renderers[\"Table\"],\n        \"Tabella con grafico\": $.pivotUtilities.renderers[\"Table Barchart\"],\n        \"Mappa di calore\": $.pivotUtilities.renderers[\"Heatmap\"],\n        \"Mappa di calore per righe\": $.pivotUtilities.renderers[\"Row Heatmap\"],\n        \"Mappa di calore per colonne\": $.pivotUtilities.renderers[\"Col Heatmap\"]\n      }\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot.it.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.min.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.min.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb29266fbc425c66edd76bf627243bea50e67069
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.min.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.it.min.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.min.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.min.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..39bf379094a05ce491aadf95102b36f94446e776
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.it.min.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.it.min.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..197da3734e7caaa16195980258576a53c5b9bcd3
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.js.js
@@ -0,0 +1,80 @@
+(function() {
+  var callWithJQuery;
+
+  callWithJQuery = function(pivotModule) {
+    if (typeof exports === "object" && typeof module === "object") {
+      return pivotModule(require("jquery"));
+    } else if (typeof define === "function" && define.amd) {
+      return define(["jquery"], pivotModule);
+    } else {
+      return pivotModule(jQuery);
+    }
+  };
+
+  callWithJQuery(function($) {
+    var jpFmt, jpFmtInt, jpFmtPct, nf, tpl;
+    nf = $.pivotUtilities.numberFormat;
+    tpl = $.pivotUtilities.aggregatorTemplates;
+    jpFmt = nf({
+      thousandsSep: ",",
+      decimalSep: "."
+    });
+    jpFmtInt = nf({
+      digitsAfterDecimal: 0,
+      thousandsSep: ",",
+      decimalSep: "."
+    });
+    jpFmtPct = nf({
+      digitsAfterDecimal: 1,
+      scaler: 100,
+      suffix: "%",
+      thousandsSep: ",",
+      decimalSep: "."
+    });
+    return $.pivotUtilities.locales.ja = {
+      localeStrings: {
+        renderError: "描画処理でエラーが発生しました。",
+        computeError: "処理中にエラーが発生しました。",
+        uiRenderError: "表示処理中にエラーが発生しました。",
+        selectAll: "全選択",
+        selectNone: "選択解除",
+        tooMany: "項目が多すぎます",
+        filterResults: "項目を検索する",
+        totals: "合計",
+        vs: "vs",
+        by: "per",
+        apply: "適用する",
+        cancel: "キャンセル"
+      },
+      aggregators: {
+        "件数": tpl.count(jpFmtInt),
+        "件数(ユニーク)": tpl.countUnique(jpFmtInt),
+        "ユニーク値を表示 (CSV)": tpl.listUnique(", "),
+        "合計": tpl.sum(jpFmt),
+        "合計(整数)": tpl.sum(jpFmtInt),
+        "平均": tpl.average(jpFmt),
+        "最小": tpl.min(jpFmt),
+        "最大": tpl.max(jpFmt),
+        "選択2項目の比率": tpl.sumOverSum(jpFmt),
+        "選択2項目の比率(上限80%)": tpl.sumOverSumBound80(true, jpFmt),
+        "選択2項目の比率(下限80%)": tpl.sumOverSumBound80(false, jpFmt),
+        "合計割合": tpl.fractionOf(tpl.sum(), "total", jpFmtPct),
+        "合計割合(行)": tpl.fractionOf(tpl.sum(), "row", jpFmtPct),
+        "合計割合(列)": tpl.fractionOf(tpl.sum(), "col", jpFmtPct),
+        "件数割合": tpl.fractionOf(tpl.count(), "total", jpFmtPct),
+        "件数割合(行)": tpl.fractionOf(tpl.count(), "row", jpFmtPct),
+        "件数割合(列)": tpl.fractionOf(tpl.count(), "col", jpFmtPct)
+      },
+      renderers: {
+        "表": $.pivotUtilities.renderers["Table"],
+        "表(棒グラフ)": $.pivotUtilities.renderers["Table Barchart"],
+        "ヒートマップ": $.pivotUtilities.renderers["Heatmap"],
+        "ヒートマップ(行)": $.pivotUtilities.renderers["Row Heatmap"],
+        "ヒートマップ(列)": $.pivotUtilities.renderers["Col Heatmap"]
+      }
+    };
+  });
+
+}).call(this);
+
+//# sourceMappingURL=pivot.jp.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..270c66689d6709190607ee39faf7bcde3bfa53d2
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"file":"pivot.jp.js","sources":["pivot.jp.coffee"],"names":[],"mappings":"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","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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    jpFmt =    nf(thousandsSep: \",\", decimalSep: \".\")\n    jpFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \",\", decimalSep: \".\")\n    jpFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \",\", decimalSep: \".\")\n\n    $.pivotUtilities.locales.ja =\n        localeStrings:\n            renderError: \"描画処理でエラーが発生しました。\"\n            computeError: \"処理中にエラーが発生しました。\"\n            uiRenderError: \"表示処理中にエラーが発生しました。\"\n            selectAll: \"全選択\"\n            selectNone: \"選択解除\"\n            tooMany: \"項目が多すぎます\"\n            filterResults: \"項目を検索する\"\n            totals: \"合計\"\n            vs: \"vs\"\n            by: \"per\"\n            apply: \"適用する\"\n            cancel: \"キャンセル\"\n\n        aggregators:\n            \"件数\":                             tpl.count(jpFmtInt)\n            \"件数(ユニーク)\":          tpl.countUnique(jpFmtInt)\n            \"ユニーク値を表示 (CSV)\":           tpl.listUnique(\", \")\n            \"合計\":                              tpl.sum(jpFmt)\n            \"合計(整数)\":                   tpl.sum(jpFmtInt)\n            \"平均\":                            tpl.average(jpFmt)\n            \"最小\":                            tpl.min(jpFmt)\n            \"最大\":                            tpl.max(jpFmt)\n            \"選択2項目の比率\":                    tpl.sumOverSum(jpFmt)\n            \"選択2項目の比率(上限80%)\":               tpl.sumOverSumBound80(true, jpFmt)\n            \"選択2項目の比率(下限80%)\":               tpl.sumOverSumBound80(false, jpFmt)\n            \"合計割合\":      tpl.fractionOf(tpl.sum(),   \"total\", jpFmtPct)\n            \"合計割合(行)\":    tpl.fractionOf(tpl.sum(),   \"row\",   jpFmtPct)\n            \"合計割合(列)\":  tpl.fractionOf(tpl.sum(),   \"col\",   jpFmtPct)\n            \"件数割合\":     tpl.fractionOf(tpl.count(), \"total\", jpFmtPct)\n            \"件数割合(行)\":   tpl.fractionOf(tpl.count(), \"row\",   jpFmtPct)\n            \"件数割合(列)\": tpl.fractionOf(tpl.count(), \"col\",   jpFmtPct)\n\n        renderers:\n            \"表\":                           $.pivotUtilities.renderers[\"Table\"]\n            \"表(棒グラフ)\":               $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"ヒートマップ\":                $.pivotUtilities.renderers[\"Heatmap\"]\n            \"ヒートマップ(行)\":      $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"ヒートマップ(列)\":    $.pivotUtilities.renderers[\"Col Heatmap\"]\n\n\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..42172a1b0894e58eb8cec2f42394a033dc07ae25
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.jp.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..549d6b18c0db76355ed9b053cdd186480e7c6464
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.jp.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.min.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..c039c04aee00ac77abb2098af48c82c5e0e0448d
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.min.js.js
@@ -0,0 +1,2 @@
+(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var t,r,i,o,a;return o=e.pivotUtilities.numberFormat,a=e.pivotUtilities.aggregatorTemplates,t=o({thousandsSep:",",decimalSep:"."}),r=o({digitsAfterDecimal:0,thousandsSep:",",decimalSep:"."}),i=o({digitsAfterDecimal:1,scaler:100,suffix:"%",thousandsSep:",",decimalSep:"."}),e.pivotUtilities.locales.ja={localeStrings:{renderError:"描画処理でエラーが発生しました。",computeError:"処理中にエラーが発生しました。",uiRenderError:"表示処理中にエラーが発生しました。",selectAll:"全選択",selectNone:"選択解除",tooMany:"項目が多すぎます",filterResults:"項目を検索する",totals:"合計",vs:"vs",by:"per",apply:"適用する",cancel:"キャンセル"},aggregators:{"件数":a.count(r),"件数(ユニーク)":a.countUnique(r),"ユニーク値を表示 (CSV)":a.listUnique(", "),"合計":a.sum(t),"合計(整数)":a.sum(r),"平均":a.average(t),"最小":a.min(t),"最大":a.max(t),"選択2項目の比率":a.sumOverSum(t),"選択2項目の比率(上限80%)":a.sumOverSumBound80(!0,t),"選択2項目の比率(下限80%)":a.sumOverSumBound80(!1,t),"合計割合":a.fractionOf(a.sum(),"total",i),"合計割合(行)":a.fractionOf(a.sum(),"row",i),"合計割合(列)":a.fractionOf(a.sum(),"col",i),"件数割合":a.fractionOf(a.count(),"total",i),"件数割合(行)":a.fractionOf(a.count(),"row",i),"件数割合(列)":a.fractionOf(a.count(),"col",i)},renderers:{"表":e.pivotUtilities.renderers.Table,"表(棒グラフ)":e.pivotUtilities.renderers["Table Barchart"],"ヒートマップ":e.pivotUtilities.renderers.Heatmap,"ヒートマップ(行)":e.pivotUtilities.renderers["Row Heatmap"],"ヒートマップ(列)":e.pivotUtilities.renderers["Col Heatmap"]}}})}).call(this);
+//# sourceMappingURL=pivot.jp.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.min.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c690f23d8769c41c6b1fb9139476d7e87045ee6e
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.min.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"sources":["pivot.jp.coffee","pivot.jp.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","jpFmt","jpFmtInt","jpFmtPct","nf","tpl","pivotUtilities","numberFormat","aggregatorTemplates","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","ja","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","totals","vs","by","apply","cancel","aggregators","件数","count","件数(ユニーク)","countUnique","ユニーク値を表示 (CSV)","listUnique","合計","sum","合計(整数)","平均","average","最小","min","最大","max","選択2項目の比率","sumOverSum","選択2項目の比率(上限80%)","sumOverSumBound80","選択2項目の比率(下限80%)","合計割合","fractionOf","合計割合(行)","合計割合(列)","件数割合","件数割合(行)","件数割合(列)","renderers","表","表(棒グラフ)","ヒートマップ","ヒートマップ(行)","ヒートマップ(列)","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAXC,UAAyC,gBAAVC,QACrCF,EAAYG,QAAQ,WACC,kBAAVC,SAAyBA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GACZ,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,CCuBA,ODvBAD,GAAKJ,EAAEM,eAAeC,aACtBF,EAAML,EAAEM,eAAeE,oBAEvBP,EAAWG,GAAGK,aAAc,IAAKC,WAAY,MAC7CR,EAAWE,GAAGO,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEP,EAAWC,GAAGO,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FV,EAAEM,eAAeQ,QAAQC,IACrBC,eACIC,YAAa,mBACbC,aAAc,kBACdC,cAAe,oBACfC,UAAW,MACXC,WAAY,OACZC,QAAS,WACTC,cAAe,UACfC,OAAQ,KACRC,GAAI,KACJC,GAAI,MACJC,MAAO,OACPC,OAAQ,SAEZC,aACIC,KAAkCzB,EAAI0B,MAAM7B,GAC5C8B,WAAqB3B,EAAI4B,YAAY/B,GACrCgC,iBAA4B7B,EAAI8B,WAAW,MAC3CC,KAAmC/B,EAAIgC,IAAIpC,GAC3CqC,SAA4BjC,EAAIgC,IAAInC,GACpCqC,KAAiClC,EAAImC,QAAQvC,GAC7CwC,KAAiCpC,EAAIqC,IAAIzC,GACzC0C,KAAiCtC,EAAIuC,IAAI3C,GACzC4C,WAA+BxC,EAAIyC,WAAW7C,GAC9C8C,kBAAiC1C,EAAI2C,mBAAkB,EAAM/C,GAC7DgD,kBAAiC5C,EAAI2C,mBAAkB,EAAO/C,GAC9DiD,OAAa7C,EAAI8C,WAAW9C,EAAIgC,MAAS,QAASlC,GAClDiD,UAAc/C,EAAI8C,WAAW9C,EAAIgC,MAAS,MAASlC,GACnDkD,UAAYhD,EAAI8C,WAAW9C,EAAIgC,MAAS,MAASlC,GACjDmD,OAAYjD,EAAI8C,WAAW9C,EAAI0B,QAAS,QAAS5B,GACjDoD,UAAalD,EAAI8C,WAAW9C,EAAI0B,QAAS,MAAS5B,GAClDqD,UAAWnD,EAAI8C,WAAW9C,EAAI0B,QAAS,MAAS5B,IAEpDsD,WACIC,IAA+B1D,EAAEM,eAAemD,UAAU,MAC1DE,UAAyB3D,EAAEM,eAAemD,UAAU,kBACpDG,SAAyB5D,EAAEM,eAAemD,UAAU,QACpDI,YAAkB7D,EAAEM,eAAemD,UAAU,eAC7CK,YAAgB9D,EAAEM,eAAemD,UAAU,qBCqBpDM,KAAKC","file":"pivot.jp.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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    jpFmt =    nf(thousandsSep: \",\", decimalSep: \".\")\n    jpFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \",\", decimalSep: \".\")\n    jpFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \",\", decimalSep: \".\")\n\n    $.pivotUtilities.locales.ja =\n        localeStrings:\n            renderError: \"描画処理でエラーが発生しました。\"\n            computeError: \"処理中にエラーが発生しました。\"\n            uiRenderError: \"表示処理中にエラーが発生しました。\"\n            selectAll: \"全選択\"\n            selectNone: \"選択解除\"\n            tooMany: \"項目が多すぎます\"\n            filterResults: \"項目を検索する\"\n            totals: \"合計\"\n            vs: \"vs\"\n            by: \"per\"\n            apply: \"適用する\"\n            cancel: \"キャンセル\"\n\n        aggregators:\n            \"件数\":                             tpl.count(jpFmtInt)\n            \"件数(ユニーク)\":          tpl.countUnique(jpFmtInt)\n            \"ユニーク値を表示 (CSV)\":           tpl.listUnique(\", \")\n            \"合計\":                              tpl.sum(jpFmt)\n            \"合計(整数)\":                   tpl.sum(jpFmtInt)\n            \"平均\":                            tpl.average(jpFmt)\n            \"最小\":                            tpl.min(jpFmt)\n            \"最大\":                            tpl.max(jpFmt)\n            \"選択2項目の比率\":                    tpl.sumOverSum(jpFmt)\n            \"選択2項目の比率(上限80%)\":               tpl.sumOverSumBound80(true, jpFmt)\n            \"選択2項目の比率(下限80%)\":               tpl.sumOverSumBound80(false, jpFmt)\n            \"合計割合\":      tpl.fractionOf(tpl.sum(),   \"total\", jpFmtPct)\n            \"合計割合(行)\":    tpl.fractionOf(tpl.sum(),   \"row\",   jpFmtPct)\n            \"合計割合(列)\":  tpl.fractionOf(tpl.sum(),   \"col\",   jpFmtPct)\n            \"件数割合\":     tpl.fractionOf(tpl.count(), \"total\", jpFmtPct)\n            \"件数割合(行)\":   tpl.fractionOf(tpl.count(), \"row\",   jpFmtPct)\n            \"件数割合(列)\": tpl.fractionOf(tpl.count(), \"col\",   jpFmtPct)\n\n        renderers:\n            \"表\":                           $.pivotUtilities.renderers[\"Table\"]\n            \"表(棒グラフ)\":               $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"ヒートマップ\":                $.pivotUtilities.renderers[\"Heatmap\"]\n            \"ヒートマップ(行)\":      $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"ヒートマップ(列)\":    $.pivotUtilities.renderers[\"Col Heatmap\"]\n\n\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    var jpFmt, jpFmtInt, jpFmtPct, nf, tpl;\n    nf = $.pivotUtilities.numberFormat;\n    tpl = $.pivotUtilities.aggregatorTemplates;\n    jpFmt = nf({\n      thousandsSep: \",\",\n      decimalSep: \".\"\n    });\n    jpFmtInt = nf({\n      digitsAfterDecimal: 0,\n      thousandsSep: \",\",\n      decimalSep: \".\"\n    });\n    jpFmtPct = nf({\n      digitsAfterDecimal: 1,\n      scaler: 100,\n      suffix: \"%\",\n      thousandsSep: \",\",\n      decimalSep: \".\"\n    });\n    return $.pivotUtilities.locales.ja = {\n      localeStrings: {\n        renderError: \"描画処理でエラーが発生しました。\",\n        computeError: \"処理中にエラーが発生しました。\",\n        uiRenderError: \"表示処理中にエラーが発生しました。\",\n        selectAll: \"全選択\",\n        selectNone: \"選択解除\",\n        tooMany: \"項目が多すぎます\",\n        filterResults: \"項目を検索する\",\n        totals: \"合計\",\n        vs: \"vs\",\n        by: \"per\",\n        apply: \"適用する\",\n        cancel: \"キャンセル\"\n      },\n      aggregators: {\n        \"件数\": tpl.count(jpFmtInt),\n        \"件数(ユニーク)\": tpl.countUnique(jpFmtInt),\n        \"ユニーク値を表示 (CSV)\": tpl.listUnique(\", \"),\n        \"合計\": tpl.sum(jpFmt),\n        \"合計(整数)\": tpl.sum(jpFmtInt),\n        \"平均\": tpl.average(jpFmt),\n        \"最小\": tpl.min(jpFmt),\n        \"最大\": tpl.max(jpFmt),\n        \"選択2項目の比率\": tpl.sumOverSum(jpFmt),\n        \"選択2項目の比率(上限80%)\": tpl.sumOverSumBound80(true, jpFmt),\n        \"選択2項目の比率(下限80%)\": tpl.sumOverSumBound80(false, jpFmt),\n        \"合計割合\": tpl.fractionOf(tpl.sum(), \"total\", jpFmtPct),\n        \"合計割合(行)\": tpl.fractionOf(tpl.sum(), \"row\", jpFmtPct),\n        \"合計割合(列)\": tpl.fractionOf(tpl.sum(), \"col\", jpFmtPct),\n        \"件数割合\": tpl.fractionOf(tpl.count(), \"total\", jpFmtPct),\n        \"件数割合(行)\": tpl.fractionOf(tpl.count(), \"row\", jpFmtPct),\n        \"件数割合(列)\": tpl.fractionOf(tpl.count(), \"col\", jpFmtPct)\n      },\n      renderers: {\n        \"表\": $.pivotUtilities.renderers[\"Table\"],\n        \"表(棒グラフ)\": $.pivotUtilities.renderers[\"Table Barchart\"],\n        \"ヒートマップ\": $.pivotUtilities.renderers[\"Heatmap\"],\n        \"ヒートマップ(行)\": $.pivotUtilities.renderers[\"Row Heatmap\"],\n        \"ヒートマップ(列)\": $.pivotUtilities.renderers[\"Col Heatmap\"]\n      }\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot.jp.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.min.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.min.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f4b24864db3000b1881d8c47b564a3f5286e4bc8
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.min.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.jp.min.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.min.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.min.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..84bc01b57e3a4b2a2142af92058b22a7a1fc5079
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.jp.min.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.jp.min.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.js.js
index 02a276324b0b6a575762524170ebc7db661b0138..489e412a7aa5d198e329315d39824b0947b1f33c 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.js.js
@@ -20,7 +20,7 @@
     /*
     Utilities
      */
-    var PivotData, addSeparators, aggregatorTemplates, aggregators, dayNamesEn, derivers, getSort, locales, mthNamesEn, naturalSort, numberFormat, pivotTableRenderer, renderers, sortAs, usFmt, usFmtInt, usFmtPct, zeroPad;
+    var PivotData, addSeparators, aggregatorTemplates, aggregators, dayNamesEn, derivers, getSort, locales, mthNamesEn, naturalSort, numberFormat, pivotTableRenderer, rd, renderers, rx, rz, sortAs, usFmt, usFmtInt, usFmtPct, zeroPad;
     addSeparators = function(nStr, thousandsSep, decimalSep) {
       var rgx, x, x1, x2;
       nStr += '';
@@ -41,18 +41,14 @@
         thousandsSep: ",",
         decimalSep: ".",
         prefix: "",
-        suffix: "",
-        showZero: false
+        suffix: ""
       };
-      opts = $.extend(defaults, opts);
+      opts = $.extend({}, defaults, opts);
       return function(x) {
         var result;
         if (isNaN(x) || !isFinite(x)) {
           return "";
         }
-        if (x === 0 && !opts.showZero) {
-          return "";
-        }
         result = addSeparators((opts.scaler * x).toFixed(opts.digitsAfterDecimal), opts.thousandsSep, opts.decimalSep);
         return "" + opts.prefix + result + opts.suffix;
       };
@@ -86,7 +82,7 @@
           };
         };
       },
-      countUnique: function(formatter) {
+      uniques: function(fn, formatter) {
         if (formatter == null) {
           formatter = usFmtInt;
         }
@@ -103,7 +99,7 @@
                 }
               },
               value: function() {
-                return this.uniq.length;
+                return fn(this.uniq);
               },
               format: formatter,
               numInputs: attr != null ? 0 : 1
@@ -111,30 +107,6 @@
           };
         };
       },
-      listUnique: function(sep) {
-        return function(arg) {
-          var attr;
-          attr = arg[0];
-          return function(data, rowKey, colKey) {
-            return {
-              uniq: [],
-              push: function(record) {
-                var ref;
-                if (ref = record[attr], indexOf.call(this.uniq, ref) < 0) {
-                  return this.uniq.push(record[attr]);
-                }
-              },
-              value: function() {
-                return this.uniq.join(sep);
-              },
-              format: function(x) {
-                return x;
-              },
-              numInputs: attr != null ? 0 : 1
-            };
-          };
-        };
-      },
       sum: function(formatter) {
         if (formatter == null) {
           formatter = usFmt;
@@ -159,7 +131,7 @@
           };
         };
       },
-      min: function(formatter) {
+      extremes: function(mode, formatter) {
         if (formatter == null) {
           formatter = usFmt;
         }
@@ -169,23 +141,43 @@
           return function(data, rowKey, colKey) {
             return {
               val: null,
+              sorter: getSort(data != null ? data.sorters : void 0, attr),
               push: function(record) {
-                var ref, x;
-                x = parseFloat(record[attr]);
-                if (!isNaN(x)) {
-                  return this.val = Math.min(x, (ref = this.val) != null ? ref : x);
+                var ref, ref1, ref2, x;
+                x = record[attr];
+                if (mode === "min" || mode === "max") {
+                  x = parseFloat(x);
+                  if (!isNaN(x)) {
+                    this.val = Math[mode](x, (ref = this.val) != null ? ref : x);
+                  }
+                }
+                if (mode === "first") {
+                  if (this.sorter(x, (ref1 = this.val) != null ? ref1 : x) <= 0) {
+                    this.val = x;
+                  }
+                }
+                if (mode === "last") {
+                  if (this.sorter(x, (ref2 = this.val) != null ? ref2 : x) >= 0) {
+                    return this.val = x;
+                  }
                 }
               },
               value: function() {
                 return this.val;
               },
-              format: formatter,
+              format: function(x) {
+                if (isNaN(x)) {
+                  return x;
+                } else {
+                  return formatter(x);
+                }
+              },
               numInputs: attr != null ? 0 : 1
             };
           };
         };
       },
-      max: function(formatter) {
+      quantile: function(q, formatter) {
         if (formatter == null) {
           formatter = usFmt;
         }
@@ -194,16 +186,24 @@
           attr = arg[0];
           return function(data, rowKey, colKey) {
             return {
-              val: null,
+              vals: [],
               push: function(record) {
-                var ref, x;
+                var x;
                 x = parseFloat(record[attr]);
                 if (!isNaN(x)) {
-                  return this.val = Math.max(x, (ref = this.val) != null ? ref : x);
+                  return this.vals.push(x);
                 }
               },
               value: function() {
-                return this.val;
+                var i;
+                if (this.vals.length === 0) {
+                  return null;
+                }
+                this.vals.sort(function(a, b) {
+                  return a - b;
+                });
+                i = (this.vals.length - 1) * q;
+                return (this.vals[Math.floor(i)] + this.vals[Math.ceil(i)]) / 2.0;
               },
               format: formatter,
               numInputs: attr != null ? 0 : 1
@@ -211,7 +211,13 @@
           };
         };
       },
-      average: function(formatter) {
+      runningStat: function(mode, ddof, formatter) {
+        if (mode == null) {
+          mode = "mean";
+        }
+        if (ddof == null) {
+          ddof = 1;
+        }
         if (formatter == null) {
           formatter = usFmt;
         }
@@ -220,16 +226,41 @@
           attr = arg[0];
           return function(data, rowKey, colKey) {
             return {
-              sum: 0,
-              len: 0,
+              n: 0.0,
+              m: 0.0,
+              s: 0.0,
               push: function(record) {
-                if (!isNaN(parseFloat(record[attr]))) {
-                  this.sum += parseFloat(record[attr]);
-                  return this.len++;
+                var m_new, x;
+                x = parseFloat(record[attr]);
+                if (isNaN(x)) {
+                  return;
+                }
+                this.n += 1.0;
+                if (this.n === 1.0) {
+                  return this.m = x;
+                } else {
+                  m_new = this.m + (x - this.m) / this.n;
+                  this.s = this.s + (x - this.m) * (x - m_new);
+                  return this.m = m_new;
                 }
               },
               value: function() {
-                return this.sum / this.len;
+                if (mode === "mean") {
+                  if (this.n === 0) {
+                    return 0 / 0;
+                  } else {
+                    return this.m;
+                  }
+                }
+                if (this.n <= ddof) {
+                  return 0;
+                }
+                switch (mode) {
+                  case "var":
+                    return this.s / (this.n - ddof);
+                  case "stdev":
+                    return Math.sqrt(this.s / (this.n - ddof));
+                }
               },
               format: formatter,
               numInputs: attr != null ? 0 : 1
@@ -329,6 +360,42 @@
         };
       }
     };
+    aggregatorTemplates.countUnique = function(f) {
+      return aggregatorTemplates.uniques((function(x) {
+        return x.length;
+      }), f);
+    };
+    aggregatorTemplates.listUnique = function(s) {
+      return aggregatorTemplates.uniques((function(x) {
+        return x.sort(naturalSort).join(s);
+      }), (function(x) {
+        return x;
+      }));
+    };
+    aggregatorTemplates.max = function(f) {
+      return aggregatorTemplates.extremes('max', f);
+    };
+    aggregatorTemplates.min = function(f) {
+      return aggregatorTemplates.extremes('min', f);
+    };
+    aggregatorTemplates.first = function(f) {
+      return aggregatorTemplates.extremes('first', f);
+    };
+    aggregatorTemplates.last = function(f) {
+      return aggregatorTemplates.extremes('last', f);
+    };
+    aggregatorTemplates.median = function(f) {
+      return aggregatorTemplates.quantile(0.5, f);
+    };
+    aggregatorTemplates.average = function(f) {
+      return aggregatorTemplates.runningStat("mean", 1, f);
+    };
+    aggregatorTemplates["var"] = function(ddof, f) {
+      return aggregatorTemplates.runningStat("var", ddof, f);
+    };
+    aggregatorTemplates.stdev = function(ddof, f) {
+      return aggregatorTemplates.runningStat("stdev", ddof, f);
+    };
     aggregators = (function(tpl) {
       return {
         "Count": tpl.count(usFmtInt),
@@ -337,8 +404,13 @@
         "Sum": tpl.sum(usFmt),
         "Integer Sum": tpl.sum(usFmtInt),
         "Average": tpl.average(usFmt),
+        "Median": tpl.median(usFmt),
+        "Sample Variance": tpl["var"](1, usFmt),
+        "Sample Standard Deviation": tpl.stdev(1, usFmt),
         "Minimum": tpl.min(usFmt),
         "Maximum": tpl.max(usFmt),
+        "First": tpl.first(usFmt),
+        "Last": tpl.last(usFmt),
         "Sum over Sum": tpl.sumOverSum(usFmt),
         "80% Upper Bound": tpl.sumOverSumBound80(true, usFmt),
         "80% Lower Bound": tpl.sumOverSumBound80(false, usFmt),
@@ -351,20 +423,20 @@
       };
     })(aggregatorTemplates);
     renderers = {
-      "Table": function(pvtData, opts) {
-        return pivotTableRenderer(pvtData, opts);
+      "Table": function(data, opts) {
+        return pivotTableRenderer(data, opts);
       },
-      "Table Barchart": function(pvtData, opts) {
-        return $(pivotTableRenderer(pvtData, opts)).barchart();
+      "Table Barchart": function(data, opts) {
+        return $(pivotTableRenderer(data, opts)).barchart();
       },
-      "Heatmap": function(pvtData, opts) {
-        return $(pivotTableRenderer(pvtData, opts)).heatmap();
+      "Heatmap": function(data, opts) {
+        return $(pivotTableRenderer(data, opts)).heatmap("heatmap", opts);
       },
-      "Row Heatmap": function(pvtData, opts) {
-        return $(pivotTableRenderer(pvtData, opts)).heatmap("rowheatmap");
+      "Row Heatmap": function(data, opts) {
+        return $(pivotTableRenderer(data, opts)).heatmap("rowheatmap", opts);
       },
-      "Col Heatmap": function(pvtData, opts) {
-        return $(pivotTableRenderer(pvtData, opts)).heatmap("colheatmap");
+      "Col Heatmap": function(data, opts) {
+        return $(pivotTableRenderer(data, opts)).heatmap("colheatmap", opts);
       }
     };
     locales = {
@@ -378,7 +450,9 @@
           selectAll: "Select All",
           selectNone: "Select None",
           tooMany: "(too many to list)",
-          filterResults: "Filter results",
+          filterResults: "Filter values",
+          apply: "Apply",
+          cancel: "Cancel",
           totals: "Totals",
           vs: "vs",
           by: "by"
@@ -441,23 +515,49 @@
         };
       }
     };
+    rx = /(\d+)|(\D+)/g;
+    rd = /\d/;
+    rz = /^0/;
     naturalSort = (function(_this) {
       return function(as, bs) {
-        var a, a1, b, b1, rd, rx, rz;
-        rx = /(\d+)|(\D+)/g;
-        rd = /\d/;
-        rz = /^0/;
-        if (typeof as === "number" || typeof bs === "number") {
-          if (isNaN(as)) {
-            return 1;
-          }
-          if (isNaN(bs)) {
-            return -1;
-          }
-          return as - bs;
+        var a, a1, b, b1, nas, nbs;
+        if ((bs != null) && (as == null)) {
+          return -1;
+        }
+        if ((as != null) && (bs == null)) {
+          return 1;
         }
-        a = String(as).toLowerCase();
-        b = String(bs).toLowerCase();
+        if (typeof as === "number" && isNaN(as)) {
+          return -1;
+        }
+        if (typeof bs === "number" && isNaN(bs)) {
+          return 1;
+        }
+        nas = +as;
+        nbs = +bs;
+        if (nas < nbs) {
+          return -1;
+        }
+        if (nas > nbs) {
+          return 1;
+        }
+        if (typeof as === "number" && typeof bs !== "number") {
+          return -1;
+        }
+        if (typeof bs === "number" && typeof as !== "number") {
+          return 1;
+        }
+        if (typeof as === "number" && typeof bs === "number") {
+          return 0;
+        }
+        if (isNaN(nbs) && !isNaN(nas)) {
+          return -1;
+        }
+        if (isNaN(nas) && !isNaN(nbs)) {
+          return 1;
+        }
+        a = String(as);
+        b = String(bs);
         if (a === b) {
           return 0;
         }
@@ -481,11 +581,15 @@
       };
     })(this);
     sortAs = function(order) {
-      var i, mapping, x;
+      var i, l_mapping, mapping, x;
       mapping = {};
+      l_mapping = {};
       for (i in order) {
         x = order[i];
         mapping[x] = i;
+        if (typeof x === "string") {
+          l_mapping[x.toLowerCase()] = i;
+        }
       }
       return function(a, b) {
         if ((mapping[a] != null) && (mapping[b] != null)) {
@@ -494,6 +598,12 @@
           return -1;
         } else if (mapping[b] != null) {
           return 1;
+        } else if ((l_mapping[a] != null) && (l_mapping[b] != null)) {
+          return l_mapping[a] - l_mapping[b];
+        } else if (l_mapping[a] != null) {
+          return -1;
+        } else if (l_mapping[b] != null) {
+          return 1;
         } else {
           return naturalSort(a, b);
         }
@@ -501,22 +611,17 @@
     };
     getSort = function(sorters, attr) {
       var sort;
-      sort = sorters(attr);
-      if ($.isFunction(sort)) {
-        return sort;
-      } else {
-        return naturalSort;
+      if (sorters != null) {
+        if ($.isFunction(sorters)) {
+          sort = sorters(attr);
+          if ($.isFunction(sort)) {
+            return sort;
+          }
+        } else if (sorters[attr] != null) {
+          return sorters[attr];
+        }
       }
-    };
-    $.pivotUtilities = {
-      aggregatorTemplates: aggregatorTemplates,
-      aggregators: aggregators,
-      renderers: renderers,
-      derivers: derivers,
-      locales: locales,
-      naturalSort: naturalSort,
-      numberFormat: numberFormat,
-      sortAs: sortAs
+      return naturalSort;
     };
 
     /*
@@ -524,17 +629,28 @@
      */
     PivotData = (function() {
       function PivotData(input, opts) {
+        var ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ref9;
+        if (opts == null) {
+          opts = {};
+        }
         this.getAggregator = bind(this.getAggregator, this);
         this.getRowKeys = bind(this.getRowKeys, this);
         this.getColKeys = bind(this.getColKeys, this);
         this.sortKeys = bind(this.sortKeys, this);
         this.arrSort = bind(this.arrSort, this);
-        this.aggregator = opts.aggregator;
-        this.aggregatorName = opts.aggregatorName;
-        this.colAttrs = opts.cols;
-        this.rowAttrs = opts.rows;
-        this.valAttrs = opts.vals;
-        this.sorters = opts.sorters;
+        this.input = input;
+        this.aggregator = (ref = opts.aggregator) != null ? ref : aggregatorTemplates.count()();
+        this.aggregatorName = (ref1 = opts.aggregatorName) != null ? ref1 : "Count";
+        this.colAttrs = (ref2 = opts.cols) != null ? ref2 : [];
+        this.rowAttrs = (ref3 = opts.rows) != null ? ref3 : [];
+        this.valAttrs = (ref4 = opts.vals) != null ? ref4 : [];
+        this.sorters = (ref5 = opts.sorters) != null ? ref5 : {};
+        this.rowOrder = (ref6 = opts.rowOrder) != null ? ref6 : "key_a_to_z";
+        this.colOrder = (ref7 = opts.colOrder) != null ? ref7 : "key_a_to_z";
+        this.derivedAttributes = (ref8 = opts.derivedAttributes) != null ? ref8 : {};
+        this.filter = (ref9 = opts.filter) != null ? ref9 : (function() {
+          return true;
+        });
         this.tree = {};
         this.rowKeys = [];
         this.colKeys = [];
@@ -542,9 +658,9 @@
         this.colTotals = {};
         this.allTotal = this.aggregator(this, [], []);
         this.sorted = false;
-        PivotData.forEachRecord(input, opts.derivedAttributes, (function(_this) {
+        PivotData.forEachRecord(this.input, this.derivedAttributes, (function(_this) {
           return function(record) {
-            if (opts.filter(record)) {
+            if (_this.filter(record)) {
               return _this.processRecord(record);
             }
           };
@@ -594,7 +710,7 @@
             }
             return results1;
           }
-        } else if (input instanceof jQuery) {
+        } else if (input instanceof $) {
           tblCols = [];
           $("thead > tr > th", input).each(function(i) {
             return tblCols.push($(this).text());
@@ -602,7 +718,7 @@
           return $("tbody > tr", input).each(function(i) {
             record = {};
             $("td", this).each(function(j) {
-              return record[tblCols[j]] = $(this).html();
+              return record[tblCols[j]] = $(this).text();
             });
             return addRecord(record);
           });
@@ -611,13 +727,22 @@
         }
       };
 
-      PivotData.convertToArray = function(input) {
-        var result;
-        result = [];
-        PivotData.forEachRecord(input, {}, function(record) {
-          return result.push(record);
-        });
-        return result;
+      PivotData.prototype.forEachMatchingRecord = function(criteria, callback) {
+        return PivotData.forEachRecord(this.input, this.derivedAttributes, (function(_this) {
+          return function(record) {
+            var k, ref, v;
+            if (!_this.filter(record)) {
+              return;
+            }
+            for (k in criteria) {
+              v = criteria[k];
+              if (v !== ((ref = record[k]) != null ? ref : "null")) {
+                return;
+              }
+            }
+            return callback(record);
+          };
+        })(this));
       };
 
       PivotData.prototype.arrSort = function(attrs) {
@@ -634,6 +759,7 @@
         return function(a, b) {
           var comparison, i, sorter;
           for (i in sortersArr) {
+            if (!hasProp.call(sortersArr, i)) continue;
             sorter = sortersArr[i];
             comparison = sorter(a[i], b[i]);
             if (comparison !== 0) {
@@ -645,10 +771,48 @@
       };
 
       PivotData.prototype.sortKeys = function() {
+        var v;
         if (!this.sorted) {
           this.sorted = true;
-          this.rowKeys.sort(this.arrSort(this.rowAttrs));
-          return this.colKeys.sort(this.arrSort(this.colAttrs));
+          v = (function(_this) {
+            return function(r, c) {
+              return _this.getAggregator(r, c).value();
+            };
+          })(this);
+          switch (this.rowOrder) {
+            case "value_a_to_z":
+              this.rowKeys.sort((function(_this) {
+                return function(a, b) {
+                  return naturalSort(v(a, []), v(b, []));
+                };
+              })(this));
+              break;
+            case "value_z_to_a":
+              this.rowKeys.sort((function(_this) {
+                return function(a, b) {
+                  return -naturalSort(v(a, []), v(b, []));
+                };
+              })(this));
+              break;
+            default:
+              this.rowKeys.sort(this.arrSort(this.rowAttrs));
+          }
+          switch (this.colOrder) {
+            case "value_a_to_z":
+              return this.colKeys.sort((function(_this) {
+                return function(a, b) {
+                  return naturalSort(v([], a), v([], b));
+                };
+              })(this));
+            case "value_z_to_a":
+              return this.colKeys.sort((function(_this) {
+                return function(a, b) {
+                  return -naturalSort(v([], a), v([], b));
+                };
+              })(this));
+            default:
+              return this.colKeys.sort(this.arrSort(this.colAttrs));
+          }
         }
       };
 
@@ -730,22 +894,61 @@
       return PivotData;
 
     })();
+    $.pivotUtilities = {
+      aggregatorTemplates: aggregatorTemplates,
+      aggregators: aggregators,
+      renderers: renderers,
+      derivers: derivers,
+      locales: locales,
+      naturalSort: naturalSort,
+      numberFormat: numberFormat,
+      sortAs: sortAs,
+      PivotData: PivotData
+    };
 
     /*
     Default Renderer for hierarchical table layout
      */
     pivotTableRenderer = function(pivotData, opts) {
-      var aggregator, c, colAttrs, colKey, colKeys, defaults, i, j, r, result, rowAttrs, rowKey, rowKeys, spanSize, td, th, totalAggregator, tr, txt, val, x;
+      var aggregator, c, colAttrs, colKey, colKeys, defaults, getClickHandler, i, j, r, result, rowAttrs, rowKey, rowKeys, spanSize, tbody, td, th, thead, totalAggregator, tr, txt, val, x;
       defaults = {
+        table: {
+          clickCallback: null,
+          rowTotals: true,
+          colTotals: true
+        },
         localeStrings: {
           totals: "Totals"
         }
       };
-      opts = $.extend(defaults, opts);
+      opts = $.extend(true, {}, defaults, opts);
       colAttrs = pivotData.colAttrs;
       rowAttrs = pivotData.rowAttrs;
       rowKeys = pivotData.getRowKeys();
       colKeys = pivotData.getColKeys();
+      if (opts.table.clickCallback) {
+        getClickHandler = function(value, rowValues, colValues) {
+          var attr, filters, i;
+          filters = {};
+          for (i in colAttrs) {
+            if (!hasProp.call(colAttrs, i)) continue;
+            attr = colAttrs[i];
+            if (colValues[i] != null) {
+              filters[attr] = colValues[i];
+            }
+          }
+          for (i in rowAttrs) {
+            if (!hasProp.call(rowAttrs, i)) continue;
+            attr = rowAttrs[i];
+            if (rowValues[i] != null) {
+              filters[attr] = rowValues[i];
+            }
+          }
+          return function(e) {
+            return opts.table.clickCallback(e, value, filters, pivotData);
+          };
+        };
+      }
       result = document.createElement("table");
       result.className = "pvtTable";
       spanSize = function(arr, i, j) {
@@ -776,6 +979,7 @@
         }
         return len;
       };
+      thead = document.createElement("thead");
       for (j in colAttrs) {
         if (!hasProp.call(colAttrs, j)) continue;
         c = colAttrs[j];
@@ -788,7 +992,7 @@
         }
         th = document.createElement("th");
         th.className = "pvtAxisLabel";
-        th.innerHTML = c;
+        th.textContent = c;
         tr.appendChild(th);
         for (i in colKeys) {
           if (!hasProp.call(colKeys, i)) continue;
@@ -797,7 +1001,7 @@
           if (x !== -1) {
             th = document.createElement("th");
             th.className = "pvtColLabel";
-            th.innerHTML = colKey[j];
+            th.textContent = colKey[j];
             th.setAttribute("colspan", x);
             if (parseInt(j) === colAttrs.length - 1 && rowAttrs.length !== 0) {
               th.setAttribute("rowspan", 2);
@@ -805,14 +1009,14 @@
             tr.appendChild(th);
           }
         }
-        if (parseInt(j) === 0) {
+        if (parseInt(j) === 0 && opts.table.rowTotals) {
           th = document.createElement("th");
-          th.className = "pvtTotalLabel";
+          th.className = "pvtTotalLabel pvtRowTotalLabel";
           th.innerHTML = opts.localeStrings.totals;
           th.setAttribute("rowspan", colAttrs.length + (rowAttrs.length === 0 ? 0 : 1));
           tr.appendChild(th);
         }
-        result.appendChild(tr);
+        thead.appendChild(tr);
       }
       if (rowAttrs.length !== 0) {
         tr = document.createElement("tr");
@@ -821,17 +1025,19 @@
           r = rowAttrs[i];
           th = document.createElement("th");
           th.className = "pvtAxisLabel";
-          th.innerHTML = r;
+          th.textContent = r;
           tr.appendChild(th);
         }
         th = document.createElement("th");
         if (colAttrs.length === 0) {
-          th.className = "pvtTotalLabel";
+          th.className = "pvtTotalLabel pvtRowTotalLabel";
           th.innerHTML = opts.localeStrings.totals;
         }
         tr.appendChild(th);
-        result.appendChild(tr);
+        thead.appendChild(tr);
       }
+      result.appendChild(thead);
+      tbody = document.createElement("tbody");
       for (i in rowKeys) {
         if (!hasProp.call(rowKeys, i)) continue;
         rowKey = rowKeys[i];
@@ -843,7 +1049,7 @@
           if (x !== -1) {
             th = document.createElement("th");
             th.className = "pvtRowLabel";
-            th.innerHTML = txt;
+            th.textContent = txt;
             th.setAttribute("rowspan", x);
             if (parseInt(j) === rowAttrs.length - 1 && colAttrs.length !== 0) {
               th.setAttribute("colspan", 2);
@@ -858,46 +1064,67 @@
           val = aggregator.value();
           td = document.createElement("td");
           td.className = "pvtVal row" + i + " col" + j;
-          td.innerHTML = aggregator.format(val);
+          td.textContent = aggregator.format(val);
+          td.setAttribute("data-value", val);
+          if (getClickHandler != null) {
+            td.onclick = getClickHandler(val, rowKey, colKey);
+          }
+          tr.appendChild(td);
+        }
+        if (opts.table.rowTotals || colAttrs.length === 0) {
+          totalAggregator = pivotData.getAggregator(rowKey, []);
+          val = totalAggregator.value();
+          td = document.createElement("td");
+          td.className = "pvtTotal rowTotal";
+          td.textContent = totalAggregator.format(val);
           td.setAttribute("data-value", val);
+          if (getClickHandler != null) {
+            td.onclick = getClickHandler(val, rowKey, []);
+          }
+          td.setAttribute("data-for", "row" + i);
           tr.appendChild(td);
         }
-        totalAggregator = pivotData.getAggregator(rowKey, []);
-        val = totalAggregator.value();
-        td = document.createElement("td");
-        td.className = "pvtTotal rowTotal";
-        td.innerHTML = totalAggregator.format(val);
-        td.setAttribute("data-value", val);
-        td.setAttribute("data-for", "row" + i);
-        tr.appendChild(td);
-        result.appendChild(tr);
+        tbody.appendChild(tr);
       }
-      tr = document.createElement("tr");
-      th = document.createElement("th");
-      th.className = "pvtTotalLabel";
-      th.innerHTML = opts.localeStrings.totals;
-      th.setAttribute("colspan", rowAttrs.length + (colAttrs.length === 0 ? 0 : 1));
-      tr.appendChild(th);
-      for (j in colKeys) {
-        if (!hasProp.call(colKeys, j)) continue;
-        colKey = colKeys[j];
-        totalAggregator = pivotData.getAggregator([], colKey);
-        val = totalAggregator.value();
-        td = document.createElement("td");
-        td.className = "pvtTotal colTotal";
-        td.innerHTML = totalAggregator.format(val);
-        td.setAttribute("data-value", val);
-        td.setAttribute("data-for", "col" + j);
-        tr.appendChild(td);
+      if (opts.table.colTotals || rowAttrs.length === 0) {
+        tr = document.createElement("tr");
+        if (opts.table.colTotals || rowAttrs.length === 0) {
+          th = document.createElement("th");
+          th.className = "pvtTotalLabel pvtColTotalLabel";
+          th.innerHTML = opts.localeStrings.totals;
+          th.setAttribute("colspan", rowAttrs.length + (colAttrs.length === 0 ? 0 : 1));
+          tr.appendChild(th);
+        }
+        for (j in colKeys) {
+          if (!hasProp.call(colKeys, j)) continue;
+          colKey = colKeys[j];
+          totalAggregator = pivotData.getAggregator([], colKey);
+          val = totalAggregator.value();
+          td = document.createElement("td");
+          td.className = "pvtTotal colTotal";
+          td.textContent = totalAggregator.format(val);
+          td.setAttribute("data-value", val);
+          if (getClickHandler != null) {
+            td.onclick = getClickHandler(val, [], colKey);
+          }
+          td.setAttribute("data-for", "col" + j);
+          tr.appendChild(td);
+        }
+        if (opts.table.rowTotals || colAttrs.length === 0) {
+          totalAggregator = pivotData.getAggregator([], []);
+          val = totalAggregator.value();
+          td = document.createElement("td");
+          td.className = "pvtGrandTotal";
+          td.textContent = totalAggregator.format(val);
+          td.setAttribute("data-value", val);
+          if (getClickHandler != null) {
+            td.onclick = getClickHandler(val, [], []);
+          }
+          tr.appendChild(td);
+        }
+        tbody.appendChild(tr);
       }
-      totalAggregator = pivotData.getAggregator([], []);
-      val = totalAggregator.value();
-      td = document.createElement("td");
-      td.className = "pvtGrandTotal";
-      td.innerHTML = totalAggregator.format(val);
-      td.setAttribute("data-value", val);
-      tr.appendChild(td);
-      result.appendChild(tr);
+      result.appendChild(tbody);
       result.setAttribute("data-numrows", rowKeys.length);
       result.setAttribute("data-numcols", colKeys.length);
       return result;
@@ -906,38 +1133,52 @@
     /*
     Pivot Table core: create PivotData object and call Renderer on it
      */
-    $.fn.pivot = function(input, opts) {
-      var defaults, e, pivotData, result, x;
+    $.fn.pivot = function(input, inputOpts, locale) {
+      var defaults, e, localeDefaults, localeStrings, opts, pivotData, result, x;
+      if (locale == null) {
+        locale = "en";
+      }
+      if (locales[locale] == null) {
+        locale = "en";
+      }
       defaults = {
         cols: [],
         rows: [],
         vals: [],
+        rowOrder: "key_a_to_z",
+        colOrder: "key_a_to_z",
+        dataClass: PivotData,
         filter: function() {
           return true;
         },
         aggregator: aggregatorTemplates.count()(),
         aggregatorName: "Count",
-        sorters: function() {},
+        sorters: {},
         derivedAttributes: {},
-        renderer: pivotTableRenderer,
-        rendererOptions: null,
-        localeStrings: locales.en.localeStrings
+        renderer: pivotTableRenderer
+      };
+      localeStrings = $.extend(true, {}, locales.en.localeStrings, locales[locale].localeStrings);
+      localeDefaults = {
+        rendererOptions: {
+          localeStrings: localeStrings
+        },
+        localeStrings: localeStrings
       };
-      opts = $.extend(defaults, opts);
+      opts = $.extend(true, {}, localeDefaults, $.extend({}, defaults, inputOpts));
       result = null;
       try {
-        pivotData = new PivotData(input, opts);
+        pivotData = new opts.dataClass(input, opts);
         try {
           result = opts.renderer(pivotData, opts.rendererOptions);
-        } catch (_error) {
-          e = _error;
+        } catch (error) {
+          e = error;
           if (typeof console !== "undefined" && console !== null) {
             console.error(e.stack);
           }
           result = $("<span>").html(opts.localeStrings.renderError);
         }
-      } catch (_error) {
-        e = _error;
+      } catch (error) {
+        e = error;
         if (typeof console !== "undefined" && console !== null) {
           console.error(e.stack);
         }
@@ -954,103 +1195,122 @@
     Pivot Table UI: calls Pivot Table core above with options set by user
      */
     $.fn.pivotUI = function(input, inputOpts, overwrite, locale) {
-      var a, aggregator, attrLength, axisValues, c, colList, defaults, e, existingOpts, fn, i, initialRender, k, l, len1, len2, len3, len4, n, o, opts, pivotTable, q, ref, ref1, ref2, ref3, ref4, refresh, refreshDelayed, renderer, rendererControl, shownAttributes, tblCols, tr1, tr2, uiTable, unusedAttrsVerticalAutoCutoff, unusedAttrsVerticalAutoOverride, x;
+      var a, aggregator, attr, attrLength, attrValues, c, colOrderArrow, defaults, e, existingOpts, fn1, i, initialRender, l, len1, len2, len3, localeDefaults, localeStrings, materializedInput, n, o, opts, ordering, pivotTable, recordsProcessed, ref, ref1, ref2, ref3, refresh, refreshDelayed, renderer, rendererControl, rowOrderArrow, shownAttributes, shownInAggregators, shownInDragDrop, tr1, tr2, uiTable, unused, unusedAttrsVerticalAutoCutoff, unusedAttrsVerticalAutoOverride, x;
       if (overwrite == null) {
         overwrite = false;
       }
       if (locale == null) {
         locale = "en";
       }
+      if (locales[locale] == null) {
+        locale = "en";
+      }
       defaults = {
         derivedAttributes: {},
         aggregators: locales[locale].aggregators,
         renderers: locales[locale].renderers,
         hiddenAttributes: [],
-        menuLimit: 200,
+        hiddenFromAggregators: [],
+        hiddenFromDragDrop: [],
+        menuLimit: 500,
         cols: [],
         rows: [],
         vals: [],
+        rowOrder: "key_a_to_z",
+        colOrder: "key_a_to_z",
+        dataClass: PivotData,
         exclusions: {},
+        inclusions: {},
         unusedAttrsVertical: 85,
         autoSortUnusedAttrs: false,
-        rendererOptions: {
-          localeStrings: locales[locale].localeStrings
-        },
         onRefresh: null,
+        showUI: true,
         filter: function() {
           return true;
         },
-        sorters: function() {},
-        localeStrings: locales[locale].localeStrings
+        sorters: {}
+      };
+      localeStrings = $.extend(true, {}, locales.en.localeStrings, locales[locale].localeStrings);
+      localeDefaults = {
+        rendererOptions: {
+          localeStrings: localeStrings
+        },
+        localeStrings: localeStrings
       };
       existingOpts = this.data("pivotUIOptions");
       if ((existingOpts == null) || overwrite) {
-        opts = $.extend(defaults, inputOpts);
+        opts = $.extend(true, {}, localeDefaults, $.extend({}, defaults, inputOpts));
       } else {
         opts = existingOpts;
       }
       try {
-        input = PivotData.convertToArray(input);
-        tblCols = (function() {
-          var ref, results;
-          ref = input[0];
-          results = [];
-          for (k in ref) {
-            if (!hasProp.call(ref, k)) continue;
-            results.push(k);
-          }
-          return results;
-        })();
-        ref = opts.derivedAttributes;
-        for (c in ref) {
-          if (!hasProp.call(ref, c)) continue;
-          if ((indexOf.call(tblCols, c) < 0)) {
-            tblCols.push(c);
-          }
-        }
-        axisValues = {};
-        for (l = 0, len1 = tblCols.length; l < len1; l++) {
-          x = tblCols[l];
-          axisValues[x] = {};
-        }
+        attrValues = {};
+        materializedInput = [];
+        recordsProcessed = 0;
         PivotData.forEachRecord(input, opts.derivedAttributes, function(record) {
-          var base, results, v;
-          results = [];
-          for (k in record) {
-            if (!hasProp.call(record, k)) continue;
-            v = record[k];
-            if (!(opts.filter(record))) {
-              continue;
-            }
-            if (v == null) {
-              v = "null";
+          var attr, base, ref, value;
+          if (!opts.filter(record)) {
+            return;
+          }
+          materializedInput.push(record);
+          for (attr in record) {
+            if (!hasProp.call(record, attr)) continue;
+            if (attrValues[attr] == null) {
+              attrValues[attr] = {};
+              if (recordsProcessed > 0) {
+                attrValues[attr]["null"] = recordsProcessed;
+              }
             }
-            if ((base = axisValues[k])[v] == null) {
-              base[v] = 0;
+          }
+          for (attr in attrValues) {
+            value = (ref = record[attr]) != null ? ref : "null";
+            if ((base = attrValues[attr])[value] == null) {
+              base[value] = 0;
             }
-            results.push(axisValues[k][v]++);
+            attrValues[attr][value]++;
           }
-          return results;
+          return recordsProcessed++;
         });
         uiTable = $("<table>", {
           "class": "pvtUi"
         }).attr("cellpadding", 5);
-        rendererControl = $("<td>");
+        rendererControl = $("<td>").addClass("pvtUiCell");
         renderer = $("<select>").addClass('pvtRenderer').appendTo(rendererControl).bind("change", function() {
           return refresh();
         });
-        ref1 = opts.renderers;
-        for (x in ref1) {
-          if (!hasProp.call(ref1, x)) continue;
+        ref = opts.renderers;
+        for (x in ref) {
+          if (!hasProp.call(ref, x)) continue;
           $("<option>").val(x).html(x).appendTo(renderer);
         }
-        colList = $("<td>").addClass('pvtAxisContainer pvtUnused');
+        unused = $("<td>").addClass('pvtAxisContainer pvtUnused pvtUiCell');
         shownAttributes = (function() {
-          var len2, n, results;
+          var results;
+          results = [];
+          for (a in attrValues) {
+            if (indexOf.call(opts.hiddenAttributes, a) < 0) {
+              results.push(a);
+            }
+          }
+          return results;
+        })();
+        shownInAggregators = (function() {
+          var l, len1, results;
+          results = [];
+          for (l = 0, len1 = shownAttributes.length; l < len1; l++) {
+            c = shownAttributes[l];
+            if (indexOf.call(opts.hiddenFromAggregators, c) < 0) {
+              results.push(c);
+            }
+          }
+          return results;
+        })();
+        shownInDragDrop = (function() {
+          var l, len1, results;
           results = [];
-          for (n = 0, len2 = tblCols.length; n < len2; n++) {
-            c = tblCols[n];
-            if (indexOf.call(opts.hiddenAttributes, c) < 0) {
+          for (l = 0, len1 = shownAttributes.length; l < len1; l++) {
+            c = shownAttributes[l];
+            if (indexOf.call(opts.hiddenFromDragDrop, c) < 0) {
               results.push(c);
             }
           }
@@ -1064,144 +1324,214 @@
         }
         if (!isNaN(unusedAttrsVerticalAutoCutoff)) {
           attrLength = 0;
-          for (n = 0, len2 = shownAttributes.length; n < len2; n++) {
-            a = shownAttributes[n];
+          for (l = 0, len1 = shownInDragDrop.length; l < len1; l++) {
+            a = shownInDragDrop[l];
             attrLength += a.length;
           }
           unusedAttrsVerticalAutoOverride = attrLength > unusedAttrsVerticalAutoCutoff;
         }
         if (opts.unusedAttrsVertical === true || unusedAttrsVerticalAutoOverride) {
-          colList.addClass('pvtVertList');
+          unused.addClass('pvtVertList');
         } else {
-          colList.addClass('pvtHorizList');
+          unused.addClass('pvtHorizList');
         }
-        fn = function(c) {
-          var attrElem, btns, checkContainer, filterItem, filterItemExcluded, hasExcludedItem, keys, len3, o, ref2, showFilterList, triangleLink, updateFilter, v, valueList;
-          keys = (function() {
+        fn1 = function(attr) {
+          var attrElem, checkContainer, closeFilterBox, controls, filterItem, filterItemExcluded, finalButtons, hasExcludedItem, len2, n, placeholder, ref1, sorter, triangleLink, v, value, valueCount, valueList, values;
+          values = (function() {
             var results;
             results = [];
-            for (k in axisValues[c]) {
-              results.push(k);
+            for (v in attrValues[attr]) {
+              results.push(v);
             }
             return results;
           })();
           hasExcludedItem = false;
           valueList = $("<div>").addClass('pvtFilterBox').hide();
-          valueList.append($("<h4>").text(c + " (" + keys.length + ")"));
-          if (keys.length > opts.menuLimit) {
+          valueList.append($("<h4>").append($("<span>").text(attr), $("<span>").addClass("count").text("(" + values.length + ")")));
+          if (values.length > opts.menuLimit) {
             valueList.append($("<p>").html(opts.localeStrings.tooMany));
           } else {
-            btns = $("<p>").appendTo(valueList);
-            btns.append($("<button>", {
-              type: "button"
-            }).html(opts.localeStrings.selectAll).bind("click", function() {
-              return valueList.find("input:visible").prop("checked", true);
-            }));
-            btns.append($("<button>", {
-              type: "button"
-            }).html(opts.localeStrings.selectNone).bind("click", function() {
-              return valueList.find("input:visible").prop("checked", false);
-            }));
-            btns.append($("<br>"));
-            btns.append($("<input>", {
-              type: "text",
-              placeholder: opts.localeStrings.filterResults,
-              "class": "pvtSearch"
-            }).bind("keyup", function() {
-              var filter;
-              filter = $(this).val().toLowerCase();
-              return valueList.find('.pvtCheckContainer p').each(function() {
-                var testString;
-                testString = $(this).text().toLowerCase().indexOf(filter);
-                if (testString !== -1) {
-                  return $(this).show();
-                } else {
-                  return $(this).hide();
-                }
+            if (values.length > 5) {
+              controls = $("<p>").appendTo(valueList);
+              sorter = getSort(opts.sorters, attr);
+              placeholder = opts.localeStrings.filterResults;
+              $("<input>", {
+                type: "text"
+              }).appendTo(controls).attr({
+                placeholder: placeholder,
+                "class": "pvtSearch"
+              }).bind("keyup", function() {
+                var accept, accept_gen, filter;
+                filter = $(this).val().toLowerCase().trim();
+                accept_gen = function(prefix, accepted) {
+                  return function(v) {
+                    var real_filter, ref1;
+                    real_filter = filter.substring(prefix.length).trim();
+                    if (real_filter.length === 0) {
+                      return true;
+                    }
+                    return ref1 = Math.sign(sorter(v.toLowerCase(), real_filter)), indexOf.call(accepted, ref1) >= 0;
+                  };
+                };
+                accept = filter.indexOf(">=") === 0 ? accept_gen(">=", [1, 0]) : filter.indexOf("<=") === 0 ? accept_gen("<=", [-1, 0]) : filter.indexOf(">") === 0 ? accept_gen(">", [1]) : filter.indexOf("<") === 0 ? accept_gen("<", [-1]) : filter.indexOf("~") === 0 ? function(v) {
+                  if (filter.substring(1).trim().length === 0) {
+                    return true;
+                  }
+                  return v.toLowerCase().match(filter.substring(1));
+                } : function(v) {
+                  return v.toLowerCase().indexOf(filter) !== -1;
+                };
+                return valueList.find('.pvtCheckContainer p label span.value').each(function() {
+                  if (accept($(this).text())) {
+                    return $(this).parent().parent().show();
+                  } else {
+                    return $(this).parent().parent().hide();
+                  }
+                });
               });
-            }));
+              controls.append($("<br>"));
+              $("<button>", {
+                type: "button"
+              }).appendTo(controls).html(opts.localeStrings.selectAll).bind("click", function() {
+                valueList.find("input:visible:not(:checked)").prop("checked", true).toggleClass("changed");
+                return false;
+              });
+              $("<button>", {
+                type: "button"
+              }).appendTo(controls).html(opts.localeStrings.selectNone).bind("click", function() {
+                valueList.find("input:visible:checked").prop("checked", false).toggleClass("changed");
+                return false;
+              });
+            }
             checkContainer = $("<div>").addClass("pvtCheckContainer").appendTo(valueList);
-            ref2 = keys.sort(getSort(opts.sorters, c));
-            for (o = 0, len3 = ref2.length; o < len3; o++) {
-              k = ref2[o];
-              v = axisValues[c][k];
+            ref1 = values.sort(getSort(opts.sorters, attr));
+            for (n = 0, len2 = ref1.length; n < len2; n++) {
+              value = ref1[n];
+              valueCount = attrValues[attr][value];
               filterItem = $("<label>");
-              filterItemExcluded = opts.exclusions[c] ? (indexOf.call(opts.exclusions[c], k) >= 0) : false;
+              filterItemExcluded = false;
+              if (opts.inclusions[attr]) {
+                filterItemExcluded = (indexOf.call(opts.inclusions[attr], value) < 0);
+              } else if (opts.exclusions[attr]) {
+                filterItemExcluded = (indexOf.call(opts.exclusions[attr], value) >= 0);
+              }
               hasExcludedItem || (hasExcludedItem = filterItemExcluded);
-              $("<input>").attr("type", "checkbox").addClass('pvtFilter').attr("checked", !filterItemExcluded).data("filter", [c, k]).appendTo(filterItem);
-              filterItem.append($("<span>").html(k));
-              filterItem.append($("<span>").text(" (" + v + ")"));
+              $("<input>").attr("type", "checkbox").addClass('pvtFilter').attr("checked", !filterItemExcluded).data("filter", [attr, value]).appendTo(filterItem).bind("change", function() {
+                return $(this).toggleClass("changed");
+              });
+              filterItem.append($("<span>").addClass("value").text(value));
+              filterItem.append($("<span>").addClass("count").text("(" + valueCount + ")"));
               checkContainer.append($("<p>").append(filterItem));
             }
           }
-          updateFilter = function() {
-            var unselectedCount;
-            unselectedCount = valueList.find("[type='checkbox']").length - valueList.find("[type='checkbox']:checked").length;
-            if (unselectedCount > 0) {
+          closeFilterBox = function() {
+            if (valueList.find("[type='checkbox']").length > valueList.find("[type='checkbox']:checked").length) {
               attrElem.addClass("pvtFilteredAttribute");
             } else {
               attrElem.removeClass("pvtFilteredAttribute");
             }
-            if (keys.length > opts.menuLimit) {
-              return valueList.toggle();
-            } else {
-              return valueList.toggle(0, refresh);
-            }
-          };
-          $("<p>").appendTo(valueList).append($("<button>", {
-            type: "button"
-          }).text("OK").bind("click", updateFilter));
-          showFilterList = function(e) {
-            valueList.css({
-              left: e.pageX,
-              top: e.pageY
-            }).toggle();
             valueList.find('.pvtSearch').val('');
-            return valueList.find('.pvtCheckContainer p').show();
+            valueList.find('.pvtCheckContainer p').show();
+            return valueList.hide();
           };
-          triangleLink = $("<span>").addClass('pvtTriangle').html(" &#x25BE;").bind("click", showFilterList);
-          attrElem = $("<li>").addClass("axis_" + i).append($("<span>").addClass('pvtAttr').text(c).data("attrName", c).append(triangleLink));
+          finalButtons = $("<p>").appendTo(valueList);
+          if (values.length <= opts.menuLimit) {
+            $("<button>", {
+              type: "button"
+            }).text(opts.localeStrings.apply).appendTo(finalButtons).bind("click", function() {
+              if (valueList.find(".changed").removeClass("changed").length) {
+                refresh();
+              }
+              return closeFilterBox();
+            });
+          }
+          $("<button>", {
+            type: "button"
+          }).text(opts.localeStrings.cancel).appendTo(finalButtons).bind("click", function() {
+            valueList.find(".changed:checked").removeClass("changed").prop("checked", false);
+            valueList.find(".changed:not(:checked)").removeClass("changed").prop("checked", true);
+            return closeFilterBox();
+          });
+          triangleLink = $("<span>").addClass('pvtTriangle').html(" &#x25BE;").bind("click", function(e) {
+            var left, ref2, top;
+            ref2 = $(e.currentTarget).position(), left = ref2.left, top = ref2.top;
+            return valueList.css({
+              left: left + 10,
+              top: top + 10
+            }).show();
+          });
+          attrElem = $("<li>").addClass("axis_" + i).append($("<span>").addClass('pvtAttr').text(attr).data("attrName", attr).append(triangleLink));
           if (hasExcludedItem) {
             attrElem.addClass('pvtFilteredAttribute');
           }
-          colList.append(attrElem).append(valueList);
-          return attrElem.bind("dblclick", showFilterList);
+          return unused.append(attrElem).append(valueList);
         };
-        for (i in shownAttributes) {
-          if (!hasProp.call(shownAttributes, i)) continue;
-          c = shownAttributes[i];
-          fn(c);
+        for (i in shownInDragDrop) {
+          if (!hasProp.call(shownInDragDrop, i)) continue;
+          attr = shownInDragDrop[i];
+          fn1(attr);
         }
         tr1 = $("<tr>").appendTo(uiTable);
         aggregator = $("<select>").addClass('pvtAggregator').bind("change", function() {
           return refresh();
         });
-        ref2 = opts.aggregators;
-        for (x in ref2) {
-          if (!hasProp.call(ref2, x)) continue;
+        ref1 = opts.aggregators;
+        for (x in ref1) {
+          if (!hasProp.call(ref1, x)) continue;
           aggregator.append($("<option>").val(x).html(x));
         }
-        $("<td>").addClass('pvtVals').appendTo(tr1).append(aggregator).append($("<br>"));
-        $("<td>").addClass('pvtAxisContainer pvtHorizList pvtCols').appendTo(tr1);
+        ordering = {
+          key_a_to_z: {
+            rowSymbol: "&varr;",
+            colSymbol: "&harr;",
+            next: "value_a_to_z"
+          },
+          value_a_to_z: {
+            rowSymbol: "&darr;",
+            colSymbol: "&rarr;",
+            next: "value_z_to_a"
+          },
+          value_z_to_a: {
+            rowSymbol: "&uarr;",
+            colSymbol: "&larr;",
+            next: "key_a_to_z"
+          }
+        };
+        rowOrderArrow = $("<a>", {
+          role: "button"
+        }).addClass("pvtRowOrder").data("order", opts.rowOrder).html(ordering[opts.rowOrder].rowSymbol).bind("click", function() {
+          $(this).data("order", ordering[$(this).data("order")].next);
+          $(this).html(ordering[$(this).data("order")].rowSymbol);
+          return refresh();
+        });
+        colOrderArrow = $("<a>", {
+          role: "button"
+        }).addClass("pvtColOrder").data("order", opts.colOrder).html(ordering[opts.colOrder].colSymbol).bind("click", function() {
+          $(this).data("order", ordering[$(this).data("order")].next);
+          $(this).html(ordering[$(this).data("order")].colSymbol);
+          return refresh();
+        });
+        $("<td>").addClass('pvtVals pvtUiCell').appendTo(tr1).append(aggregator).append(rowOrderArrow).append(colOrderArrow).append($("<br>"));
+        $("<td>").addClass('pvtAxisContainer pvtHorizList pvtCols pvtUiCell').appendTo(tr1);
         tr2 = $("<tr>").appendTo(uiTable);
-        tr2.append($("<td>").addClass('pvtAxisContainer pvtRows').attr("valign", "top"));
+        tr2.append($("<td>").addClass('pvtAxisContainer pvtRows pvtUiCell').attr("valign", "top"));
         pivotTable = $("<td>").attr("valign", "top").addClass('pvtRendererArea').appendTo(tr2);
         if (opts.unusedAttrsVertical === true || unusedAttrsVerticalAutoOverride) {
           uiTable.find('tr:nth-child(1)').prepend(rendererControl);
-          uiTable.find('tr:nth-child(2)').prepend(colList);
+          uiTable.find('tr:nth-child(2)').prepend(unused);
         } else {
-          uiTable.prepend($("<tr>").append(rendererControl).append(colList));
+          uiTable.prepend($("<tr>").append(rendererControl).append(unused));
         }
         this.html(uiTable);
-        ref3 = opts.cols;
+        ref2 = opts.cols;
+        for (n = 0, len2 = ref2.length; n < len2; n++) {
+          x = ref2[n];
+          this.find(".pvtCols").append(this.find(".axis_" + ($.inArray(x, shownInDragDrop))));
+        }
+        ref3 = opts.rows;
         for (o = 0, len3 = ref3.length; o < len3; o++) {
           x = ref3[o];
-          this.find(".pvtCols").append(this.find(".axis_" + ($.inArray(x, shownAttributes))));
-        }
-        ref4 = opts.rows;
-        for (q = 0, len4 = ref4.length; q < len4; q++) {
-          x = ref4[q];
-          this.find(".pvtRows").append(this.find(".axis_" + ($.inArray(x, shownAttributes))));
+          this.find(".pvtRows").append(this.find(".axis_" + ($.inArray(x, shownInDragDrop))));
         }
         if (opts.aggregatorName != null) {
           this.find(".pvtAggregator").val(opts.aggregatorName);
@@ -1209,19 +1539,23 @@
         if (opts.rendererName != null) {
           this.find(".pvtRenderer").val(opts.rendererName);
         }
+        if (!opts.showUI) {
+          this.find(".pvtUiCell").hide();
+        }
         initialRender = true;
         refreshDelayed = (function(_this) {
           return function() {
-            var attr, exclusions, inclusions, len5, newDropdown, numInputsToProcess, pivotUIOptions, pvtVals, ref5, ref6, s, subopts, t, unusedAttrsContainer, vals;
+            var exclusions, inclusions, len4, newDropdown, numInputsToProcess, pivotUIOptions, pvtVals, ref4, ref5, subopts, t, u, unusedAttrsContainer, vals;
             subopts = {
               derivedAttributes: opts.derivedAttributes,
               localeStrings: opts.localeStrings,
               rendererOptions: opts.rendererOptions,
               sorters: opts.sorters,
               cols: [],
-              rows: []
+              rows: [],
+              dataClass: opts.dataClass
             };
-            numInputsToProcess = (ref5 = opts.aggregators[aggregator.val()]([])().numInputs) != null ? ref5 : 0;
+            numInputsToProcess = (ref4 = opts.aggregators[aggregator.val()]([])().numInputs) != null ? ref4 : 0;
             vals = [];
             _this.find(".pvtRows li span.pvtAttr").each(function() {
               return subopts.rows.push($(this).data("attrName"));
@@ -1241,12 +1575,12 @@
             });
             if (numInputsToProcess !== 0) {
               pvtVals = _this.find(".pvtVals");
-              for (x = s = 0, ref6 = numInputsToProcess; 0 <= ref6 ? s < ref6 : s > ref6; x = 0 <= ref6 ? ++s : --s) {
+              for (x = t = 0, ref5 = numInputsToProcess; 0 <= ref5 ? t < ref5 : t > ref5; x = 0 <= ref5 ? ++t : --t) {
                 newDropdown = $("<select>").addClass('pvtAttrDropdown').append($("<option>")).bind("change", function() {
                   return refresh();
                 });
-                for (t = 0, len5 = shownAttributes.length; t < len5; t++) {
-                  attr = shownAttributes[t];
+                for (u = 0, len4 = shownInAggregators.length; u < len4; u++) {
+                  attr = shownInAggregators[u];
                   newDropdown.append($("<option>").val(attr).text(attr));
                 }
                 pvtVals.append(newDropdown);
@@ -1265,6 +1599,8 @@
             subopts.vals = vals;
             subopts.aggregator = opts.aggregators[aggregator.val()](vals);
             subopts.renderer = opts.renderers[renderer.val()];
+            subopts.rowOrder = rowOrderArrow.data("order");
+            subopts.colOrder = colOrderArrow.data("order");
             exclusions = {};
             _this.find('input.pvtFilter').not(':checked').each(function() {
               var filter;
@@ -1288,24 +1624,27 @@
               }
             });
             subopts.filter = function(record) {
-              var excludedItems, ref7;
+              var excludedItems, k, ref6, ref7;
               if (!opts.filter(record)) {
                 return false;
               }
               for (k in exclusions) {
                 excludedItems = exclusions[k];
-                if (ref7 = "" + record[k], indexOf.call(excludedItems, ref7) >= 0) {
+                if (ref6 = "" + ((ref7 = record[k]) != null ? ref7 : 'null'), indexOf.call(excludedItems, ref6) >= 0) {
                   return false;
                 }
               }
               return true;
             };
-            pivotTable.pivot(input, subopts);
-            pivotUIOptions = $.extend(opts, {
+            pivotTable.pivot(materializedInput, subopts);
+            pivotUIOptions = $.extend({}, opts, {
               cols: subopts.cols,
               rows: subopts.rows,
+              colOrder: subopts.colOrder,
+              rowOrder: subopts.rowOrder,
               vals: vals,
               exclusions: exclusions,
+              inclusions: inclusions,
               inclusionsInfo: inclusions,
               aggregatorName: aggregator.val(),
               rendererName: renderer.val()
@@ -1340,8 +1679,8 @@
           items: 'li',
           placeholder: 'pvtPlaceholder'
         });
-      } catch (_error) {
-        e = _error;
+      } catch (error) {
+        e = error;
         if (typeof console !== "undefined" && console !== null) {
           console.error(e.stack);
         }
@@ -1353,44 +1692,29 @@
     /*
     Heatmap post-processing
      */
-    $.fn.heatmap = function(scope) {
-      var colorGen, heatmapper, i, j, l, n, numCols, numRows, ref, ref1;
+    $.fn.heatmap = function(scope, opts) {
+      var colorScaleGenerator, heatmapper, i, j, l, n, numCols, numRows, ref, ref1, ref2;
       if (scope == null) {
         scope = "heatmap";
       }
       numRows = this.data("numrows");
       numCols = this.data("numcols");
-      colorGen = function(color, min, max) {
-        var hexGen;
-        hexGen = (function() {
-          switch (color) {
-            case "red":
-              return function(hex) {
-                return "ff" + hex + hex;
-              };
-            case "green":
-              return function(hex) {
-                return hex + "ff" + hex;
-              };
-            case "blue":
-              return function(hex) {
-                return "" + hex + hex + "ff";
-              };
-          }
-        })();
-        return function(x) {
-          var hex, intensity;
-          intensity = 255 - Math.round(255 * (x - min) / (max - min));
-          hex = intensity.toString(16).split(".")[0];
-          if (hex.length === 1) {
-            hex = 0 + hex;
-          }
-          return hexGen(hex);
+      colorScaleGenerator = opts != null ? (ref = opts.heatmap) != null ? ref.colorScaleGenerator : void 0 : void 0;
+      if (colorScaleGenerator == null) {
+        colorScaleGenerator = function(values) {
+          var max, min;
+          min = Math.min.apply(Math, values);
+          max = Math.max.apply(Math, values);
+          return function(x) {
+            var nonRed;
+            nonRed = 255 - Math.round(255 * (x - min) / (max - min));
+            return "rgb(255," + nonRed + "," + nonRed + ")";
+          };
         };
-      };
+      }
       heatmapper = (function(_this) {
-        return function(scope, color) {
-          var colorFor, forEachCell, values;
+        return function(scope) {
+          var colorScale, forEachCell, values;
           forEachCell = function(f) {
             return _this.find(scope).each(function() {
               var x;
@@ -1404,41 +1728,41 @@
           forEachCell(function(x) {
             return values.push(x);
           });
-          colorFor = colorGen(color, Math.min.apply(Math, values), Math.max.apply(Math, values));
+          colorScale = colorScaleGenerator(values);
           return forEachCell(function(x, elem) {
-            return elem.css("background-color", "#" + colorFor(x));
+            return elem.css("background-color", colorScale(x));
           });
         };
       })(this);
       switch (scope) {
         case "heatmap":
-          heatmapper(".pvtVal", "red");
+          heatmapper(".pvtVal");
           break;
         case "rowheatmap":
-          for (i = l = 0, ref = numRows; 0 <= ref ? l < ref : l > ref; i = 0 <= ref ? ++l : --l) {
-            heatmapper(".pvtVal.row" + i, "red");
+          for (i = l = 0, ref1 = numRows; 0 <= ref1 ? l < ref1 : l > ref1; i = 0 <= ref1 ? ++l : --l) {
+            heatmapper(".pvtVal.row" + i);
           }
           break;
         case "colheatmap":
-          for (j = n = 0, ref1 = numCols; 0 <= ref1 ? n < ref1 : n > ref1; j = 0 <= ref1 ? ++n : --n) {
-            heatmapper(".pvtVal.col" + j, "red");
+          for (j = n = 0, ref2 = numCols; 0 <= ref2 ? n < ref2 : n > ref2; j = 0 <= ref2 ? ++n : --n) {
+            heatmapper(".pvtVal.col" + j);
           }
       }
-      heatmapper(".pvtTotal.rowTotal", "red");
-      heatmapper(".pvtTotal.colTotal", "red");
+      heatmapper(".pvtTotal.rowTotal");
+      heatmapper(".pvtTotal.colTotal");
       return this;
     };
 
     /*
     Barchart post-processing
      */
-    return $.fn.barchart = function() {
+    return $.fn.barchart = function(opts) {
       var barcharter, i, l, numCols, numRows, ref;
       numRows = this.data("numrows");
       numCols = this.data("numcols");
       barcharter = (function(_this) {
         return function(scope) {
-          var forEachCell, max, scaler, values;
+          var forEachCell, max, min, range, scaler, values;
           forEachCell = function(f) {
             return _this.find(scope).each(function() {
               var x;
@@ -1453,23 +1777,41 @@
             return values.push(x);
           });
           max = Math.max.apply(Math, values);
+          if (max < 0) {
+            max = 0;
+          }
+          range = max;
+          min = Math.min.apply(Math, values);
+          if (min < 0) {
+            range = max - min;
+          }
           scaler = function(x) {
-            return 100 * x / (1.4 * max);
+            return 100 * x / (1.4 * range);
           };
           return forEachCell(function(x, elem) {
-            var text, wrapper;
+            var bBase, bgColor, text, wrapper;
             text = elem.text();
             wrapper = $("<div>").css({
               "position": "relative",
               "height": "55px"
             });
+            bgColor = "gray";
+            bBase = 0;
+            if (min < 0) {
+              bBase = scaler(-min);
+            }
+            if (x < 0) {
+              bBase += scaler(x);
+              bgColor = "darkred";
+              x = -x;
+            }
             wrapper.append($("<div>").css({
               "position": "absolute",
-              "bottom": 0,
+              "bottom": bBase + "%",
               "left": 0,
               "right": 0,
               "height": scaler(x) + "%",
-              "background-color": "gray"
+              "background-color": bgColor
             }));
             wrapper.append($("<div>").text(text).css({
               "position": "relative",
@@ -1494,4 +1836,4 @@
 
 }).call(this);
 
-//# sourceMappingURL=pivot.js.map
\ No newline at end of file
+//# sourceMappingURL=pivot.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.js.map.txt
index f7788171badd92693537b95c24979ac06a3999a3..a45720b3021e632a54ac74e784da962eb84241ec 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["pivot.coffee"],"names":[],"mappings":"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","file":"pivot.js","sourceRoot":"/source/","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        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        \"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, 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    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    sortAs = (order) -> \n        mapping = {}\n        for i, x of order\n            mapping[x] = i\n        (a, b) ->\n            if mapping[a]? and mapping[b]?\n                return mapping[a] - mapping[b]\n            else if mapping[a]?\n                return -1\n            else if mapping[b]?\n                return 1\n            else\n                return naturalSort(a,b)\n\n    getSort = (sorters, attr) ->\n        sort = sorters(attr)\n        if $.isFunction(sort)\n            return sort \n        else\n            return naturalSort\n\n    #expose these to the outside world\n    $.pivotUtilities = {aggregatorTemplates, aggregators, renderers, derivers, locales,\n        naturalSort, numberFormat, sortAs}\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            @sorters = opts.sorters\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).html()\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        arrSort: (attrs) => \n            sortersArr = (getSort(@sorters, a) for a in attrs)\n            (a,b) -> \n                for 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                @rowKeys.sort @arrSort(@rowAttrs)\n                @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    ###\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.innerHTML = 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.innerHTML = 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.innerHTML = 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.innerHTML = 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            vals: []\n            filter: -> true\n            aggregator: aggregatorTemplates.count()()\n            aggregatorName: \"Count\"\n            sorters: -> \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 = $(\"<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        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: 85\n            autoSortUnusedAttrs: false\n            rendererOptions: localeStrings: locales[locale].localeStrings\n            onRefresh: null\n            filter: -> true\n            sorters: -> \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 = $(\"<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            colList = $(\"<td>\").addClass('pvtAxisContainer pvtUnused')\n            shownAttributes = (c for c in tblCols when c 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                colList.addClass('pvtVertList')\n            else\n                colList.addClass('pvtHorizList')\n\n            for own i, c of shownAttributes\n                do (c) ->\n                    keys = (k for k of axisValues[c])\n                    hasExcludedItem = false\n                    valueList = $(\"<div>\").addClass('pvtFilterBox').hide()\n\n                    valueList.append $(\"<h4>\").text(\"#{c} (#{keys.length})\")\n                    if keys.length > opts.menuLimit\n                        valueList.append $(\"<p>\").html(opts.localeStrings.tooMany)\n                    else\n                        btns = $(\"<p>\").appendTo(valueList)\n                        btns.append $(\"<button>\", {type:\"button\"}).html(opts.localeStrings.selectAll).bind \"click\", ->\n                            valueList.find(\"input:visible\").prop \"checked\", true\n                        btns.append $(\"<button>\", {type:\"button\"}).html(opts.localeStrings.selectNone).bind \"click\", ->\n                            valueList.find(\"input:visible\").prop \"checked\", false\n                        btns.append $(\"<br>\")\n                        btns.append $(\"<input>\", {type: \"text\", placeholder: opts.localeStrings.filterResults, class: \"pvtSearch\"}).bind \"keyup\", ->\n                            filter = $(this).val().toLowerCase()\n                            valueList.find('.pvtCheckContainer p').each ->\n                                testString = $(this).text().toLowerCase().indexOf(filter)\n                                if testString isnt -1\n                                    $(this).show()\n                                else\n                                    $(this).hide()\n\n                        checkContainer = $(\"<div>\").addClass(\"pvtCheckContainer\").appendTo(valueList)\n\n                        for k in keys.sort(getSort(opts.sorters, c))\n                             v = axisValues[c][k]\n                             filterItem = $(\"<label>\")\n                             filterItemExcluded = if opts.exclusions[c] then (k in opts.exclusions[c]) else false\n                             hasExcludedItem ||= filterItemExcluded\n                             $(\"<input>\")\n                                .attr(\"type\", \"checkbox\").addClass('pvtFilter')\n                                .attr(\"checked\", !filterItemExcluded).data(\"filter\", [c,k])\n                                .appendTo filterItem\n                             filterItem.append $(\"<span>\").html k\n                             filterItem.append $(\"<span>\").text \" (\"+v+\")\"\n                             checkContainer.append $(\"<p>\").append(filterItem)\n\n                    updateFilter = ->\n                        unselectedCount = valueList.find(\"[type='checkbox']\").length -\n                                          valueList.find(\"[type='checkbox']:checked\").length\n                        if unselectedCount > 0\n                            attrElem.addClass \"pvtFilteredAttribute\"\n                        else\n                            attrElem.removeClass \"pvtFilteredAttribute\"\n                        if keys.length > opts.menuLimit\n                            valueList.toggle()\n                        else\n                            valueList.toggle(0, refresh)\n\n                    $(\"<p>\").appendTo(valueList)\n                        .append $(\"<button>\", {type:\"button\"}).text(\"OK\").bind \"click\", updateFilter\n\n                    showFilterList = (e) ->\n                        valueList.css(left: e.pageX, top: e.pageY).toggle()\n                        valueList.find('.pvtSearch').val('')\n                        valueList.find('.pvtCheckContainer p').show()\n\n                    triangleLink = $(\"<span>\").addClass('pvtTriangle').html(\" &#x25BE;\")\n                        .bind \"click\", showFilterList\n\n                    attrElem = $(\"<li>\").addClass(\"axis_#{i}\")\n                        .append $(\"<span>\").addClass('pvtAttr').text(c).data(\"attrName\", c).append(triangleLink)\n                    attrElem.addClass('pvtFilteredAttribute') if hasExcludedItem\n                    colList.append(attrElem).append(valueList)\n\n                    attrElem.bind \"dblclick\", showFilterList\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            $(\"<td>\").addClass('pvtVals')\n              .appendTo(tr1)\n              .append(aggregator)\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 colList\n            else\n                uiTable.prepend $(\"<tr>\").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_#{$.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\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\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] in excludedItems\n                    return true\n\n                pivotTable.pivot(input,subopts)\n                pivotUIOptions = $.extend opts,\n                    cols: subopts.cols\n                    rows: subopts.rows\n                    vals: vals\n                    exclusions: exclusions\n                    #to indicate inclusions are informational only\n                    inclusionsInfo: inclusions\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\") ->\n        numRows = @data \"numrows\"\n        numCols = @data \"numcols\"\n\n        colorGen = (color, min, max) ->\n            hexGen = switch color\n                when \"red\"   then (hex) -> \"ff#{hex}#{hex}\"\n                when \"green\" then (hex) -> \"#{hex}ff#{hex}\"\n                when \"blue\"  then (hex) -> \"#{hex}#{hex}ff\"\n\n            return (x) ->\n                intensity = 255 - Math.round 255*(x-min)/(max-min)\n                hex = intensity.toString(16).split(\".\")[0]\n                hex = 0+hex if hex.length == 1\n                return hexGen(hex)\n\n        heatmapper = (scope, color) =>\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            colorFor = colorGen color, Math.min(values...), Math.max(values...)\n            forEachCell (x, elem) -> elem.css \"background-color\", \"#\" + colorFor(x)\n\n        switch scope\n            when \"heatmap\"\n                heatmapper \".pvtVal\", \"red\"\n            when \"rowheatmap\"\n                heatmapper \".pvtVal.row#{i}\", \"red\" for i in [0...numRows]\n            when \"colheatmap\"\n                heatmapper \".pvtVal.col#{j}\", \"red\" for j in [0...numCols]\n\n        heatmapper \".pvtTotal.rowTotal\", \"red\"\n        heatmapper \".pvtTotal.colTotal\", \"red\"\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\n\n"]}
\ No newline at end of file
+{"version":3,"file":"pivot.js","sources":["pivot.coffee"],"names":[],"mappings":"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","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        opts = $.extend({}, defaults, opts)\n        (x) ->\n            return \"\" if isNaN(x) or not isFinite(x)\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        uniques: (fn, formatter=usFmtInt) -> ([attr]) -> (data, rowKey, colKey) ->\n            uniq: []\n            push: (record) -> @uniq.push(record[attr]) if record[attr] not in @uniq\n            value: -> fn(@uniq)\n            format: formatter\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        extremes: (mode, formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->\n            val: null\n            sorter: getSort(data?.sorters, attr)\n            push: (record) ->\n                x = record[attr]\n                if mode in [\"min\", \"max\"]\n                    x = parseFloat(x)\n                    if not isNaN x then @val = Math[mode](x, @val ? x)\n                if mode == \"first\" then @val = x if @sorter(x, @val ? x) <= 0\n                if mode == \"last\"  then @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        quantile: (q, formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->\n            vals: []\n            push: (record) ->\n                x = parseFloat(record[attr])\n                @vals.push(x) if not isNaN(x)\n            value: ->\n                return null if @vals.length == 0\n                @vals.sort((a,b) -> a-b)\n                i = (@vals.length-1)*q\n                return (@vals[Math.floor(i)] + @vals[Math.ceil(i)])/2.0\n            format: formatter\n            numInputs: if attr? then 0 else 1\n\n        runningStat: (mode=\"mean\", ddof=1, formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->\n            n: 0.0, m: 0.0, s: 0.0\n            push: (record) ->\n                x = parseFloat(record[attr])\n                return if isNaN(x)\n                @n += 1.0\n                if @n == 1.0\n                    @m = x\n                else\n                    m_new = @m + (x - @m)/@n\n                    @s = @s + (x - @m)*(x - m_new)\n                    @m = m_new\n            value: ->\n                if mode == \"mean\"\n                    return if @n == 0 then 0/0 else @m\n                return 0 if @n <= ddof\n                switch mode\n                    when \"var\"   then @s/(@n-ddof)\n                    when \"stdev\" then Math.sqrt(@s/(@n-ddof))\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    aggregatorTemplates.countUnique = (f) -> aggregatorTemplates.uniques(((x) -> x.length), f)\n    aggregatorTemplates.listUnique =  (s) -> aggregatorTemplates.uniques(((x) -> x.sort(naturalSort).join(s)), ((x)->x))\n    aggregatorTemplates.max =         (f) -> aggregatorTemplates.extremes('max', f)\n    aggregatorTemplates.min =         (f) -> aggregatorTemplates.extremes('min', f)\n    aggregatorTemplates.first =       (f) -> aggregatorTemplates.extremes('first', f)\n    aggregatorTemplates.last =        (f) -> aggregatorTemplates.extremes('last', f)\n    aggregatorTemplates.median =      (f) -> aggregatorTemplates.quantile(0.5, f)\n    aggregatorTemplates.average =     (f) -> aggregatorTemplates.runningStat(\"mean\", 1, f)\n    aggregatorTemplates.var =         (ddof, f) -> aggregatorTemplates.runningStat(\"var\", ddof, f)\n    aggregatorTemplates.stdev =       (ddof, f) -> aggregatorTemplates.runningStat(\"stdev\", ddof, f)\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        \"Median\":               tpl.median(usFmt)\n        \"Sample Variance\":      tpl.var(1, usFmt)\n        \"Sample Standard Deviation\": tpl.stdev(1, 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 $\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:\n                clickCallback: null\n                rowTotals: true\n                colTotals: true\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 && opts.table.rowTotals\n                th = document.createElement(\"th\")\n                th.className = \"pvtTotalLabel pvtRowTotalLabel\"\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 pvtRowTotalLabel\"\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            if opts.table.rowTotals || colAttrs.length == 0\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        if opts.table.colTotals || rowAttrs.length == 0\n            tr = document.createElement(\"tr\")\n            if opts.table.colTotals || rowAttrs.length == 0\n                th = document.createElement(\"th\")\n                th.className = \"pvtTotalLabel pvtColTotalLabel\"\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            if opts.table.rowTotals || colAttrs.length == 0\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            hiddenFromAggregators: []\n            hiddenFromDragDrop: []\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            showUI: true\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>\").addClass(\"pvtUiCell\")\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 pvtUiCell')\n            shownAttributes = (a for a of attrValues when a not in opts.hiddenAttributes)\n            shownInAggregators = (c for c in shownAttributes when c not in opts.hiddenFromAggregators)\n            shownInDragDrop = (c for c in shownAttributes when c not in opts.hiddenFromDragDrop)\n\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 shownInDragDrop\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 shownInDragDrop\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.indexOf(\">=\") == 0 then accept_gen(\">=\", [1,0])\n                                        else if filter.indexOf(\"<=\") == 0 then accept_gen(\"<=\", [-1,0])\n                                        else if filter.indexOf(\">\") == 0  then accept_gen(\">\",  [1])\n                                        else if filter.indexOf(\"<\") == 0  then accept_gen(\"<\",  [-1])\n                                        else if filter.indexOf(\"~\") == 0  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 pvtUiCell')\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 pvtUiCell').appendTo(tr1)\n\n            tr2 = $(\"<tr>\").appendTo(uiTable)\n\n            #row axes\n            tr2.append $(\"<td>\").addClass('pvtAxisContainer pvtRows pvtUiCell').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, shownInDragDrop)}\")\n            for x in opts.rows\n                @find(\".pvtRows\").append @find(\".axis_#{$.inArray(x, shownInDragDrop)}\")\n            if opts.aggregatorName?\n                @find(\".pvtAggregator\").val opts.aggregatorName\n            if opts.rendererName?\n                @find(\".pvtRenderer\").val opts.rendererName\n\n            @find(\".pvtUiCell\").hide() unless opts.showUI\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 shownInAggregators\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 = (opts) ->\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            if max < 0\n                max = 0\n            range = max;\n            min = Math.min(values...)\n            if min < 0\n                range = max - min\n            scaler = (x) -> 100*x/(1.4*range)\n            forEachCell (x, elem) ->\n                text = elem.text()\n                wrapper = $(\"<div>\").css\n                    \"position\": \"relative\"\n                    \"height\": \"55px\"\n                bgColor = \"gray\"\n                bBase = 0\n                if min < 0\n                    bBase = scaler(-min)\n                if x < 0\n                    bBase += scaler(x)\n                    bgColor = \"darkred\"\n                    x = -x\n                wrapper.append $(\"<div>\").css\n                    \"position\": \"absolute\"\n                    \"bottom\": bBase + \"%\"\n                    \"left\": 0\n                    \"right\": 0\n                    \"height\": scaler(x) + \"%\"\n                    \"background-color\": bgColor\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"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.css.css b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.css.css
index c7e256f7eff8e5f00873368d26b16b321959a21d..8af5f5137c16b1b6eee6672dc65643a7f3c1d904 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.css.css
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.css.css
@@ -1 +1 @@
-.pvtUi{color:#333}table.pvtTable{font-size:8pt;text-align:left;border-collapse:collapse}table.pvtTable tr th{background-color:#e6EEEE;border:1px solid #CDCDCD;font-size:8pt;padding:5px}table.pvtTable .pvtColLabel{text-align:center}table.pvtTable .pvtTotalLabel{text-align:right}table.pvtTable tr td{color:#3D3D3D;padding:5px;background-color:#FFF;border:1px solid #CDCDCD;vertical-align:top;text-align:right}.pvtGrandTotal,.pvtTotal{font-weight:700}.pvtVals{text-align:center}.pvtAggregator{margin-bottom:5px}.pvtAxisContainer,.pvtVals{border:1px solid gray;background:#EEE;padding:5px;min-width:20px;min-height:20px}.pvtAxisContainer li{padding:8px 6px;list-style-type:none;cursor:move}.pvtAxisContainer li.pvtPlaceholder{-webkit-border-radius:5px;padding:3px 15px;-moz-border-radius:5px;border-radius:5px;border:1px dashed #aaa}.pvtAxisContainer li span.pvtAttr{background:#F3F3F3;border:1px solid #DEDEDE;padding:2px 5px;white-space:nowrap;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.pvtTriangle{cursor:pointer;color:grey}.pvtHorizList li{display:inline}.pvtVertList{vertical-align:top}.pvtFilteredAttribute{font-style:italic}.pvtFilterBox{z-index:100;width:280px;border:1px solid gray;background-color:#fff;position:absolute;padding:20px;text-align:center}.pvtFilterBox h4{margin:0}.pvtFilterBox p{margin:1em auto}.pvtFilterBox label{font-weight:400}.pvtFilterBox input[type=checkbox]{margin-right:5px}.pvtCheckContainer{text-align:left;overflow:scroll;width:100%;max-height:200px}.pvtCheckContainer p{margin:5px}.pvtRendererArea{padding:5px}
\ No newline at end of file
+.pvtUi{color:#333}table.pvtTable{font-size:8pt;text-align:left;border-collapse:collapse}table.pvtTable tbody tr th,table.pvtTable thead tr th{background-color:#e6EEEE;border:1px solid #CDCDCD;font-size:8pt;padding:5px}table.pvtTable .pvtColLabel{text-align:center}table.pvtTable .pvtTotalLabel{text-align:right}table.pvtTable tbody tr td{color:#3D3D3D;padding:5px;background-color:#FFF;border:1px solid #CDCDCD;vertical-align:top;text-align:right}.pvtGrandTotal,.pvtTotal{font-weight:700}.pvtVals{text-align:center;white-space:nowrap}.pvtColOrder,.pvtRowOrder{cursor:pointer;width:15px;margin-left:5px;display:inline-block}.pvtAggregator{margin-bottom:5px}.pvtAxisContainer,.pvtVals{border:1px solid gray;background:#EEE;padding:5px;min-width:20px;min-height:20px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}.pvtAxisContainer li{padding:8px 6px;list-style-type:none;cursor:move}.pvtAxisContainer li.pvtPlaceholder{-webkit-border-radius:5px;padding:3px 15px;-moz-border-radius:5px;border-radius:5px;border:1px dashed #aaa}.pvtAxisContainer li span.pvtAttr{-webkit-text-size-adjust:100%;background:#F3F3F3;border:1px solid #DEDEDE;padding:2px 5px;white-space:nowrap;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.pvtTriangle{cursor:pointer;color:grey}.pvtHorizList li{display:inline}.pvtVertList{vertical-align:top}.pvtFilteredAttribute{font-style:italic}.pvtFilterBox{z-index:100;width:300px;border:1px solid gray;background-color:#fff;position:absolute;text-align:center}.pvtFilterBox h4{margin:15px}.pvtFilterBox p{margin:10px auto}.pvtFilterBox label{font-weight:400}.pvtFilterBox input[type=checkbox]{margin-right:10px;margin-left:10px}.pvtFilterBox input[type=text]{width:230px}.pvtFilterBox .count{color:gray;font-weight:400;margin-left:3px}.pvtCheckContainer{text-align:left;font-size:14px;white-space:nowrap;overflow-y:scroll;width:100%;max-height:250px;border-top:1px solid #d3d3d3;border-bottom:1px solid #d3d3d3}.pvtCheckContainer p{margin:5px}.pvtRendererArea{padding:5px}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.css.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.css.xml
index 2d1ea82da3c44e999362a87aa51646f3f99f87a3..2fc52da7bdcc74f5d003e29ed73e54292114768e 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.css.xml
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.css.xml
@@ -6,6 +6,10 @@
     </pickle>
     <pickle>
       <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
         <item>
             <key> <string>__name__</string> </key>
             <value> <string>pivot.min.css</string> </value>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.js.js
index fd8f7b3c0a378ce180b3e9c7b1d45e36a7292f18..b79a65a0802e9579b57f8af95916db4486ce798d 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.js.js
@@ -1,2 +1,2 @@
-(function(){var t,e=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},n=[].slice,r=function(t,e){return function(){return t.apply(e,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 o,i,s,u,l,c,p,h,d,f,g,m,v,b,A,C,y,w;return i=function(t,e,n){var r,a,o,i;for(t+="",a=t.split("."),o=a[0],i=a.length>1?n+a[1]:"",r=/(\d+)(\d{3})/;r.test(o);)o=o.replace(r,"$1"+e+"$2");return o+i},g=function(e){var n;return n={digitsAfterDecimal:2,scaler:1,thousandsSep:",",decimalSep:".",prefix:"",suffix:"",showZero:!1},e=t.extend(n,e),function(t){var n;return isNaN(t)||!isFinite(t)?"":0!==t||e.showZero?(n=i((e.scaler*t).toFixed(e.digitsAfterDecimal),e.thousandsSep,e.decimalSep),""+e.prefix+n+e.suffix):""}},A=g(),C=g({digitsAfterDecimal:0}),y=g({digitsAfterDecimal:1,scaler:100,suffix:"%"}),s={count:function(t){return null==t&&(t=C),function(){return function(e,n,r){return{count:0,push:function(){return this.count++},value:function(){return this.count},format:t}}}},countUnique:function(t){return null==t&&(t=C),function(n){var r;return r=n[0],function(n,a,o){return{uniq:[],push:function(t){var n;return n=t[r],e.call(this.uniq,n)<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(n){var r;return r=n[0],function(n,a,o){return{uniq:[],push:function(t){var n;return n=t[r],e.call(this.uniq,n)<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=A),function(e){var n;return n=e[0],function(e,r,a){return{sum:0,push:function(t){return isNaN(parseFloat(t[n]))?void 0:this.sum+=parseFloat(t[n])},value:function(){return this.sum},format:t,numInputs:null!=n?0:1}}}},min:function(t){return null==t&&(t=A),function(e){var n;return n=e[0],function(e,r,a){return{val:null,push:function(t){var e,r;return r=parseFloat(t[n]),isNaN(r)?void 0:this.val=Math.min(r,null!=(e=this.val)?e:r)},value:function(){return this.val},format:t,numInputs:null!=n?0:1}}}},max:function(t){return null==t&&(t=A),function(e){var n;return n=e[0],function(e,r,a){return{val:null,push:function(t){var e,r;return r=parseFloat(t[n]),isNaN(r)?void 0:this.val=Math.max(r,null!=(e=this.val)?e:r)},value:function(){return this.val},format:t,numInputs:null!=n?0:1}}}},average:function(t){return null==t&&(t=A),function(e){var n;return n=e[0],function(e,r,a){return{sum:0,len:0,push:function(t){return isNaN(parseFloat(t[n]))?void 0:(this.sum+=parseFloat(t[n]),this.len++)},value:function(){return this.sum/this.len},format:t,numInputs:null!=n?0:1}}}},sumOverSum:function(t){return null==t&&(t=A),function(e){var n,r;return r=e[0],n=e[1],function(e,a,o){return{sumNum:0,sumDenom:0,push:function(t){return isNaN(parseFloat(t[r]))||(this.sumNum+=parseFloat(t[r])),isNaN(parseFloat(t[n]))?void 0:this.sumDenom+=parseFloat(t[n])},value:function(){return this.sumNum/this.sumDenom},format:t,numInputs:null!=r&&null!=n?0:2}}}},sumOverSumBound80:function(t,e){return null==t&&(t=!0),null==e&&(e=A),function(n){var r,a;return a=n[0],r=n[1],function(n,o,i){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 e;return e=t?1:-1,(.821187207574908/this.sumDenom+this.sumNum/this.sumDenom+1.2815515655446004*e*Math.sqrt(.410593603787454/(this.sumDenom*this.sumDenom)+this.sumNum*(1-this.sumNum/this.sumDenom)/(this.sumDenom*this.sumDenom)))/(1+1.642374415149816/this.sumDenom)},format:e,numInputs:null!=a&&null!=r?0:2}}}},fractionOf:function(t,e,r){return null==e&&(e="total"),null==r&&(r=y),function(){var a;return a=1<=arguments.length?n.call(arguments,0):[],function(n,o,i){return{selector:{total:[[],[]],row:[o,[]],col:[[],i]}[e],inner:t.apply(null,a)(n,o,i),push:function(t){return this.inner.push(t)},format:r,value:function(){return this.inner.value()/n.getAggregator.apply(n,this.selector).inner.value()},numInputs:t.apply(null,a)().numInputs}}}}},u=function(t){return{Count:t.count(C),"Count Unique Values":t.countUnique(C),"List Unique Values":t.listUnique(", "),Sum:t.sum(A),"Integer Sum":t.sum(C),Average:t.average(A),Minimum:t.min(A),Maximum:t.max(A),"Sum over Sum":t.sumOverSum(A),"80% Upper Bound":t.sumOverSumBound80(!0,A),"80% Lower Bound":t.sumOverSumBound80(!1,A),"Sum as Fraction of Total":t.fractionOf(t.sum(),"total",y),"Sum as Fraction of Rows":t.fractionOf(t.sum(),"row",y),"Sum as Fraction of Columns":t.fractionOf(t.sum(),"col",y),"Count as Fraction of Total":t.fractionOf(t.count(),"total",y),"Count as Fraction of Rows":t.fractionOf(t.count(),"row",y),"Count as Fraction of Columns":t.fractionOf(t.count(),"col",y)}}(s),v={Table:function(t,e){return m(t,e)},"Table Barchart":function(e,n){return t(m(e,n)).barchart()},Heatmap:function(e,n){return t(m(e,n)).heatmap()},"Row Heatmap":function(e,n){return t(m(e,n)).heatmap("rowheatmap")},"Col Heatmap":function(e,n){return t(m(e,n)).heatmap("colheatmap")}},h={en:{aggregators:u,renderers:v,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 results",totals:"Totals",vs:"vs",by:"by"}}},d=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],l=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],w=function(t){return("0"+t).substr(-2,2)},c={bin:function(t,e){return function(n){return n[t]-n[t]%e}},dateFormat:function(t,e,n,r,a){var o;return null==n&&(n=!1),null==r&&(r=d),null==a&&(a=l),o=n?"UTC":"",function(n){var i;return i=new Date(Date.parse(n[t])),isNaN(i)?"":e.replace(/%(.)/g,function(t,e){switch(e){case"y":return i["get"+o+"FullYear"]();case"m":return w(i["get"+o+"Month"]()+1);case"n":return r[i["get"+o+"Month"]()];case"d":return w(i["get"+o+"Date"]());case"w":return a[i["get"+o+"Day"]()];case"x":return i["get"+o+"Day"]();case"H":return w(i["get"+o+"Hours"]());case"M":return w(i["get"+o+"Minutes"]());case"S":return w(i["get"+o+"Seconds"]());default:return"%"+e}})}}},f=function(t){return function(t,e){var n,r,a,o,i,s,u;if(s=/(\d+)|(\D+)/g,i=/\d/,u=/^0/,"number"==typeof t||"number"==typeof e)return isNaN(t)?1:isNaN(e)?-1:t-e;if(n=String(t).toLowerCase(),a=String(e).toLowerCase(),n===a)return 0;if(!i.test(n)||!i.test(a))return n>a?1:-1;for(n=n.match(s),a=a.match(s);n.length&&a.length;)if(r=n.shift(),o=a.shift(),r!==o)return i.test(r)&&i.test(o)?r.replace(u,".0")-o.replace(u,".0"):r>o?1:-1;return n.length-a.length}}(this),b=function(t){var e,n,r;n={};for(e in t)r=t[e],n[r]=e;return function(t,e){return null!=n[t]&&null!=n[e]?n[t]-n[e]:null!=n[t]?-1:null!=n[e]?1:f(t,e)}},p=function(e,n){var r;return r=e(n),t.isFunction(r)?r:f},t.pivotUtilities={aggregatorTemplates:s,aggregators:u,renderers:v,derivers:c,locales:h,naturalSort:f,numberFormat:g,sortAs:b},o=function(){function e(t,n){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.aggregator=n.aggregator,this.aggregatorName=n.aggregatorName,this.colAttrs=n.cols,this.rowAttrs=n.rows,this.valAttrs=n.vals,this.sorters=n.sorters,this.tree={},this.rowKeys=[],this.colKeys=[],this.rowTotals={},this.colTotals={},this.allTotal=this.aggregator(this,[],[]),this.sorted=!1,e.forEachRecord(t,n.derivedAttributes,function(t){return function(e){return n.filter(e)?t.processRecord(e):void 0}}(this))}return e.forEachRecord=function(e,n,r){var o,i,s,u,l,c,p,h,d,f,g,m;if(o=t.isEmptyObject(n)?r:function(t){var e,a,o;for(e in n)o=n[e],t[e]=null!=(a=o(t))?a:t[e];return r(t)},t.isFunction(e))return e(o);if(t.isArray(e)){if(t.isArray(e[0])){f=[];for(s in e)if(a.call(e,s)&&(i=e[s],s>0)){h={},d=e[0];for(u in d)a.call(d,u)&&(l=d[u],h[l]=i[u]);f.push(o(h))}return f}for(g=[],c=0,p=e.length;p>c;c++)h=e[c],g.push(o(h));return g}if(e instanceof jQuery)return m=[],t("thead > tr > th",e).each(function(e){return m.push(t(this).text())}),t("tbody > tr",e).each(function(e){return h={},t("td",this).each(function(e){return h[m[e]]=t(this).html()}),o(h)});throw new Error("unknown input format")},e.convertToArray=function(t){var n;return n=[],e.forEachRecord(t,{},function(t){return n.push(t)}),n},e.prototype.arrSort=function(t){var e,n;return n=function(){var n,r,a;for(a=[],n=0,r=t.length;r>n;n++)e=t[n],a.push(p(this.sorters,e));return a}.call(this),function(t,e){var r,a,o;for(a in n)if(o=n[a],r=o(t[a],e[a]),0!==r)return r;return 0}},e.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)))},e.prototype.getColKeys=function(){return this.sortKeys(),this.colKeys},e.prototype.getRowKeys=function(){return this.sortKeys(),this.rowKeys},e.prototype.processRecord=function(t){var e,n,r,a,o,i,s,u,l,c,p,h,d;for(e=[],h=[],u=this.colAttrs,a=0,o=u.length;o>a;a++)d=u[a],e.push(null!=(l=t[d])?l:"null");for(c=this.rowAttrs,s=0,i=c.length;i>s;s++)d=c[s],h.push(null!=(p=t[d])?p:"null");return r=h.join(String.fromCharCode(0)),n=e.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!==e.length&&(this.colTotals[n]||(this.colKeys.push(e),this.colTotals[n]=this.aggregator(this,[],e)),this.colTotals[n].push(t)),0!==e.length&&0!==h.length?(this.tree[r]||(this.tree[r]={}),this.tree[r][n]||(this.tree[r][n]=this.aggregator(this,h,e)),this.tree[r][n].push(t)):void 0},e.prototype.getAggregator=function(t,e){var n,r,a;return a=t.join(String.fromCharCode(0)),r=e.join(String.fromCharCode(0)),n=0===t.length&&0===e.length?this.allTotal:0===t.length?this.colTotals[r]:0===e.length?this.rowTotals[a]:this.tree[a][r],null!=n?n:{value:function(){return null},format:function(){return""}}},e}(),m=function(e,n){var r,o,i,s,u,l,c,p,h,d,f,g,m,v,b,A,C,y,w,T,N;l={localeStrings:{totals:"Totals"}},n=t.extend(l,n),i=e.colAttrs,f=e.rowAttrs,m=e.getRowKeys(),u=e.getColKeys(),d=document.createElement("table"),d.className="pvtTable",v=function(t,e,n){var r,a,o,i,s,u,l,c;if(0!==e){for(i=!0,c=r=0,s=n;s>=0?s>=r:r>=s;c=s>=0?++r:--r)t[e-1][c]!==t[e][c]&&(i=!1);if(i)return-1}for(a=0;e+a<t.length;){for(l=!1,c=o=0,u=n;u>=0?u>=o:o>=u;c=u>=0?++o:--o)t[e][c]!==t[e+a][c]&&(l=!0);if(l)break;a++}return a};for(p in i)if(a.call(i,p)){o=i[p],y=document.createElement("tr"),0===parseInt(p)&&0!==f.length&&(A=document.createElement("th"),A.setAttribute("colspan",f.length),A.setAttribute("rowspan",i.length),y.appendChild(A)),A=document.createElement("th"),A.className="pvtAxisLabel",A.innerHTML=o,y.appendChild(A);for(c in u)a.call(u,c)&&(s=u[c],N=v(u,parseInt(c),parseInt(p)),-1!==N&&(A=document.createElement("th"),A.className="pvtColLabel",A.innerHTML=s[p],A.setAttribute("colspan",N),parseInt(p)===i.length-1&&0!==f.length&&A.setAttribute("rowspan",2),y.appendChild(A)));0===parseInt(p)&&(A=document.createElement("th"),A.className="pvtTotalLabel",A.innerHTML=n.localeStrings.totals,A.setAttribute("rowspan",i.length+(0===f.length?0:1)),y.appendChild(A)),d.appendChild(y)}if(0!==f.length){y=document.createElement("tr");for(c in f)a.call(f,c)&&(h=f[c],A=document.createElement("th"),A.className="pvtAxisLabel",A.innerHTML=h,y.appendChild(A));A=document.createElement("th"),0===i.length&&(A.className="pvtTotalLabel",A.innerHTML=n.localeStrings.totals),y.appendChild(A),d.appendChild(y)}for(c in m)if(a.call(m,c)){g=m[c],y=document.createElement("tr");for(p in g)a.call(g,p)&&(w=g[p],N=v(m,parseInt(c),parseInt(p)),-1!==N&&(A=document.createElement("th"),A.className="pvtRowLabel",A.innerHTML=w,A.setAttribute("rowspan",N),parseInt(p)===f.length-1&&0!==i.length&&A.setAttribute("colspan",2),y.appendChild(A)));for(p in u)a.call(u,p)&&(s=u[p],r=e.getAggregator(g,s),T=r.value(),b=document.createElement("td"),b.className="pvtVal row"+c+" col"+p,b.innerHTML=r.format(T),b.setAttribute("data-value",T),y.appendChild(b));C=e.getAggregator(g,[]),T=C.value(),b=document.createElement("td"),b.className="pvtTotal rowTotal",b.innerHTML=C.format(T),b.setAttribute("data-value",T),b.setAttribute("data-for","row"+c),y.appendChild(b),d.appendChild(y)}y=document.createElement("tr"),A=document.createElement("th"),A.className="pvtTotalLabel",A.innerHTML=n.localeStrings.totals,A.setAttribute("colspan",f.length+(0===i.length?0:1)),y.appendChild(A);for(p in u)a.call(u,p)&&(s=u[p],C=e.getAggregator([],s),T=C.value(),b=document.createElement("td"),b.className="pvtTotal colTotal",b.innerHTML=C.format(T),b.setAttribute("data-value",T),b.setAttribute("data-for","col"+p),y.appendChild(b));return C=e.getAggregator([],[]),T=C.value(),b=document.createElement("td"),b.className="pvtGrandTotal",b.innerHTML=C.format(T),b.setAttribute("data-value",T),y.appendChild(b),d.appendChild(y),d.setAttribute("data-numrows",m.length),d.setAttribute("data-numcols",u.length),d},t.fn.pivot=function(e,n){var r,a,i,u,l;r={cols:[],rows:[],vals:[],filter:function(){return!0},aggregator:s.count()(),aggregatorName:"Count",sorters:function(){},derivedAttributes:{},renderer:m,rendererOptions:null,localeStrings:h.en.localeStrings},n=t.extend(r,n),u=null;try{i=new o(e,n);try{u=n.renderer(i,n.rendererOptions)}catch(c){a=c,"undefined"!=typeof console&&null!==console&&console.error(a.stack),u=t("<span>").html(n.localeStrings.renderError)}}catch(c){a=c,"undefined"!=typeof console&&null!==console&&console.error(a.stack),u=t("<span>").html(n.localeStrings.computeError)}for(l=this[0];l.hasChildNodes();)l.removeChild(l.lastChild);return this.append(u)},t.fn.pivotUI=function(n,r,i,s){var u,l,c,d,g,m,v,b,A,C,y,w,T,N,S,x,F,M,E,L,k,D,R,I,O,K,q,H,U,V,j,B,P,J,_,z,Q,W,Y,Z;null==i&&(i=!1),null==s&&(s="en"),v={derivedAttributes:{},aggregators:h[s].aggregators,renderers:h[s].renderers,hiddenAttributes:[],menuLimit:200,cols:[],rows:[],vals:[],exclusions:{},unusedAttrsVertical:85,autoSortUnusedAttrs:!1,rendererOptions:{localeStrings:h[s].localeStrings},onRefresh:null,filter:function(){return!0},sorters:function(){},localeStrings:h[s].localeStrings},A=this.data("pivotUIOptions"),k=null==A||i?t.extend(v,r):A;try{n=o.convertToArray(n),J=function(){var t,e;t=n[0],e=[];for(T in t)a.call(t,T)&&e.push(T);return e}(),I=k.derivedAttributes;for(g in I)a.call(I,g)&&e.call(J,g)<0&&J.push(g);for(d={},N=0,S=J.length;S>N;N++)Z=J[N],d[Z]={};o.forEachRecord(n,k.derivedAttributes,function(t){var e,n,r;n=[];for(T in t)a.call(t,T)&&(r=t[T],k.filter(t)&&(null==r&&(r="null"),null==(e=d[T])[r]&&(e[r]=0),n.push(d[T][r]++)));return n}),Q=t("<table>",{"class":"pvtUi"}).attr("cellpadding",5),B=t("<td>"),j=t("<select>").addClass("pvtRenderer").appendTo(B).bind("change",function(){return U()}),O=k.renderers;for(Z in O)a.call(O,Z)&&t("<option>").val(Z).html(Z).appendTo(j);if(m=t("<td>").addClass("pvtAxisContainer pvtUnused"),P=function(){var t,n,r;for(r=[],n=0,t=J.length;t>n;n++)g=J[n],e.call(k.hiddenAttributes,g)<0&&r.push(g);return r}(),Y=!1,W="auto"===k.unusedAttrsVertical?120:parseInt(k.unusedAttrsVertical),!isNaN(W)){for(c=0,E=0,x=P.length;x>E;E++)u=P[E],c+=u.length;Y=c>W}m.addClass(k.unusedAttrsVertical===!0||Y?"pvtVertList":"pvtHorizList"),C=function(n){var r,a,o,i,s,u,l,c,h,f,g,v,b,A,C;if(l=function(){var t;t=[];for(T in d[n])t.push(T);return t}(),u=!1,C=t("<div>").addClass("pvtFilterBox").hide(),C.append(t("<h4>").text(n+" ("+l.length+")")),l.length>k.menuLimit)C.append(t("<p>").html(k.localeStrings.tooMany));else for(a=t("<p>").appendTo(C),a.append(t("<button>",{type:"button"}).html(k.localeStrings.selectAll).bind("click",function(){return C.find("input:visible").prop("checked",!0)})),a.append(t("<button>",{type:"button"}).html(k.localeStrings.selectNone).bind("click",function(){return C.find("input:visible").prop("checked",!1)})),a.append(t("<br>")),a.append(t("<input>",{type:"text",placeholder:k.localeStrings.filterResults,"class":"pvtSearch"}).bind("keyup",function(){var e;return e=t(this).val().toLowerCase(),C.find(".pvtCheckContainer p").each(function(){var n;return n=t(this).text().toLowerCase().indexOf(e),-1!==n?t(this).show():t(this).hide()})})),o=t("<div>").addClass("pvtCheckContainer").appendTo(C),f=l.sort(p(k.sorters,n)),h=0,c=f.length;c>h;h++)T=f[h],A=d[n][T],i=t("<label>"),s=k.exclusions[n]?e.call(k.exclusions[n],T)>=0:!1,u||(u=s),t("<input>").attr("type","checkbox").addClass("pvtFilter").attr("checked",!s).data("filter",[n,T]).appendTo(i),i.append(t("<span>").html(T)),i.append(t("<span>").text(" ("+A+")")),o.append(t("<p>").append(i));return b=function(){var t;return t=C.find("[type='checkbox']").length-C.find("[type='checkbox']:checked").length,t>0?r.addClass("pvtFilteredAttribute"):r.removeClass("pvtFilteredAttribute"),l.length>k.menuLimit?C.toggle():C.toggle(0,U)},t("<p>").appendTo(C).append(t("<button>",{type:"button"}).text("OK").bind("click",b)),g=function(t){return C.css({left:t.pageX,top:t.pageY}).toggle(),C.find(".pvtSearch").val(""),C.find(".pvtCheckContainer p").show()},v=t("<span>").addClass("pvtTriangle").html(" &#x25BE;").bind("click",g),r=t("<li>").addClass("axis_"+y).append(t("<span>").addClass("pvtAttr").text(n).data("attrName",n).append(v)),u&&r.addClass("pvtFilteredAttribute"),m.append(r).append(C),r.bind("dblclick",g)};for(y in P)a.call(P,y)&&(g=P[y],C(g));_=t("<tr>").appendTo(Q),l=t("<select>").addClass("pvtAggregator").bind("change",function(){return U()}),K=k.aggregators;for(Z in K)a.call(K,Z)&&l.append(t("<option>").val(Z).html(Z));for(t("<td>").addClass("pvtVals").appendTo(_).append(l).append(t("<br>")),t("<td>").addClass("pvtAxisContainer pvtHorizList pvtCols").appendTo(_),z=t("<tr>").appendTo(Q),z.append(t("<td>").addClass("pvtAxisContainer pvtRows").attr("valign","top")),D=t("<td>").attr("valign","top").addClass("pvtRendererArea").appendTo(z),k.unusedAttrsVertical===!0||Y?(Q.find("tr:nth-child(1)").prepend(B),Q.find("tr:nth-child(2)").prepend(m)):Q.prepend(t("<tr>").append(B).append(m)),this.html(Q),q=k.cols,L=0,F=q.length;F>L;L++)Z=q[L],this.find(".pvtCols").append(this.find(".axis_"+t.inArray(Z,P)));for(H=k.rows,R=0,M=H.length;M>R;R++)Z=H[R],this.find(".pvtRows").append(this.find(".axis_"+t.inArray(Z,P)));null!=k.aggregatorName&&this.find(".pvtAggregator").val(k.aggregatorName),null!=k.rendererName&&this.find(".pvtRenderer").val(k.rendererName),w=!0,V=function(r){return function(){var a,o,i,s,u,c,p,h,d,g,m,v,b,A,C;if(v={derivedAttributes:k.derivedAttributes,localeStrings:k.localeStrings,rendererOptions:k.rendererOptions,sorters:k.sorters,cols:[],rows:[]},c=null!=(d=k.aggregators[l.val()]([])().numInputs)?d:0,C=[],r.find(".pvtRows li span.pvtAttr").each(function(){return v.rows.push(t(this).data("attrName"))}),r.find(".pvtCols li span.pvtAttr").each(function(){return v.cols.push(t(this).data("attrName"))}),r.find(".pvtVals select.pvtAttrDropdown").each(function(){return 0===c?t(this).remove():(c--,""!==t(this).val()?C.push(t(this).val()):void 0)}),0!==c)for(h=r.find(".pvtVals"),Z=m=0,g=c;g>=0?g>m:m>g;Z=g>=0?++m:--m){for(u=t("<select>").addClass("pvtAttrDropdown").append(t("<option>")).bind("change",function(){return U()}),b=0,s=P.length;s>b;b++)a=P[b],u.append(t("<option>").val(a).text(a));h.append(u)}return w&&(C=k.vals,y=0,r.find(".pvtVals select.pvtAttrDropdown").each(function(){return t(this).val(C[y]),y++}),w=!1),v.aggregatorName=l.val(),v.vals=C,v.aggregator=k.aggregators[l.val()](C),v.renderer=k.renderers[j.val()],o={},r.find("input.pvtFilter").not(":checked").each(function(){var e;return e=t(this).data("filter"),null!=o[e[0]]?o[e[0]].push(e[1]):o[e[0]]=[e[1]]}),i={},r.find("input.pvtFilter:checked").each(function(){var e;return e=t(this).data("filter"),null!=o[e[0]]?null!=i[e[0]]?i[e[0]].push(e[1]):i[e[0]]=[e[1]]:void 0}),v.filter=function(t){var n,r;if(!k.filter(t))return!1;for(T in o)if(n=o[T],r=""+t[T],e.call(n,r)>=0)return!1;return!0},D.pivot(n,v),p=t.extend(k,{cols:v.cols,rows:v.rows,vals:C,exclusions:o,inclusionsInfo:i,aggregatorName:l.val(),rendererName:j.val()}),r.data("pivotUIOptions",p),k.autoSortUnusedAttrs&&(A=r.find("td.pvtUnused.pvtAxisContainer"),t(A).children("li").sort(function(e,n){return f(t(e).text(),t(n).text())}).appendTo(A)),D.css("opacity",1),null!=k.onRefresh?k.onRefresh(p):void 0}}(this),U=function(t){return function(){return D.css("opacity",.5),setTimeout(V,10)}}(this),U(),this.find(".pvtAxisContainer").sortable({update:function(t,e){return null==e.sender?U():void 0},connectWith:this.find(".pvtAxisContainer"),items:"li",placeholder:"pvtPlaceholder"})}catch($){b=$,"undefined"!=typeof console&&null!==console&&console.error(b.stack),this.html(k.localeStrings.uiRenderError)}return this},t.fn.heatmap=function(e){var n,r,a,o,i,s,u,l,c,p;switch(null==e&&(e="heatmap"),l=this.data("numrows"),u=this.data("numcols"),n=function(t,e,n){var r;return r=function(){switch(t){case"red":return function(t){return"ff"+t+t};case"green":return function(t){return t+"ff"+t};case"blue":return function(t){return""+t+t+"ff"}}}(),function(t){var a,o;return o=255-Math.round(255*(t-e)/(n-e)),a=o.toString(16).split(".")[0],1===a.length&&(a=0+a),r(a)}},r=function(e){return function(r,a){var o,i,s;return i=function(n){return e.find(r).each(function(){var e;return e=t(this).data("value"),null!=e&&isFinite(e)?n(e,t(this)):void 0})},s=[],i(function(t){return s.push(t)}),o=n(a,Math.min.apply(Math,s),Math.max.apply(Math,s)),i(function(t,e){return e.css("background-color","#"+o(t))})}}(this),e){case"heatmap":r(".pvtVal","red");break;case"rowheatmap":for(a=i=0,c=l;c>=0?c>i:i>c;a=c>=0?++i:--i)r(".pvtVal.row"+a,"red");break;case"colheatmap":for(o=s=0,p=u;p>=0?p>s:s>p;o=p>=0?++s:--s)r(".pvtVal.col"+o,"red")}return r(".pvtTotal.rowTotal","red"),r(".pvtTotal.colTotal","red"),this},t.fn.barchart=function(){var e,n,r,a,o,i;for(o=this.data("numrows"),a=this.data("numcols"),e=function(e){return function(n){var r,a,o,i;return r=function(r){return e.find(n).each(function(){var e;return e=t(this).data("value"),null!=e&&isFinite(e)?r(e,t(this)):void 0})},i=[],r(function(t){return i.push(t)}),a=Math.max.apply(Math,i),o=function(t){return 100*t/(1.4*a)},r(function(e,n){var r,a;return r=n.text(),a=t("<div>").css({position:"relative",height:"55px"}),a.append(t("<div>").css({position:"absolute",bottom:0,left:0,right:0,height:o(e)+"%","background-color":"gray"})),a.append(t("<div>").text(r).css({position:"relative","padding-left":"5px","padding-right":"5px"})),n.css({padding:0,"padding-top":"5px","text-align":"center"}).html(a)})}}(this),n=r=0,i=o;i>=0?i>r:r>i;n=i>=0?++r:--r)e(".pvtVal.row"+n);return e(".pvtTotal.colTotal"),this}})}).call(this);
-//# sourceMappingURL=pivot.min.js.map
\ No newline at end of file
+(function(){var t,e=[].indexOf||function(t){for(var e=0,n=this.length;e<n;e++)if(e in this&&this[e]===t)return e;return-1},n=[].slice,r=function(t,e){return function(){return t.apply(e,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 o,i,l,s,u,c,h,d,p,f,m,g,v,b,C,y,w,A,x,S,N;return i=function(t,e,n){var r,a,o,i;for(t+="",a=t.split("."),o=a[0],i=a.length>1?n+a[1]:"",r=/(\d+)(\d{3})/;r.test(o);)o=o.replace(r,"$1"+e+"$2");return o+i},m=function(e){var n;return n={digitsAfterDecimal:2,scaler:1,thousandsSep:",",decimalSep:".",prefix:"",suffix:""},e=t.extend({},n,e),function(t){var n;return isNaN(t)||!isFinite(t)?"":(n=i((e.scaler*t).toFixed(e.digitsAfterDecimal),e.thousandsSep,e.decimalSep),""+e.prefix+n+e.suffix)}},A=m(),x=m({digitsAfterDecimal:0}),S=m({digitsAfterDecimal:1,scaler:100,suffix:"%"}),l={count:function(t){return null==t&&(t=x),function(){return function(e,n,r){return{count:0,push:function(){return this.count++},value:function(){return this.count},format:t}}}},uniques:function(t,n){return null==n&&(n=x),function(r){var a;return a=r[0],function(r,o,i){return{uniq:[],push:function(t){var n;if(n=t[a],e.call(this.uniq,n)<0)return this.uniq.push(t[a])},value:function(){return t(this.uniq)},format:n,numInputs:null!=a?0:1}}}},sum:function(t){return null==t&&(t=A),function(e){var n;return n=e[0],function(e,r,a){return{sum:0,push:function(t){if(!isNaN(parseFloat(t[n])))return this.sum+=parseFloat(t[n])},value:function(){return this.sum},format:t,numInputs:null!=n?0:1}}}},extremes:function(t,e){return null==e&&(e=A),function(n){var r;return r=n[0],function(n,a,o){return{val:null,sorter:h(null!=n?n.sorters:void 0,r),push:function(e){var n,a,o,i;if(i=e[r],"min"!==t&&"max"!==t||(i=parseFloat(i),isNaN(i)||(this.val=Math[t](i,null!=(n=this.val)?n:i))),"first"===t&&this.sorter(i,null!=(a=this.val)?a:i)<=0&&(this.val=i),"last"===t&&this.sorter(i,null!=(o=this.val)?o:i)>=0)return this.val=i},value:function(){return this.val},format:function(t){return isNaN(t)?t:e(t)},numInputs:null!=r?0:1}}}},quantile:function(t,e){return null==e&&(e=A),function(n){var r;return r=n[0],function(n,a,o){return{vals:[],push:function(t){var e;if(e=parseFloat(t[r]),!isNaN(e))return this.vals.push(e)},value:function(){var e;return 0===this.vals.length?null:(this.vals.sort(function(t,e){return t-e}),e=(this.vals.length-1)*t,(this.vals[Math.floor(e)]+this.vals[Math.ceil(e)])/2)},format:e,numInputs:null!=r?0:1}}}},runningStat:function(t,e,n){return null==t&&(t="mean"),null==e&&(e=1),null==n&&(n=A),function(r){var a;return a=r[0],function(r,o,i){return{n:0,m:0,s:0,push:function(t){var e,n;if(n=parseFloat(t[a]),!isNaN(n))return this.n+=1,1===this.n?this.m=n:(e=this.m+(n-this.m)/this.n,this.s=this.s+(n-this.m)*(n-e),this.m=e)},value:function(){if("mean"===t)return 0===this.n?NaN:this.m;if(this.n<=e)return 0;switch(t){case"var":return this.s/(this.n-e);case"stdev":return Math.sqrt(this.s/(this.n-e))}},format:n,numInputs:null!=a?0:1}}}},sumOverSum:function(t){return null==t&&(t=A),function(e){var n,r;return r=e[0],n=e[1],function(e,a,o){return{sumNum:0,sumDenom:0,push:function(t){if(isNaN(parseFloat(t[r]))||(this.sumNum+=parseFloat(t[r])),!isNaN(parseFloat(t[n])))return this.sumDenom+=parseFloat(t[n])},value:function(){return this.sumNum/this.sumDenom},format:t,numInputs:null!=r&&null!=n?0:2}}}},sumOverSumBound80:function(t,e){return null==t&&(t=!0),null==e&&(e=A),function(n){var r,a;return a=n[0],r=n[1],function(n,o,i){return{sumNum:0,sumDenom:0,push:function(t){if(isNaN(parseFloat(t[a]))||(this.sumNum+=parseFloat(t[a])),!isNaN(parseFloat(t[r])))return this.sumDenom+=parseFloat(t[r])},value:function(){var e;return e=t?1:-1,(.821187207574908/this.sumDenom+this.sumNum/this.sumDenom+1.2815515655446004*e*Math.sqrt(.410593603787454/(this.sumDenom*this.sumDenom)+this.sumNum*(1-this.sumNum/this.sumDenom)/(this.sumDenom*this.sumDenom)))/(1+1.642374415149816/this.sumDenom)},format:e,numInputs:null!=a&&null!=r?0:2}}}},fractionOf:function(t,e,r){return null==e&&(e="total"),null==r&&(r=S),function(){var a;return a=1<=arguments.length?n.call(arguments,0):[],function(n,o,i){return{selector:{total:[[],[]],row:[o,[]],col:[[],i]}[e],inner:t.apply(null,a)(n,o,i),push:function(t){return this.inner.push(t)},format:r,value:function(){return this.inner.value()/n.getAggregator.apply(n,this.selector).inner.value()},numInputs:t.apply(null,a)().numInputs}}}}},l.countUnique=function(t){return l.uniques(function(t){return t.length},t)},l.listUnique=function(t){return l.uniques(function(e){return e.sort(f).join(t)},function(t){return t})},l.max=function(t){return l.extremes("max",t)},l.min=function(t){return l.extremes("min",t)},l.first=function(t){return l.extremes("first",t)},l.last=function(t){return l.extremes("last",t)},l.median=function(t){return l.quantile(.5,t)},l.average=function(t){return l.runningStat("mean",1,t)},l["var"]=function(t,e){return l.runningStat("var",t,e)},l.stdev=function(t,e){return l.runningStat("stdev",t,e)},s=function(t){return{Count:t.count(x),"Count Unique Values":t.countUnique(x),"List Unique Values":t.listUnique(", "),Sum:t.sum(A),"Integer Sum":t.sum(x),Average:t.average(A),Median:t.median(A),"Sample Variance":t["var"](1,A),"Sample Standard Deviation":t.stdev(1,A),Minimum:t.min(A),Maximum:t.max(A),First:t.first(A),Last:t.last(A),"Sum over Sum":t.sumOverSum(A),"80% Upper Bound":t.sumOverSumBound80(!0,A),"80% Lower Bound":t.sumOverSumBound80(!1,A),"Sum as Fraction of Total":t.fractionOf(t.sum(),"total",S),"Sum as Fraction of Rows":t.fractionOf(t.sum(),"row",S),"Sum as Fraction of Columns":t.fractionOf(t.sum(),"col",S),"Count as Fraction of Total":t.fractionOf(t.count(),"total",S),"Count as Fraction of Rows":t.fractionOf(t.count(),"row",S),"Count as Fraction of Columns":t.fractionOf(t.count(),"col",S)}}(l),b={Table:function(t,e){return g(t,e)},"Table Barchart":function(e,n){return t(g(e,n)).barchart()},Heatmap:function(e,n){return t(g(e,n)).heatmap("heatmap",n)},"Row Heatmap":function(e,n){return t(g(e,n)).heatmap("rowheatmap",n)},"Col Heatmap":function(e,n){return t(g(e,n)).heatmap("colheatmap",n)}},d={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"}}},p=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],u=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],N=function(t){return("0"+t).substr(-2,2)},c={bin:function(t,e){return function(n){return n[t]-n[t]%e}},dateFormat:function(t,e,n,r,a){var o;return null==n&&(n=!1),null==r&&(r=p),null==a&&(a=u),o=n?"UTC":"",function(n){var i;return i=new Date(Date.parse(n[t])),isNaN(i)?"":e.replace(/%(.)/g,function(t,e){switch(e){case"y":return i["get"+o+"FullYear"]();case"m":return N(i["get"+o+"Month"]()+1);case"n":return r[i["get"+o+"Month"]()];case"d":return N(i["get"+o+"Date"]());case"w":return a[i["get"+o+"Day"]()];case"x":return i["get"+o+"Day"]();case"H":return N(i["get"+o+"Hours"]());case"M":return N(i["get"+o+"Minutes"]());case"S":return N(i["get"+o+"Seconds"]());default:return"%"+e}})}}},C=/(\d+)|(\D+)/g,v=/\d/,y=/^0/,f=function(t){return function(t,e){var n,r,a,o,i,l;if(null!=e&&null==t)return-1;if(null!=t&&null==e)return 1;if("number"==typeof t&&isNaN(t))return-1;if("number"==typeof e&&isNaN(e))return 1;if(i=+t,l=+e,i<l)return-1;if(i>l)return 1;if("number"==typeof t&&"number"!=typeof e)return-1;if("number"==typeof e&&"number"!=typeof t)return 1;if("number"==typeof t&&"number"==typeof e)return 0;if(isNaN(l)&&!isNaN(i))return-1;if(isNaN(i)&&!isNaN(l))return 1;if(n=String(t),a=String(e),n===a)return 0;if(!v.test(n)||!v.test(a))return n>a?1:-1;for(n=n.match(C),a=a.match(C);n.length&&a.length;)if(r=n.shift(),o=a.shift(),r!==o)return v.test(r)&&v.test(o)?r.replace(y,".0")-o.replace(y,".0"):r>o?1:-1;return n.length-a.length}}(this),w=function(t){var e,n,r,a;r={},n={};for(e in t)a=t[e],r[a]=e,"string"==typeof a&&(n[a.toLowerCase()]=e);return function(t,e){return null!=r[t]&&null!=r[e]?r[t]-r[e]:null!=r[t]?-1:null!=r[e]?1:null!=n[t]&&null!=n[e]?n[t]-n[e]:null!=n[t]?-1:null!=n[e]?1:f(t,e)}},h=function(e,n){var r;if(null!=e)if(t.isFunction(e)){if(r=e(n),t.isFunction(r))return r}else if(null!=e[n])return e[n];return f},o=function(){function e(t,n){var a,o,i,s,u,c,h,d,p,f;null==n&&(n={}),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=n.aggregator)?a:l.count()(),this.aggregatorName=null!=(o=n.aggregatorName)?o:"Count",this.colAttrs=null!=(i=n.cols)?i:[],this.rowAttrs=null!=(s=n.rows)?s:[],this.valAttrs=null!=(u=n.vals)?u:[],this.sorters=null!=(c=n.sorters)?c:{},this.rowOrder=null!=(h=n.rowOrder)?h:"key_a_to_z",this.colOrder=null!=(d=n.colOrder)?d:"key_a_to_z",this.derivedAttributes=null!=(p=n.derivedAttributes)?p:{},this.filter=null!=(f=n.filter)?f:function(){return!0},this.tree={},this.rowKeys=[],this.colKeys=[],this.rowTotals={},this.colTotals={},this.allTotal=this.aggregator(this,[],[]),this.sorted=!1,e.forEachRecord(this.input,this.derivedAttributes,function(t){return function(e){if(t.filter(e))return t.processRecord(e)}}(this))}return e.forEachRecord=function(e,n,r){var o,i,l,s,u,c,h,d,p,f,m,g;if(o=t.isEmptyObject(n)?r:function(t){var e,a,o;for(e in n)o=n[e],t[e]=null!=(a=o(t))?a:t[e];return r(t)},t.isFunction(e))return e(o);if(t.isArray(e)){if(t.isArray(e[0])){f=[];for(l in e)if(a.call(e,l)&&(i=e[l],l>0)){d={},p=e[0];for(s in p)a.call(p,s)&&(u=p[s],d[u]=i[s]);f.push(o(d))}return f}for(m=[],c=0,h=e.length;c<h;c++)d=e[c],m.push(o(d));return m}if(e instanceof t)return g=[],t("thead > tr > th",e).each(function(e){return g.push(t(this).text())}),t("tbody > tr",e).each(function(e){return d={},t("td",this).each(function(e){return d[g[e]]=t(this).text()}),o(d)});throw new Error("unknown input format")},e.prototype.forEachMatchingRecord=function(t,n){return e.forEachRecord(this.input,this.derivedAttributes,function(e){return function(r){var a,o,i;if(e.filter(r)){for(a in t)if(i=t[a],i!==(null!=(o=r[a])?o:"null"))return;return n(r)}}}(this))},e.prototype.arrSort=function(t){var e,n;return n=function(){var n,r,a;for(a=[],n=0,r=t.length;n<r;n++)e=t[n],a.push(h(this.sorters,e));return a}.call(this),function(t,e){var r,o,i;for(o in n)if(a.call(n,o)&&(i=n[o],r=i(t[o],e[o]),0!==r))return r;return 0}},e.prototype.sortKeys=function(){var t;if(!this.sorted){switch(this.sorted=!0,t=function(t){return function(e,n){return t.getAggregator(e,n).value()}}(this),this.rowOrder){case"value_a_to_z":this.rowKeys.sort(function(e){return function(e,n){return f(t(e,[]),t(n,[]))}}(this));break;case"value_z_to_a":this.rowKeys.sort(function(e){return function(e,n){return-f(t(e,[]),t(n,[]))}}(this));break;default:this.rowKeys.sort(this.arrSort(this.rowAttrs))}switch(this.colOrder){case"value_a_to_z":return this.colKeys.sort(function(e){return function(e,n){return f(t([],e),t([],n))}}(this));case"value_z_to_a":return this.colKeys.sort(function(e){return function(e,n){return-f(t([],e),t([],n))}}(this));default:return this.colKeys.sort(this.arrSort(this.colAttrs))}}},e.prototype.getColKeys=function(){return this.sortKeys(),this.colKeys},e.prototype.getRowKeys=function(){return this.sortKeys(),this.rowKeys},e.prototype.processRecord=function(t){var e,n,r,a,o,i,l,s,u,c,h,d,p;for(e=[],d=[],s=this.colAttrs,a=0,o=s.length;a<o;a++)p=s[a],e.push(null!=(u=t[p])?u:"null");for(c=this.rowAttrs,l=0,i=c.length;l<i;l++)p=c[l],d.push(null!=(h=t[p])?h:"null");if(r=d.join(String.fromCharCode(0)),n=e.join(String.fromCharCode(0)),this.allTotal.push(t),0!==d.length&&(this.rowTotals[r]||(this.rowKeys.push(d),this.rowTotals[r]=this.aggregator(this,d,[])),this.rowTotals[r].push(t)),0!==e.length&&(this.colTotals[n]||(this.colKeys.push(e),this.colTotals[n]=this.aggregator(this,[],e)),this.colTotals[n].push(t)),0!==e.length&&0!==d.length)return this.tree[r]||(this.tree[r]={}),this.tree[r][n]||(this.tree[r][n]=this.aggregator(this,d,e)),this.tree[r][n].push(t)},e.prototype.getAggregator=function(t,e){var n,r,a;return a=t.join(String.fromCharCode(0)),r=e.join(String.fromCharCode(0)),n=0===t.length&&0===e.length?this.allTotal:0===t.length?this.colTotals[r]:0===e.length?this.rowTotals[a]:this.tree[a][r],null!=n?n:{value:function(){return null},format:function(){return""}}},e}(),t.pivotUtilities={aggregatorTemplates:l,aggregators:s,renderers:b,derivers:c,locales:d,naturalSort:f,numberFormat:m,sortAs:w,PivotData:o},g=function(e,n){var r,o,i,l,s,u,c,h,d,p,f,m,g,v,b,C,y,w,A,x,S,N,T,k;u={table:{clickCallback:null,rowTotals:!0,colTotals:!0},localeStrings:{totals:"Totals"}},n=t.extend(!0,{},u,n),i=e.colAttrs,m=e.rowAttrs,v=e.getRowKeys(),s=e.getColKeys(),n.table.clickCallback&&(c=function(t,r,o){var l,s,u;s={};for(u in i)a.call(i,u)&&(l=i[u],null!=o[u]&&(s[l]=o[u]));for(u in m)a.call(m,u)&&(l=m[u],null!=r[u]&&(s[l]=r[u]));return function(r){return n.table.clickCallback(r,t,s,e)}}),f=document.createElement("table"),f.className="pvtTable",b=function(t,e,n){var r,a,o,i,l,s,u,c;if(0!==e){for(i=!0,c=r=0,l=n;0<=l?r<=l:r>=l;c=0<=l?++r:--r)t[e-1][c]!==t[e][c]&&(i=!1);if(i)return-1}for(a=0;e+a<t.length;){for(u=!1,c=o=0,s=n;0<=s?o<=s:o>=s;c=0<=s?++o:--o)t[e][c]!==t[e+a][c]&&(u=!0);if(u)break;a++}return a},A=document.createElement("thead");for(d in i)if(a.call(i,d)){o=i[d],S=document.createElement("tr"),0===parseInt(d)&&0!==m.length&&(w=document.createElement("th"),w.setAttribute("colspan",m.length),w.setAttribute("rowspan",i.length),S.appendChild(w)),w=document.createElement("th"),w.className="pvtAxisLabel",w.textContent=o,S.appendChild(w);for(h in s)a.call(s,h)&&(l=s[h],k=b(s,parseInt(h),parseInt(d)),k!==-1&&(w=document.createElement("th"),w.className="pvtColLabel",w.textContent=l[d],w.setAttribute("colspan",k),parseInt(d)===i.length-1&&0!==m.length&&w.setAttribute("rowspan",2),S.appendChild(w)));0===parseInt(d)&&n.table.rowTotals&&(w=document.createElement("th"),w.className="pvtTotalLabel pvtRowTotalLabel",w.innerHTML=n.localeStrings.totals,w.setAttribute("rowspan",i.length+(0===m.length?0:1)),S.appendChild(w)),A.appendChild(S)}if(0!==m.length){S=document.createElement("tr");for(h in m)a.call(m,h)&&(p=m[h],w=document.createElement("th"),w.className="pvtAxisLabel",w.textContent=p,S.appendChild(w));w=document.createElement("th"),0===i.length&&(w.className="pvtTotalLabel pvtRowTotalLabel",w.innerHTML=n.localeStrings.totals),S.appendChild(w),A.appendChild(S)}f.appendChild(A),C=document.createElement("tbody");for(h in v)if(a.call(v,h)){g=v[h],S=document.createElement("tr");for(d in g)a.call(g,d)&&(N=g[d],k=b(v,parseInt(h),parseInt(d)),k!==-1&&(w=document.createElement("th"),w.className="pvtRowLabel",w.textContent=N,w.setAttribute("rowspan",k),parseInt(d)===m.length-1&&0!==i.length&&w.setAttribute("colspan",2),S.appendChild(w)));for(d in s)a.call(s,d)&&(l=s[d],r=e.getAggregator(g,l),T=r.value(),y=document.createElement("td"),y.className="pvtVal row"+h+" col"+d,y.textContent=r.format(T),y.setAttribute("data-value",T),null!=c&&(y.onclick=c(T,g,l)),S.appendChild(y));(n.table.rowTotals||0===i.length)&&(x=e.getAggregator(g,[]),T=x.value(),y=document.createElement("td"),y.className="pvtTotal rowTotal",y.textContent=x.format(T),y.setAttribute("data-value",T),null!=c&&(y.onclick=c(T,g,[])),y.setAttribute("data-for","row"+h),S.appendChild(y)),C.appendChild(S)}if(n.table.colTotals||0===m.length){S=document.createElement("tr"),(n.table.colTotals||0===m.length)&&(w=document.createElement("th"),w.className="pvtTotalLabel pvtColTotalLabel",w.innerHTML=n.localeStrings.totals,w.setAttribute("colspan",m.length+(0===i.length?0:1)),S.appendChild(w));for(d in s)a.call(s,d)&&(l=s[d],x=e.getAggregator([],l),T=x.value(),y=document.createElement("td"),y.className="pvtTotal colTotal",y.textContent=x.format(T),y.setAttribute("data-value",T),null!=c&&(y.onclick=c(T,[],l)),y.setAttribute("data-for","col"+d),S.appendChild(y));(n.table.rowTotals||0===i.length)&&(x=e.getAggregator([],[]),T=x.value(),y=document.createElement("td"),y.className="pvtGrandTotal",y.textContent=x.format(T),y.setAttribute("data-value",T),null!=c&&(y.onclick=c(T,[],[])),S.appendChild(y)),C.appendChild(S)}return f.appendChild(C),f.setAttribute("data-numrows",v.length),f.setAttribute("data-numcols",s.length),f},t.fn.pivot=function(e,n,r){var a,i,s,u,c,h,p,f;null==r&&(r="en"),null==d[r]&&(r="en"),a={cols:[],rows:[],vals:[],rowOrder:"key_a_to_z",colOrder:"key_a_to_z",dataClass:o,filter:function(){return!0},aggregator:l.count()(),aggregatorName:"Count",sorters:{},derivedAttributes:{},renderer:g},u=t.extend(!0,{},d.en.localeStrings,d[r].localeStrings),s={rendererOptions:{localeStrings:u},localeStrings:u},c=t.extend(!0,{},s,t.extend({},a,n)),p=null;try{h=new c.dataClass(e,c);try{p=c.renderer(h,c.rendererOptions)}catch(m){i=m,"undefined"!=typeof console&&null!==console&&console.error(i.stack),p=t("<span>").html(c.localeStrings.renderError)}}catch(m){i=m,"undefined"!=typeof console&&null!==console&&console.error(i.stack),p=t("<span>").html(c.localeStrings.computeError)}for(f=this[0];f.hasChildNodes();)f.removeChild(f.lastChild);return this.append(p)},t.fn.pivotUI=function(n,r,i,l){var s,u,c,p,m,g,v,b,C,y,w,A,x,S,N,T,k,O,_,F,D,E,M,R,I,L,U,K,q,z,V,j,H,B,P,J,G,W,$,Q,Y,X,Z,tt,et;null==i&&(i=!1),null==l&&(l="en"),null==d[l]&&(l="en"),b={derivedAttributes:{},aggregators:d[l].aggregators,renderers:d[l].renderers,hiddenAttributes:[],hiddenFromAggregators:[],hiddenFromDragDrop:[],menuLimit:500,cols:[],rows:[],vals:[],rowOrder:"key_a_to_z",colOrder:"key_a_to_z",dataClass:o,exclusions:{},inclusions:{},unusedAttrsVertical:85,autoSortUnusedAttrs:!1,onRefresh:null,showUI:!0,filter:function(){return!0},sorters:{}},_=t.extend(!0,{},d.en.localeStrings,d[l].localeStrings),O={rendererOptions:{localeStrings:_},localeStrings:_},y=this.data("pivotUIOptions"),M=null==y||i?t.extend(!0,{},O,t.extend({},b,r)):y;try{m={},F=[],L=0,o.forEachRecord(n,M.derivedAttributes,function(t){var e,n,r,o;if(M.filter(t)){F.push(t);for(e in t)a.call(t,e)&&null==m[e]&&(m[e]={},L>0&&(m[e]["null"]=L));for(e in m)o=null!=(r=t[e])?r:"null",null==(n=m[e])[o]&&(n[o]=0),m[e][o]++;return L++}}),Y=t("<table>",{"class":"pvtUi"}).attr("cellpadding",5),B=t("<td>").addClass("pvtUiCell"),H=t("<select>").addClass("pvtRenderer").appendTo(B).bind("change",function(){return V()}),U=M.renderers;for(et in U)a.call(U,et)&&t("<option>").val(et).html(et).appendTo(H);if(X=t("<td>").addClass("pvtAxisContainer pvtUnused pvtUiCell"),J=function(){var t;t=[];for(s in m)e.call(M.hiddenAttributes,s)<0&&t.push(s);return t}(),G=function(){var t,n,r;for(r=[],t=0,n=J.length;t<n;t++)g=J[t],e.call(M.hiddenFromAggregators,g)<0&&r.push(g);return r}(),W=function(){var t,n,r;for(r=[],t=0,n=J.length;t<n;t++)g=J[t],e.call(M.hiddenFromDragDrop,g)<0&&r.push(g);return r}(),tt=!1,Z="auto"===M.unusedAttrsVertical?120:parseInt(M.unusedAttrsVertical),!isNaN(Z)){for(p=0,S=0,N=W.length;S<N;S++)s=W[S],p+=s.length;tt=p>Z}M.unusedAttrsVertical===!0||tt?X.addClass("pvtVertList"):X.addClass("pvtHorizList"),w=function(n){var r,a,o,i,l,s,u,c,d,p,f,g,v,b,C,y,w,x,S;if(S=function(){var t;t=[];for(C in m[n])t.push(C);return t}(),c=!1,x=t("<div>").addClass("pvtFilterBox").hide(),x.append(t("<h4>").append(t("<span>").text(n),t("<span>").addClass("count").text("("+S.length+")"))),S.length>M.menuLimit)x.append(t("<p>").html(M.localeStrings.tooMany));else for(S.length>5&&(i=t("<p>").appendTo(x),v=h(M.sorters,n),f=M.localeStrings.filterResults,t("<input>",{type:"text"}).appendTo(i).attr({placeholder:f,"class":"pvtSearch"}).bind("keyup",function(){var n,r,a;return a=t(this).val().toLowerCase().trim(),r=function(t,n){return function(r){var o,i;return o=a.substring(t.length).trim(),0===o.length||(i=Math.sign(v(r.toLowerCase(),o)),e.call(n,i)>=0)}},n=0===a.indexOf(">=")?r(">=",[1,0]):0===a.indexOf("<=")?r("<=",[-1,0]):0===a.indexOf(">")?r(">",[1]):0===a.indexOf("<")?r("<",[-1]):0===a.indexOf("~")?function(t){return 0===a.substring(1).trim().length||t.toLowerCase().match(a.substring(1))}:function(t){return t.toLowerCase().indexOf(a)!==-1},x.find(".pvtCheckContainer p label span.value").each(function(){return n(t(this).text())?t(this).parent().parent().show():t(this).parent().parent().hide()})}),i.append(t("<br>")),t("<button>",{type:"button"}).appendTo(i).html(M.localeStrings.selectAll).bind("click",function(){return x.find("input:visible:not(:checked)").prop("checked",!0).toggleClass("changed"),!1}),t("<button>",{type:"button"}).appendTo(i).html(M.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=S.sort(h(M.sorters,n)),p=0,d=g.length;p<d;p++)y=g[p],w=m[n][y],l=t("<label>"),s=!1,M.inclusions[n]?s=e.call(M.inclusions[n],y)<0:M.exclusions[n]&&(s=e.call(M.exclusions[n],y)>=0),c||(c=s),t("<input>").attr("type","checkbox").addClass("pvtFilter").attr("checked",!s).data("filter",[n,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("("+w+")")),a.append(t("<p>").append(l));return o=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),S.length<=M.menuLimit&&t("<button>",{type:"button"}).text(M.localeStrings.apply).appendTo(u).bind("click",function(){return x.find(".changed").removeClass("changed").length&&V(),o()}),t("<button>",{type:"button"}).text(M.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),o()}),b=t("<span>").addClass("pvtTriangle").html(" &#x25BE;").bind("click",function(e){var n,r,a;return r=t(e.currentTarget).position(),n=r.left,a=r.top,x.css({left:n+10,top:a+10}).show()}),r=t("<li>").addClass("axis_"+A).append(t("<span>").addClass("pvtAttr").text(n).data("attrName",n).append(b)),c&&r.addClass("pvtFilteredAttribute"),X.append(r).append(x)};for(A in W)a.call(W,A)&&(c=W[A],w(c));$=t("<tr>").appendTo(Y),u=t("<select>").addClass("pvtAggregator").bind("change",function(){return V()}),K=M.aggregators;for(et in K)a.call(K,et)&&u.append(t("<option>").val(et).html(et));for(R={key_a_to_z:{rowSymbol:"&varr;",colSymbol:"&harr;",next:"value_a_to_z"},value_a_to_z:{rowSymbol:"&darr;",colSymbol:"&rarr;",next:"value_z_to_a"},value_z_to_a:{rowSymbol:"&uarr;",colSymbol:"&larr;",next:"key_a_to_z"}},P=t("<a>",{role:"button"}).addClass("pvtRowOrder").data("order",M.rowOrder).html(R[M.rowOrder].rowSymbol).bind("click",function(){return t(this).data("order",R[t(this).data("order")].next),t(this).html(R[t(this).data("order")].rowSymbol),V()}),v=t("<a>",{role:"button"}).addClass("pvtColOrder").data("order",M.colOrder).html(R[M.colOrder].colSymbol).bind("click",function(){return t(this).data("order",R[t(this).data("order")].next),t(this).html(R[t(this).data("order")].colSymbol),V()}),t("<td>").addClass("pvtVals pvtUiCell").appendTo($).append(u).append(P).append(v).append(t("<br>")),t("<td>").addClass("pvtAxisContainer pvtHorizList pvtCols pvtUiCell").appendTo($),Q=t("<tr>").appendTo(Y),Q.append(t("<td>").addClass("pvtAxisContainer pvtRows pvtUiCell").attr("valign","top")),I=t("<td>").attr("valign","top").addClass("pvtRendererArea").appendTo(Q),M.unusedAttrsVertical===!0||tt?(Y.find("tr:nth-child(1)").prepend(B),Y.find("tr:nth-child(2)").prepend(X)):Y.prepend(t("<tr>").append(B).append(X)),this.html(Y),q=M.cols,D=0,T=q.length;D<T;D++)et=q[D],this.find(".pvtCols").append(this.find(".axis_"+t.inArray(et,W)));for(z=M.rows,E=0,k=z.length;E<k;E++)et=z[E],this.find(".pvtRows").append(this.find(".axis_"+t.inArray(et,W)));null!=M.aggregatorName&&this.find(".pvtAggregator").val(M.aggregatorName),null!=M.rendererName&&this.find(".pvtRenderer").val(M.rendererName),M.showUI||this.find(".pvtUiCell").hide(),x=!0,j=function(n){return function(){var r,a,o,i,l,s,h,d,p,m,g,b,C,y;if(m={derivedAttributes:M.derivedAttributes,localeStrings:M.localeStrings,rendererOptions:M.rendererOptions,sorters:M.sorters,cols:[],rows:[],dataClass:M.dataClass},l=null!=(d=M.aggregators[u.val()]([])().numInputs)?d:0,y=[],n.find(".pvtRows li span.pvtAttr").each(function(){return m.rows.push(t(this).data("attrName"))}),n.find(".pvtCols li span.pvtAttr").each(function(){return m.cols.push(t(this).data("attrName"))}),n.find(".pvtVals select.pvtAttrDropdown").each(function(){return 0===l?t(this).remove():(l--,""!==t(this).val()?y.push(t(this).val()):void 0)}),0!==l)for(h=n.find(".pvtVals"),et=g=0,p=l;0<=p?g<p:g>p;et=0<=p?++g:--g){for(i=t("<select>").addClass("pvtAttrDropdown").append(t("<option>")).bind("change",function(){return V()}),b=0,o=G.length;b<o;b++)c=G[b],i.append(t("<option>").val(c).text(c));h.append(i)}if(x&&(y=M.vals,A=0,n.find(".pvtVals select.pvtAttrDropdown").each(function(){return t(this).val(y[A]),A++}),x=!1),m.aggregatorName=u.val(),m.vals=y,m.aggregator=M.aggregators[u.val()](y),m.renderer=M.renderers[H.val()],m.rowOrder=P.data("order"),m.colOrder=v.data("order"),r={},n.find("input.pvtFilter").not(":checked").each(function(){var e;return e=t(this).data("filter"),null!=r[e[0]]?r[e[0]].push(e[1]):r[e[0]]=[e[1]]}),a={},n.find("input.pvtFilter:checked").each(function(){var e;if(e=t(this).data("filter"),null!=r[e[0]])return null!=a[e[0]]?a[e[0]].push(e[1]):a[e[0]]=[e[1]]}),m.filter=function(t){var n,a,o,i;if(!M.filter(t))return!1;for(a in r)if(n=r[a],o=""+(null!=(i=t[a])?i:"null"),e.call(n,o)>=0)return!1;return!0},I.pivot(F,m),s=t.extend({},M,{cols:m.cols,rows:m.rows,colOrder:m.colOrder,rowOrder:m.rowOrder,vals:y,exclusions:r,inclusions:a,inclusionsInfo:a,aggregatorName:u.val(),rendererName:H.val()}),n.data("pivotUIOptions",s),M.autoSortUnusedAttrs&&(C=n.find("td.pvtUnused.pvtAxisContainer"),t(C).children("li").sort(function(e,n){return f(t(e).text(),t(n).text())}).appendTo(C)),I.css("opacity",1),null!=M.onRefresh)return M.onRefresh(s)}}(this),V=function(t){return function(){return I.css("opacity",.5),setTimeout(j,10)}}(this),V(),this.find(".pvtAxisContainer").sortable({update:function(t,e){if(null==e.sender)return V()},connectWith:this.find(".pvtAxisContainer"),items:"li",placeholder:"pvtPlaceholder"})}catch(nt){C=nt,"undefined"!=typeof console&&null!==console&&console.error(C.stack),this.html(M.localeStrings.uiRenderError)}return this},t.fn.heatmap=function(e,n){var r,a,o,i,l,s,u,c,h,d,p;switch(null==e&&(e="heatmap"),c=this.data("numrows"),u=this.data("numcols"),r=null!=n&&null!=(h=n.heatmap)?h.colorScaleGenerator:void 0,null==r&&(r=function(t){var e,n;return n=Math.min.apply(Math,t),e=Math.max.apply(Math,t),function(t){var r;return r=255-Math.round(255*(t-n)/(e-n)),"rgb(255,"+r+","+r+")"}}),a=function(e){return function(n){var a,o,i;return o=function(r){return e.find(n).each(function(){var e;if(e=t(this).data("value"),null!=e&&isFinite(e))return r(e,t(this))})},i=[],o(function(t){return i.push(t)}),a=r(i),o(function(t,e){return e.css("background-color",a(t))})}}(this),e){case"heatmap":a(".pvtVal");break;case"rowheatmap":for(o=l=0,d=c;0<=d?l<d:l>d;o=0<=d?++l:--l)a(".pvtVal.row"+o);break;case"colheatmap":for(i=s=0,p=u;0<=p?s<p:s>p;i=0<=p?++s:--s)a(".pvtVal.col"+i)}return a(".pvtTotal.rowTotal"),a(".pvtTotal.colTotal"),this},t.fn.barchart=function(e){var n,r,a,o,i,l;for(i=this.data("numrows"),o=this.data("numcols"),n=function(e){return function(n){var r,a,o,i,l,s;return r=function(r){return e.find(n).each(function(){var e;if(e=t(this).data("value"),null!=e&&isFinite(e))return r(e,t(this))})},s=[],r(function(t){return s.push(t)}),a=Math.max.apply(Math,s),a<0&&(a=0),i=a,o=Math.min.apply(Math,s),o<0&&(i=a-o),l=function(t){return 100*t/(1.4*i)},r(function(e,n){var r,a,i,s;return i=n.text(),s=t("<div>").css({position:"relative",height:"55px"}),a="gray",r=0,o<0&&(r=l(-o)),e<0&&(r+=l(e),a="darkred",e=-e),s.append(t("<div>").css({position:"absolute",bottom:r+"%",left:0,right:0,height:l(e)+"%","background-color":a})),s.append(t("<div>").text(i).css({position:"relative","padding-left":"5px","padding-right":"5px"})),n.css({padding:0,"padding-top":"5px","text-align":"center"}).html(s)})}}(this),r=a=0,l=i;0<=l?a<l:a>l;r=0<=l?++a:--a)n(".pvtVal.row"+r);return n(".pvtTotal.colTotal"),this}})}).call(this);
+//# sourceMappingURL=pivot.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.js.map.txt
index 1be2d4604406d3a1d806f4eea6d7f90337584c72..acf39572dc429cfd0017caa647ac21f7dcd6e328 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.min.js.map.txt
@@ -1 +1 @@
-{"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","renderers","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","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","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","pvtData","Table Barchart","barchart","Heatmap","heatmap","Row Heatmap","Col Heatmap","en","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","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","rd","rx","rz","String","toLowerCase","match","shift","order","mapping","sorters","sort","isFunction","pivotUtilities","input","getRowKeys","getColKeys","sortKeys","arrSort","aggregator","aggregatorName","colAttrs","cols","rowAttrs","rows","valAttrs","vals","tree","rowKeys","colKeys","rowTotals","colTotals","allTotal","sorted","forEachRecord","derivedAttributes","filter","processRecord","f","addRecord","compactRecord","j","k","len1","results","results1","tblCols","isEmptyObject","v","isArray","each","text","html","Error","convertToArray","prototype","attrs","sortersArr","comparison","sorter","flatColKey","flatRowKey","len2","n","ref1","ref2","ref3","fromCharCode","agg","pivotData","c","r","spanSize","td","th","totalAggregator","tr","txt","document","createElement","className","arr","noDraw","stop","parseInt","setAttribute","appendChild","innerHTML","pivot","e","renderer","rendererOptions","_error","console","error","stack","hasChildNodes","removeChild","lastChild","append","pivotUI","inputOpts","overwrite","locale","attrLength","axisValues","colList","existingOpts","initialRender","len3","len4","o","pivotTable","q","ref4","refresh","refreshDelayed","rendererControl","shownAttributes","tr1","tr2","uiTable","unusedAttrsVerticalAutoCutoff","unusedAttrsVerticalAutoOverride","hiddenAttributes","menuLimit","exclusions","unusedAttrsVertical","autoSortUnusedAttrs","onRefresh","base","class","addClass","appendTo","attrElem","btns","checkContainer","filterItem","filterItemExcluded","hasExcludedItem","keys","showFilterList","triangleLink","updateFilter","valueList","hide","find","prop","placeholder","testString","show","unselectedCount","removeClass","toggle","css","left","pageX","top","pageY","prepend","inArray","rendererName","inclusions","len5","newDropdown","numInputsToProcess","pivotUIOptions","pvtVals","ref5","ref6","s","subopts","t","unusedAttrsContainer","remove","not","excludedItems","ref7","inclusionsInfo","children","setTimeout","sortable","update","ui","sender","connectWith","items","scope","colorGen","heatmapper","numCols","numRows","color","hexGen","hex","intensity","round","toString","colorFor","forEachCell","values","elem","barcharter","wrapper","position","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        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        \"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, 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    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    sortAs = (order) -> \n        mapping = {}\n        for i, x of order\n            mapping[x] = i\n        (a, b) ->\n            if mapping[a]? and mapping[b]?\n                return mapping[a] - mapping[b]\n            else if mapping[a]?\n                return -1\n            else if mapping[b]?\n                return 1\n            else\n                return naturalSort(a,b)\n\n    getSort = (sorters, attr) ->\n        sort = sorters(attr)\n        if $.isFunction(sort)\n            return sort \n        else\n            return naturalSort\n\n    #expose these to the outside world\n    $.pivotUtilities = {aggregatorTemplates, aggregators, renderers, derivers, locales,\n        naturalSort, numberFormat, sortAs}\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            @sorters = opts.sorters\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).html()\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        arrSort: (attrs) => \n            sortersArr = (getSort(@sorters, a) for a in attrs)\n            (a,b) -> \n                for 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                @rowKeys.sort @arrSort(@rowAttrs)\n                @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    ###\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.innerHTML = 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.innerHTML = 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.innerHTML = 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.innerHTML = 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            vals: []\n            filter: -> true\n            aggregator: aggregatorTemplates.count()()\n            aggregatorName: \"Count\"\n            sorters: -> \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 = $(\"<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        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: 85\n            autoSortUnusedAttrs: false\n            rendererOptions: localeStrings: locales[locale].localeStrings\n            onRefresh: null\n            filter: -> true\n            sorters: -> \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 = $(\"<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            colList = $(\"<td>\").addClass('pvtAxisContainer pvtUnused')\n            shownAttributes = (c for c in tblCols when c 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                colList.addClass('pvtVertList')\n            else\n                colList.addClass('pvtHorizList')\n\n            for own i, c of shownAttributes\n                do (c) ->\n                    keys = (k for k of axisValues[c])\n                    hasExcludedItem = false\n                    valueList = $(\"<div>\").addClass('pvtFilterBox').hide()\n\n                    valueList.append $(\"<h4>\").text(\"#{c} (#{keys.length})\")\n                    if keys.length > opts.menuLimit\n                        valueList.append $(\"<p>\").html(opts.localeStrings.tooMany)\n                    else\n                        btns = $(\"<p>\").appendTo(valueList)\n                        btns.append $(\"<button>\", {type:\"button\"}).html(opts.localeStrings.selectAll).bind \"click\", ->\n                            valueList.find(\"input:visible\").prop \"checked\", true\n                        btns.append $(\"<button>\", {type:\"button\"}).html(opts.localeStrings.selectNone).bind \"click\", ->\n                            valueList.find(\"input:visible\").prop \"checked\", false\n                        btns.append $(\"<br>\")\n                        btns.append $(\"<input>\", {type: \"text\", placeholder: opts.localeStrings.filterResults, class: \"pvtSearch\"}).bind \"keyup\", ->\n                            filter = $(this).val().toLowerCase()\n                            valueList.find('.pvtCheckContainer p').each ->\n                                testString = $(this).text().toLowerCase().indexOf(filter)\n                                if testString isnt -1\n                                    $(this).show()\n                                else\n                                    $(this).hide()\n\n                        checkContainer = $(\"<div>\").addClass(\"pvtCheckContainer\").appendTo(valueList)\n\n                        for k in keys.sort(getSort(opts.sorters, c))\n                             v = axisValues[c][k]\n                             filterItem = $(\"<label>\")\n                             filterItemExcluded = if opts.exclusions[c] then (k in opts.exclusions[c]) else false\n                             hasExcludedItem ||= filterItemExcluded\n                             $(\"<input>\")\n                                .attr(\"type\", \"checkbox\").addClass('pvtFilter')\n                                .attr(\"checked\", !filterItemExcluded).data(\"filter\", [c,k])\n                                .appendTo filterItem\n                             filterItem.append $(\"<span>\").html k\n                             filterItem.append $(\"<span>\").text \" (\"+v+\")\"\n                             checkContainer.append $(\"<p>\").append(filterItem)\n\n                    updateFilter = ->\n                        unselectedCount = valueList.find(\"[type='checkbox']\").length -\n                                          valueList.find(\"[type='checkbox']:checked\").length\n                        if unselectedCount > 0\n                            attrElem.addClass \"pvtFilteredAttribute\"\n                        else\n                            attrElem.removeClass \"pvtFilteredAttribute\"\n                        if keys.length > opts.menuLimit\n                            valueList.toggle()\n                        else\n                            valueList.toggle(0, refresh)\n\n                    $(\"<p>\").appendTo(valueList)\n                        .append $(\"<button>\", {type:\"button\"}).text(\"OK\").bind \"click\", updateFilter\n\n                    showFilterList = (e) ->\n                        valueList.css(left: e.pageX, top: e.pageY).toggle()\n                        valueList.find('.pvtSearch').val('')\n                        valueList.find('.pvtCheckContainer p').show()\n\n                    triangleLink = $(\"<span>\").addClass('pvtTriangle').html(\" &#x25BE;\")\n                        .bind \"click\", showFilterList\n\n                    attrElem = $(\"<li>\").addClass(\"axis_#{i}\")\n                        .append $(\"<span>\").addClass('pvtAttr').text(c).data(\"attrName\", c).append(triangleLink)\n                    attrElem.addClass('pvtFilteredAttribute') if hasExcludedItem\n                    colList.append(attrElem).append(valueList)\n\n                    attrElem.bind \"dblclick\", showFilterList\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            $(\"<td>\").addClass('pvtVals')\n              .appendTo(tr1)\n              .append(aggregator)\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 colList\n            else\n                uiTable.prepend $(\"<tr>\").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_#{$.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\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\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] in excludedItems\n                    return true\n\n                pivotTable.pivot(input,subopts)\n                pivotUIOptions = $.extend opts,\n                    cols: subopts.cols\n                    rows: subopts.rows\n                    vals: vals\n                    exclusions: exclusions\n                    #to indicate inclusions are informational only\n                    inclusionsInfo: inclusions\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\") ->\n        numRows = @data \"numrows\"\n        numCols = @data \"numcols\"\n\n        colorGen = (color, min, max) ->\n            hexGen = switch color\n                when \"red\"   then (hex) -> \"ff#{hex}#{hex}\"\n                when \"green\" then (hex) -> \"#{hex}ff#{hex}\"\n                when \"blue\"  then (hex) -> \"#{hex}#{hex}ff\"\n\n            return (x) ->\n                intensity = 255 - Math.round 255*(x-min)/(max-min)\n                hex = intensity.toString(16).split(\".\")[0]\n                hex = 0+hex if hex.length == 1\n                return hexGen(hex)\n\n        heatmapper = (scope, color) =>\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            colorFor = colorGen color, Math.min(values...), Math.max(values...)\n            forEachCell (x, elem) -> elem.css \"background-color\", \"#\" + colorFor(x)\n\n        switch scope\n            when \"heatmap\"\n                heatmapper \".pvtVal\", \"red\"\n            when \"rowheatmap\"\n                heatmapper \".pvtVal.row#{i}\", \"red\" for i in [0...numRows]\n            when \"colheatmap\"\n                heatmapper \".pvtVal.col#{j}\", \"red\" for j in [0...numCols]\n\n        heatmapper \".pvtTotal.rowTotal\", \"red\"\n        heatmapper \".pvtTotal.colTotal\", \"red\"\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\n\n","(function(){var t,e=[].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},n=[].slice,r=function(t,e){return function(){return t.apply(e,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 o,i,s,u,l,c,p,h,d,f,g,m,v,b,A,C,y,w;return i=function(t,e,n){var r,a,o,i;for(t+=\"\",a=t.split(\".\"),o=a[0],i=a.length>1?n+a[1]:\"\",r=/(\\d+)(\\d{3})/;r.test(o);)o=o.replace(r,\"$1\"+e+\"$2\");return o+i},g=function(e){var n;return n={digitsAfterDecimal:2,scaler:1,thousandsSep:\",\",decimalSep:\".\",prefix:\"\",suffix:\"\",showZero:!1},e=t.extend(n,e),function(t){var n;return isNaN(t)||!isFinite(t)?\"\":0!==t||e.showZero?(n=i((e.scaler*t).toFixed(e.digitsAfterDecimal),e.thousandsSep,e.decimalSep),\"\"+e.prefix+n+e.suffix):\"\"}},A=g(),C=g({digitsAfterDecimal:0}),y=g({digitsAfterDecimal:1,scaler:100,suffix:\"%\"}),s={count:function(t){return null==t&&(t=C),function(){return function(e,n,r){return{count:0,push:function(){return this.count++},value:function(){return this.count},format:t}}}},countUnique:function(t){return null==t&&(t=C),function(n){var r;return r=n[0],function(n,a,o){return{uniq:[],push:function(t){var n;return n=t[r],e.call(this.uniq,n)<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(n){var r;return r=n[0],function(n,a,o){return{uniq:[],push:function(t){var n;return n=t[r],e.call(this.uniq,n)<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=A),function(e){var n;return n=e[0],function(e,r,a){return{sum:0,push:function(t){return isNaN(parseFloat(t[n]))?void 0:this.sum+=parseFloat(t[n])},value:function(){return this.sum},format:t,numInputs:null!=n?0:1}}}},min:function(t){return null==t&&(t=A),function(e){var n;return n=e[0],function(e,r,a){return{val:null,push:function(t){var e,r;return r=parseFloat(t[n]),isNaN(r)?void 0:this.val=Math.min(r,null!=(e=this.val)?e:r)},value:function(){return this.val},format:t,numInputs:null!=n?0:1}}}},max:function(t){return null==t&&(t=A),function(e){var n;return n=e[0],function(e,r,a){return{val:null,push:function(t){var e,r;return r=parseFloat(t[n]),isNaN(r)?void 0:this.val=Math.max(r,null!=(e=this.val)?e:r)},value:function(){return this.val},format:t,numInputs:null!=n?0:1}}}},average:function(t){return null==t&&(t=A),function(e){var n;return n=e[0],function(e,r,a){return{sum:0,len:0,push:function(t){return isNaN(parseFloat(t[n]))?void 0:(this.sum+=parseFloat(t[n]),this.len++)},value:function(){return this.sum/this.len},format:t,numInputs:null!=n?0:1}}}},sumOverSum:function(t){return null==t&&(t=A),function(e){var n,r;return r=e[0],n=e[1],function(e,a,o){return{sumNum:0,sumDenom:0,push:function(t){return isNaN(parseFloat(t[r]))||(this.sumNum+=parseFloat(t[r])),isNaN(parseFloat(t[n]))?void 0:this.sumDenom+=parseFloat(t[n])},value:function(){return this.sumNum/this.sumDenom},format:t,numInputs:null!=r&&null!=n?0:2}}}},sumOverSumBound80:function(t,e){return null==t&&(t=!0),null==e&&(e=A),function(n){var r,a;return a=n[0],r=n[1],function(n,o,i){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 e;return e=t?1:-1,(.821187207574908/this.sumDenom+this.sumNum/this.sumDenom+1.2815515655446004*e*Math.sqrt(.410593603787454/(this.sumDenom*this.sumDenom)+this.sumNum*(1-this.sumNum/this.sumDenom)/(this.sumDenom*this.sumDenom)))/(1+1.642374415149816/this.sumDenom)},format:e,numInputs:null!=a&&null!=r?0:2}}}},fractionOf:function(t,e,r){return null==e&&(e=\"total\"),null==r&&(r=y),function(){var a;return a=1<=arguments.length?n.call(arguments,0):[],function(n,o,i){return{selector:{total:[[],[]],row:[o,[]],col:[[],i]}[e],inner:t.apply(null,a)(n,o,i),push:function(t){return this.inner.push(t)},format:r,value:function(){return this.inner.value()/n.getAggregator.apply(n,this.selector).inner.value()},numInputs:t.apply(null,a)().numInputs}}}}},u=function(t){return{Count:t.count(C),\"Count Unique Values\":t.countUnique(C),\"List Unique Values\":t.listUnique(\", \"),Sum:t.sum(A),\"Integer Sum\":t.sum(C),Average:t.average(A),Minimum:t.min(A),Maximum:t.max(A),\"Sum over Sum\":t.sumOverSum(A),\"80% Upper Bound\":t.sumOverSumBound80(!0,A),\"80% Lower Bound\":t.sumOverSumBound80(!1,A),\"Sum as Fraction of Total\":t.fractionOf(t.sum(),\"total\",y),\"Sum as Fraction of Rows\":t.fractionOf(t.sum(),\"row\",y),\"Sum as Fraction of Columns\":t.fractionOf(t.sum(),\"col\",y),\"Count as Fraction of Total\":t.fractionOf(t.count(),\"total\",y),\"Count as Fraction of Rows\":t.fractionOf(t.count(),\"row\",y),\"Count as Fraction of Columns\":t.fractionOf(t.count(),\"col\",y)}}(s),v={Table:function(t,e){return m(t,e)},\"Table Barchart\":function(e,n){return t(m(e,n)).barchart()},Heatmap:function(e,n){return t(m(e,n)).heatmap()},\"Row Heatmap\":function(e,n){return t(m(e,n)).heatmap(\"rowheatmap\")},\"Col Heatmap\":function(e,n){return t(m(e,n)).heatmap(\"colheatmap\")}},h={en:{aggregators:u,renderers:v,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 results\",totals:\"Totals\",vs:\"vs\",by:\"by\"}}},d=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],l=[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],w=function(t){return(\"0\"+t).substr(-2,2)},c={bin:function(t,e){return function(n){return n[t]-n[t]%e}},dateFormat:function(t,e,n,r,a){var o;return null==n&&(n=!1),null==r&&(r=d),null==a&&(a=l),o=n?\"UTC\":\"\",function(n){var i;return i=new Date(Date.parse(n[t])),isNaN(i)?\"\":e.replace(/%(.)/g,function(t,e){switch(e){case\"y\":return i[\"get\"+o+\"FullYear\"]();case\"m\":return w(i[\"get\"+o+\"Month\"]()+1);case\"n\":return r[i[\"get\"+o+\"Month\"]()];case\"d\":return w(i[\"get\"+o+\"Date\"]());case\"w\":return a[i[\"get\"+o+\"Day\"]()];case\"x\":return i[\"get\"+o+\"Day\"]();case\"H\":return w(i[\"get\"+o+\"Hours\"]());case\"M\":return w(i[\"get\"+o+\"Minutes\"]());case\"S\":return w(i[\"get\"+o+\"Seconds\"]());default:return\"%\"+e}})}}},f=function(t){return function(t,e){var n,r,a,o,i,s,u;if(s=/(\\d+)|(\\D+)/g,i=/\\d/,u=/^0/,\"number\"==typeof t||\"number\"==typeof e)return isNaN(t)?1:isNaN(e)?-1:t-e;if(n=String(t).toLowerCase(),a=String(e).toLowerCase(),n===a)return 0;if(!i.test(n)||!i.test(a))return n>a?1:-1;for(n=n.match(s),a=a.match(s);n.length&&a.length;)if(r=n.shift(),o=a.shift(),r!==o)return i.test(r)&&i.test(o)?r.replace(u,\".0\")-o.replace(u,\".0\"):r>o?1:-1;return n.length-a.length}}(this),b=function(t){var e,n,r;n={};for(e in t)r=t[e],n[r]=e;return function(t,e){return null!=n[t]&&null!=n[e]?n[t]-n[e]:null!=n[t]?-1:null!=n[e]?1:f(t,e)}},p=function(e,n){var r;return r=e(n),t.isFunction(r)?r:f},t.pivotUtilities={aggregatorTemplates:s,aggregators:u,renderers:v,derivers:c,locales:h,naturalSort:f,numberFormat:g,sortAs:b},o=function(){function e(t,n){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.aggregator=n.aggregator,this.aggregatorName=n.aggregatorName,this.colAttrs=n.cols,this.rowAttrs=n.rows,this.valAttrs=n.vals,this.sorters=n.sorters,this.tree={},this.rowKeys=[],this.colKeys=[],this.rowTotals={},this.colTotals={},this.allTotal=this.aggregator(this,[],[]),this.sorted=!1,e.forEachRecord(t,n.derivedAttributes,function(t){return function(e){return n.filter(e)?t.processRecord(e):void 0}}(this))}return e.forEachRecord=function(e,n,r){var o,i,s,u,l,c,p,h,d,f,g,m;if(o=t.isEmptyObject(n)?r:function(t){var e,a,o;for(e in n)o=n[e],t[e]=null!=(a=o(t))?a:t[e];return r(t)},t.isFunction(e))return e(o);if(t.isArray(e)){if(t.isArray(e[0])){f=[];for(s in e)if(a.call(e,s)&&(i=e[s],s>0)){h={},d=e[0];for(u in d)a.call(d,u)&&(l=d[u],h[l]=i[u]);f.push(o(h))}return f}for(g=[],c=0,p=e.length;p>c;c++)h=e[c],g.push(o(h));return g}if(e instanceof jQuery)return m=[],t(\"thead > tr > th\",e).each(function(e){return m.push(t(this).text())}),t(\"tbody > tr\",e).each(function(e){return h={},t(\"td\",this).each(function(e){return h[m[e]]=t(this).html()}),o(h)});throw new Error(\"unknown input format\")},e.convertToArray=function(t){var n;return n=[],e.forEachRecord(t,{},function(t){return n.push(t)}),n},e.prototype.arrSort=function(t){var e,n;return n=function(){var n,r,a;for(a=[],n=0,r=t.length;r>n;n++)e=t[n],a.push(p(this.sorters,e));return a}.call(this),function(t,e){var r,a,o;for(a in n)if(o=n[a],r=o(t[a],e[a]),0!==r)return r;return 0}},e.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)))},e.prototype.getColKeys=function(){return this.sortKeys(),this.colKeys},e.prototype.getRowKeys=function(){return this.sortKeys(),this.rowKeys},e.prototype.processRecord=function(t){var e,n,r,a,o,i,s,u,l,c,p,h,d;for(e=[],h=[],u=this.colAttrs,a=0,o=u.length;o>a;a++)d=u[a],e.push(null!=(l=t[d])?l:\"null\");for(c=this.rowAttrs,s=0,i=c.length;i>s;s++)d=c[s],h.push(null!=(p=t[d])?p:\"null\");return r=h.join(String.fromCharCode(0)),n=e.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!==e.length&&(this.colTotals[n]||(this.colKeys.push(e),this.colTotals[n]=this.aggregator(this,[],e)),this.colTotals[n].push(t)),0!==e.length&&0!==h.length?(this.tree[r]||(this.tree[r]={}),this.tree[r][n]||(this.tree[r][n]=this.aggregator(this,h,e)),this.tree[r][n].push(t)):void 0},e.prototype.getAggregator=function(t,e){var n,r,a;return a=t.join(String.fromCharCode(0)),r=e.join(String.fromCharCode(0)),n=0===t.length&&0===e.length?this.allTotal:0===t.length?this.colTotals[r]:0===e.length?this.rowTotals[a]:this.tree[a][r],null!=n?n:{value:function(){return null},format:function(){return\"\"}}},e}(),m=function(e,n){var r,o,i,s,u,l,c,p,h,d,f,g,m,v,b,A,C,y,w,T,N;l={localeStrings:{totals:\"Totals\"}},n=t.extend(l,n),i=e.colAttrs,f=e.rowAttrs,m=e.getRowKeys(),u=e.getColKeys(),d=document.createElement(\"table\"),d.className=\"pvtTable\",v=function(t,e,n){var r,a,o,i,s,u,l,c;if(0!==e){for(i=!0,c=r=0,s=n;s>=0?s>=r:r>=s;c=s>=0?++r:--r)t[e-1][c]!==t[e][c]&&(i=!1);if(i)return-1}for(a=0;e+a<t.length;){for(l=!1,c=o=0,u=n;u>=0?u>=o:o>=u;c=u>=0?++o:--o)t[e][c]!==t[e+a][c]&&(l=!0);if(l)break;a++}return a};for(p in i)if(a.call(i,p)){o=i[p],y=document.createElement(\"tr\"),0===parseInt(p)&&0!==f.length&&(A=document.createElement(\"th\"),A.setAttribute(\"colspan\",f.length),A.setAttribute(\"rowspan\",i.length),y.appendChild(A)),A=document.createElement(\"th\"),A.className=\"pvtAxisLabel\",A.innerHTML=o,y.appendChild(A);for(c in u)a.call(u,c)&&(s=u[c],N=v(u,parseInt(c),parseInt(p)),-1!==N&&(A=document.createElement(\"th\"),A.className=\"pvtColLabel\",A.innerHTML=s[p],A.setAttribute(\"colspan\",N),parseInt(p)===i.length-1&&0!==f.length&&A.setAttribute(\"rowspan\",2),y.appendChild(A)));0===parseInt(p)&&(A=document.createElement(\"th\"),A.className=\"pvtTotalLabel\",A.innerHTML=n.localeStrings.totals,A.setAttribute(\"rowspan\",i.length+(0===f.length?0:1)),y.appendChild(A)),d.appendChild(y)}if(0!==f.length){y=document.createElement(\"tr\");for(c in f)a.call(f,c)&&(h=f[c],A=document.createElement(\"th\"),A.className=\"pvtAxisLabel\",A.innerHTML=h,y.appendChild(A));A=document.createElement(\"th\"),0===i.length&&(A.className=\"pvtTotalLabel\",A.innerHTML=n.localeStrings.totals),y.appendChild(A),d.appendChild(y)}for(c in m)if(a.call(m,c)){g=m[c],y=document.createElement(\"tr\");for(p in g)a.call(g,p)&&(w=g[p],N=v(m,parseInt(c),parseInt(p)),-1!==N&&(A=document.createElement(\"th\"),A.className=\"pvtRowLabel\",A.innerHTML=w,A.setAttribute(\"rowspan\",N),parseInt(p)===f.length-1&&0!==i.length&&A.setAttribute(\"colspan\",2),y.appendChild(A)));for(p in u)a.call(u,p)&&(s=u[p],r=e.getAggregator(g,s),T=r.value(),b=document.createElement(\"td\"),b.className=\"pvtVal row\"+c+\" col\"+p,b.innerHTML=r.format(T),b.setAttribute(\"data-value\",T),y.appendChild(b));C=e.getAggregator(g,[]),T=C.value(),b=document.createElement(\"td\"),b.className=\"pvtTotal rowTotal\",b.innerHTML=C.format(T),b.setAttribute(\"data-value\",T),b.setAttribute(\"data-for\",\"row\"+c),y.appendChild(b),d.appendChild(y)}y=document.createElement(\"tr\"),A=document.createElement(\"th\"),A.className=\"pvtTotalLabel\",A.innerHTML=n.localeStrings.totals,A.setAttribute(\"colspan\",f.length+(0===i.length?0:1)),y.appendChild(A);for(p in u)a.call(u,p)&&(s=u[p],C=e.getAggregator([],s),T=C.value(),b=document.createElement(\"td\"),b.className=\"pvtTotal colTotal\",b.innerHTML=C.format(T),b.setAttribute(\"data-value\",T),b.setAttribute(\"data-for\",\"col\"+p),y.appendChild(b));return C=e.getAggregator([],[]),T=C.value(),b=document.createElement(\"td\"),b.className=\"pvtGrandTotal\",b.innerHTML=C.format(T),b.setAttribute(\"data-value\",T),y.appendChild(b),d.appendChild(y),d.setAttribute(\"data-numrows\",m.length),d.setAttribute(\"data-numcols\",u.length),d},t.fn.pivot=function(e,n){var r,a,i,u,l;r={cols:[],rows:[],vals:[],filter:function(){return!0},aggregator:s.count()(),aggregatorName:\"Count\",sorters:function(){},derivedAttributes:{},renderer:m,rendererOptions:null,localeStrings:h.en.localeStrings},n=t.extend(r,n),u=null;try{i=new o(e,n);try{u=n.renderer(i,n.rendererOptions)}catch(c){a=c,\"undefined\"!=typeof console&&null!==console&&console.error(a.stack),u=t(\"<span>\").html(n.localeStrings.renderError)}}catch(c){a=c,\"undefined\"!=typeof console&&null!==console&&console.error(a.stack),u=t(\"<span>\").html(n.localeStrings.computeError)}for(l=this[0];l.hasChildNodes();)l.removeChild(l.lastChild);return this.append(u)},t.fn.pivotUI=function(n,r,i,s){var u,l,c,d,g,m,v,b,A,C,y,w,T,N,S,x,F,M,E,L,k,D,R,I,O,K,q,H,U,V,j,B,P,J,_,z,Q,W,Y,Z;null==i&&(i=!1),null==s&&(s=\"en\"),v={derivedAttributes:{},aggregators:h[s].aggregators,renderers:h[s].renderers,hiddenAttributes:[],menuLimit:200,cols:[],rows:[],vals:[],exclusions:{},unusedAttrsVertical:85,autoSortUnusedAttrs:!1,rendererOptions:{localeStrings:h[s].localeStrings},onRefresh:null,filter:function(){return!0},sorters:function(){},localeStrings:h[s].localeStrings},A=this.data(\"pivotUIOptions\"),k=null==A||i?t.extend(v,r):A;try{n=o.convertToArray(n),J=function(){var t,e;t=n[0],e=[];for(T in t)a.call(t,T)&&e.push(T);return e}(),I=k.derivedAttributes;for(g in I)a.call(I,g)&&e.call(J,g)<0&&J.push(g);for(d={},N=0,S=J.length;S>N;N++)Z=J[N],d[Z]={};o.forEachRecord(n,k.derivedAttributes,function(t){var e,n,r;n=[];for(T in t)a.call(t,T)&&(r=t[T],k.filter(t)&&(null==r&&(r=\"null\"),null==(e=d[T])[r]&&(e[r]=0),n.push(d[T][r]++)));return n}),Q=t(\"<table>\",{\"class\":\"pvtUi\"}).attr(\"cellpadding\",5),B=t(\"<td>\"),j=t(\"<select>\").addClass(\"pvtRenderer\").appendTo(B).bind(\"change\",function(){return U()}),O=k.renderers;for(Z in O)a.call(O,Z)&&t(\"<option>\").val(Z).html(Z).appendTo(j);if(m=t(\"<td>\").addClass(\"pvtAxisContainer pvtUnused\"),P=function(){var t,n,r;for(r=[],n=0,t=J.length;t>n;n++)g=J[n],e.call(k.hiddenAttributes,g)<0&&r.push(g);return r}(),Y=!1,W=\"auto\"===k.unusedAttrsVertical?120:parseInt(k.unusedAttrsVertical),!isNaN(W)){for(c=0,E=0,x=P.length;x>E;E++)u=P[E],c+=u.length;Y=c>W}m.addClass(k.unusedAttrsVertical===!0||Y?\"pvtVertList\":\"pvtHorizList\"),C=function(n){var r,a,o,i,s,u,l,c,h,f,g,v,b,A,C;if(l=function(){var t;t=[];for(T in d[n])t.push(T);return t}(),u=!1,C=t(\"<div>\").addClass(\"pvtFilterBox\").hide(),C.append(t(\"<h4>\").text(n+\" (\"+l.length+\")\")),l.length>k.menuLimit)C.append(t(\"<p>\").html(k.localeStrings.tooMany));else for(a=t(\"<p>\").appendTo(C),a.append(t(\"<button>\",{type:\"button\"}).html(k.localeStrings.selectAll).bind(\"click\",function(){return C.find(\"input:visible\").prop(\"checked\",!0)})),a.append(t(\"<button>\",{type:\"button\"}).html(k.localeStrings.selectNone).bind(\"click\",function(){return C.find(\"input:visible\").prop(\"checked\",!1)})),a.append(t(\"<br>\")),a.append(t(\"<input>\",{type:\"text\",placeholder:k.localeStrings.filterResults,\"class\":\"pvtSearch\"}).bind(\"keyup\",function(){var e;return e=t(this).val().toLowerCase(),C.find(\".pvtCheckContainer p\").each(function(){var n;return n=t(this).text().toLowerCase().indexOf(e),-1!==n?t(this).show():t(this).hide()})})),o=t(\"<div>\").addClass(\"pvtCheckContainer\").appendTo(C),f=l.sort(p(k.sorters,n)),h=0,c=f.length;c>h;h++)T=f[h],A=d[n][T],i=t(\"<label>\"),s=k.exclusions[n]?e.call(k.exclusions[n],T)>=0:!1,u||(u=s),t(\"<input>\").attr(\"type\",\"checkbox\").addClass(\"pvtFilter\").attr(\"checked\",!s).data(\"filter\",[n,T]).appendTo(i),i.append(t(\"<span>\").html(T)),i.append(t(\"<span>\").text(\" (\"+A+\")\")),o.append(t(\"<p>\").append(i));return b=function(){var t;return t=C.find(\"[type='checkbox']\").length-C.find(\"[type='checkbox']:checked\").length,t>0?r.addClass(\"pvtFilteredAttribute\"):r.removeClass(\"pvtFilteredAttribute\"),l.length>k.menuLimit?C.toggle():C.toggle(0,U)},t(\"<p>\").appendTo(C).append(t(\"<button>\",{type:\"button\"}).text(\"OK\").bind(\"click\",b)),g=function(t){return C.css({left:t.pageX,top:t.pageY}).toggle(),C.find(\".pvtSearch\").val(\"\"),C.find(\".pvtCheckContainer p\").show()},v=t(\"<span>\").addClass(\"pvtTriangle\").html(\" &#x25BE;\").bind(\"click\",g),r=t(\"<li>\").addClass(\"axis_\"+y).append(t(\"<span>\").addClass(\"pvtAttr\").text(n).data(\"attrName\",n).append(v)),u&&r.addClass(\"pvtFilteredAttribute\"),m.append(r).append(C),r.bind(\"dblclick\",g)};for(y in P)a.call(P,y)&&(g=P[y],C(g));_=t(\"<tr>\").appendTo(Q),l=t(\"<select>\").addClass(\"pvtAggregator\").bind(\"change\",function(){return U()}),K=k.aggregators;for(Z in K)a.call(K,Z)&&l.append(t(\"<option>\").val(Z).html(Z));for(t(\"<td>\").addClass(\"pvtVals\").appendTo(_).append(l).append(t(\"<br>\")),t(\"<td>\").addClass(\"pvtAxisContainer pvtHorizList pvtCols\").appendTo(_),z=t(\"<tr>\").appendTo(Q),z.append(t(\"<td>\").addClass(\"pvtAxisContainer pvtRows\").attr(\"valign\",\"top\")),D=t(\"<td>\").attr(\"valign\",\"top\").addClass(\"pvtRendererArea\").appendTo(z),k.unusedAttrsVertical===!0||Y?(Q.find(\"tr:nth-child(1)\").prepend(B),Q.find(\"tr:nth-child(2)\").prepend(m)):Q.prepend(t(\"<tr>\").append(B).append(m)),this.html(Q),q=k.cols,L=0,F=q.length;F>L;L++)Z=q[L],this.find(\".pvtCols\").append(this.find(\".axis_\"+t.inArray(Z,P)));for(H=k.rows,R=0,M=H.length;M>R;R++)Z=H[R],this.find(\".pvtRows\").append(this.find(\".axis_\"+t.inArray(Z,P)));null!=k.aggregatorName&&this.find(\".pvtAggregator\").val(k.aggregatorName),null!=k.rendererName&&this.find(\".pvtRenderer\").val(k.rendererName),w=!0,V=function(r){return function(){var a,o,i,s,u,c,p,h,d,g,m,v,b,A,C;if(v={derivedAttributes:k.derivedAttributes,localeStrings:k.localeStrings,rendererOptions:k.rendererOptions,sorters:k.sorters,cols:[],rows:[]},c=null!=(d=k.aggregators[l.val()]([])().numInputs)?d:0,C=[],r.find(\".pvtRows li span.pvtAttr\").each(function(){return v.rows.push(t(this).data(\"attrName\"))}),r.find(\".pvtCols li span.pvtAttr\").each(function(){return v.cols.push(t(this).data(\"attrName\"))}),r.find(\".pvtVals select.pvtAttrDropdown\").each(function(){return 0===c?t(this).remove():(c--,\"\"!==t(this).val()?C.push(t(this).val()):void 0)}),0!==c)for(h=r.find(\".pvtVals\"),Z=m=0,g=c;g>=0?g>m:m>g;Z=g>=0?++m:--m){for(u=t(\"<select>\").addClass(\"pvtAttrDropdown\").append(t(\"<option>\")).bind(\"change\",function(){return U()}),b=0,s=P.length;s>b;b++)a=P[b],u.append(t(\"<option>\").val(a).text(a));h.append(u)}return w&&(C=k.vals,y=0,r.find(\".pvtVals select.pvtAttrDropdown\").each(function(){return t(this).val(C[y]),y++}),w=!1),v.aggregatorName=l.val(),v.vals=C,v.aggregator=k.aggregators[l.val()](C),v.renderer=k.renderers[j.val()],o={},r.find(\"input.pvtFilter\").not(\":checked\").each(function(){var e;return e=t(this).data(\"filter\"),null!=o[e[0]]?o[e[0]].push(e[1]):o[e[0]]=[e[1]]}),i={},r.find(\"input.pvtFilter:checked\").each(function(){var e;return e=t(this).data(\"filter\"),null!=o[e[0]]?null!=i[e[0]]?i[e[0]].push(e[1]):i[e[0]]=[e[1]]:void 0}),v.filter=function(t){var n,r;if(!k.filter(t))return!1;for(T in o)if(n=o[T],r=\"\"+t[T],e.call(n,r)>=0)return!1;return!0},D.pivot(n,v),p=t.extend(k,{cols:v.cols,rows:v.rows,vals:C,exclusions:o,inclusionsInfo:i,aggregatorName:l.val(),rendererName:j.val()}),r.data(\"pivotUIOptions\",p),k.autoSortUnusedAttrs&&(A=r.find(\"td.pvtUnused.pvtAxisContainer\"),t(A).children(\"li\").sort(function(e,n){return f(t(e).text(),t(n).text())}).appendTo(A)),D.css(\"opacity\",1),null!=k.onRefresh?k.onRefresh(p):void 0}}(this),U=function(t){return function(){return D.css(\"opacity\",.5),setTimeout(V,10)}}(this),U(),this.find(\".pvtAxisContainer\").sortable({update:function(t,e){return null==e.sender?U():void 0},connectWith:this.find(\".pvtAxisContainer\"),items:\"li\",placeholder:\"pvtPlaceholder\"})}catch($){b=$,\"undefined\"!=typeof console&&null!==console&&console.error(b.stack),this.html(k.localeStrings.uiRenderError)}return this},t.fn.heatmap=function(e){var n,r,a,o,i,s,u,l,c,p;switch(null==e&&(e=\"heatmap\"),l=this.data(\"numrows\"),u=this.data(\"numcols\"),n=function(t,e,n){var r;return r=function(){switch(t){case\"red\":return function(t){return\"ff\"+t+t};case\"green\":return function(t){return t+\"ff\"+t};case\"blue\":return function(t){return\"\"+t+t+\"ff\"}}}(),function(t){var a,o;return o=255-Math.round(255*(t-e)/(n-e)),a=o.toString(16).split(\".\")[0],1===a.length&&(a=0+a),r(a)}},r=function(e){return function(r,a){var o,i,s;return i=function(n){return e.find(r).each(function(){var e;return e=t(this).data(\"value\"),null!=e&&isFinite(e)?n(e,t(this)):void 0})},s=[],i(function(t){return s.push(t)}),o=n(a,Math.min.apply(Math,s),Math.max.apply(Math,s)),i(function(t,e){return e.css(\"background-color\",\"#\"+o(t))})}}(this),e){case\"heatmap\":r(\".pvtVal\",\"red\");break;case\"rowheatmap\":for(a=i=0,c=l;c>=0?c>i:i>c;a=c>=0?++i:--i)r(\".pvtVal.row\"+a,\"red\");break;case\"colheatmap\":for(o=s=0,p=u;p>=0?p>s:s>p;o=p>=0?++s:--s)r(\".pvtVal.col\"+o,\"red\")}return r(\".pvtTotal.rowTotal\",\"red\"),r(\".pvtTotal.colTotal\",\"red\"),this},t.fn.barchart=function(){var e,n,r,a,o,i;for(o=this.data(\"numrows\"),a=this.data(\"numcols\"),e=function(e){return function(n){var r,a,o,i;return r=function(r){return e.find(n).each(function(){var e;return e=t(this).data(\"value\"),null!=e&&isFinite(e)?r(e,t(this)):void 0})},i=[],r(function(t){return i.push(t)}),a=Math.max.apply(Math,i),o=function(t){return 100*t/(1.4*a)},r(function(e,n){var r,a;return r=n.text(),a=t(\"<div>\").css({position:\"relative\",height:\"55px\"}),a.append(t(\"<div>\").css({position:\"absolute\",bottom:0,left:0,right:0,height:o(e)+\"%\",\"background-color\":\"gray\"})),a.append(t(\"<div>\").text(r).css({position:\"relative\",\"padding-left\":\"5px\",\"padding-right\":\"5px\"})),n.css({padding:0,\"padding-top\":\"5px\",\"text-align\":\"center\"}).html(a)})}}(this),n=r=0,i=o;i>=0?i>r:r>i;n=i>=0?++r:--r)e(\".pvtVal.row\"+n);return e(\".pvtTotal.colTotal\"),this}})}).call(this);\n//# sourceMappingURL=pivot.min.js.map"],"sourceRoot":"/source/"}
\ No newline at end of file
+{"version":3,"sources":["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","extend","result","isNaN","isFinite","toFixed","count","formatter","data","rowKey","colKey","push","value","format","uniques","arg","attr","uniq","record","ref","call","numInputs","sum","parseFloat","extremes","mode","val","sorter","sorters","ref1","ref2","Math","quantile","q","vals","sort","a","b","floor","ceil","runningStat","ddof","n","m","s","m_new","sqrt","sumOverSum","denom","num","sumNum","sumDenom","sumOverSumBound80","upper","sign","fractionOf","wrapped","type","selector","total","row","col","inner","getAggregator","countUnique","f","listUnique","join","max","min","first","last","median","average","stdev","tpl","Count","Count Unique Values","List Unique Values","Sum","Integer Sum","Average","Median","Sample Variance","Sample Standard Deviation","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","p","_this","as","bs","a1","b1","nas","nbs","String","match","shift","order","l_mapping","mapping","toLowerCase","isFunction","input","ref3","ref4","ref5","ref6","ref7","ref8","ref9","getRowKeys","getColKeys","sortKeys","arrSort","aggregator","aggregatorName","colAttrs","cols","rowAttrs","rows","valAttrs","rowOrder","colOrder","derivedAttributes","filter","tree","rowKeys","colKeys","rowTotals","colTotals","allTotal","sorted","forEachRecord","processRecord","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","fromCharCode","agg","pivotUtilities","pivotData","getClickHandler","spanSize","tbody","td","th","thead","totalAggregator","tr","txt","table","clickCallback","rowValues","colValues","filters","e","document","createElement","className","arr","len","noDraw","stop","parseInt","setAttribute","appendChild","textContent","innerHTML","onclick","pivot","inputOpts","locale","localeDefaults","dataClass","renderer","rendererOptions","error","console","stack","html","hasChildNodes","removeChild","lastChild","append","pivotUI","overwrite","attrLength","attrValues","colOrderArrow","existingOpts","fn1","initialRender","len3","materializedInput","o","ordering","pivotTable","recordsProcessed","refresh","refreshDelayed","rendererControl","rowOrderArrow","shownAttributes","shownInAggregators","shownInDragDrop","tr1","tr2","uiTable","unused","unusedAttrsVerticalAutoCutoff","unusedAttrsVerticalAutoOverride","hiddenAttributes","hiddenFromAggregators","hiddenFromDragDrop","menuLimit","exclusions","inclusions","unusedAttrsVertical","autoSortUnusedAttrs","onRefresh","showUI","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","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","subopts","t","u","unusedAttrsContainer","remove","not","excludedItems","inclusionsInfo","children","setTimeout","sortable","update","ui","sender","connectWith","items","scope","colorScaleGenerator","heatmapper","numCols","numRows","nonRed","round","colorScale","forEachCell","elem","barcharter","range","bBase","bgColor","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        opts = $.extend({}, defaults, opts)\n        (x) ->\n            return \"\" if isNaN(x) or not isFinite(x)\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        uniques: (fn, formatter=usFmtInt) -> ([attr]) -> (data, rowKey, colKey) ->\n            uniq: []\n            push: (record) -> @uniq.push(record[attr]) if record[attr] not in @uniq\n            value: -> fn(@uniq)\n            format: formatter\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        extremes: (mode, formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->\n            val: null\n            sorter: getSort(data?.sorters, attr)\n            push: (record) ->\n                x = record[attr]\n                if mode in [\"min\", \"max\"]\n                    x = parseFloat(x)\n                    if not isNaN x then @val = Math[mode](x, @val ? x)\n                if mode == \"first\" then @val = x if @sorter(x, @val ? x) <= 0\n                if mode == \"last\"  then @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        quantile: (q, formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->\n            vals: []\n            push: (record) ->\n                x = parseFloat(record[attr])\n                @vals.push(x) if not isNaN(x)\n            value: ->\n                return null if @vals.length == 0\n                @vals.sort((a,b) -> a-b)\n                i = (@vals.length-1)*q\n                return (@vals[Math.floor(i)] + @vals[Math.ceil(i)])/2.0\n            format: formatter\n            numInputs: if attr? then 0 else 1\n\n        runningStat: (mode=\"mean\", ddof=1, formatter=usFmt) -> ([attr]) -> (data, rowKey, colKey) ->\n            n: 0.0, m: 0.0, s: 0.0\n            push: (record) ->\n                x = parseFloat(record[attr])\n                return if isNaN(x)\n                @n += 1.0\n                if @n == 1.0\n                    @m = x\n                else\n                    m_new = @m + (x - @m)/@n\n                    @s = @s + (x - @m)*(x - m_new)\n                    @m = m_new\n            value: ->\n                if mode == \"mean\"\n                    return if @n == 0 then 0/0 else @m\n                return 0 if @n <= ddof\n                switch mode\n                    when \"var\"   then @s/(@n-ddof)\n                    when \"stdev\" then Math.sqrt(@s/(@n-ddof))\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    aggregatorTemplates.countUnique = (f) -> aggregatorTemplates.uniques(((x) -> x.length), f)\n    aggregatorTemplates.listUnique =  (s) -> aggregatorTemplates.uniques(((x) -> x.sort(naturalSort).join(s)), ((x)->x))\n    aggregatorTemplates.max =         (f) -> aggregatorTemplates.extremes('max', f)\n    aggregatorTemplates.min =         (f) -> aggregatorTemplates.extremes('min', f)\n    aggregatorTemplates.first =       (f) -> aggregatorTemplates.extremes('first', f)\n    aggregatorTemplates.last =        (f) -> aggregatorTemplates.extremes('last', f)\n    aggregatorTemplates.median =      (f) -> aggregatorTemplates.quantile(0.5, f)\n    aggregatorTemplates.average =     (f) -> aggregatorTemplates.runningStat(\"mean\", 1, f)\n    aggregatorTemplates.var =         (ddof, f) -> aggregatorTemplates.runningStat(\"var\", ddof, f)\n    aggregatorTemplates.stdev =       (ddof, f) -> aggregatorTemplates.runningStat(\"stdev\", ddof, f)\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        \"Median\":               tpl.median(usFmt)\n        \"Sample Variance\":      tpl.var(1, usFmt)\n        \"Sample Standard Deviation\": tpl.stdev(1, 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 $\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:\n                clickCallback: null\n                rowTotals: true\n                colTotals: true\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 && opts.table.rowTotals\n                th = document.createElement(\"th\")\n                th.className = \"pvtTotalLabel pvtRowTotalLabel\"\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 pvtRowTotalLabel\"\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            if opts.table.rowTotals || colAttrs.length == 0\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        if opts.table.colTotals || rowAttrs.length == 0\n            tr = document.createElement(\"tr\")\n            if opts.table.colTotals || rowAttrs.length == 0\n                th = document.createElement(\"th\")\n                th.className = \"pvtTotalLabel pvtColTotalLabel\"\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            if opts.table.rowTotals || colAttrs.length == 0\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            hiddenFromAggregators: []\n            hiddenFromDragDrop: []\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            showUI: true\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>\").addClass(\"pvtUiCell\")\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 pvtUiCell')\n            shownAttributes = (a for a of attrValues when a not in opts.hiddenAttributes)\n            shownInAggregators = (c for c in shownAttributes when c not in opts.hiddenFromAggregators)\n            shownInDragDrop = (c for c in shownAttributes when c not in opts.hiddenFromDragDrop)\n\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 shownInDragDrop\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 shownInDragDrop\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.indexOf(\">=\") == 0 then accept_gen(\">=\", [1,0])\n                                        else if filter.indexOf(\"<=\") == 0 then accept_gen(\"<=\", [-1,0])\n                                        else if filter.indexOf(\">\") == 0  then accept_gen(\">\",  [1])\n                                        else if filter.indexOf(\"<\") == 0  then accept_gen(\"<\",  [-1])\n                                        else if filter.indexOf(\"~\") == 0  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 pvtUiCell')\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 pvtUiCell').appendTo(tr1)\n\n            tr2 = $(\"<tr>\").appendTo(uiTable)\n\n            #row axes\n            tr2.append $(\"<td>\").addClass('pvtAxisContainer pvtRows pvtUiCell').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, shownInDragDrop)}\")\n            for x in opts.rows\n                @find(\".pvtRows\").append @find(\".axis_#{$.inArray(x, shownInDragDrop)}\")\n            if opts.aggregatorName?\n                @find(\".pvtAggregator\").val opts.aggregatorName\n            if opts.rendererName?\n                @find(\".pvtRenderer\").val opts.rendererName\n\n            @find(\".pvtUiCell\").hide() unless opts.showUI\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 shownInAggregators\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 = (opts) ->\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            if max < 0\n                max = 0\n            range = max;\n            min = Math.min(values...)\n            if min < 0\n                range = max - min\n            scaler = (x) -> 100*x/(1.4*range)\n            forEachCell (x, elem) ->\n                text = elem.text()\n                wrapper = $(\"<div>\").css\n                    \"position\": \"relative\"\n                    \"height\": \"55px\"\n                bgColor = \"gray\"\n                bBase = 0\n                if min < 0\n                    bBase = scaler(-min)\n                if x < 0\n                    bBase += scaler(x)\n                    bgColor = \"darkred\"\n                    x = -x\n                wrapper.append $(\"<div>\").css\n                    \"position\": \"absolute\"\n                    \"bottom\": bBase + \"%\"\n                    \"left\": 0\n                    \"right\": 0\n                    \"height\": scaler(x) + \"%\"\n                    \"background-color\": bgColor\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() {\n  var callWithJQuery,\n    indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },\n    slice = [].slice,\n    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n    hasProp = {}.hasOwnProperty;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n\n    /*\n    Utilities\n     */\n    var PivotData, addSeparators, aggregatorTemplates, aggregators, dayNamesEn, derivers, getSort, locales, mthNamesEn, naturalSort, numberFormat, pivotTableRenderer, rd, renderers, rx, rz, sortAs, usFmt, usFmtInt, usFmtPct, zeroPad;\n    addSeparators = function(nStr, thousandsSep, decimalSep) {\n      var rgx, x, x1, x2;\n      nStr += '';\n      x = nStr.split('.');\n      x1 = x[0];\n      x2 = x.length > 1 ? decimalSep + x[1] : '';\n      rgx = /(\\d+)(\\d{3})/;\n      while (rgx.test(x1)) {\n        x1 = x1.replace(rgx, '$1' + thousandsSep + '$2');\n      }\n      return x1 + x2;\n    };\n    numberFormat = function(opts) {\n      var defaults;\n      defaults = {\n        digitsAfterDecimal: 2,\n        scaler: 1,\n        thousandsSep: \",\",\n        decimalSep: \".\",\n        prefix: \"\",\n        suffix: \"\"\n      };\n      opts = $.extend({}, defaults, opts);\n      return function(x) {\n        var result;\n        if (isNaN(x) || !isFinite(x)) {\n          return \"\";\n        }\n        result = addSeparators((opts.scaler * x).toFixed(opts.digitsAfterDecimal), opts.thousandsSep, opts.decimalSep);\n        return \"\" + opts.prefix + result + opts.suffix;\n      };\n    };\n    usFmt = numberFormat();\n    usFmtInt = numberFormat({\n      digitsAfterDecimal: 0\n    });\n    usFmtPct = numberFormat({\n      digitsAfterDecimal: 1,\n      scaler: 100,\n      suffix: \"%\"\n    });\n    aggregatorTemplates = {\n      count: function(formatter) {\n        if (formatter == null) {\n          formatter = usFmtInt;\n        }\n        return function() {\n          return function(data, rowKey, colKey) {\n            return {\n              count: 0,\n              push: function() {\n                return this.count++;\n              },\n              value: function() {\n                return this.count;\n              },\n              format: formatter\n            };\n          };\n        };\n      },\n      uniques: function(fn, formatter) {\n        if (formatter == null) {\n          formatter = usFmtInt;\n        }\n        return function(arg) {\n          var attr;\n          attr = arg[0];\n          return function(data, rowKey, colKey) {\n            return {\n              uniq: [],\n              push: function(record) {\n                var ref;\n                if (ref = record[attr], indexOf.call(this.uniq, ref) < 0) {\n                  return this.uniq.push(record[attr]);\n                }\n              },\n              value: function() {\n                return fn(this.uniq);\n              },\n              format: formatter,\n              numInputs: attr != null ? 0 : 1\n            };\n          };\n        };\n      },\n      sum: function(formatter) {\n        if (formatter == null) {\n          formatter = usFmt;\n        }\n        return function(arg) {\n          var attr;\n          attr = arg[0];\n          return function(data, rowKey, colKey) {\n            return {\n              sum: 0,\n              push: function(record) {\n                if (!isNaN(parseFloat(record[attr]))) {\n                  return this.sum += parseFloat(record[attr]);\n                }\n              },\n              value: function() {\n                return this.sum;\n              },\n              format: formatter,\n              numInputs: attr != null ? 0 : 1\n            };\n          };\n        };\n      },\n      extremes: function(mode, formatter) {\n        if (formatter == null) {\n          formatter = usFmt;\n        }\n        return function(arg) {\n          var attr;\n          attr = arg[0];\n          return function(data, rowKey, colKey) {\n            return {\n              val: null,\n              sorter: getSort(data != null ? data.sorters : void 0, attr),\n              push: function(record) {\n                var ref, ref1, ref2, x;\n                x = record[attr];\n                if (mode === \"min\" || mode === \"max\") {\n                  x = parseFloat(x);\n                  if (!isNaN(x)) {\n                    this.val = Math[mode](x, (ref = this.val) != null ? ref : x);\n                  }\n                }\n                if (mode === \"first\") {\n                  if (this.sorter(x, (ref1 = this.val) != null ? ref1 : x) <= 0) {\n                    this.val = x;\n                  }\n                }\n                if (mode === \"last\") {\n                  if (this.sorter(x, (ref2 = this.val) != null ? ref2 : x) >= 0) {\n                    return this.val = x;\n                  }\n                }\n              },\n              value: function() {\n                return this.val;\n              },\n              format: function(x) {\n                if (isNaN(x)) {\n                  return x;\n                } else {\n                  return formatter(x);\n                }\n              },\n              numInputs: attr != null ? 0 : 1\n            };\n          };\n        };\n      },\n      quantile: function(q, formatter) {\n        if (formatter == null) {\n          formatter = usFmt;\n        }\n        return function(arg) {\n          var attr;\n          attr = arg[0];\n          return function(data, rowKey, colKey) {\n            return {\n              vals: [],\n              push: function(record) {\n                var x;\n                x = parseFloat(record[attr]);\n                if (!isNaN(x)) {\n                  return this.vals.push(x);\n                }\n              },\n              value: function() {\n                var i;\n                if (this.vals.length === 0) {\n                  return null;\n                }\n                this.vals.sort(function(a, b) {\n                  return a - b;\n                });\n                i = (this.vals.length - 1) * q;\n                return (this.vals[Math.floor(i)] + this.vals[Math.ceil(i)]) / 2.0;\n              },\n              format: formatter,\n              numInputs: attr != null ? 0 : 1\n            };\n          };\n        };\n      },\n      runningStat: function(mode, ddof, formatter) {\n        if (mode == null) {\n          mode = \"mean\";\n        }\n        if (ddof == null) {\n          ddof = 1;\n        }\n        if (formatter == null) {\n          formatter = usFmt;\n        }\n        return function(arg) {\n          var attr;\n          attr = arg[0];\n          return function(data, rowKey, colKey) {\n            return {\n              n: 0.0,\n              m: 0.0,\n              s: 0.0,\n              push: function(record) {\n                var m_new, x;\n                x = parseFloat(record[attr]);\n                if (isNaN(x)) {\n                  return;\n                }\n                this.n += 1.0;\n                if (this.n === 1.0) {\n                  return this.m = x;\n                } else {\n                  m_new = this.m + (x - this.m) / this.n;\n                  this.s = this.s + (x - this.m) * (x - m_new);\n                  return this.m = m_new;\n                }\n              },\n              value: function() {\n                if (mode === \"mean\") {\n                  if (this.n === 0) {\n                    return 0 / 0;\n                  } else {\n                    return this.m;\n                  }\n                }\n                if (this.n <= ddof) {\n                  return 0;\n                }\n                switch (mode) {\n                  case \"var\":\n                    return this.s / (this.n - ddof);\n                  case \"stdev\":\n                    return Math.sqrt(this.s / (this.n - ddof));\n                }\n              },\n              format: formatter,\n              numInputs: attr != null ? 0 : 1\n            };\n          };\n        };\n      },\n      sumOverSum: function(formatter) {\n        if (formatter == null) {\n          formatter = usFmt;\n        }\n        return function(arg) {\n          var denom, num;\n          num = arg[0], denom = arg[1];\n          return function(data, rowKey, colKey) {\n            return {\n              sumNum: 0,\n              sumDenom: 0,\n              push: function(record) {\n                if (!isNaN(parseFloat(record[num]))) {\n                  this.sumNum += parseFloat(record[num]);\n                }\n                if (!isNaN(parseFloat(record[denom]))) {\n                  return this.sumDenom += parseFloat(record[denom]);\n                }\n              },\n              value: function() {\n                return this.sumNum / this.sumDenom;\n              },\n              format: formatter,\n              numInputs: (num != null) && (denom != null) ? 0 : 2\n            };\n          };\n        };\n      },\n      sumOverSumBound80: function(upper, formatter) {\n        if (upper == null) {\n          upper = true;\n        }\n        if (formatter == null) {\n          formatter = usFmt;\n        }\n        return function(arg) {\n          var denom, num;\n          num = arg[0], denom = arg[1];\n          return function(data, rowKey, colKey) {\n            return {\n              sumNum: 0,\n              sumDenom: 0,\n              push: function(record) {\n                if (!isNaN(parseFloat(record[num]))) {\n                  this.sumNum += parseFloat(record[num]);\n                }\n                if (!isNaN(parseFloat(record[denom]))) {\n                  return this.sumDenom += parseFloat(record[denom]);\n                }\n              },\n              value: function() {\n                var sign;\n                sign = upper ? 1 : -1;\n                return (0.821187207574908 / this.sumDenom + this.sumNum / this.sumDenom + 1.2815515655446004 * sign * Math.sqrt(0.410593603787454 / (this.sumDenom * this.sumDenom) + (this.sumNum * (1 - this.sumNum / this.sumDenom)) / (this.sumDenom * this.sumDenom))) / (1 + 1.642374415149816 / this.sumDenom);\n              },\n              format: formatter,\n              numInputs: (num != null) && (denom != null) ? 0 : 2\n            };\n          };\n        };\n      },\n      fractionOf: function(wrapped, type, formatter) {\n        if (type == null) {\n          type = \"total\";\n        }\n        if (formatter == null) {\n          formatter = usFmtPct;\n        }\n        return function() {\n          var x;\n          x = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n          return function(data, rowKey, colKey) {\n            return {\n              selector: {\n                total: [[], []],\n                row: [rowKey, []],\n                col: [[], colKey]\n              }[type],\n              inner: wrapped.apply(null, x)(data, rowKey, colKey),\n              push: function(record) {\n                return this.inner.push(record);\n              },\n              format: formatter,\n              value: function() {\n                return this.inner.value() / data.getAggregator.apply(data, this.selector).inner.value();\n              },\n              numInputs: wrapped.apply(null, x)().numInputs\n            };\n          };\n        };\n      }\n    };\n    aggregatorTemplates.countUnique = function(f) {\n      return aggregatorTemplates.uniques((function(x) {\n        return x.length;\n      }), f);\n    };\n    aggregatorTemplates.listUnique = function(s) {\n      return aggregatorTemplates.uniques((function(x) {\n        return x.sort(naturalSort).join(s);\n      }), (function(x) {\n        return x;\n      }));\n    };\n    aggregatorTemplates.max = function(f) {\n      return aggregatorTemplates.extremes('max', f);\n    };\n    aggregatorTemplates.min = function(f) {\n      return aggregatorTemplates.extremes('min', f);\n    };\n    aggregatorTemplates.first = function(f) {\n      return aggregatorTemplates.extremes('first', f);\n    };\n    aggregatorTemplates.last = function(f) {\n      return aggregatorTemplates.extremes('last', f);\n    };\n    aggregatorTemplates.median = function(f) {\n      return aggregatorTemplates.quantile(0.5, f);\n    };\n    aggregatorTemplates.average = function(f) {\n      return aggregatorTemplates.runningStat(\"mean\", 1, f);\n    };\n    aggregatorTemplates[\"var\"] = function(ddof, f) {\n      return aggregatorTemplates.runningStat(\"var\", ddof, f);\n    };\n    aggregatorTemplates.stdev = function(ddof, f) {\n      return aggregatorTemplates.runningStat(\"stdev\", ddof, f);\n    };\n    aggregators = (function(tpl) {\n      return {\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        \"Median\": tpl.median(usFmt),\n        \"Sample Variance\": tpl[\"var\"](1, usFmt),\n        \"Sample Standard Deviation\": tpl.stdev(1, 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    })(aggregatorTemplates);\n    renderers = {\n      \"Table\": function(data, opts) {\n        return pivotTableRenderer(data, opts);\n      },\n      \"Table Barchart\": function(data, opts) {\n        return $(pivotTableRenderer(data, opts)).barchart();\n      },\n      \"Heatmap\": function(data, opts) {\n        return $(pivotTableRenderer(data, opts)).heatmap(\"heatmap\", opts);\n      },\n      \"Row Heatmap\": function(data, opts) {\n        return $(pivotTableRenderer(data, opts)).heatmap(\"rowheatmap\", opts);\n      },\n      \"Col Heatmap\": function(data, opts) {\n        return $(pivotTableRenderer(data, opts)).heatmap(\"colheatmap\", opts);\n      }\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\",\n          vs: \"vs\",\n          by: \"by\"\n        }\n      }\n    };\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 = function(number) {\n      return (\"0\" + number).substr(-2, 2);\n    };\n    derivers = {\n      bin: function(col, binWidth) {\n        return function(record) {\n          return record[col] - record[col] % binWidth;\n        };\n      },\n      dateFormat: function(col, formatString, utcOutput, mthNames, dayNames) {\n        var utc;\n        if (utcOutput == null) {\n          utcOutput = false;\n        }\n        if (mthNames == null) {\n          mthNames = mthNamesEn;\n        }\n        if (dayNames == null) {\n          dayNames = dayNamesEn;\n        }\n        utc = utcOutput ? \"UTC\" : \"\";\n        return function(record) {\n          var date;\n          date = new Date(Date.parse(record[col]));\n          if (isNaN(date)) {\n            return \"\";\n          }\n          return formatString.replace(/%(.)/g, function(m, p) {\n            switch (p) {\n              case \"y\":\n                return date[\"get\" + utc + \"FullYear\"]();\n              case \"m\":\n                return zeroPad(date[\"get\" + utc + \"Month\"]() + 1);\n              case \"n\":\n                return mthNames[date[\"get\" + utc + \"Month\"]()];\n              case \"d\":\n                return zeroPad(date[\"get\" + utc + \"Date\"]());\n              case \"w\":\n                return dayNames[date[\"get\" + utc + \"Day\"]()];\n              case \"x\":\n                return date[\"get\" + utc + \"Day\"]();\n              case \"H\":\n                return zeroPad(date[\"get\" + utc + \"Hours\"]());\n              case \"M\":\n                return zeroPad(date[\"get\" + utc + \"Minutes\"]());\n              case \"S\":\n                return zeroPad(date[\"get\" + utc + \"Seconds\"]());\n              default:\n                return \"%\" + p;\n            }\n          });\n        };\n      }\n    };\n    rx = /(\\d+)|(\\D+)/g;\n    rd = /\\d/;\n    rz = /^0/;\n    naturalSort = (function(_this) {\n      return function(as, bs) {\n        var a, a1, b, b1, nas, nbs;\n        if ((bs != null) && (as == null)) {\n          return -1;\n        }\n        if ((as != null) && (bs == null)) {\n          return 1;\n        }\n        if (typeof as === \"number\" && isNaN(as)) {\n          return -1;\n        }\n        if (typeof bs === \"number\" && isNaN(bs)) {\n          return 1;\n        }\n        nas = +as;\n        nbs = +bs;\n        if (nas < nbs) {\n          return -1;\n        }\n        if (nas > nbs) {\n          return 1;\n        }\n        if (typeof as === \"number\" && typeof bs !== \"number\") {\n          return -1;\n        }\n        if (typeof bs === \"number\" && typeof as !== \"number\") {\n          return 1;\n        }\n        if (typeof as === \"number\" && typeof bs === \"number\") {\n          return 0;\n        }\n        if (isNaN(nbs) && !isNaN(nas)) {\n          return -1;\n        }\n        if (isNaN(nas) && !isNaN(nbs)) {\n          return 1;\n        }\n        a = String(as);\n        b = String(bs);\n        if (a === b) {\n          return 0;\n        }\n        if (!(rd.test(a) && rd.test(b))) {\n          return (a > b ? 1 : -1);\n        }\n        a = a.match(rx);\n        b = b.match(rx);\n        while (a.length && b.length) {\n          a1 = a.shift();\n          b1 = b.shift();\n          if (a1 !== b1) {\n            if (rd.test(a1) && rd.test(b1)) {\n              return a1.replace(rz, \".0\") - b1.replace(rz, \".0\");\n            } else {\n              return (a1 > b1 ? 1 : -1);\n            }\n          }\n        }\n        return a.length - b.length;\n      };\n    })(this);\n    sortAs = function(order) {\n      var i, l_mapping, mapping, x;\n      mapping = {};\n      l_mapping = {};\n      for (i in order) {\n        x = order[i];\n        mapping[x] = i;\n        if (typeof x === \"string\") {\n          l_mapping[x.toLowerCase()] = i;\n        }\n      }\n      return function(a, b) {\n        if ((mapping[a] != null) && (mapping[b] != null)) {\n          return mapping[a] - mapping[b];\n        } else if (mapping[a] != null) {\n          return -1;\n        } else if (mapping[b] != null) {\n          return 1;\n        } else if ((l_mapping[a] != null) && (l_mapping[b] != null)) {\n          return l_mapping[a] - l_mapping[b];\n        } else if (l_mapping[a] != null) {\n          return -1;\n        } else if (l_mapping[b] != null) {\n          return 1;\n        } else {\n          return naturalSort(a, b);\n        }\n      };\n    };\n    getSort = function(sorters, attr) {\n      var sort;\n      if (sorters != null) {\n        if ($.isFunction(sorters)) {\n          sort = sorters(attr);\n          if ($.isFunction(sort)) {\n            return sort;\n          }\n        } else if (sorters[attr] != null) {\n          return sorters[attr];\n        }\n      }\n      return naturalSort;\n    };\n\n    /*\n    Data Model class\n     */\n    PivotData = (function() {\n      function PivotData(input, opts) {\n        var ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ref9;\n        if (opts == null) {\n          opts = {};\n        }\n        this.getAggregator = bind(this.getAggregator, this);\n        this.getRowKeys = bind(this.getRowKeys, this);\n        this.getColKeys = bind(this.getColKeys, this);\n        this.sortKeys = bind(this.sortKeys, this);\n        this.arrSort = bind(this.arrSort, this);\n        this.input = input;\n        this.aggregator = (ref = opts.aggregator) != null ? ref : aggregatorTemplates.count()();\n        this.aggregatorName = (ref1 = opts.aggregatorName) != null ? ref1 : \"Count\";\n        this.colAttrs = (ref2 = opts.cols) != null ? ref2 : [];\n        this.rowAttrs = (ref3 = opts.rows) != null ? ref3 : [];\n        this.valAttrs = (ref4 = opts.vals) != null ? ref4 : [];\n        this.sorters = (ref5 = opts.sorters) != null ? ref5 : {};\n        this.rowOrder = (ref6 = opts.rowOrder) != null ? ref6 : \"key_a_to_z\";\n        this.colOrder = (ref7 = opts.colOrder) != null ? ref7 : \"key_a_to_z\";\n        this.derivedAttributes = (ref8 = opts.derivedAttributes) != null ? ref8 : {};\n        this.filter = (ref9 = opts.filter) != null ? ref9 : (function() {\n          return true;\n        });\n        this.tree = {};\n        this.rowKeys = [];\n        this.colKeys = [];\n        this.rowTotals = {};\n        this.colTotals = {};\n        this.allTotal = this.aggregator(this, [], []);\n        this.sorted = false;\n        PivotData.forEachRecord(this.input, this.derivedAttributes, (function(_this) {\n          return function(record) {\n            if (_this.filter(record)) {\n              return _this.processRecord(record);\n            }\n          };\n        })(this));\n      }\n\n      PivotData.forEachRecord = function(input, derivedAttributes, f) {\n        var addRecord, compactRecord, i, j, k, l, len1, record, ref, results, results1, tblCols;\n        if ($.isEmptyObject(derivedAttributes)) {\n          addRecord = f;\n        } else {\n          addRecord = function(record) {\n            var k, ref, v;\n            for (k in derivedAttributes) {\n              v = derivedAttributes[k];\n              record[k] = (ref = v(record)) != null ? ref : record[k];\n            }\n            return f(record);\n          };\n        }\n        if ($.isFunction(input)) {\n          return input(addRecord);\n        } else if ($.isArray(input)) {\n          if ($.isArray(input[0])) {\n            results = [];\n            for (i in input) {\n              if (!hasProp.call(input, i)) continue;\n              compactRecord = input[i];\n              if (!(i > 0)) {\n                continue;\n              }\n              record = {};\n              ref = input[0];\n              for (j in ref) {\n                if (!hasProp.call(ref, j)) continue;\n                k = ref[j];\n                record[k] = compactRecord[j];\n              }\n              results.push(addRecord(record));\n            }\n            return results;\n          } else {\n            results1 = [];\n            for (l = 0, len1 = input.length; l < len1; l++) {\n              record = input[l];\n              results1.push(addRecord(record));\n            }\n            return results1;\n          }\n        } else if (input instanceof $) {\n          tblCols = [];\n          $(\"thead > tr > th\", input).each(function(i) {\n            return tblCols.push($(this).text());\n          });\n          return $(\"tbody > tr\", input).each(function(i) {\n            record = {};\n            $(\"td\", this).each(function(j) {\n              return record[tblCols[j]] = $(this).text();\n            });\n            return addRecord(record);\n          });\n        } else {\n          throw new Error(\"unknown input format\");\n        }\n      };\n\n      PivotData.prototype.forEachMatchingRecord = function(criteria, callback) {\n        return PivotData.forEachRecord(this.input, this.derivedAttributes, (function(_this) {\n          return function(record) {\n            var k, ref, v;\n            if (!_this.filter(record)) {\n              return;\n            }\n            for (k in criteria) {\n              v = criteria[k];\n              if (v !== ((ref = record[k]) != null ? ref : \"null\")) {\n                return;\n              }\n            }\n            return callback(record);\n          };\n        })(this));\n      };\n\n      PivotData.prototype.arrSort = function(attrs) {\n        var a, sortersArr;\n        sortersArr = (function() {\n          var l, len1, results;\n          results = [];\n          for (l = 0, len1 = attrs.length; l < len1; l++) {\n            a = attrs[l];\n            results.push(getSort(this.sorters, a));\n          }\n          return results;\n        }).call(this);\n        return function(a, b) {\n          var comparison, i, sorter;\n          for (i in sortersArr) {\n            if (!hasProp.call(sortersArr, i)) continue;\n            sorter = sortersArr[i];\n            comparison = sorter(a[i], b[i]);\n            if (comparison !== 0) {\n              return comparison;\n            }\n          }\n          return 0;\n        };\n      };\n\n      PivotData.prototype.sortKeys = function() {\n        var v;\n        if (!this.sorted) {\n          this.sorted = true;\n          v = (function(_this) {\n            return function(r, c) {\n              return _this.getAggregator(r, c).value();\n            };\n          })(this);\n          switch (this.rowOrder) {\n            case \"value_a_to_z\":\n              this.rowKeys.sort((function(_this) {\n                return function(a, b) {\n                  return naturalSort(v(a, []), v(b, []));\n                };\n              })(this));\n              break;\n            case \"value_z_to_a\":\n              this.rowKeys.sort((function(_this) {\n                return function(a, b) {\n                  return -naturalSort(v(a, []), v(b, []));\n                };\n              })(this));\n              break;\n            default:\n              this.rowKeys.sort(this.arrSort(this.rowAttrs));\n          }\n          switch (this.colOrder) {\n            case \"value_a_to_z\":\n              return this.colKeys.sort((function(_this) {\n                return function(a, b) {\n                  return naturalSort(v([], a), v([], b));\n                };\n              })(this));\n            case \"value_z_to_a\":\n              return this.colKeys.sort((function(_this) {\n                return function(a, b) {\n                  return -naturalSort(v([], a), v([], b));\n                };\n              })(this));\n            default:\n              return this.colKeys.sort(this.arrSort(this.colAttrs));\n          }\n        }\n      };\n\n      PivotData.prototype.getColKeys = function() {\n        this.sortKeys();\n        return this.colKeys;\n      };\n\n      PivotData.prototype.getRowKeys = function() {\n        this.sortKeys();\n        return this.rowKeys;\n      };\n\n      PivotData.prototype.processRecord = function(record) {\n        var colKey, flatColKey, flatRowKey, l, len1, len2, n, ref, ref1, ref2, ref3, rowKey, x;\n        colKey = [];\n        rowKey = [];\n        ref = this.colAttrs;\n        for (l = 0, len1 = ref.length; l < len1; l++) {\n          x = ref[l];\n          colKey.push((ref1 = record[x]) != null ? ref1 : \"null\");\n        }\n        ref2 = this.rowAttrs;\n        for (n = 0, len2 = ref2.length; n < len2; n++) {\n          x = ref2[n];\n          rowKey.push((ref3 = record[x]) != null ? ref3 : \"null\");\n        }\n        flatRowKey = rowKey.join(String.fromCharCode(0));\n        flatColKey = colKey.join(String.fromCharCode(0));\n        this.allTotal.push(record);\n        if (rowKey.length !== 0) {\n          if (!this.rowTotals[flatRowKey]) {\n            this.rowKeys.push(rowKey);\n            this.rowTotals[flatRowKey] = this.aggregator(this, rowKey, []);\n          }\n          this.rowTotals[flatRowKey].push(record);\n        }\n        if (colKey.length !== 0) {\n          if (!this.colTotals[flatColKey]) {\n            this.colKeys.push(colKey);\n            this.colTotals[flatColKey] = this.aggregator(this, [], colKey);\n          }\n          this.colTotals[flatColKey].push(record);\n        }\n        if (colKey.length !== 0 && rowKey.length !== 0) {\n          if (!this.tree[flatRowKey]) {\n            this.tree[flatRowKey] = {};\n          }\n          if (!this.tree[flatRowKey][flatColKey]) {\n            this.tree[flatRowKey][flatColKey] = this.aggregator(this, rowKey, colKey);\n          }\n          return this.tree[flatRowKey][flatColKey].push(record);\n        }\n      };\n\n      PivotData.prototype.getAggregator = function(rowKey, colKey) {\n        var agg, flatColKey, flatRowKey;\n        flatRowKey = rowKey.join(String.fromCharCode(0));\n        flatColKey = colKey.join(String.fromCharCode(0));\n        if (rowKey.length === 0 && colKey.length === 0) {\n          agg = this.allTotal;\n        } else if (rowKey.length === 0) {\n          agg = this.colTotals[flatColKey];\n        } else if (colKey.length === 0) {\n          agg = this.rowTotals[flatRowKey];\n        } else {\n          agg = this.tree[flatRowKey][flatColKey];\n        }\n        return agg != null ? agg : {\n          value: (function() {\n            return null;\n          }),\n          format: function() {\n            return \"\";\n          }\n        };\n      };\n\n      return PivotData;\n\n    })();\n    $.pivotUtilities = {\n      aggregatorTemplates: aggregatorTemplates,\n      aggregators: aggregators,\n      renderers: renderers,\n      derivers: derivers,\n      locales: locales,\n      naturalSort: naturalSort,\n      numberFormat: numberFormat,\n      sortAs: sortAs,\n      PivotData: PivotData\n    };\n\n    /*\n    Default Renderer for hierarchical table layout\n     */\n    pivotTableRenderer = function(pivotData, opts) {\n      var aggregator, c, colAttrs, colKey, colKeys, defaults, getClickHandler, i, j, r, result, rowAttrs, rowKey, rowKeys, spanSize, tbody, td, th, thead, totalAggregator, tr, txt, val, x;\n      defaults = {\n        table: {\n          clickCallback: null,\n          rowTotals: true,\n          colTotals: true\n        },\n        localeStrings: {\n          totals: \"Totals\"\n        }\n      };\n      opts = $.extend(true, {}, defaults, opts);\n      colAttrs = pivotData.colAttrs;\n      rowAttrs = pivotData.rowAttrs;\n      rowKeys = pivotData.getRowKeys();\n      colKeys = pivotData.getColKeys();\n      if (opts.table.clickCallback) {\n        getClickHandler = function(value, rowValues, colValues) {\n          var attr, filters, i;\n          filters = {};\n          for (i in colAttrs) {\n            if (!hasProp.call(colAttrs, i)) continue;\n            attr = colAttrs[i];\n            if (colValues[i] != null) {\n              filters[attr] = colValues[i];\n            }\n          }\n          for (i in rowAttrs) {\n            if (!hasProp.call(rowAttrs, i)) continue;\n            attr = rowAttrs[i];\n            if (rowValues[i] != null) {\n              filters[attr] = rowValues[i];\n            }\n          }\n          return function(e) {\n            return opts.table.clickCallback(e, value, filters, pivotData);\n          };\n        };\n      }\n      result = document.createElement(\"table\");\n      result.className = \"pvtTable\";\n      spanSize = function(arr, i, j) {\n        var l, len, n, noDraw, ref, ref1, stop, x;\n        if (i !== 0) {\n          noDraw = true;\n          for (x = l = 0, ref = j; 0 <= ref ? l <= ref : l >= ref; x = 0 <= ref ? ++l : --l) {\n            if (arr[i - 1][x] !== arr[i][x]) {\n              noDraw = false;\n            }\n          }\n          if (noDraw) {\n            return -1;\n          }\n        }\n        len = 0;\n        while (i + len < arr.length) {\n          stop = false;\n          for (x = n = 0, ref1 = j; 0 <= ref1 ? n <= ref1 : n >= ref1; x = 0 <= ref1 ? ++n : --n) {\n            if (arr[i][x] !== arr[i + len][x]) {\n              stop = true;\n            }\n          }\n          if (stop) {\n            break;\n          }\n          len++;\n        }\n        return len;\n      };\n      thead = document.createElement(\"thead\");\n      for (j in colAttrs) {\n        if (!hasProp.call(colAttrs, j)) continue;\n        c = colAttrs[j];\n        tr = document.createElement(\"tr\");\n        if (parseInt(j) === 0 && 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        }\n        th = document.createElement(\"th\");\n        th.className = \"pvtAxisLabel\";\n        th.textContent = c;\n        tr.appendChild(th);\n        for (i in colKeys) {\n          if (!hasProp.call(colKeys, i)) continue;\n          colKey = colKeys[i];\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 && rowAttrs.length !== 0) {\n              th.setAttribute(\"rowspan\", 2);\n            }\n            tr.appendChild(th);\n          }\n        }\n        if (parseInt(j) === 0 && opts.table.rowTotals) {\n          th = document.createElement(\"th\");\n          th.className = \"pvtTotalLabel pvtRowTotalLabel\";\n          th.innerHTML = opts.localeStrings.totals;\n          th.setAttribute(\"rowspan\", colAttrs.length + (rowAttrs.length === 0 ? 0 : 1));\n          tr.appendChild(th);\n        }\n        thead.appendChild(tr);\n      }\n      if (rowAttrs.length !== 0) {\n        tr = document.createElement(\"tr\");\n        for (i in rowAttrs) {\n          if (!hasProp.call(rowAttrs, i)) continue;\n          r = rowAttrs[i];\n          th = document.createElement(\"th\");\n          th.className = \"pvtAxisLabel\";\n          th.textContent = r;\n          tr.appendChild(th);\n        }\n        th = document.createElement(\"th\");\n        if (colAttrs.length === 0) {\n          th.className = \"pvtTotalLabel pvtRowTotalLabel\";\n          th.innerHTML = opts.localeStrings.totals;\n        }\n        tr.appendChild(th);\n        thead.appendChild(tr);\n      }\n      result.appendChild(thead);\n      tbody = document.createElement(\"tbody\");\n      for (i in rowKeys) {\n        if (!hasProp.call(rowKeys, i)) continue;\n        rowKey = rowKeys[i];\n        tr = document.createElement(\"tr\");\n        for (j in rowKey) {\n          if (!hasProp.call(rowKey, j)) continue;\n          txt = rowKey[j];\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 && colAttrs.length !== 0) {\n              th.setAttribute(\"colspan\", 2);\n            }\n            tr.appendChild(th);\n          }\n        }\n        for (j in colKeys) {\n          if (!hasProp.call(colKeys, j)) continue;\n          colKey = colKeys[j];\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 != null) {\n            td.onclick = getClickHandler(val, rowKey, colKey);\n          }\n          tr.appendChild(td);\n        }\n        if (opts.table.rowTotals || colAttrs.length === 0) {\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 != null) {\n            td.onclick = getClickHandler(val, rowKey, []);\n          }\n          td.setAttribute(\"data-for\", \"row\" + i);\n          tr.appendChild(td);\n        }\n        tbody.appendChild(tr);\n      }\n      if (opts.table.colTotals || rowAttrs.length === 0) {\n        tr = document.createElement(\"tr\");\n        if (opts.table.colTotals || rowAttrs.length === 0) {\n          th = document.createElement(\"th\");\n          th.className = \"pvtTotalLabel pvtColTotalLabel\";\n          th.innerHTML = opts.localeStrings.totals;\n          th.setAttribute(\"colspan\", rowAttrs.length + (colAttrs.length === 0 ? 0 : 1));\n          tr.appendChild(th);\n        }\n        for (j in colKeys) {\n          if (!hasProp.call(colKeys, j)) continue;\n          colKey = colKeys[j];\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 != null) {\n            td.onclick = getClickHandler(val, [], colKey);\n          }\n          td.setAttribute(\"data-for\", \"col\" + j);\n          tr.appendChild(td);\n        }\n        if (opts.table.rowTotals || colAttrs.length === 0) {\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 != null) {\n            td.onclick = getClickHandler(val, [], []);\n          }\n          tr.appendChild(td);\n        }\n        tbody.appendChild(tr);\n      }\n      result.appendChild(tbody);\n      result.setAttribute(\"data-numrows\", rowKeys.length);\n      result.setAttribute(\"data-numcols\", colKeys.length);\n      return result;\n    };\n\n    /*\n    Pivot Table core: create PivotData object and call Renderer on it\n     */\n    $.fn.pivot = function(input, inputOpts, locale) {\n      var defaults, e, localeDefaults, localeStrings, opts, pivotData, result, x;\n      if (locale == null) {\n        locale = \"en\";\n      }\n      if (locales[locale] == null) {\n        locale = \"en\";\n      }\n      defaults = {\n        cols: [],\n        rows: [],\n        vals: [],\n        rowOrder: \"key_a_to_z\",\n        colOrder: \"key_a_to_z\",\n        dataClass: PivotData,\n        filter: function() {\n          return true;\n        },\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: {\n          localeStrings: localeStrings\n        },\n        localeStrings: localeStrings\n      };\n      opts = $.extend(true, {}, localeDefaults, $.extend({}, defaults, inputOpts));\n      result = null;\n      try {\n        pivotData = new opts.dataClass(input, opts);\n        try {\n          result = opts.renderer(pivotData, opts.rendererOptions);\n        } catch (error) {\n          e = error;\n          if (typeof console !== \"undefined\" && console !== null) {\n            console.error(e.stack);\n          }\n          result = $(\"<span>\").html(opts.localeStrings.renderError);\n        }\n      } catch (error) {\n        e = error;\n        if (typeof console !== \"undefined\" && console !== null) {\n          console.error(e.stack);\n        }\n        result = $(\"<span>\").html(opts.localeStrings.computeError);\n      }\n      x = this[0];\n      while (x.hasChildNodes()) {\n        x.removeChild(x.lastChild);\n      }\n      return this.append(result);\n    };\n\n    /*\n    Pivot Table UI: calls Pivot Table core above with options set by user\n     */\n    $.fn.pivotUI = function(input, inputOpts, overwrite, locale) {\n      var a, aggregator, attr, attrLength, attrValues, c, colOrderArrow, defaults, e, existingOpts, fn1, i, initialRender, l, len1, len2, len3, localeDefaults, localeStrings, materializedInput, n, o, opts, ordering, pivotTable, recordsProcessed, ref, ref1, ref2, ref3, refresh, refreshDelayed, renderer, rendererControl, rowOrderArrow, shownAttributes, shownInAggregators, shownInDragDrop, tr1, tr2, uiTable, unused, unusedAttrsVerticalAutoCutoff, unusedAttrsVerticalAutoOverride, x;\n      if (overwrite == null) {\n        overwrite = false;\n      }\n      if (locale == null) {\n        locale = \"en\";\n      }\n      if (locales[locale] == null) {\n        locale = \"en\";\n      }\n      defaults = {\n        derivedAttributes: {},\n        aggregators: locales[locale].aggregators,\n        renderers: locales[locale].renderers,\n        hiddenAttributes: [],\n        hiddenFromAggregators: [],\n        hiddenFromDragDrop: [],\n        menuLimit: 500,\n        cols: [],\n        rows: [],\n        vals: [],\n        rowOrder: \"key_a_to_z\",\n        colOrder: \"key_a_to_z\",\n        dataClass: PivotData,\n        exclusions: {},\n        inclusions: {},\n        unusedAttrsVertical: 85,\n        autoSortUnusedAttrs: false,\n        onRefresh: null,\n        showUI: true,\n        filter: function() {\n          return true;\n        },\n        sorters: {}\n      };\n      localeStrings = $.extend(true, {}, locales.en.localeStrings, locales[locale].localeStrings);\n      localeDefaults = {\n        rendererOptions: {\n          localeStrings: localeStrings\n        },\n        localeStrings: localeStrings\n      };\n      existingOpts = this.data(\"pivotUIOptions\");\n      if ((existingOpts == null) || overwrite) {\n        opts = $.extend(true, {}, localeDefaults, $.extend({}, defaults, inputOpts));\n      } else {\n        opts = existingOpts;\n      }\n      try {\n        attrValues = {};\n        materializedInput = [];\n        recordsProcessed = 0;\n        PivotData.forEachRecord(input, opts.derivedAttributes, function(record) {\n          var attr, base, ref, value;\n          if (!opts.filter(record)) {\n            return;\n          }\n          materializedInput.push(record);\n          for (attr in record) {\n            if (!hasProp.call(record, attr)) continue;\n            if (attrValues[attr] == null) {\n              attrValues[attr] = {};\n              if (recordsProcessed > 0) {\n                attrValues[attr][\"null\"] = recordsProcessed;\n              }\n            }\n          }\n          for (attr in attrValues) {\n            value = (ref = record[attr]) != null ? ref : \"null\";\n            if ((base = attrValues[attr])[value] == null) {\n              base[value] = 0;\n            }\n            attrValues[attr][value]++;\n          }\n          return recordsProcessed++;\n        });\n        uiTable = $(\"<table>\", {\n          \"class\": \"pvtUi\"\n        }).attr(\"cellpadding\", 5);\n        rendererControl = $(\"<td>\").addClass(\"pvtUiCell\");\n        renderer = $(\"<select>\").addClass('pvtRenderer').appendTo(rendererControl).bind(\"change\", function() {\n          return refresh();\n        });\n        ref = opts.renderers;\n        for (x in ref) {\n          if (!hasProp.call(ref, x)) continue;\n          $(\"<option>\").val(x).html(x).appendTo(renderer);\n        }\n        unused = $(\"<td>\").addClass('pvtAxisContainer pvtUnused pvtUiCell');\n        shownAttributes = (function() {\n          var results;\n          results = [];\n          for (a in attrValues) {\n            if (indexOf.call(opts.hiddenAttributes, a) < 0) {\n              results.push(a);\n            }\n          }\n          return results;\n        })();\n        shownInAggregators = (function() {\n          var l, len1, results;\n          results = [];\n          for (l = 0, len1 = shownAttributes.length; l < len1; l++) {\n            c = shownAttributes[l];\n            if (indexOf.call(opts.hiddenFromAggregators, c) < 0) {\n              results.push(c);\n            }\n          }\n          return results;\n        })();\n        shownInDragDrop = (function() {\n          var l, len1, results;\n          results = [];\n          for (l = 0, len1 = shownAttributes.length; l < len1; l++) {\n            c = shownAttributes[l];\n            if (indexOf.call(opts.hiddenFromDragDrop, c) < 0) {\n              results.push(c);\n            }\n          }\n          return results;\n        })();\n        unusedAttrsVerticalAutoOverride = false;\n        if (opts.unusedAttrsVertical === \"auto\") {\n          unusedAttrsVerticalAutoCutoff = 120;\n        } else {\n          unusedAttrsVerticalAutoCutoff = parseInt(opts.unusedAttrsVertical);\n        }\n        if (!isNaN(unusedAttrsVerticalAutoCutoff)) {\n          attrLength = 0;\n          for (l = 0, len1 = shownInDragDrop.length; l < len1; l++) {\n            a = shownInDragDrop[l];\n            attrLength += a.length;\n          }\n          unusedAttrsVerticalAutoOverride = attrLength > unusedAttrsVerticalAutoCutoff;\n        }\n        if (opts.unusedAttrsVertical === true || unusedAttrsVerticalAutoOverride) {\n          unused.addClass('pvtVertList');\n        } else {\n          unused.addClass('pvtHorizList');\n        }\n        fn1 = function(attr) {\n          var attrElem, checkContainer, closeFilterBox, controls, filterItem, filterItemExcluded, finalButtons, hasExcludedItem, len2, n, placeholder, ref1, sorter, triangleLink, v, value, valueCount, valueList, values;\n          values = (function() {\n            var results;\n            results = [];\n            for (v in attrValues[attr]) {\n              results.push(v);\n            }\n            return results;\n          })();\n          hasExcludedItem = false;\n          valueList = $(\"<div>\").addClass('pvtFilterBox').hide();\n          valueList.append($(\"<h4>\").append($(\"<span>\").text(attr), $(\"<span>\").addClass(\"count\").text(\"(\" + values.length + \")\")));\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>\", {\n                type: \"text\"\n              }).appendTo(controls).attr({\n                placeholder: placeholder,\n                \"class\": \"pvtSearch\"\n              }).bind(\"keyup\", function() {\n                var accept, accept_gen, filter;\n                filter = $(this).val().toLowerCase().trim();\n                accept_gen = function(prefix, accepted) {\n                  return function(v) {\n                    var real_filter, ref1;\n                    real_filter = filter.substring(prefix.length).trim();\n                    if (real_filter.length === 0) {\n                      return true;\n                    }\n                    return ref1 = Math.sign(sorter(v.toLowerCase(), real_filter)), indexOf.call(accepted, ref1) >= 0;\n                  };\n                };\n                accept = filter.indexOf(\">=\") === 0 ? accept_gen(\">=\", [1, 0]) : filter.indexOf(\"<=\") === 0 ? accept_gen(\"<=\", [-1, 0]) : filter.indexOf(\">\") === 0 ? accept_gen(\">\", [1]) : filter.indexOf(\"<\") === 0 ? accept_gen(\"<\", [-1]) : filter.indexOf(\"~\") === 0 ? function(v) {\n                  if (filter.substring(1).trim().length === 0) {\n                    return true;\n                  }\n                  return v.toLowerCase().match(filter.substring(1));\n                } : function(v) {\n                  return v.toLowerCase().indexOf(filter) !== -1;\n                };\n                return valueList.find('.pvtCheckContainer p label span.value').each(function() {\n                  if (accept($(this).text())) {\n                    return $(this).parent().parent().show();\n                  } else {\n                    return $(this).parent().parent().hide();\n                  }\n                });\n              });\n              controls.append($(\"<br>\"));\n              $(\"<button>\", {\n                type: \"button\"\n              }).appendTo(controls).html(opts.localeStrings.selectAll).bind(\"click\", function() {\n                valueList.find(\"input:visible:not(:checked)\").prop(\"checked\", true).toggleClass(\"changed\");\n                return false;\n              });\n              $(\"<button>\", {\n                type: \"button\"\n              }).appendTo(controls).html(opts.localeStrings.selectNone).bind(\"click\", function() {\n                valueList.find(\"input:visible:checked\").prop(\"checked\", false).toggleClass(\"changed\");\n                return false;\n              });\n            }\n            checkContainer = $(\"<div>\").addClass(\"pvtCheckContainer\").appendTo(valueList);\n            ref1 = values.sort(getSort(opts.sorters, attr));\n            for (n = 0, len2 = ref1.length; n < len2; n++) {\n              value = ref1[n];\n              valueCount = attrValues[attr][value];\n              filterItem = $(\"<label>\");\n              filterItemExcluded = false;\n              if (opts.inclusions[attr]) {\n                filterItemExcluded = (indexOf.call(opts.inclusions[attr], value) < 0);\n              } else if (opts.exclusions[attr]) {\n                filterItemExcluded = (indexOf.call(opts.exclusions[attr], value) >= 0);\n              }\n              hasExcludedItem || (hasExcludedItem = filterItemExcluded);\n              $(\"<input>\").attr(\"type\", \"checkbox\").addClass('pvtFilter').attr(\"checked\", !filterItemExcluded).data(\"filter\", [attr, value]).appendTo(filterItem).bind(\"change\", function() {\n                return $(this).toggleClass(\"changed\");\n              });\n              filterItem.append($(\"<span>\").addClass(\"value\").text(value));\n              filterItem.append($(\"<span>\").addClass(\"count\").text(\"(\" + valueCount + \")\"));\n              checkContainer.append($(\"<p>\").append(filterItem));\n            }\n          }\n          closeFilterBox = function() {\n            if (valueList.find(\"[type='checkbox']\").length > 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            return valueList.hide();\n          };\n          finalButtons = $(\"<p>\").appendTo(valueList);\n          if (values.length <= opts.menuLimit) {\n            $(\"<button>\", {\n              type: \"button\"\n            }).text(opts.localeStrings.apply).appendTo(finalButtons).bind(\"click\", function() {\n              if (valueList.find(\".changed\").removeClass(\"changed\").length) {\n                refresh();\n              }\n              return closeFilterBox();\n            });\n          }\n          $(\"<button>\", {\n            type: \"button\"\n          }).text(opts.localeStrings.cancel).appendTo(finalButtons).bind(\"click\", function() {\n            valueList.find(\".changed:checked\").removeClass(\"changed\").prop(\"checked\", false);\n            valueList.find(\".changed:not(:checked)\").removeClass(\"changed\").prop(\"checked\", true);\n            return closeFilterBox();\n          });\n          triangleLink = $(\"<span>\").addClass('pvtTriangle').html(\" &#x25BE;\").bind(\"click\", function(e) {\n            var left, ref2, top;\n            ref2 = $(e.currentTarget).position(), left = ref2.left, top = ref2.top;\n            return valueList.css({\n              left: left + 10,\n              top: top + 10\n            }).show();\n          });\n          attrElem = $(\"<li>\").addClass(\"axis_\" + i).append($(\"<span>\").addClass('pvtAttr').text(attr).data(\"attrName\", attr).append(triangleLink));\n          if (hasExcludedItem) {\n            attrElem.addClass('pvtFilteredAttribute');\n          }\n          return unused.append(attrElem).append(valueList);\n        };\n        for (i in shownInDragDrop) {\n          if (!hasProp.call(shownInDragDrop, i)) continue;\n          attr = shownInDragDrop[i];\n          fn1(attr);\n        }\n        tr1 = $(\"<tr>\").appendTo(uiTable);\n        aggregator = $(\"<select>\").addClass('pvtAggregator').bind(\"change\", function() {\n          return refresh();\n        });\n        ref1 = opts.aggregators;\n        for (x in ref1) {\n          if (!hasProp.call(ref1, x)) continue;\n          aggregator.append($(\"<option>\").val(x).html(x));\n        }\n        ordering = {\n          key_a_to_z: {\n            rowSymbol: \"&varr;\",\n            colSymbol: \"&harr;\",\n            next: \"value_a_to_z\"\n          },\n          value_a_to_z: {\n            rowSymbol: \"&darr;\",\n            colSymbol: \"&rarr;\",\n            next: \"value_z_to_a\"\n          },\n          value_z_to_a: {\n            rowSymbol: \"&uarr;\",\n            colSymbol: \"&larr;\",\n            next: \"key_a_to_z\"\n          }\n        };\n        rowOrderArrow = $(\"<a>\", {\n          role: \"button\"\n        }).addClass(\"pvtRowOrder\").data(\"order\", opts.rowOrder).html(ordering[opts.rowOrder].rowSymbol).bind(\"click\", function() {\n          $(this).data(\"order\", ordering[$(this).data(\"order\")].next);\n          $(this).html(ordering[$(this).data(\"order\")].rowSymbol);\n          return refresh();\n        });\n        colOrderArrow = $(\"<a>\", {\n          role: \"button\"\n        }).addClass(\"pvtColOrder\").data(\"order\", opts.colOrder).html(ordering[opts.colOrder].colSymbol).bind(\"click\", function() {\n          $(this).data(\"order\", ordering[$(this).data(\"order\")].next);\n          $(this).html(ordering[$(this).data(\"order\")].colSymbol);\n          return refresh();\n        });\n        $(\"<td>\").addClass('pvtVals pvtUiCell').appendTo(tr1).append(aggregator).append(rowOrderArrow).append(colOrderArrow).append($(\"<br>\"));\n        $(\"<td>\").addClass('pvtAxisContainer pvtHorizList pvtCols pvtUiCell').appendTo(tr1);\n        tr2 = $(\"<tr>\").appendTo(uiTable);\n        tr2.append($(\"<td>\").addClass('pvtAxisContainer pvtRows pvtUiCell').attr(\"valign\", \"top\"));\n        pivotTable = $(\"<td>\").attr(\"valign\", \"top\").addClass('pvtRendererArea').appendTo(tr2);\n        if (opts.unusedAttrsVertical === true || 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        this.html(uiTable);\n        ref2 = opts.cols;\n        for (n = 0, len2 = ref2.length; n < len2; n++) {\n          x = ref2[n];\n          this.find(\".pvtCols\").append(this.find(\".axis_\" + ($.inArray(x, shownInDragDrop))));\n        }\n        ref3 = opts.rows;\n        for (o = 0, len3 = ref3.length; o < len3; o++) {\n          x = ref3[o];\n          this.find(\".pvtRows\").append(this.find(\".axis_\" + ($.inArray(x, shownInDragDrop))));\n        }\n        if (opts.aggregatorName != null) {\n          this.find(\".pvtAggregator\").val(opts.aggregatorName);\n        }\n        if (opts.rendererName != null) {\n          this.find(\".pvtRenderer\").val(opts.rendererName);\n        }\n        if (!opts.showUI) {\n          this.find(\".pvtUiCell\").hide();\n        }\n        initialRender = true;\n        refreshDelayed = (function(_this) {\n          return function() {\n            var exclusions, inclusions, len4, newDropdown, numInputsToProcess, pivotUIOptions, pvtVals, ref4, ref5, subopts, t, u, unusedAttrsContainer, vals;\n            subopts = {\n              derivedAttributes: opts.derivedAttributes,\n              localeStrings: opts.localeStrings,\n              rendererOptions: opts.rendererOptions,\n              sorters: opts.sorters,\n              cols: [],\n              rows: [],\n              dataClass: opts.dataClass\n            };\n            numInputsToProcess = (ref4 = opts.aggregators[aggregator.val()]([])().numInputs) != null ? ref4 : 0;\n            vals = [];\n            _this.find(\".pvtRows li span.pvtAttr\").each(function() {\n              return subopts.rows.push($(this).data(\"attrName\"));\n            });\n            _this.find(\".pvtCols li span.pvtAttr\").each(function() {\n              return subopts.cols.push($(this).data(\"attrName\"));\n            });\n            _this.find(\".pvtVals select.pvtAttrDropdown\").each(function() {\n              if (numInputsToProcess === 0) {\n                return $(this).remove();\n              } else {\n                numInputsToProcess--;\n                if ($(this).val() !== \"\") {\n                  return vals.push($(this).val());\n                }\n              }\n            });\n            if (numInputsToProcess !== 0) {\n              pvtVals = _this.find(\".pvtVals\");\n              for (x = t = 0, ref5 = numInputsToProcess; 0 <= ref5 ? t < ref5 : t > ref5; x = 0 <= ref5 ? ++t : --t) {\n                newDropdown = $(\"<select>\").addClass('pvtAttrDropdown').append($(\"<option>\")).bind(\"change\", function() {\n                  return refresh();\n                });\n                for (u = 0, len4 = shownInAggregators.length; u < len4; u++) {\n                  attr = shownInAggregators[u];\n                  newDropdown.append($(\"<option>\").val(attr).text(attr));\n                }\n                pvtVals.append(newDropdown);\n              }\n            }\n            if (initialRender) {\n              vals = opts.vals;\n              i = 0;\n              _this.find(\".pvtVals select.pvtAttrDropdown\").each(function() {\n                $(this).val(vals[i]);\n                return i++;\n              });\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            exclusions = {};\n            _this.find('input.pvtFilter').not(':checked').each(function() {\n              var filter;\n              filter = $(this).data(\"filter\");\n              if (exclusions[filter[0]] != null) {\n                return exclusions[filter[0]].push(filter[1]);\n              } else {\n                return exclusions[filter[0]] = [filter[1]];\n              }\n            });\n            inclusions = {};\n            _this.find('input.pvtFilter:checked').each(function() {\n              var filter;\n              filter = $(this).data(\"filter\");\n              if (exclusions[filter[0]] != null) {\n                if (inclusions[filter[0]] != null) {\n                  return inclusions[filter[0]].push(filter[1]);\n                } else {\n                  return inclusions[filter[0]] = [filter[1]];\n                }\n              }\n            });\n            subopts.filter = function(record) {\n              var excludedItems, k, ref6, ref7;\n              if (!opts.filter(record)) {\n                return false;\n              }\n              for (k in exclusions) {\n                excludedItems = exclusions[k];\n                if (ref6 = \"\" + ((ref7 = record[k]) != null ? ref7 : 'null'), indexOf.call(excludedItems, ref6) >= 0) {\n                  return false;\n                }\n              }\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,\n              aggregatorName: aggregator.val(),\n              rendererName: renderer.val()\n            });\n            _this.data(\"pivotUIOptions\", pivotUIOptions);\n            if (opts.autoSortUnusedAttrs) {\n              unusedAttrsContainer = _this.find(\"td.pvtUnused.pvtAxisContainer\");\n              $(unusedAttrsContainer).children(\"li\").sort(function(a, b) {\n                return naturalSort($(a).text(), $(b).text());\n              }).appendTo(unusedAttrsContainer);\n            }\n            pivotTable.css(\"opacity\", 1);\n            if (opts.onRefresh != null) {\n              return opts.onRefresh(pivotUIOptions);\n            }\n          };\n        })(this);\n        refresh = (function(_this) {\n          return function() {\n            pivotTable.css(\"opacity\", 0.5);\n            return setTimeout(refreshDelayed, 10);\n          };\n        })(this);\n        refresh();\n        this.find(\".pvtAxisContainer\").sortable({\n          update: function(e, ui) {\n            if (ui.sender == null) {\n              return refresh();\n            }\n          },\n          connectWith: this.find(\".pvtAxisContainer\"),\n          items: 'li',\n          placeholder: 'pvtPlaceholder'\n        });\n      } catch (error) {\n        e = error;\n        if (typeof console !== \"undefined\" && console !== null) {\n          console.error(e.stack);\n        }\n        this.html(opts.localeStrings.uiRenderError);\n      }\n      return this;\n    };\n\n    /*\n    Heatmap post-processing\n     */\n    $.fn.heatmap = function(scope, opts) {\n      var colorScaleGenerator, heatmapper, i, j, l, n, numCols, numRows, ref, ref1, ref2;\n      if (scope == null) {\n        scope = \"heatmap\";\n      }\n      numRows = this.data(\"numrows\");\n      numCols = this.data(\"numcols\");\n      colorScaleGenerator = opts != null ? (ref = opts.heatmap) != null ? ref.colorScaleGenerator : void 0 : void 0;\n      if (colorScaleGenerator == null) {\n        colorScaleGenerator = function(values) {\n          var max, min;\n          min = Math.min.apply(Math, values);\n          max = Math.max.apply(Math, values);\n          return function(x) {\n            var nonRed;\n            nonRed = 255 - Math.round(255 * (x - min) / (max - min));\n            return \"rgb(255,\" + nonRed + \",\" + nonRed + \")\";\n          };\n        };\n      }\n      heatmapper = (function(_this) {\n        return function(scope) {\n          var colorScale, forEachCell, values;\n          forEachCell = function(f) {\n            return _this.find(scope).each(function() {\n              var x;\n              x = $(this).data(\"value\");\n              if ((x != null) && isFinite(x)) {\n                return f(x, $(this));\n              }\n            });\n          };\n          values = [];\n          forEachCell(function(x) {\n            return values.push(x);\n          });\n          colorScale = colorScaleGenerator(values);\n          return forEachCell(function(x, elem) {\n            return elem.css(\"background-color\", colorScale(x));\n          });\n        };\n      })(this);\n      switch (scope) {\n        case \"heatmap\":\n          heatmapper(\".pvtVal\");\n          break;\n        case \"rowheatmap\":\n          for (i = l = 0, ref1 = numRows; 0 <= ref1 ? l < ref1 : l > ref1; i = 0 <= ref1 ? ++l : --l) {\n            heatmapper(\".pvtVal.row\" + i);\n          }\n          break;\n        case \"colheatmap\":\n          for (j = n = 0, ref2 = numCols; 0 <= ref2 ? n < ref2 : n > ref2; j = 0 <= ref2 ? ++n : --n) {\n            heatmapper(\".pvtVal.col\" + j);\n          }\n      }\n      heatmapper(\".pvtTotal.rowTotal\");\n      heatmapper(\".pvtTotal.colTotal\");\n      return this;\n    };\n\n    /*\n    Barchart post-processing\n     */\n    return $.fn.barchart = function(opts) {\n      var barcharter, i, l, numCols, numRows, ref;\n      numRows = this.data(\"numrows\");\n      numCols = this.data(\"numcols\");\n      barcharter = (function(_this) {\n        return function(scope) {\n          var forEachCell, max, min, range, scaler, values;\n          forEachCell = function(f) {\n            return _this.find(scope).each(function() {\n              var x;\n              x = $(this).data(\"value\");\n              if ((x != null) && isFinite(x)) {\n                return f(x, $(this));\n              }\n            });\n          };\n          values = [];\n          forEachCell(function(x) {\n            return values.push(x);\n          });\n          max = Math.max.apply(Math, values);\n          if (max < 0) {\n            max = 0;\n          }\n          range = max;\n          min = Math.min.apply(Math, values);\n          if (min < 0) {\n            range = max - min;\n          }\n          scaler = function(x) {\n            return 100 * x / (1.4 * range);\n          };\n          return forEachCell(function(x, elem) {\n            var bBase, bgColor, text, wrapper;\n            text = elem.text();\n            wrapper = $(\"<div>\").css({\n              \"position\": \"relative\",\n              \"height\": \"55px\"\n            });\n            bgColor = \"gray\";\n            bBase = 0;\n            if (min < 0) {\n              bBase = scaler(-min);\n            }\n            if (x < 0) {\n              bBase += scaler(x);\n              bgColor = \"darkred\";\n              x = -x;\n            }\n            wrapper.append($(\"<div>\").css({\n              \"position\": \"absolute\",\n              \"bottom\": bBase + \"%\",\n              \"left\": 0,\n              \"right\": 0,\n              \"height\": scaler(x) + \"%\",\n              \"background-color\": bgColor\n            }));\n            wrapper.append($(\"<div>\").text(text).css({\n              \"position\": \"relative\",\n              \"padding-left\": \"5px\",\n              \"padding-right\": \"5px\"\n            }));\n            return elem.css({\n              \"padding\": 0,\n              \"padding-top\": \"5px\",\n              \"text-align\": \"center\"\n            }).html(wrapper);\n          });\n        };\n      })(this);\n      for (i = l = 0, ref = numRows; 0 <= ref ? l < ref : l > ref; i = 0 <= ref ? ++l : --l) {\n        barcharter(\".pvtVal.row\" + i);\n      }\n      barcharter(\".pvtTotal.colTotal\");\n      return this;\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..ca9a3759db8ca03ebb8e68b38bdd02d6303055f6
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.js.js
@@ -0,0 +1,80 @@
+(function() {
+  var callWithJQuery;
+
+  callWithJQuery = function(pivotModule) {
+    if (typeof exports === "object" && typeof module === "object") {
+      return pivotModule(require("jquery"));
+    } else if (typeof define === "function" && define.amd) {
+      return define(["jquery"], pivotModule);
+    } else {
+      return pivotModule(jQuery);
+    }
+  };
+
+  callWithJQuery(function($) {
+    var frFmt, frFmtInt, frFmtPct, nf, tpl;
+    nf = $.pivotUtilities.numberFormat;
+    tpl = $.pivotUtilities.aggregatorTemplates;
+    frFmt = nf({
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    frFmtInt = nf({
+      digitsAfterDecimal: 0,
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    frFmtPct = nf({
+      digitsAfterDecimal: 1,
+      scaler: 100,
+      suffix: "%",
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    return $.pivotUtilities.locales.nl = {
+      localeStrings: {
+        renderError: "Er is een fout opgetreden bij het renderen van de kruistabel.",
+        computeError: "Er is een fout opgetreden bij het berekenen van de kruistabel.",
+        uiRenderError: "Er is een fout opgetreden bij het tekenen van de interface van de kruistabel.",
+        selectAll: "Alles selecteren",
+        selectNone: "Niets selecteren",
+        tooMany: "(te veel waarden om weer te geven)",
+        filterResults: "Filter resultaten",
+        totals: "Totaal",
+        vs: "versus",
+        by: "per"
+      },
+      aggregators: {
+        "Aantal": tpl.count(frFmtInt),
+        "Aantal unieke waarden": tpl.countUnique(frFmtInt),
+        "Lijst unieke waarden": tpl.listUnique(", "),
+        "Som": tpl.sum(frFmt),
+        "Som van gehele getallen": tpl.sum(frFmtInt),
+        "Gemiddelde": tpl.average(frFmt),
+        "Minimum": tpl.min(frFmt),
+        "Maximum": tpl.max(frFmt),
+        "Eerste": tpl.first(frFmt),
+        "Laatste": tpl.last(frFmt),
+        "Som over som": tpl.sumOverSum(frFmt),
+        "80% bovengrens": tpl.sumOverSumBound80(true, frFmt),
+        "80% ondergrens": tpl.sumOverSumBound80(false, frFmt),
+        "Som in verhouding tot het totaal": tpl.fractionOf(tpl.sum(), "total", frFmtPct),
+        "Som in verhouding tot de rij": tpl.fractionOf(tpl.sum(), "row", frFmtPct),
+        "Som in verhouding tot de kolom": tpl.fractionOf(tpl.sum(), "col", frFmtPct),
+        "Aantal in verhouding tot het totaal": tpl.fractionOf(tpl.count(), "total", frFmtPct),
+        "Aantal in verhouding tot de rij": tpl.fractionOf(tpl.count(), "row", frFmtPct),
+        "Aantal in verhouding tot de kolom": tpl.fractionOf(tpl.count(), "col", frFmtPct)
+      },
+      renderers: {
+        "Tabel": $.pivotUtilities.renderers["Table"],
+        "Tabel met staafdiagrammen": $.pivotUtilities.renderers["Table Barchart"],
+        "Warmtekaart": $.pivotUtilities.renderers["Heatmap"],
+        "Warmtekaart per rij": $.pivotUtilities.renderers["Row Heatmap"],
+        "Warmtekaart per kolom": $.pivotUtilities.renderers["Col Heatmap"]
+      }
+    };
+  });
+
+}).call(this);
+
+//# sourceMappingURL=pivot.nl.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b7c77601a34cb69a4f640f503c700b908eb994cb
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"file":"pivot.nl.js","sources":["pivot.nl.coffee"],"names":[],"mappings":"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","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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.nl =\n        localeStrings:\n            renderError: \"Er is een fout opgetreden bij het renderen van de kruistabel.\"\n            computeError: \"Er is een fout opgetreden bij het berekenen van de kruistabel.\"\n            uiRenderError: \"Er is een fout opgetreden bij het tekenen van de interface van de kruistabel.\"\n            selectAll: \"Alles selecteren\"\n            selectNone: \"Niets selecteren\"\n            tooMany: \"(te veel waarden om weer te geven)\"\n            filterResults: \"Filter resultaten\"\n            totals: \"Totaal\"\n            vs: \"versus\"\n            by: \"per\"\n\n        aggregators:\n            \"Aantal\":                              tpl.count(frFmtInt)\n            \"Aantal unieke waarden\":               tpl.countUnique(frFmtInt)\n            \"Lijst unieke waarden\":                tpl.listUnique(\", \")\n            \"Som\":                                 tpl.sum(frFmt)\n            \"Som van gehele getallen\":             tpl.sum(frFmtInt)\n            \"Gemiddelde\":                          tpl.average(frFmt)\n            \"Minimum\":                             tpl.min(frFmt)\n            \"Maximum\":                             tpl.max(frFmt)\n            \"Eerste\":                              tpl.first(frFmt)\n            \"Laatste\":                             tpl.last(frFmt)\n            \"Som over som\":                        tpl.sumOverSum(frFmt)\n            \"80% bovengrens\":                      tpl.sumOverSumBound80(true, frFmt)\n            \"80% ondergrens\":        \t\t\t   tpl.sumOverSumBound80(false, frFmt)\n            \"Som in verhouding tot het totaal\":    tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Som in verhouding tot de rij\":        tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Som in verhouding tot de kolom\":      tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Aantal in verhouding tot het totaal\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Aantal in verhouding tot de rij\":     tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Aantal in verhouding tot de kolom\":   tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Tabel\":                           $.pivotUtilities.renderers[\"Table\"]\n            \"Tabel met staafdiagrammen\":               $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Warmtekaart\":                     $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Warmtekaart per rij\":             $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Warmtekaart per kolom\":           $.pivotUtilities.renderers[\"Col Heatmap\"]\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..67daea28182b7b99eb5ebf8896a00cce1f2847ca
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.nl.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..22593971478f9cc01220f2bf0291c19a1e4f0a12
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.nl.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.min.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..a3bcc04d3ff5722f782be989ee96bdf54b3295e3
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.min.js.js
@@ -0,0 +1,2 @@
+(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var t,r,i,a,n;return a=e.pivotUtilities.numberFormat,n=e.pivotUtilities.aggregatorTemplates,t=a({thousandsSep:" ",decimalSep:","}),r=a({digitsAfterDecimal:0,thousandsSep:" ",decimalSep:","}),i=a({digitsAfterDecimal:1,scaler:100,suffix:"%",thousandsSep:" ",decimalSep:","}),e.pivotUtilities.locales.nl={localeStrings:{renderError:"Er is een fout opgetreden bij het renderen van de kruistabel.",computeError:"Er is een fout opgetreden bij het berekenen van de kruistabel.",uiRenderError:"Er is een fout opgetreden bij het tekenen van de interface van de kruistabel.",selectAll:"Alles selecteren",selectNone:"Niets selecteren",tooMany:"(te veel waarden om weer te geven)",filterResults:"Filter resultaten",totals:"Totaal",vs:"versus",by:"per"},aggregators:{Aantal:n.count(r),"Aantal unieke waarden":n.countUnique(r),"Lijst unieke waarden":n.listUnique(", "),Som:n.sum(t),"Som van gehele getallen":n.sum(r),Gemiddelde:n.average(t),Minimum:n.min(t),Maximum:n.max(t),Eerste:n.first(t),Laatste:n.last(t),"Som over som":n.sumOverSum(t),"80% bovengrens":n.sumOverSumBound80(!0,t),"80% ondergrens":n.sumOverSumBound80(!1,t),"Som in verhouding tot het totaal":n.fractionOf(n.sum(),"total",i),"Som in verhouding tot de rij":n.fractionOf(n.sum(),"row",i),"Som in verhouding tot de kolom":n.fractionOf(n.sum(),"col",i),"Aantal in verhouding tot het totaal":n.fractionOf(n.count(),"total",i),"Aantal in verhouding tot de rij":n.fractionOf(n.count(),"row",i),"Aantal in verhouding tot de kolom":n.fractionOf(n.count(),"col",i)},renderers:{Tabel:e.pivotUtilities.renderers.Table,"Tabel met staafdiagrammen":e.pivotUtilities.renderers["Table Barchart"],Warmtekaart:e.pivotUtilities.renderers.Heatmap,"Warmtekaart per rij":e.pivotUtilities.renderers["Row Heatmap"],"Warmtekaart per kolom":e.pivotUtilities.renderers["Col Heatmap"]}}})}).call(this);
+//# sourceMappingURL=pivot.nl.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.min.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b51dc51564c3bbec1988b6c3299859962d451e62
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.min.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"sources":["pivot.nl.coffee","pivot.nl.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","frFmt","frFmtInt","frFmtPct","nf","tpl","pivotUtilities","numberFormat","aggregatorTemplates","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","nl","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","totals","vs","by","aggregators","Aantal","count","Aantal unieke waarden","countUnique","Lijst unieke waarden","listUnique","Som","sum","Som van gehele getallen","Gemiddelde","average","Minimum","min","Maximum","max","Eerste","first","Laatste","last","Som over som","sumOverSum","80% bovengrens","sumOverSumBound80","80% ondergrens","Som in verhouding tot het totaal","fractionOf","Som in verhouding tot de rij","Som in verhouding tot de kolom","Aantal in verhouding tot het totaal","Aantal in verhouding tot de rij","Aantal in verhouding tot de kolom","renderers","Tabel","Tabel met staafdiagrammen","Warmtekaart","Warmtekaart per rij","Warmtekaart per kolom","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAXC,UAAyC,gBAAVC,QACrCF,EAAYG,QAAQ,WACC,kBAAVC,SAAyBA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GACZ,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,CCuBA,ODvBAD,GAAKJ,EAAEM,eAAeC,aACtBF,EAAML,EAAEM,eAAeE,oBAEvBP,EAAWG,GAAGK,aAAc,IAAKC,WAAY,MAC7CR,EAAWE,GAAGO,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEP,EAAWC,GAAGO,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FV,EAAEM,eAAeQ,QAAQC,IACrBC,eACIC,YAAa,gEACbC,aAAc,iEACdC,cAAe,gFACfC,UAAW,mBACXC,WAAY,mBACZC,QAAS,qCACTC,cAAe,oBACfC,OAAQ,SACRC,GAAI,SACJC,GAAI,OAERC,aACIC,OAAuCvB,EAAIwB,MAAM3B,GACjD4B,wBAAuCzB,EAAI0B,YAAY7B,GACvD8B,uBAAuC3B,EAAI4B,WAAW,MACtDC,IAAuC7B,EAAI8B,IAAIlC,GAC/CmC,0BAAuC/B,EAAI8B,IAAIjC,GAC/CmC,WAAuChC,EAAIiC,QAAQrC,GACnDsC,QAAuClC,EAAImC,IAAIvC,GAC/CwC,QAAuCpC,EAAIqC,IAAIzC,GAC/C0C,OAAuCtC,EAAIuC,MAAM3C,GACjD4C,QAAuCxC,EAAIyC,KAAK7C,GAChD8C,eAAuC1C,EAAI2C,WAAW/C,GACtDgD,iBAAuC5C,EAAI6C,mBAAkB,EAAMjD,GACnEkD,iBAA+B9C,EAAI6C,mBAAkB,EAAOjD,GAC5DmD,mCAAuC/C,EAAIgD,WAAWhD,EAAI8B,MAAS,QAAShC,GAC5EmD,+BAAuCjD,EAAIgD,WAAWhD,EAAI8B,MAAS,MAAShC,GAC5EoD,iCAAuClD,EAAIgD,WAAWhD,EAAI8B,MAAS,MAAShC,GAC5EqD,sCAAuCnD,EAAIgD,WAAWhD,EAAIwB,QAAS,QAAS1B,GAC5EsD,kCAAuCpD,EAAIgD,WAAWhD,EAAIwB,QAAS,MAAS1B,GAC5EuD,oCAAuCrD,EAAIgD,WAAWhD,EAAIwB,QAAS,MAAS1B,IAEhFwD,WACIC,MAAmC5D,EAAEM,eAAeqD,UAAU,MAC9DE,4BAA2C7D,EAAEM,eAAeqD,UAAU,kBACtEG,YAAmC9D,EAAEM,eAAeqD,UAAU,QAC9DI,sBAAmC/D,EAAEM,eAAeqD,UAAU,eAC9DK,wBAAmChE,EAAEM,eAAeqD,UAAU,qBCqBvEM,KAAKC","file":"pivot.nl.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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.nl =\n        localeStrings:\n            renderError: \"Er is een fout opgetreden bij het renderen van de kruistabel.\"\n            computeError: \"Er is een fout opgetreden bij het berekenen van de kruistabel.\"\n            uiRenderError: \"Er is een fout opgetreden bij het tekenen van de interface van de kruistabel.\"\n            selectAll: \"Alles selecteren\"\n            selectNone: \"Niets selecteren\"\n            tooMany: \"(te veel waarden om weer te geven)\"\n            filterResults: \"Filter resultaten\"\n            totals: \"Totaal\"\n            vs: \"versus\"\n            by: \"per\"\n\n        aggregators:\n            \"Aantal\":                              tpl.count(frFmtInt)\n            \"Aantal unieke waarden\":               tpl.countUnique(frFmtInt)\n            \"Lijst unieke waarden\":                tpl.listUnique(\", \")\n            \"Som\":                                 tpl.sum(frFmt)\n            \"Som van gehele getallen\":             tpl.sum(frFmtInt)\n            \"Gemiddelde\":                          tpl.average(frFmt)\n            \"Minimum\":                             tpl.min(frFmt)\n            \"Maximum\":                             tpl.max(frFmt)\n            \"Eerste\":                              tpl.first(frFmt)\n            \"Laatste\":                             tpl.last(frFmt)\n            \"Som over som\":                        tpl.sumOverSum(frFmt)\n            \"80% bovengrens\":                      tpl.sumOverSumBound80(true, frFmt)\n            \"80% ondergrens\":        \t\t\t   tpl.sumOverSumBound80(false, frFmt)\n            \"Som in verhouding tot het totaal\":    tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Som in verhouding tot de rij\":        tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Som in verhouding tot de kolom\":      tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Aantal in verhouding tot het totaal\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Aantal in verhouding tot de rij\":     tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Aantal in verhouding tot de kolom\":   tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Tabel\":                           $.pivotUtilities.renderers[\"Table\"]\n            \"Tabel met staafdiagrammen\":               $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Warmtekaart\":                     $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Warmtekaart per rij\":             $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Warmtekaart per kolom\":           $.pivotUtilities.renderers[\"Col Heatmap\"]\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    var frFmt, frFmtInt, frFmtPct, nf, tpl;\n    nf = $.pivotUtilities.numberFormat;\n    tpl = $.pivotUtilities.aggregatorTemplates;\n    frFmt = nf({\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    frFmtInt = nf({\n      digitsAfterDecimal: 0,\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    frFmtPct = nf({\n      digitsAfterDecimal: 1,\n      scaler: 100,\n      suffix: \"%\",\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    return $.pivotUtilities.locales.nl = {\n      localeStrings: {\n        renderError: \"Er is een fout opgetreden bij het renderen van de kruistabel.\",\n        computeError: \"Er is een fout opgetreden bij het berekenen van de kruistabel.\",\n        uiRenderError: \"Er is een fout opgetreden bij het tekenen van de interface van de kruistabel.\",\n        selectAll: \"Alles selecteren\",\n        selectNone: \"Niets selecteren\",\n        tooMany: \"(te veel waarden om weer te geven)\",\n        filterResults: \"Filter resultaten\",\n        totals: \"Totaal\",\n        vs: \"versus\",\n        by: \"per\"\n      },\n      aggregators: {\n        \"Aantal\": tpl.count(frFmtInt),\n        \"Aantal unieke waarden\": tpl.countUnique(frFmtInt),\n        \"Lijst unieke waarden\": tpl.listUnique(\", \"),\n        \"Som\": tpl.sum(frFmt),\n        \"Som van gehele getallen\": tpl.sum(frFmtInt),\n        \"Gemiddelde\": tpl.average(frFmt),\n        \"Minimum\": tpl.min(frFmt),\n        \"Maximum\": tpl.max(frFmt),\n        \"Eerste\": tpl.first(frFmt),\n        \"Laatste\": tpl.last(frFmt),\n        \"Som over som\": tpl.sumOverSum(frFmt),\n        \"80% bovengrens\": tpl.sumOverSumBound80(true, frFmt),\n        \"80% ondergrens\": tpl.sumOverSumBound80(false, frFmt),\n        \"Som in verhouding tot het totaal\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct),\n        \"Som in verhouding tot de rij\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct),\n        \"Som in verhouding tot de kolom\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct),\n        \"Aantal in verhouding tot het totaal\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct),\n        \"Aantal in verhouding tot de rij\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct),\n        \"Aantal in verhouding tot de kolom\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n      },\n      renderers: {\n        \"Tabel\": $.pivotUtilities.renderers[\"Table\"],\n        \"Tabel met staafdiagrammen\": $.pivotUtilities.renderers[\"Table Barchart\"],\n        \"Warmtekaart\": $.pivotUtilities.renderers[\"Heatmap\"],\n        \"Warmtekaart per rij\": $.pivotUtilities.renderers[\"Row Heatmap\"],\n        \"Warmtekaart per kolom\": $.pivotUtilities.renderers[\"Col Heatmap\"]\n      }\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot.nl.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.min.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.min.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1298c67aa4a931fa2067749aa65abe791b53ed85
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.min.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.nl.min.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.min.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.min.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..628f25b13977cb99f23d6163b4441ba89e45ecb1
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.nl.min.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.nl.min.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..aa4b438cc1c42ed4905f69cfbd64588f3cb7cfa8
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.js.js
@@ -0,0 +1,82 @@
+(function() {
+  var callWithJQuery;
+
+  callWithJQuery = function(pivotModule) {
+    if (typeof exports === "object" && typeof module === "object") {
+      return pivotModule(require("jquery"));
+    } else if (typeof define === "function" && define.amd) {
+      return define(["jquery"], pivotModule);
+    } else {
+      return pivotModule(jQuery);
+    }
+  };
+
+  callWithJQuery(function($) {
+    var nf, plFmt, plFmtInt, plFmtPct, tpl;
+    nf = $.pivotUtilities.numberFormat;
+    tpl = $.pivotUtilities.aggregatorTemplates;
+    plFmt = nf({
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    plFmtInt = nf({
+      digitsAfterDecimal: 0,
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    plFmtPct = nf({
+      digitsAfterDecimal: 1,
+      scaler: 100,
+      suffix: "%",
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    return $.pivotUtilities.locales.pl = {
+      localeStrings: {
+        renderError: "Wystąpił błąd podczas renderowania wyników PivotTable.",
+        computeError: "Wystąpił błąd podczas obliczania wyników PivotTable.",
+        uiRenderError: "Wystąpił błąd podczas renderowania UI PivotTable.",
+        selectAll: "Zaznacz wszystko",
+        selectNone: "Odznacz wszystkie",
+        tooMany: "(za dużo do wylistowania)",
+        filterResults: "Filtruj wartości",
+        apply: "Zastosuj",
+        cancel: "Anuluj",
+        totals: "Podsumowanie",
+        vs: "vs",
+        by: "przez"
+      },
+      aggregators: {
+        "Liczba": tpl.count(plFmtInt),
+        "Liczba Unikatowych Wartości": tpl.countUnique(plFmtInt),
+        "Lista Unikatowych Wartości": tpl.listUnique(", "),
+        "Suma": tpl.sum(plFmt),
+        "Całkowita Suma": tpl.sum(plFmtInt),
+        "Åšrednia": tpl.average(plFmt),
+        "Minimum": tpl.min(plFmt),
+        "Maksimum": tpl.max(plFmt),
+        "Pierwszy": tpl.first(plFmt),
+        "Ostatni": tpl.last(plFmt),
+        "Suma po Sumie": tpl.sumOverSum(plFmt),
+        "80% Kres Dolny": tpl.sumOverSumBound80(true, plFmt),
+        "80% Kres Górny": tpl.sumOverSumBound80(false, plFmt),
+        "Suma jako Ułamek Całości": tpl.fractionOf(tpl.sum(), "total", plFmtPct),
+        "Suma jako UÅ‚amek w Wierszach": tpl.fractionOf(tpl.sum(), "row", plFmtPct),
+        "Suma jako UÅ‚amek w Kolumnach": tpl.fractionOf(tpl.sum(), "col", plFmtPct),
+        "Liczba jako Ułamek Całości": tpl.fractionOf(tpl.count(), "total", plFmtPct),
+        "Liczba jako UÅ‚amek w Wierszach": tpl.fractionOf(tpl.count(), "row", plFmtPct),
+        "Liczba jako UÅ‚amek w Kolumnach": tpl.fractionOf(tpl.count(), "col", plFmtPct)
+      },
+      renderers: {
+        "Tabela": $.pivotUtilities.renderers["Table"],
+        "Tabela z Wykresem SÅ‚upkowym": $.pivotUtilities.renderers["Table Barchart"],
+        "Mapa cieplna": $.pivotUtilities.renderers["Heatmap"],
+        "Mapa cieplna po Wierszach": $.pivotUtilities.renderers["Row Heatmap"],
+        "Mapa cieplna po Kolumnach": $.pivotUtilities.renderers["Col Heatmap"]
+      }
+    };
+  });
+
+}).call(this);
+
+//# sourceMappingURL=pivot.pl.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3eefc10fd44b7ae9f2259a7dcf90d00eb025e560
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"file":"pivot.pl.js","sources":["pivot.pl.coffee"],"names":[],"mappings":"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","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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    plFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    plFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    plFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.pl =\n        localeStrings:\n            renderError: \"Wystąpił błąd podczas renderowania wyników PivotTable.\"\n            computeError: \"Wystąpił błąd podczas obliczania wyników PivotTable.\"\n            uiRenderError: \"Wystąpił błąd podczas renderowania UI PivotTable.\"\n            selectAll: \"Zaznacz wszystko\"\n            selectNone: \"Odznacz wszystkie\"\n            tooMany: \"(za dużo do wylistowania)\"\n            filterResults: \"Filtruj wartości\"\n            apply: \"Zastosuj\"\n            cancel: \"Anuluj\"\n            totals: \"Podsumowanie\"\n            vs: \"vs\"\n            by: \"przez\"\n\n        aggregators: \n            \"Liczba\":                       tpl.count(plFmtInt)\n            \"Liczba Unikatowych Wartości\":  tpl.countUnique(plFmtInt)\n            \"Lista Unikatowych Wartości\":   tpl.listUnique(\", \")\n            \"Suma\":                         tpl.sum(plFmt)\n            \"Całkowita Suma\":               tpl.sum(plFmtInt)\n            \"Średnia\":                      tpl.average(plFmt)\n            \"Minimum\":                      tpl.min(plFmt)\n            \"Maksimum\":                     tpl.max(plFmt)\n            \"Pierwszy\":                     tpl.first(plFmt)\n            \"Ostatni\":                      tpl.last(plFmt)\n            \"Suma po Sumie\":                tpl.sumOverSum(plFmt)\n            \"80% Kres Dolny\":               tpl.sumOverSumBound80(true, plFmt)\n            \"80% Kres Górny\":               tpl.sumOverSumBound80(false, plFmt)\n            \"Suma jako Ułamek Całości\":     tpl.fractionOf(tpl.sum(),       \"total\", plFmtPct)\n            \"Suma jako Ułamek w Wierszach\":     tpl.fractionOf(tpl.sum(),   \"row\",   plFmtPct)\n            \"Suma jako Ułamek w Kolumnach\":     tpl.fractionOf(tpl.sum(),   \"col\",   plFmtPct)\n            \"Liczba jako Ułamek Całości\":       tpl.fractionOf(tpl.count(), \"total\", plFmtPct)\n            \"Liczba jako Ułamek w Wierszach\":   tpl.fractionOf(tpl.count(), \"row\",   plFmtPct)\n            \"Liczba jako Ułamek w Kolumnach\":   tpl.fractionOf(tpl.count(), \"col\",   plFmtPct)\n\n        renderers:\n            \"Tabela\":                       $.pivotUtilities.renderers[\"Table\"]\n            \"Tabela z Wykresem Słupkowym\":  $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Mapa cieplna\":                 $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Mapa cieplna po Wierszach\":    $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Mapa cieplna po Kolumnach\":    $.pivotUtilities.renderers[\"Col Heatmap\"]\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..85e048fa748bbed281499276904ff6243b35a110
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.pl.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a2c300e65eb4d8913064c1b2c6d2f42d514ad0c4
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.pl.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.min.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..d9884fb6577024872096d00a599a5292c000a5d9
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.min.js.js
@@ -0,0 +1,2 @@
+(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var a,i,t,o,r;return a=e.pivotUtilities.numberFormat,r=e.pivotUtilities.aggregatorTemplates,i=a({thousandsSep:" ",decimalSep:","}),t=a({digitsAfterDecimal:0,thousandsSep:" ",decimalSep:","}),o=a({digitsAfterDecimal:1,scaler:100,suffix:"%",thousandsSep:" ",decimalSep:","}),e.pivotUtilities.locales.pl={localeStrings:{renderError:"Wystąpił błąd podczas renderowania wyników PivotTable.",computeError:"Wystąpił błąd podczas obliczania wyników PivotTable.",uiRenderError:"Wystąpił błąd podczas renderowania UI PivotTable.",selectAll:"Zaznacz wszystko",selectNone:"Odznacz wszystkie",tooMany:"(za dużo do wylistowania)",filterResults:"Filtruj wartości",apply:"Zastosuj",cancel:"Anuluj",totals:"Podsumowanie",vs:"vs",by:"przez"},aggregators:{Liczba:r.count(t),"Liczba Unikatowych Wartości":r.countUnique(t),"Lista Unikatowych Wartości":r.listUnique(", "),Suma:r.sum(i),"Całkowita Suma":r.sum(t),"Średnia":r.average(i),Minimum:r.min(i),Maksimum:r.max(i),Pierwszy:r.first(i),Ostatni:r.last(i),"Suma po Sumie":r.sumOverSum(i),"80% Kres Dolny":r.sumOverSumBound80(!0,i),"80% Kres Górny":r.sumOverSumBound80(!1,i),"Suma jako Ułamek Całości":r.fractionOf(r.sum(),"total",o),"Suma jako Ułamek w Wierszach":r.fractionOf(r.sum(),"row",o),"Suma jako Ułamek w Kolumnach":r.fractionOf(r.sum(),"col",o),"Liczba jako Ułamek Całości":r.fractionOf(r.count(),"total",o),"Liczba jako Ułamek w Wierszach":r.fractionOf(r.count(),"row",o),"Liczba jako Ułamek w Kolumnach":r.fractionOf(r.count(),"col",o)},renderers:{Tabela:e.pivotUtilities.renderers.Table,"Tabela z Wykresem Słupkowym":e.pivotUtilities.renderers["Table Barchart"],"Mapa cieplna":e.pivotUtilities.renderers.Heatmap,"Mapa cieplna po Wierszach":e.pivotUtilities.renderers["Row Heatmap"],"Mapa cieplna po Kolumnach":e.pivotUtilities.renderers["Col Heatmap"]}}})}).call(this);
+//# sourceMappingURL=pivot.pl.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.min.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..14a4b8e6f0b0e21f9aaf35d5fea0a67a36e7bf30
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.min.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"sources":["pivot.pl.coffee","pivot.pl.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","nf","plFmt","plFmtInt","plFmtPct","tpl","pivotUtilities","numberFormat","aggregatorTemplates","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","pl","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","apply","cancel","totals","vs","by","aggregators","Liczba","count","Liczba Unikatowych Wartości","countUnique","Lista Unikatowych Wartości","listUnique","Suma","sum","Całkowita Suma","Średnia","average","Minimum","min","Maksimum","max","Pierwszy","first","Ostatni","last","Suma po Sumie","sumOverSum","80% Kres Dolny","sumOverSumBound80","80% Kres Górny","Suma jako Ułamek Całości","fractionOf","Suma jako Ułamek w Wierszach","Suma jako Ułamek w Kolumnach","Liczba jako Ułamek Całości","Liczba jako Ułamek w Wierszach","Liczba jako Ułamek w Kolumnach","renderers","Tabela","Tabela z Wykresem Słupkowym","Mapa cieplna","Mapa cieplna po Wierszach","Mapa cieplna po Kolumnach","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAXC,UAAyC,gBAAVC,QACrCF,EAAYG,QAAQ,WACC,kBAAVC,SAAyBA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GACZ,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,CCuBA,ODvBAJ,GAAKD,EAAEM,eAAeC,aACtBF,EAAML,EAAEM,eAAeE,oBAEvBN,EAAWD,GAAGQ,aAAc,IAAKC,WAAY,MAC7CP,EAAWF,GAAGU,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEN,EAAWH,GAAGU,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FV,EAAEM,eAAeQ,QAAQC,IACrBC,eACIC,YAAa,yDACbC,aAAc,uDACdC,cAAe,oDACfC,UAAW,mBACXC,WAAY,oBACZC,QAAS,4BACTC,cAAe,mBACfC,MAAO,WACPC,OAAQ,SACRC,OAAQ,eACRC,GAAI,KACJC,GAAI,SAERC,aACIC,OAAgCzB,EAAI0B,MAAM5B,GAC1C6B,8BAAgC3B,EAAI4B,YAAY9B,GAChD+B,6BAAgC7B,EAAI8B,WAAW,MAC/CC,KAAgC/B,EAAIgC,IAAInC,GACxCoC,iBAAgCjC,EAAIgC,IAAIlC,GACxCoC,UAAgClC,EAAImC,QAAQtC,GAC5CuC,QAAgCpC,EAAIqC,IAAIxC,GACxCyC,SAAgCtC,EAAIuC,IAAI1C,GACxC2C,SAAgCxC,EAAIyC,MAAM5C,GAC1C6C,QAAgC1C,EAAI2C,KAAK9C,GACzC+C,gBAAgC5C,EAAI6C,WAAWhD,GAC/CiD,iBAAgC9C,EAAI+C,mBAAkB,EAAMlD,GAC5DmD,iBAAgChD,EAAI+C,mBAAkB,EAAOlD,GAC7DoD,2BAAgCjD,EAAIkD,WAAWlD,EAAIgC,MAAa,QAASjC,GACzEoD,+BAAoCnD,EAAIkD,WAAWlD,EAAIgC,MAAS,MAASjC,GACzEqD,+BAAoCpD,EAAIkD,WAAWlD,EAAIgC,MAAS,MAASjC,GACzEsD,6BAAoCrD,EAAIkD,WAAWlD,EAAI0B,QAAS,QAAS3B,GACzEuD,iCAAoCtD,EAAIkD,WAAWlD,EAAI0B,QAAS,MAAS3B,GACzEwD,iCAAoCvD,EAAIkD,WAAWlD,EAAI0B,QAAS,MAAS3B,IAE7EyD,WACIC,OAAgC9D,EAAEM,eAAeuD,UAAU,MAC3DE,8BAAgC/D,EAAEM,eAAeuD,UAAU,kBAC3DG,eAAgChE,EAAEM,eAAeuD,UAAU,QAC3DI,4BAAgCjE,EAAEM,eAAeuD,UAAU,eAC3DK,4BAAgClE,EAAEM,eAAeuD,UAAU,qBCqBpEM,KAAKC","file":"pivot.pl.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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    plFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    plFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    plFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.pl =\n        localeStrings:\n            renderError: \"Wystąpił błąd podczas renderowania wyników PivotTable.\"\n            computeError: \"Wystąpił błąd podczas obliczania wyników PivotTable.\"\n            uiRenderError: \"Wystąpił błąd podczas renderowania UI PivotTable.\"\n            selectAll: \"Zaznacz wszystko\"\n            selectNone: \"Odznacz wszystkie\"\n            tooMany: \"(za dużo do wylistowania)\"\n            filterResults: \"Filtruj wartości\"\n            apply: \"Zastosuj\"\n            cancel: \"Anuluj\"\n            totals: \"Podsumowanie\"\n            vs: \"vs\"\n            by: \"przez\"\n\n        aggregators: \n            \"Liczba\":                       tpl.count(plFmtInt)\n            \"Liczba Unikatowych Wartości\":  tpl.countUnique(plFmtInt)\n            \"Lista Unikatowych Wartości\":   tpl.listUnique(\", \")\n            \"Suma\":                         tpl.sum(plFmt)\n            \"Całkowita Suma\":               tpl.sum(plFmtInt)\n            \"Średnia\":                      tpl.average(plFmt)\n            \"Minimum\":                      tpl.min(plFmt)\n            \"Maksimum\":                     tpl.max(plFmt)\n            \"Pierwszy\":                     tpl.first(plFmt)\n            \"Ostatni\":                      tpl.last(plFmt)\n            \"Suma po Sumie\":                tpl.sumOverSum(plFmt)\n            \"80% Kres Dolny\":               tpl.sumOverSumBound80(true, plFmt)\n            \"80% Kres Górny\":               tpl.sumOverSumBound80(false, plFmt)\n            \"Suma jako Ułamek Całości\":     tpl.fractionOf(tpl.sum(),       \"total\", plFmtPct)\n            \"Suma jako Ułamek w Wierszach\":     tpl.fractionOf(tpl.sum(),   \"row\",   plFmtPct)\n            \"Suma jako Ułamek w Kolumnach\":     tpl.fractionOf(tpl.sum(),   \"col\",   plFmtPct)\n            \"Liczba jako Ułamek Całości\":       tpl.fractionOf(tpl.count(), \"total\", plFmtPct)\n            \"Liczba jako Ułamek w Wierszach\":   tpl.fractionOf(tpl.count(), \"row\",   plFmtPct)\n            \"Liczba jako Ułamek w Kolumnach\":   tpl.fractionOf(tpl.count(), \"col\",   plFmtPct)\n\n        renderers:\n            \"Tabela\":                       $.pivotUtilities.renderers[\"Table\"]\n            \"Tabela z Wykresem Słupkowym\":  $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Mapa cieplna\":                 $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Mapa cieplna po Wierszach\":    $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Mapa cieplna po Kolumnach\":    $.pivotUtilities.renderers[\"Col Heatmap\"]\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    var nf, plFmt, plFmtInt, plFmtPct, tpl;\n    nf = $.pivotUtilities.numberFormat;\n    tpl = $.pivotUtilities.aggregatorTemplates;\n    plFmt = nf({\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    plFmtInt = nf({\n      digitsAfterDecimal: 0,\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    plFmtPct = nf({\n      digitsAfterDecimal: 1,\n      scaler: 100,\n      suffix: \"%\",\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    return $.pivotUtilities.locales.pl = {\n      localeStrings: {\n        renderError: \"Wystąpił błąd podczas renderowania wyników PivotTable.\",\n        computeError: \"Wystąpił błąd podczas obliczania wyników PivotTable.\",\n        uiRenderError: \"Wystąpił błąd podczas renderowania UI PivotTable.\",\n        selectAll: \"Zaznacz wszystko\",\n        selectNone: \"Odznacz wszystkie\",\n        tooMany: \"(za dużo do wylistowania)\",\n        filterResults: \"Filtruj wartości\",\n        apply: \"Zastosuj\",\n        cancel: \"Anuluj\",\n        totals: \"Podsumowanie\",\n        vs: \"vs\",\n        by: \"przez\"\n      },\n      aggregators: {\n        \"Liczba\": tpl.count(plFmtInt),\n        \"Liczba Unikatowych Wartości\": tpl.countUnique(plFmtInt),\n        \"Lista Unikatowych Wartości\": tpl.listUnique(\", \"),\n        \"Suma\": tpl.sum(plFmt),\n        \"Całkowita Suma\": tpl.sum(plFmtInt),\n        \"Średnia\": tpl.average(plFmt),\n        \"Minimum\": tpl.min(plFmt),\n        \"Maksimum\": tpl.max(plFmt),\n        \"Pierwszy\": tpl.first(plFmt),\n        \"Ostatni\": tpl.last(plFmt),\n        \"Suma po Sumie\": tpl.sumOverSum(plFmt),\n        \"80% Kres Dolny\": tpl.sumOverSumBound80(true, plFmt),\n        \"80% Kres Górny\": tpl.sumOverSumBound80(false, plFmt),\n        \"Suma jako Ułamek Całości\": tpl.fractionOf(tpl.sum(), \"total\", plFmtPct),\n        \"Suma jako Ułamek w Wierszach\": tpl.fractionOf(tpl.sum(), \"row\", plFmtPct),\n        \"Suma jako Ułamek w Kolumnach\": tpl.fractionOf(tpl.sum(), \"col\", plFmtPct),\n        \"Liczba jako Ułamek Całości\": tpl.fractionOf(tpl.count(), \"total\", plFmtPct),\n        \"Liczba jako Ułamek w Wierszach\": tpl.fractionOf(tpl.count(), \"row\", plFmtPct),\n        \"Liczba jako Ułamek w Kolumnach\": tpl.fractionOf(tpl.count(), \"col\", plFmtPct)\n      },\n      renderers: {\n        \"Tabela\": $.pivotUtilities.renderers[\"Table\"],\n        \"Tabela z Wykresem Słupkowym\": $.pivotUtilities.renderers[\"Table Barchart\"],\n        \"Mapa cieplna\": $.pivotUtilities.renderers[\"Heatmap\"],\n        \"Mapa cieplna po Wierszach\": $.pivotUtilities.renderers[\"Row Heatmap\"],\n        \"Mapa cieplna po Kolumnach\": $.pivotUtilities.renderers[\"Col Heatmap\"]\n      }\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot.pl.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.min.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.min.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ed5339383cc0d6d7eb1e724b8cf89e50f5b299b4
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.min.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.pl.min.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.min.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.min.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..688b2553a65d8a941a0634e3bf618979f463c518
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pl.min.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.pl.min.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.js.js
index 0ad672c0b0cdf7ef1def265ee42c797b910b6fcf..b73724391805ead2597bcf2d378259f75574a71e 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.js.js
@@ -37,35 +37,42 @@
     });
     $.pivotUtilities.locales.pt = {
       localeStrings: {
-        renderError: "Ocorreu um error ao renderizar os resultados da Tabela Din&atilde;mica.",
-        computeError: "Ocorreu um error ao computar os resultados da Tabela Din&atilde;mica.",
-        uiRenderError: "Ocorreu um error ao renderizar a interface da Tabela Din&atilde;mica.",
+        renderError: "Ocorreu um error ao renderizar os resultados da Tabela Dinâmica.",
+        computeError: "Ocorreu um error ao computar os resultados da Tabela Dinâmica.",
+        uiRenderError: "Ocorreu um error ao renderizar a interface da Tabela Dinâmica.",
         selectAll: "Selecionar Tudo",
         selectNone: "Selecionar Nenhum",
         tooMany: "(demais para listar)",
         filterResults: "Filtrar resultados",
         totals: "Totais",
+        apply: "Aplicar",
+        cancel: "Cancelar",
         vs: "vs",
         by: "por"
       },
       aggregators: {
         "Contagem": tpl.count(frFmtInt),
-        "Contagem de Valores &uacute;nicos": tpl.countUnique(frFmtInt),
-        "Lista de Valores &uacute;nicos": tpl.listUnique(", "),
+        "Contagem de Valores únicos": tpl.countUnique(frFmtInt),
+        "Lista de Valores únicos": tpl.listUnique(", "),
         "Soma": tpl.sum(frFmt),
         "Soma de Inteiros": tpl.sum(frFmtInt),
         "Média": tpl.average(frFmt),
+        "Mediana": tpl.median(frFmt),
+        "Variancia": tpl["var"](1, frFmt),
+        "Desvio Padrão da Amostra": tpl.stdev(1, frFmt),
         "Mínimo": tpl.min(frFmt),
         "Máximo": tpl.max(frFmt),
+        "Primeiro": tpl.first(frFmt),
+        "Último": tpl.last(frFmt),
         "Soma sobre Soma": tpl.sumOverSum(frFmt),
         "Limite Superior a 80%": tpl.sumOverSumBound80(true, frFmt),
         "Limite Inferior a 80%": tpl.sumOverSumBound80(false, frFmt),
-        "Soma como Fra&ccedil;&atilde;o do Total": tpl.fractionOf(tpl.sum(), "total", frFmtPct),
-        "Soma como Fra&ccedil;&atilde;o da Linha": tpl.fractionOf(tpl.sum(), "row", frFmtPct),
-        "Soma como Fra&ccedil;&atilde;o da Coluna": tpl.fractionOf(tpl.sum(), "col", frFmtPct),
-        "Contagem como Fra&ccedil;&atilde;o do Total": tpl.fractionOf(tpl.count(), "total", frFmtPct),
-        "Contagem como Fra&ccedil;&atilde;o da Linha": tpl.fractionOf(tpl.count(), "row", frFmtPct),
-        "Contagem como Fra&ccedil;&atilde;o da Coluna": tpl.fractionOf(tpl.count(), "col", frFmtPct)
+        "Soma como Fração do Total": tpl.fractionOf(tpl.sum(), "total", frFmtPct),
+        "Soma como Fração da Linha": tpl.fractionOf(tpl.sum(), "row", frFmtPct),
+        "Soma como Fração da Coluna": tpl.fractionOf(tpl.sum(), "col", frFmtPct),
+        "Contagem como Fração do Total": tpl.fractionOf(tpl.count(), "total", frFmtPct),
+        "Contagem como Fração da Linha": tpl.fractionOf(tpl.count(), "row", frFmtPct),
+        "Contagem como Fração da Coluna": tpl.fractionOf(tpl.count(), "col", frFmtPct)
       },
       renderers: {
         "Tabela": r["Table"],
@@ -77,10 +84,10 @@
     };
     if (gcr) {
       $.pivotUtilities.locales.pt.gchart_renderers = {
-        "Gr&aacute;fico de Linhas": gcr["Line Chart"],
-        "Gr&aacute;fico de Barras": gcr["Bar Chart"],
-        "Gr&aacute;fico de Barras Empilhadas": gcr["Stacked Bar Chart"],
-        "Gr&aacute;fico de &Aacute;rea": gcr["Area Chart"]
+        "Gráfico de Linhas": gcr["Line Chart"],
+        "Gráfico de Barras": gcr["Bar Chart"],
+        "Gráfico de Barras Empilhadas": gcr["Stacked Bar Chart"],
+        "Gráfico de Área": gcr["Area Chart"]
       };
     }
     if (d3r) {
@@ -90,8 +97,10 @@
     }
     if (c3r) {
       $.pivotUtilities.locales.pt.c3_renderers = {
-        "Gr&aacute;fico de Linhas": c3r["Line Chart C3"],
-        "Gr&aacute;fico de Barras": c3r["Bar Chart C3"]
+        "Gráfico de Linhas": c3r["Line Chart"],
+        "Gráfico de Barras": c3r["Bar Chart"],
+        "Gráfico de Barras Empilhadas": c3r["Stacked Bar Chart"],
+        "Gráfico de Área": c3r["Area Chart"]
       };
     }
     return $.pivotUtilities.locales.pt;
@@ -99,4 +108,4 @@
 
 }).call(this);
 
-//# sourceMappingURL=pivot.pt.js.map
\ No newline at end of file
+//# sourceMappingURL=pivot.pt.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.js.map.txt
index e9695921a65272ac67b53bb651e8de5acf712152..72cb98107aa70611e2b2a5ab980bc8f88c8d8924 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["pivot.pt.coffee"],"names":[],"mappings":"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","file":"pivot.pt.js","sourceRoot":"/source/","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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n    r = $.pivotUtilities.renderers\n    gcr = $.pivotUtilities.gchart_renderers\n    d3r = $.pivotUtilities.d3_renderers\n    c3r = $.pivotUtilities.c3_renderers\n\n    frFmt =    nf(thousandsSep: \".\", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \".\", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 2, scaler: 100, suffix: \"%\", thousandsSep: \".\", decimalSep: \",\")\n\n    $.pivotUtilities.locales.pt = \n\n        localeStrings:\n            renderError: \"Ocorreu um error ao renderizar os resultados da Tabela Din&atilde;mica.\"\n            computeError: \"Ocorreu um error ao computar os resultados da Tabela Din&atilde;mica.\"\n            uiRenderError: \"Ocorreu um error ao renderizar a interface da Tabela Din&atilde;mica.\"\n            selectAll: \"Selecionar Tudo\"\n            selectNone: \"Selecionar Nenhum\"\n            tooMany: \"(demais para listar)\"\n            filterResults: \"Filtrar resultados\"\n            totals: \"Totais\"\n            vs: \"vs\"\n            by: \"por\"\n\n        aggregators:\n            \"Contagem\":                                     tpl.count(frFmtInt)\n            \"Contagem de Valores &uacute;nicos\":            tpl.countUnique(frFmtInt)\n            \"Lista de Valores &uacute;nicos\":               tpl.listUnique(\", \")\n            \"Soma\":                                         tpl.sum(frFmt)\n            \"Soma de Inteiros\":                             tpl.sum(frFmtInt)\n            \"Média\":                                        tpl.average(frFmt)\n            \"Mínimo\":                                       tpl.min(frFmt)\n            \"Máximo\":                                       tpl.max(frFmt)\n            \"Soma sobre Soma\":                              tpl.sumOverSum(frFmt)\n            \"Limite Superior a 80%\":                        tpl.sumOverSumBound80(true, frFmt)\n            \"Limite Inferior a 80%\":                        tpl.sumOverSumBound80(false, frFmt)\n            \"Soma como Fra&ccedil;&atilde;o do Total\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Soma como Fra&ccedil;&atilde;o da Linha\":      tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Soma como Fra&ccedil;&atilde;o da Coluna\":     tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Contagem como Fra&ccedil;&atilde;o do Total\":  tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Contagem como Fra&ccedil;&atilde;o da Linha\":  tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Contagem como Fra&ccedil;&atilde;o da Coluna\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Tabela\":                    r[\"Table\"]\n            \"Tabela com Barras\":         r[\"Table Barchart\"]\n            \"Mapa de Calor\":             r[\"Heatmap\"]\n            \"Mapa de Calor por Linhas\":  r[\"Row Heatmap\"]\n            \"Mapa de Calor por Colunas\": r[\"Col Heatmap\"]\n\n    if gcr\n        $.pivotUtilities.locales.pt.gchart_renderers =\n            \"Gr&aacute;fico de Linhas\":            gcr[\"Line Chart\"]\n            \"Gr&aacute;fico de Barras\":            gcr[\"Bar Chart\"]\n            \"Gr&aacute;fico de Barras Empilhadas\": gcr[\"Stacked Bar Chart\"]\n            \"Gr&aacute;fico de &Aacute;rea\":       gcr[\"Area Chart\"]\n\n    if d3r\n        $.pivotUtilities.locales.pt.d3_renderers =\n            \"Mapa de Árvore\": d3r[\"Treemap\"]\n\n    if c3r\n      $.pivotUtilities.locales.pt.c3_renderers =\n        \"Gr&aacute;fico de Linhas\": c3r[\"Line Chart C3\"]\n        \"Gr&aacute;fico de Barras\": c3r[\"Bar Chart C3\"]\n\n    return $.pivotUtilities.locales.pt\n"]}
\ No newline at end of file
+{"version":3,"file":"pivot.pt.js","sources":["pivot.pt.coffee"],"names":[],"mappings":"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","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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n    r = $.pivotUtilities.renderers\n    gcr = $.pivotUtilities.gchart_renderers\n    d3r = $.pivotUtilities.d3_renderers\n    c3r = $.pivotUtilities.c3_renderers\n\n    frFmt =    nf(thousandsSep: \".\", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \".\", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 2, scaler: 100, suffix: \"%\", thousandsSep: \".\", decimalSep: \",\")\n\n    $.pivotUtilities.locales.pt = \n\n        localeStrings:\n            renderError: \"Ocorreu um error ao renderizar os resultados da Tabela Dinâmica.\"\n            computeError: \"Ocorreu um error ao computar os resultados da Tabela Dinâmica.\"\n            uiRenderError: \"Ocorreu um error ao renderizar a interface da Tabela Dinâmica.\"\n            selectAll: \"Selecionar Tudo\"\n            selectNone: \"Selecionar Nenhum\"\n            tooMany: \"(demais para listar)\"\n            filterResults: \"Filtrar resultados\"\n            totals: \"Totais\"\n            apply:\"Aplicar\",\n            cancel: \"Cancelar\",\n            vs: \"vs\"\n            by: \"por\"\n\n        aggregators:\n            \"Contagem\":                                     tpl.count(frFmtInt)\n            \"Contagem de Valores únicos\":            tpl.countUnique(frFmtInt)\n            \"Lista de Valores únicos\":               tpl.listUnique(\", \")\n            \"Soma\":                                         tpl.sum(frFmt)\n            \"Soma de Inteiros\":                             tpl.sum(frFmtInt)\n            \"Média\":                                        tpl.average(frFmt)\n            \"Mediana\":                                      tpl.median(frFmt)\n            \"Variancia\":                                    tpl.var(1, frFmt)\n            \"Desvio Padrão da Amostra\":                     tpl.stdev(1, frFmt)\n            \"Mínimo\":                                       tpl.min(frFmt)\n            \"Máximo\":                                       tpl.max(frFmt)\n            \"Primeiro\":                                     tpl.first(frFmt),\n            \"Último\":                                       tpl.last(frFmt),\n            \"Soma sobre Soma\":                              tpl.sumOverSum(frFmt)\n            \"Limite Superior a 80%\":                        tpl.sumOverSumBound80(true, frFmt)\n            \"Limite Inferior a 80%\":                        tpl.sumOverSumBound80(false, frFmt)\n            \"Soma como Fração do Total\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Soma como Fração da Linha\":      tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Soma como Fração da Coluna\":     tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Contagem como Fração do Total\":  tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Contagem como Fração da Linha\":  tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Contagem como Fração da Coluna\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Tabela\":                    r[\"Table\"]\n            \"Tabela com Barras\":         r[\"Table Barchart\"]\n            \"Mapa de Calor\":             r[\"Heatmap\"]\n            \"Mapa de Calor por Linhas\":  r[\"Row Heatmap\"]\n            \"Mapa de Calor por Colunas\": r[\"Col Heatmap\"]\n\n    if gcr\n        $.pivotUtilities.locales.pt.gchart_renderers =\n            \"Gráfico de Linhas\":            gcr[\"Line Chart\"]\n            \"Gráfico de Barras\":            gcr[\"Bar Chart\"]\n            \"Gráfico de Barras Empilhadas\": gcr[\"Stacked Bar Chart\"]\n            \"Gráfico de Área\":       gcr[\"Area Chart\"]\n\n    if d3r\n        $.pivotUtilities.locales.pt.d3_renderers =\n            \"Mapa de Árvore\": d3r[\"Treemap\"]\n\n    if c3r\n      $.pivotUtilities.locales.pt.c3_renderers =\n        \"Gráfico de Linhas\": c3r[\"Line Chart\"]\n        \"Gráfico de Barras\": c3r[\"Bar Chart\"]\n        \"Gráfico de Barras Empilhadas\": c3r[\"Stacked Bar Chart\"]\n        \"Gráfico de Área\":       c3r[\"Area Chart\"]\n\n    return $.pivotUtilities.locales.pt\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.min.js.js
index 1f6bea68c44196376813e270c5f0528dcd98355d..0f92ea7f014588afc97ddc585191c79c4669a004 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.min.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.min.js.js
@@ -1,2 +1,2 @@
-(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var a,r,o,t,i,c,l,s,n;return l=e.pivotUtilities.numberFormat,n=e.pivotUtilities.aggregatorTemplates,s=e.pivotUtilities.renderers,c=e.pivotUtilities.gchart_renderers,r=e.pivotUtilities.d3_renderers,a=e.pivotUtilities.c3_renderers,o=l({thousandsSep:".",decimalSep:","}),t=l({digitsAfterDecimal:0,thousandsSep:".",decimalSep:","}),i=l({digitsAfterDecimal:2,scaler:100,suffix:"%",thousandsSep:".",decimalSep:","}),e.pivotUtilities.locales.pt={localeStrings:{renderError:"Ocorreu um error ao renderizar os resultados da Tabela Din&atilde;mica.",computeError:"Ocorreu um error ao computar os resultados da Tabela Din&atilde;mica.",uiRenderError:"Ocorreu um error ao renderizar a interface da Tabela Din&atilde;mica.",selectAll:"Selecionar Tudo",selectNone:"Selecionar Nenhum",tooMany:"(demais para listar)",filterResults:"Filtrar resultados",totals:"Totais",vs:"vs",by:"por"},aggregators:{Contagem:n.count(t),"Contagem de Valores &uacute;nicos":n.countUnique(t),"Lista de Valores &uacute;nicos":n.listUnique(", "),Soma:n.sum(o),"Soma de Inteiros":n.sum(t),"Média":n.average(o),"Mínimo":n.min(o),"Máximo":n.max(o),"Soma sobre Soma":n.sumOverSum(o),"Limite Superior a 80%":n.sumOverSumBound80(!0,o),"Limite Inferior a 80%":n.sumOverSumBound80(!1,o),"Soma como Fra&ccedil;&atilde;o do Total":n.fractionOf(n.sum(),"total",i),"Soma como Fra&ccedil;&atilde;o da Linha":n.fractionOf(n.sum(),"row",i),"Soma como Fra&ccedil;&atilde;o da Coluna":n.fractionOf(n.sum(),"col",i),"Contagem como Fra&ccedil;&atilde;o do Total":n.fractionOf(n.count(),"total",i),"Contagem como Fra&ccedil;&atilde;o da Linha":n.fractionOf(n.count(),"row",i),"Contagem como Fra&ccedil;&atilde;o da Coluna":n.fractionOf(n.count(),"col",i)},renderers:{Tabela:s.Table,"Tabela com Barras":s["Table Barchart"],"Mapa de Calor":s.Heatmap,"Mapa de Calor por Linhas":s["Row Heatmap"],"Mapa de Calor por Colunas":s["Col Heatmap"]}},c&&(e.pivotUtilities.locales.pt.gchart_renderers={"Gr&aacute;fico de Linhas":c["Line Chart"],"Gr&aacute;fico de Barras":c["Bar Chart"],"Gr&aacute;fico de Barras Empilhadas":c["Stacked Bar Chart"],"Gr&aacute;fico de &Aacute;rea":c["Area Chart"]}),r&&(e.pivotUtilities.locales.pt.d3_renderers={"Mapa de Árvore":r.Treemap}),a&&(e.pivotUtilities.locales.pt.c3_renderers={"Gr&aacute;fico de Linhas":a["Line Chart C3"],"Gr&aacute;fico de Barras":a["Bar Chart C3"]}),e.pivotUtilities.locales.pt})}).call(this);
-//# sourceMappingURL=pivot.pt.min.js.map
\ No newline at end of file
+(function(){var a;(a=function(a){return"object"==typeof exports&&"object"==typeof module?a(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)})(function(a){var e,r,o,i,t,s,n,l,c;return n=a.pivotUtilities.numberFormat,c=a.pivotUtilities.aggregatorTemplates,l=a.pivotUtilities.renderers,s=a.pivotUtilities.gchart_renderers,r=a.pivotUtilities.d3_renderers,e=a.pivotUtilities.c3_renderers,o=n({thousandsSep:".",decimalSep:","}),i=n({digitsAfterDecimal:0,thousandsSep:".",decimalSep:","}),t=n({digitsAfterDecimal:2,scaler:100,suffix:"%",thousandsSep:".",decimalSep:","}),a.pivotUtilities.locales.pt={localeStrings:{renderError:"Ocorreu um error ao renderizar os resultados da Tabela Dinâmica.",computeError:"Ocorreu um error ao computar os resultados da Tabela Dinâmica.",uiRenderError:"Ocorreu um error ao renderizar a interface da Tabela Dinâmica.",selectAll:"Selecionar Tudo",selectNone:"Selecionar Nenhum",tooMany:"(demais para listar)",filterResults:"Filtrar resultados",totals:"Totais",apply:"Aplicar",cancel:"Cancelar",vs:"vs",by:"por"},aggregators:{Contagem:c.count(i),"Contagem de Valores únicos":c.countUnique(i),"Lista de Valores únicos":c.listUnique(", "),Soma:c.sum(o),"Soma de Inteiros":c.sum(i),"Média":c.average(o),Mediana:c.median(o),Variancia:c["var"](1,o),"Desvio Padrão da Amostra":c.stdev(1,o),"Mínimo":c.min(o),"Máximo":c.max(o),Primeiro:c.first(o),"Último":c.last(o),"Soma sobre Soma":c.sumOverSum(o),"Limite Superior a 80%":c.sumOverSumBound80(!0,o),"Limite Inferior a 80%":c.sumOverSumBound80(!1,o),"Soma como Fração do Total":c.fractionOf(c.sum(),"total",t),"Soma como Fração da Linha":c.fractionOf(c.sum(),"row",t),"Soma como Fração da Coluna":c.fractionOf(c.sum(),"col",t),"Contagem como Fração do Total":c.fractionOf(c.count(),"total",t),"Contagem como Fração da Linha":c.fractionOf(c.count(),"row",t),"Contagem como Fração da Coluna":c.fractionOf(c.count(),"col",t)},renderers:{Tabela:l.Table,"Tabela com Barras":l["Table Barchart"],"Mapa de Calor":l.Heatmap,"Mapa de Calor por Linhas":l["Row Heatmap"],"Mapa de Calor por Colunas":l["Col Heatmap"]}},s&&(a.pivotUtilities.locales.pt.gchart_renderers={"Gráfico de Linhas":s["Line Chart"],"Gráfico de Barras":s["Bar Chart"],"Gráfico de Barras Empilhadas":s["Stacked Bar Chart"],"Gráfico de Área":s["Area Chart"]}),r&&(a.pivotUtilities.locales.pt.d3_renderers={"Mapa de Árvore":r.Treemap}),e&&(a.pivotUtilities.locales.pt.c3_renderers={"Gráfico de Linhas":e["Line Chart"],"Gráfico de Barras":e["Bar Chart"],"Gráfico de Barras Empilhadas":e["Stacked Bar Chart"],"Gráfico de Área":e["Area Chart"]}),a.pivotUtilities.locales.pt})}).call(this);
+//# sourceMappingURL=pivot.pt.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.min.js.map.txt
index 5645c943140764b8ad1d74ba5fcf692ed932665c..cf067a6bcf95d9bffdb25652590f85e43d592ad1 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.min.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.pt.min.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["/source/pivot.pt.coffee","pivot.pt.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","c3r","d3r","frFmt","frFmtInt","frFmtPct","gcr","nf","r","tpl","pivotUtilities","numberFormat","aggregatorTemplates","renderers","gchart_renderers","d3_renderers","c3_renderers","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","pt","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","totals","vs","by","aggregators","Contagem","count","Contagem de Valores &uacute;nicos","countUnique","Lista de Valores &uacute;nicos","listUnique","Soma","sum","Soma de Inteiros","Média","average","Mínimo","min","Máximo","max","Soma sobre Soma","sumOverSum","Limite Superior a 80%","sumOverSumBound80","Limite Inferior a 80%","Soma como Fra&ccedil;&atilde;o do Total","fractionOf","Soma como Fra&ccedil;&atilde;o da Linha","Soma como Fra&ccedil;&atilde;o da Coluna","Contagem como Fra&ccedil;&atilde;o do Total","Contagem como Fra&ccedil;&atilde;o da Linha","Contagem como Fra&ccedil;&atilde;o da Coluna","Tabela","Tabela com Barras","Mapa de Calor","Mapa de Calor por Linhas","Mapa de Calor por Colunas","Gr&aacute;fico de Linhas","Gr&aacute;fico de Barras","Gr&aacute;fico de Barras Empilhadas","Gr&aacute;fico de &Aacute;rea","Mapa de Árvore","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAlBC,UAAgD,gBAAjBC,QAC9BF,EAAYG,QAAQ,WACC,kBAAjBC,SAAgCA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GACZ,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAmEA,OAnEAF,GAAKP,EAAEU,eAAeC,aACtBF,EAAMT,EAAEU,eAAeE,oBACvBJ,EAAIR,EAAEU,eAAeG,UACrBP,EAAMN,EAAEU,eAAeI,iBACvBZ,EAAMF,EAAEU,eAAeK,aACvBd,EAAMD,EAAEU,eAAeM,aAEvBb,EAAWI,GAAGU,aAAc,IAAKC,WAAY,MAC7Cd,EAAWG,GAAGY,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEb,EAAWE,GAAGY,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FlB,EAAEU,eAAeY,QAAQC,IAErBC,eACIC,YAAa,0EACbC,aAAc,wEACdC,cAAe,wEACfC,UAAW,kBACXC,WAAY,oBACZC,QAAS,uBACTC,cAAe,qBACfC,OAAQ,SACRC,GAAI,KACJC,GAAI,OAERC,aACIC,SAAgD3B,EAAI4B,MAAMjC,GAC1DkC,oCAAgD7B,EAAI8B,YAAYnC,GAChEoC,iCAAgD/B,EAAIgC,WAAW,MAC/DC,KAAgDjC,EAAIkC,IAAIxC,GACxDyC,mBAAgDnC,EAAIkC,IAAIvC,GACxDyC,QAAgDpC,EAAIqC,QAAQ3C,GAC5D4C,SAAgDtC,EAAIuC,IAAI7C,GACxD8C,SAAgDxC,EAAIyC,IAAI/C,GACxDgD,kBAAgD1C,EAAI2C,WAAWjD,GAC/DkD,wBAAgD5C,EAAI6C,mBAAkB,EAAMnD,GAC5EoD,wBAAgD9C,EAAI6C,mBAAkB,EAAOnD,GAC7EqD,0CAAgD/C,EAAIgD,WAAWhD,EAAIkC,MAAS,QAAStC,GACrFqD,0CAAgDjD,EAAIgD,WAAWhD,EAAIkC,MAAS,MAAStC,GACrFsD,2CAAgDlD,EAAIgD,WAAWhD,EAAIkC,MAAS,MAAStC,GACrFuD,8CAAgDnD,EAAIgD,WAAWhD,EAAI4B,QAAS,QAAShC,GACrFwD,8CAAgDpD,EAAIgD,WAAWhD,EAAI4B,QAAS,MAAShC,GACrFyD,+CAAgDrD,EAAIgD,WAAWhD,EAAI4B,QAAS,MAAShC,IAEzFQ,WACIkD,OAA6BvD,EAAE,MAC/BwD,oBAA6BxD,EAAE,kBAC/ByD,gBAA6BzD,EAAE,QAC/B0D,2BAA6B1D,EAAE,eAC/B2D,4BAA6B3D,EAAE,iBAEpCF,IACCN,EAAEU,eAAeY,QAAQC,GAAGT,kBACxBsD,2BAAuC9D,EAAI,cAC3C+D,2BAAuC/D,EAAI,aAC3CgE,sCAAuChE,EAAI,qBAC3CiE,gCAAuCjE,EAAI,gBAEhDJ,IACCF,EAAEU,eAAeY,QAAQC,GAAGR,cACxByD,iBAAkBtE,EAAI,UAE3BD,IACDD,EAAEU,eAAeY,QAAQC,GAAGP,cAC1BoD,2BAA4BnE,EAAI,iBAChCoE,2BAA4BpE,EAAI,kBAE7BD,EAAEU,eAAeY,QAAQC,OCsBjCkD,KAAKC","file":"pivot.pt.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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n    r = $.pivotUtilities.renderers\n    gcr = $.pivotUtilities.gchart_renderers\n    d3r = $.pivotUtilities.d3_renderers\n    c3r = $.pivotUtilities.c3_renderers\n\n    frFmt =    nf(thousandsSep: \".\", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \".\", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 2, scaler: 100, suffix: \"%\", thousandsSep: \".\", decimalSep: \",\")\n\n    $.pivotUtilities.locales.pt = \n\n        localeStrings:\n            renderError: \"Ocorreu um error ao renderizar os resultados da Tabela Din&atilde;mica.\"\n            computeError: \"Ocorreu um error ao computar os resultados da Tabela Din&atilde;mica.\"\n            uiRenderError: \"Ocorreu um error ao renderizar a interface da Tabela Din&atilde;mica.\"\n            selectAll: \"Selecionar Tudo\"\n            selectNone: \"Selecionar Nenhum\"\n            tooMany: \"(demais para listar)\"\n            filterResults: \"Filtrar resultados\"\n            totals: \"Totais\"\n            vs: \"vs\"\n            by: \"por\"\n\n        aggregators:\n            \"Contagem\":                                     tpl.count(frFmtInt)\n            \"Contagem de Valores &uacute;nicos\":            tpl.countUnique(frFmtInt)\n            \"Lista de Valores &uacute;nicos\":               tpl.listUnique(\", \")\n            \"Soma\":                                         tpl.sum(frFmt)\n            \"Soma de Inteiros\":                             tpl.sum(frFmtInt)\n            \"Média\":                                        tpl.average(frFmt)\n            \"Mínimo\":                                       tpl.min(frFmt)\n            \"Máximo\":                                       tpl.max(frFmt)\n            \"Soma sobre Soma\":                              tpl.sumOverSum(frFmt)\n            \"Limite Superior a 80%\":                        tpl.sumOverSumBound80(true, frFmt)\n            \"Limite Inferior a 80%\":                        tpl.sumOverSumBound80(false, frFmt)\n            \"Soma como Fra&ccedil;&atilde;o do Total\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Soma como Fra&ccedil;&atilde;o da Linha\":      tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Soma como Fra&ccedil;&atilde;o da Coluna\":     tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Contagem como Fra&ccedil;&atilde;o do Total\":  tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Contagem como Fra&ccedil;&atilde;o da Linha\":  tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Contagem como Fra&ccedil;&atilde;o da Coluna\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Tabela\":                    r[\"Table\"]\n            \"Tabela com Barras\":         r[\"Table Barchart\"]\n            \"Mapa de Calor\":             r[\"Heatmap\"]\n            \"Mapa de Calor por Linhas\":  r[\"Row Heatmap\"]\n            \"Mapa de Calor por Colunas\": r[\"Col Heatmap\"]\n\n    if gcr\n        $.pivotUtilities.locales.pt.gchart_renderers =\n            \"Gr&aacute;fico de Linhas\":            gcr[\"Line Chart\"]\n            \"Gr&aacute;fico de Barras\":            gcr[\"Bar Chart\"]\n            \"Gr&aacute;fico de Barras Empilhadas\": gcr[\"Stacked Bar Chart\"]\n            \"Gr&aacute;fico de &Aacute;rea\":       gcr[\"Area Chart\"]\n\n    if d3r\n        $.pivotUtilities.locales.pt.d3_renderers =\n            \"Mapa de Árvore\": d3r[\"Treemap\"]\n\n    if c3r\n      $.pivotUtilities.locales.pt.c3_renderers =\n        \"Gr&aacute;fico de Linhas\": c3r[\"Line Chart C3\"]\n        \"Gr&aacute;fico de Barras\": c3r[\"Bar Chart C3\"]\n\n    return $.pivotUtilities.locales.pt\n","(function(){var e;(e=function(e){return\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"jquery\")):\"function\"==typeof define&&define.amd?define([\"jquery\"],e):e(jQuery)})(function(e){var a,r,o,t,i,c,l,s,n;return l=e.pivotUtilities.numberFormat,n=e.pivotUtilities.aggregatorTemplates,s=e.pivotUtilities.renderers,c=e.pivotUtilities.gchart_renderers,r=e.pivotUtilities.d3_renderers,a=e.pivotUtilities.c3_renderers,o=l({thousandsSep:\".\",decimalSep:\",\"}),t=l({digitsAfterDecimal:0,thousandsSep:\".\",decimalSep:\",\"}),i=l({digitsAfterDecimal:2,scaler:100,suffix:\"%\",thousandsSep:\".\",decimalSep:\",\"}),e.pivotUtilities.locales.pt={localeStrings:{renderError:\"Ocorreu um error ao renderizar os resultados da Tabela Din&atilde;mica.\",computeError:\"Ocorreu um error ao computar os resultados da Tabela Din&atilde;mica.\",uiRenderError:\"Ocorreu um error ao renderizar a interface da Tabela Din&atilde;mica.\",selectAll:\"Selecionar Tudo\",selectNone:\"Selecionar Nenhum\",tooMany:\"(demais para listar)\",filterResults:\"Filtrar resultados\",totals:\"Totais\",vs:\"vs\",by:\"por\"},aggregators:{Contagem:n.count(t),\"Contagem de Valores &uacute;nicos\":n.countUnique(t),\"Lista de Valores &uacute;nicos\":n.listUnique(\", \"),Soma:n.sum(o),\"Soma de Inteiros\":n.sum(t),\"Média\":n.average(o),\"Mínimo\":n.min(o),\"Máximo\":n.max(o),\"Soma sobre Soma\":n.sumOverSum(o),\"Limite Superior a 80%\":n.sumOverSumBound80(!0,o),\"Limite Inferior a 80%\":n.sumOverSumBound80(!1,o),\"Soma como Fra&ccedil;&atilde;o do Total\":n.fractionOf(n.sum(),\"total\",i),\"Soma como Fra&ccedil;&atilde;o da Linha\":n.fractionOf(n.sum(),\"row\",i),\"Soma como Fra&ccedil;&atilde;o da Coluna\":n.fractionOf(n.sum(),\"col\",i),\"Contagem como Fra&ccedil;&atilde;o do Total\":n.fractionOf(n.count(),\"total\",i),\"Contagem como Fra&ccedil;&atilde;o da Linha\":n.fractionOf(n.count(),\"row\",i),\"Contagem como Fra&ccedil;&atilde;o da Coluna\":n.fractionOf(n.count(),\"col\",i)},renderers:{Tabela:s.Table,\"Tabela com Barras\":s[\"Table Barchart\"],\"Mapa de Calor\":s.Heatmap,\"Mapa de Calor por Linhas\":s[\"Row Heatmap\"],\"Mapa de Calor por Colunas\":s[\"Col Heatmap\"]}},c&&(e.pivotUtilities.locales.pt.gchart_renderers={\"Gr&aacute;fico de Linhas\":c[\"Line Chart\"],\"Gr&aacute;fico de Barras\":c[\"Bar Chart\"],\"Gr&aacute;fico de Barras Empilhadas\":c[\"Stacked Bar Chart\"],\"Gr&aacute;fico de &Aacute;rea\":c[\"Area Chart\"]}),r&&(e.pivotUtilities.locales.pt.d3_renderers={\"Mapa de Árvore\":r.Treemap}),a&&(e.pivotUtilities.locales.pt.c3_renderers={\"Gr&aacute;fico de Linhas\":a[\"Line Chart C3\"],\"Gr&aacute;fico de Barras\":a[\"Bar Chart C3\"]}),e.pivotUtilities.locales.pt})}).call(this);\n//# sourceMappingURL=pivot.pt.min.js.map"],"sourceRoot":"/source/"}
\ No newline at end of file
+{"version":3,"sources":["pivot.pt.coffee","pivot.pt.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","c3r","d3r","frFmt","frFmtInt","frFmtPct","gcr","nf","r","tpl","pivotUtilities","numberFormat","aggregatorTemplates","renderers","gchart_renderers","d3_renderers","c3_renderers","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","pt","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","totals","apply","cancel","vs","by","aggregators","Contagem","count","Contagem de Valores únicos","countUnique","Lista de Valores únicos","listUnique","Soma","sum","Soma de Inteiros","Média","average","Mediana","median","Variancia","Desvio Padrão da Amostra","stdev","Mínimo","min","Máximo","max","Primeiro","first","Último","last","Soma sobre Soma","sumOverSum","Limite Superior a 80%","sumOverSumBound80","Limite Inferior a 80%","Soma como Fração do Total","fractionOf","Soma como Fração da Linha","Soma como Fração da Coluna","Contagem como Fração do Total","Contagem como Fração da Linha","Contagem como Fração da Coluna","Tabela","Tabela com Barras","Mapa de Calor","Mapa de Calor por Linhas","Mapa de Calor por Colunas","Gráfico de Linhas","Gráfico de Barras","Gráfico de Barras Empilhadas","Gráfico de Área","Mapa de Árvore","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAXC,UAAyC,gBAAVC,QACrCF,EAAYG,QAAQ,WACC,kBAAVC,SAAyBA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GACZ,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CA4EA,OA5EAF,GAAKP,EAAEU,eAAeC,aACtBF,EAAMT,EAAEU,eAAeE,oBACvBJ,EAAIR,EAAEU,eAAeG,UACrBP,EAAMN,EAAEU,eAAeI,iBACvBZ,EAAMF,EAAEU,eAAeK,aACvBd,EAAMD,EAAEU,eAAeM,aAEvBb,EAAWI,GAAGU,aAAc,IAAKC,WAAY,MAC7Cd,EAAWG,GAAGY,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEb,EAAWE,GAAGY,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FlB,EAAEU,eAAeY,QAAQC,IAErBC,eACIC,YAAa,mEACbC,aAAc,iEACdC,cAAe,iEACfC,UAAW,kBACXC,WAAY,oBACZC,QAAS,uBACTC,cAAe,qBACfC,OAAQ,SACRC,MAAM,UACNC,OAAQ,WACRC,GAAI,KACJC,GAAI,OAERC,aACIC,SAAgD7B,EAAI8B,MAAMnC,GAC1DoC,6BAAyC/B,EAAIgC,YAAYrC,GACzDsC,0BAAyCjC,EAAIkC,WAAW,MACxDC,KAAgDnC,EAAIoC,IAAI1C,GACxD2C,mBAAgDrC,EAAIoC,IAAIzC,GACxD2C,QAAgDtC,EAAIuC,QAAQ7C,GAC5D8C,QAAgDxC,EAAIyC,OAAO/C,GAC3DgD,UAAgD1C,EAAG,OAAK,EAAGN,GAC3DiD,2BAAgD3C,EAAI4C,MAAM,EAAGlD,GAC7DmD,SAAgD7C,EAAI8C,IAAIpD,GACxDqD,SAAgD/C,EAAIgD,IAAItD,GACxDuD,SAAgDjD,EAAIkD,MAAMxD,GAC1DyD,SAAgDnD,EAAIoD,KAAK1D,GACzD2D,kBAAgDrD,EAAIsD,WAAW5D,GAC/D6D,wBAAgDvD,EAAIwD,mBAAkB,EAAM9D,GAC5E+D,wBAAgDzD,EAAIwD,mBAAkB,EAAO9D,GAC7EgE,4BAAkC1D,EAAI2D,WAAW3D,EAAIoC,MAAS,QAASxC,GACvEgE,4BAAkC5D,EAAI2D,WAAW3D,EAAIoC,MAAS,MAASxC,GACvEiE,6BAAkC7D,EAAI2D,WAAW3D,EAAIoC,MAAS,MAASxC,GACvEkE,gCAAkC9D,EAAI2D,WAAW3D,EAAI8B,QAAS,QAASlC,GACvEmE,gCAAkC/D,EAAI2D,WAAW3D,EAAI8B,QAAS,MAASlC,GACvEoE,iCAAkChE,EAAI2D,WAAW3D,EAAI8B,QAAS,MAASlC,IAE3EQ,WACI6D,OAA6BlE,EAAE,MAC/BmE,oBAA6BnE,EAAE,kBAC/BoE,gBAA6BpE,EAAE,QAC/BqE,2BAA6BrE,EAAE,eAC/BsE,4BAA6BtE,EAAE,iBAEpCF,IACCN,EAAEU,eAAeY,QAAQC,GAAGT,kBACxBiE,oBAAgCzE,EAAI,cACpC0E,oBAAgC1E,EAAI,aACpC2E,+BAAgC3E,EAAI,qBACpC4E,kBAAyB5E,EAAI,gBAElCJ,IACCF,EAAEU,eAAeY,QAAQC,GAAGR,cACxBoE,iBAAkBjF,EAAI,UAE3BD,IACDD,EAAEU,eAAeY,QAAQC,GAAGP,cAC1B+D,oBAAqB9E,EAAI,cACzB+E,oBAAqB/E,EAAI,aACzBgF,+BAAgChF,EAAI,qBACpCiF,kBAAyBjF,EAAI,gBAE1BD,EAAEU,eAAeY,QAAQC,OCsBjC6D,KAAKC","file":"pivot.pt.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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n    r = $.pivotUtilities.renderers\n    gcr = $.pivotUtilities.gchart_renderers\n    d3r = $.pivotUtilities.d3_renderers\n    c3r = $.pivotUtilities.c3_renderers\n\n    frFmt =    nf(thousandsSep: \".\", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \".\", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 2, scaler: 100, suffix: \"%\", thousandsSep: \".\", decimalSep: \",\")\n\n    $.pivotUtilities.locales.pt = \n\n        localeStrings:\n            renderError: \"Ocorreu um error ao renderizar os resultados da Tabela Dinâmica.\"\n            computeError: \"Ocorreu um error ao computar os resultados da Tabela Dinâmica.\"\n            uiRenderError: \"Ocorreu um error ao renderizar a interface da Tabela Dinâmica.\"\n            selectAll: \"Selecionar Tudo\"\n            selectNone: \"Selecionar Nenhum\"\n            tooMany: \"(demais para listar)\"\n            filterResults: \"Filtrar resultados\"\n            totals: \"Totais\"\n            apply:\"Aplicar\",\n            cancel: \"Cancelar\",\n            vs: \"vs\"\n            by: \"por\"\n\n        aggregators:\n            \"Contagem\":                                     tpl.count(frFmtInt)\n            \"Contagem de Valores únicos\":            tpl.countUnique(frFmtInt)\n            \"Lista de Valores únicos\":               tpl.listUnique(\", \")\n            \"Soma\":                                         tpl.sum(frFmt)\n            \"Soma de Inteiros\":                             tpl.sum(frFmtInt)\n            \"Média\":                                        tpl.average(frFmt)\n            \"Mediana\":                                      tpl.median(frFmt)\n            \"Variancia\":                                    tpl.var(1, frFmt)\n            \"Desvio Padrão da Amostra\":                     tpl.stdev(1, frFmt)\n            \"Mínimo\":                                       tpl.min(frFmt)\n            \"Máximo\":                                       tpl.max(frFmt)\n            \"Primeiro\":                                     tpl.first(frFmt),\n            \"Último\":                                       tpl.last(frFmt),\n            \"Soma sobre Soma\":                              tpl.sumOverSum(frFmt)\n            \"Limite Superior a 80%\":                        tpl.sumOverSumBound80(true, frFmt)\n            \"Limite Inferior a 80%\":                        tpl.sumOverSumBound80(false, frFmt)\n            \"Soma como Fração do Total\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Soma como Fração da Linha\":      tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Soma como Fração da Coluna\":     tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Contagem como Fração do Total\":  tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Contagem como Fração da Linha\":  tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Contagem como Fração da Coluna\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n\n        renderers:\n            \"Tabela\":                    r[\"Table\"]\n            \"Tabela com Barras\":         r[\"Table Barchart\"]\n            \"Mapa de Calor\":             r[\"Heatmap\"]\n            \"Mapa de Calor por Linhas\":  r[\"Row Heatmap\"]\n            \"Mapa de Calor por Colunas\": r[\"Col Heatmap\"]\n\n    if gcr\n        $.pivotUtilities.locales.pt.gchart_renderers =\n            \"Gráfico de Linhas\":            gcr[\"Line Chart\"]\n            \"Gráfico de Barras\":            gcr[\"Bar Chart\"]\n            \"Gráfico de Barras Empilhadas\": gcr[\"Stacked Bar Chart\"]\n            \"Gráfico de Área\":       gcr[\"Area Chart\"]\n\n    if d3r\n        $.pivotUtilities.locales.pt.d3_renderers =\n            \"Mapa de Árvore\": d3r[\"Treemap\"]\n\n    if c3r\n      $.pivotUtilities.locales.pt.c3_renderers =\n        \"Gráfico de Linhas\": c3r[\"Line Chart\"]\n        \"Gráfico de Barras\": c3r[\"Bar Chart\"]\n        \"Gráfico de Barras Empilhadas\": c3r[\"Stacked Bar Chart\"]\n        \"Gráfico de Área\":       c3r[\"Area Chart\"]\n\n    return $.pivotUtilities.locales.pt\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    var c3r, d3r, frFmt, frFmtInt, frFmtPct, gcr, nf, r, tpl;\n    nf = $.pivotUtilities.numberFormat;\n    tpl = $.pivotUtilities.aggregatorTemplates;\n    r = $.pivotUtilities.renderers;\n    gcr = $.pivotUtilities.gchart_renderers;\n    d3r = $.pivotUtilities.d3_renderers;\n    c3r = $.pivotUtilities.c3_renderers;\n    frFmt = nf({\n      thousandsSep: \".\",\n      decimalSep: \",\"\n    });\n    frFmtInt = nf({\n      digitsAfterDecimal: 0,\n      thousandsSep: \".\",\n      decimalSep: \",\"\n    });\n    frFmtPct = nf({\n      digitsAfterDecimal: 2,\n      scaler: 100,\n      suffix: \"%\",\n      thousandsSep: \".\",\n      decimalSep: \",\"\n    });\n    $.pivotUtilities.locales.pt = {\n      localeStrings: {\n        renderError: \"Ocorreu um error ao renderizar os resultados da Tabela Dinâmica.\",\n        computeError: \"Ocorreu um error ao computar os resultados da Tabela Dinâmica.\",\n        uiRenderError: \"Ocorreu um error ao renderizar a interface da Tabela Dinâmica.\",\n        selectAll: \"Selecionar Tudo\",\n        selectNone: \"Selecionar Nenhum\",\n        tooMany: \"(demais para listar)\",\n        filterResults: \"Filtrar resultados\",\n        totals: \"Totais\",\n        apply: \"Aplicar\",\n        cancel: \"Cancelar\",\n        vs: \"vs\",\n        by: \"por\"\n      },\n      aggregators: {\n        \"Contagem\": tpl.count(frFmtInt),\n        \"Contagem de Valores únicos\": tpl.countUnique(frFmtInt),\n        \"Lista de Valores únicos\": tpl.listUnique(\", \"),\n        \"Soma\": tpl.sum(frFmt),\n        \"Soma de Inteiros\": tpl.sum(frFmtInt),\n        \"Média\": tpl.average(frFmt),\n        \"Mediana\": tpl.median(frFmt),\n        \"Variancia\": tpl[\"var\"](1, frFmt),\n        \"Desvio Padrão da Amostra\": tpl.stdev(1, frFmt),\n        \"Mínimo\": tpl.min(frFmt),\n        \"Máximo\": tpl.max(frFmt),\n        \"Primeiro\": tpl.first(frFmt),\n        \"Último\": tpl.last(frFmt),\n        \"Soma sobre Soma\": tpl.sumOverSum(frFmt),\n        \"Limite Superior a 80%\": tpl.sumOverSumBound80(true, frFmt),\n        \"Limite Inferior a 80%\": tpl.sumOverSumBound80(false, frFmt),\n        \"Soma como Fração do Total\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct),\n        \"Soma como Fração da Linha\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct),\n        \"Soma como Fração da Coluna\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct),\n        \"Contagem como Fração do Total\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct),\n        \"Contagem como Fração da Linha\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct),\n        \"Contagem como Fração da Coluna\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n      },\n      renderers: {\n        \"Tabela\": r[\"Table\"],\n        \"Tabela com Barras\": r[\"Table Barchart\"],\n        \"Mapa de Calor\": r[\"Heatmap\"],\n        \"Mapa de Calor por Linhas\": r[\"Row Heatmap\"],\n        \"Mapa de Calor por Colunas\": r[\"Col Heatmap\"]\n      }\n    };\n    if (gcr) {\n      $.pivotUtilities.locales.pt.gchart_renderers = {\n        \"Gráfico de Linhas\": gcr[\"Line Chart\"],\n        \"Gráfico de Barras\": gcr[\"Bar Chart\"],\n        \"Gráfico de Barras Empilhadas\": gcr[\"Stacked Bar Chart\"],\n        \"Gráfico de Área\": gcr[\"Area Chart\"]\n      };\n    }\n    if (d3r) {\n      $.pivotUtilities.locales.pt.d3_renderers = {\n        \"Mapa de Árvore\": d3r[\"Treemap\"]\n      };\n    }\n    if (c3r) {\n      $.pivotUtilities.locales.pt.c3_renderers = {\n        \"Gráfico de Linhas\": c3r[\"Line Chart\"],\n        \"Gráfico de Barras\": c3r[\"Bar Chart\"],\n        \"Gráfico de Barras Empilhadas\": c3r[\"Stacked Bar Chart\"],\n        \"Gráfico de Área\": c3r[\"Area Chart\"]\n      };\n    }\n    return $.pivotUtilities.locales.pt;\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot.pt.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..ebc556dc56e4d894987f6061eb9ae295f23d9c22
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.js.js
@@ -0,0 +1,78 @@
+(function() {
+  var callWithJQuery;
+
+  callWithJQuery = function(pivotModule) {
+    if (typeof exports === "object" && typeof module === "object") {
+      return pivotModule(require("jquery"));
+    } else if (typeof define === "function" && define.amd) {
+      return define(["jquery"], pivotModule);
+    } else {
+      return pivotModule(jQuery);
+    }
+  };
+
+  callWithJQuery(function($) {
+    var frFmt, frFmtInt, frFmtPct, nf, tpl;
+    nf = $.pivotUtilities.numberFormat;
+    tpl = $.pivotUtilities.aggregatorTemplates;
+    frFmt = nf({
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    frFmtInt = nf({
+      digitsAfterDecimal: 0,
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    frFmtPct = nf({
+      digitsAfterDecimal: 1,
+      scaler: 100,
+      suffix: "%",
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    return $.pivotUtilities.locales.ru = {
+      localeStrings: {
+        renderError: "Ошибка рендеринга страницы.",
+        computeError: "Ошибка табличных расчетов.",
+        uiRenderError: "Ошибка во время прорисовки и динамического расчета таблицы.",
+        selectAll: "Выбрать все",
+        selectNone: "Снять выделение",
+        tooMany: "(Выбрано слишком много значений)",
+        filterResults: "Возможные значения",
+        totals: "Всего",
+        vs: "на",
+        by: "с"
+      },
+      aggregators: {
+        "Кол-во": tpl.count(frFmtInt),
+        "Кол-во уникальных": tpl.countUnique(frFmtInt),
+        "Список уникальных": tpl.listUnique(", "),
+        "Сумма": tpl.sum(frFmt),
+        "Сумма целых": tpl.sum(frFmtInt),
+        "Среднее": tpl.average(frFmt),
+        "Минимум": tpl.min(frFmt),
+        "Максимум": tpl.max(frFmt),
+        "Сумма по сумме": tpl.sumOverSum(frFmt),
+        "80% верхней границы": tpl.sumOverSumBound80(true, frFmt),
+        "80% нижней границы": tpl.sumOverSumBound80(false, frFmt),
+        "Доля по всему": tpl.fractionOf(tpl.sum(), "total", frFmtPct),
+        "Доля по строке": tpl.fractionOf(tpl.sum(), "row", frFmtPct),
+        "Доля по столбцу": tpl.fractionOf(tpl.sum(), "col", frFmtPct),
+        "Кол-во по всему": tpl.fractionOf(tpl.count(), "total", frFmtPct),
+        "Кол-во по строке": tpl.fractionOf(tpl.count(), "row", frFmtPct),
+        "Кол-во по столбцу": tpl.fractionOf(tpl.count(), "col", frFmtPct)
+      },
+      renderers: {
+        "Таблица": $.pivotUtilities.renderers["Table"],
+        "График столбцы": $.pivotUtilities.renderers["Table Barchart"],
+        "Тепловая карта": $.pivotUtilities.renderers["Heatmap"],
+        "Тепловая карта по строке": $.pivotUtilities.renderers["Row Heatmap"],
+        "Тепловая карта по столбцу": $.pivotUtilities.renderers["Col Heatmap"]
+      }
+    };
+  });
+
+}).call(this);
+
+//# sourceMappingURL=pivot.ru.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f7fe47f750617eccacfc3020298ebd80bf602701
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"file":"pivot.ru.js","sources":["pivot.ru.coffee"],"names":[],"mappings":"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","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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.ru = \n        localeStrings:\n            renderError: \"Ошибка рендеринга страницы.\",\n            computeError: \"Ошибка табличных расчетов.\",\n            uiRenderError: \"Ошибка во время прорисовки и динамического расчета таблицы.\",\n            selectAll: \"Выбрать все\",\n            selectNone: \"Снять выделение\",\n            tooMany: \"(Выбрано слишком много значений)\",\n            filterResults: \"Возможные значения\",\n            totals: \"Всего\",\n            vs: \"на\",\n            by: \"с\"\n\n        aggregators: \n            \"Кол-во\": tpl.count(frFmtInt),\n            \"Кол-во уникальных\": tpl.countUnique(frFmtInt),\n            \"Список уникальных\": tpl.listUnique(\", \"),\n            \"Сумма\": tpl.sum(frFmt),\n            \"Сумма целых\": tpl.sum(frFmtInt),\n            \"Среднее\": tpl.average(frFmt),\n            \"Минимум\": tpl.min(frFmt),\n            \"Максимум\": tpl.max(frFmt),\n            \"Сумма по сумме\": tpl.sumOverSum(frFmt),\n            \"80% верхней границы\": tpl.sumOverSumBound80(true, frFmt),\n            \"80% нижней границы\": tpl.sumOverSumBound80(false, frFmt),\n            \"Доля по всему\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct),\n            \"Доля по строке\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct),\n            \"Доля по столбцу\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct),\n            \"Кол-во по всему\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct),\n            \"Кол-во по строке\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct),\n            \"Кол-во по столбцу\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n\n        renderers:\n            \"Таблица\": $.pivotUtilities.renderers[\"Table\"]\n            \"График столбцы\": $.pivotUtilities.renderers[\"Table Barchart\"] # TODO придумать более понятный вариант\n            \"Тепловая карта\": $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Тепловая карта по строке\": $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Тепловая карта по столбцу\": $.pivotUtilities.renderers[\"Col Heatmap\"]\n\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..60c21b64075da2e429a9e708e4d42dc0d421c528
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.ru.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..29cd67268c32e82a81bd603f8eb82089ce153e89
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.ru.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.min.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..433fb74ac8f2f75307841238aa390a3435705671
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.min.js.js
@@ -0,0 +1,2 @@
+(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var t,r,i,o,s;return o=e.pivotUtilities.numberFormat,s=e.pivotUtilities.aggregatorTemplates,t=o({thousandsSep:" ",decimalSep:","}),r=o({digitsAfterDecimal:0,thousandsSep:" ",decimalSep:","}),i=o({digitsAfterDecimal:1,scaler:100,suffix:"%",thousandsSep:" ",decimalSep:","}),e.pivotUtilities.locales.ru={localeStrings:{renderError:"Ошибка рендеринга страницы.",computeError:"Ошибка табличных расчетов.",uiRenderError:"Ошибка во время прорисовки и динамического расчета таблицы.",selectAll:"Выбрать все",selectNone:"Снять выделение",tooMany:"(Выбрано слишком много значений)",filterResults:"Возможные значения",totals:"Всего",vs:"на",by:"с"},aggregators:{"Кол-во":s.count(r),"Кол-во уникальных":s.countUnique(r),"Список уникальных":s.listUnique(", "),"Сумма":s.sum(t),"Сумма целых":s.sum(r),"Среднее":s.average(t),"Минимум":s.min(t),"Максимум":s.max(t),"Сумма по сумме":s.sumOverSum(t),"80% верхней границы":s.sumOverSumBound80(!0,t),"80% нижней границы":s.sumOverSumBound80(!1,t),"Доля по всему":s.fractionOf(s.sum(),"total",i),"Доля по строке":s.fractionOf(s.sum(),"row",i),"Доля по столбцу":s.fractionOf(s.sum(),"col",i),"Кол-во по всему":s.fractionOf(s.count(),"total",i),"Кол-во по строке":s.fractionOf(s.count(),"row",i),"Кол-во по столбцу":s.fractionOf(s.count(),"col",i)},renderers:{"Таблица":e.pivotUtilities.renderers.Table,"График столбцы":e.pivotUtilities.renderers["Table Barchart"],"Тепловая карта":e.pivotUtilities.renderers.Heatmap,"Тепловая карта по строке":e.pivotUtilities.renderers["Row Heatmap"],"Тепловая карта по столбцу":e.pivotUtilities.renderers["Col Heatmap"]}}})}).call(this);
+//# sourceMappingURL=pivot.ru.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.min.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4ef0db396b3ae508a32f6bfdf8e0b59a72ef7990
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.min.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"sources":["pivot.ru.coffee","pivot.ru.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","frFmt","frFmtInt","frFmtPct","nf","tpl","pivotUtilities","numberFormat","aggregatorTemplates","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","ru","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","totals","vs","by","aggregators","Кол-во","count","Кол-во уникальных","countUnique","Список уникальных","listUnique","Сумма","sum","Сумма целых","Среднее","average","Минимум","min","Максимум","max","Сумма по сумме","sumOverSum","80% верхней границы","sumOverSumBound80","80% нижней границы","Доля по всему","fractionOf","Доля по строке","Доля по столбцу","Кол-во по всему","Кол-во по строке","Кол-во по столбцу","renderers","Таблица","График столбцы","Тепловая карта","Тепловая карта по строке","Тепловая карта по столбцу","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAXC,UAAyC,gBAAVC,QACrCF,EAAYG,QAAQ,WACC,kBAAVC,SAAyBA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GACZ,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,CCuBA,ODvBAD,GAAKJ,EAAEM,eAAeC,aACtBF,EAAML,EAAEM,eAAeE,oBAEvBP,EAAWG,GAAGK,aAAc,IAAKC,WAAY,MAC7CR,EAAWE,GAAGO,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEP,EAAWC,GAAGO,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FV,EAAEM,eAAeQ,QAAQC,IACrBC,eACIC,YAAa,8BACbC,aAAc,6BACdC,cAAe,8DACfC,UAAW,cACXC,WAAY,kBACZC,QAAS,mCACTC,cAAe,qBACfC,OAAQ,QACRC,GAAI,KACJC,GAAI,KAERC,aACIC,SAAUvB,EAAIwB,MAAM3B,GACpB4B,oBAAqBzB,EAAI0B,YAAY7B,GACrC8B,oBAAqB3B,EAAI4B,WAAW,MACpCC,QAAS7B,EAAI8B,IAAIlC,GACjBmC,cAAe/B,EAAI8B,IAAIjC,GACvBmC,UAAWhC,EAAIiC,QAAQrC,GACvBsC,UAAWlC,EAAImC,IAAIvC,GACnBwC,WAAYpC,EAAIqC,IAAIzC,GACpB0C,iBAAkBtC,EAAIuC,WAAW3C,GACjC4C,sBAAuBxC,EAAIyC,mBAAkB,EAAM7C,GACnD8C,qBAAsB1C,EAAIyC,mBAAkB,EAAO7C,GACnD+C,gBAAiB3C,EAAI4C,WAAW5C,EAAI8B,MAAO,QAAShC,GACpD+C,iBAAkB7C,EAAI4C,WAAW5C,EAAI8B,MAAO,MAAOhC,GACnDgD,kBAAmB9C,EAAI4C,WAAW5C,EAAI8B,MAAO,MAAOhC,GACpDiD,kBAAmB/C,EAAI4C,WAAW5C,EAAIwB,QAAS,QAAS1B,GACxDkD,mBAAoBhD,EAAI4C,WAAW5C,EAAIwB,QAAS,MAAO1B,GACvDmD,oBAAqBjD,EAAI4C,WAAW5C,EAAIwB,QAAS,MAAO1B,IAE5DoD,WACIC,UAAWxD,EAAEM,eAAeiD,UAAU,MACtCE,iBAAkBzD,EAAEM,eAAeiD,UAAU,kBAC7CG,iBAAkB1D,EAAEM,eAAeiD,UAAU,QAC7CI,2BAA4B3D,EAAEM,eAAeiD,UAAU,eACvDK,4BAA6B5D,EAAEM,eAAeiD,UAAU,qBCqBjEM,KAAKC","file":"pivot.ru.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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.ru = \n        localeStrings:\n            renderError: \"Ошибка рендеринга страницы.\",\n            computeError: \"Ошибка табличных расчетов.\",\n            uiRenderError: \"Ошибка во время прорисовки и динамического расчета таблицы.\",\n            selectAll: \"Выбрать все\",\n            selectNone: \"Снять выделение\",\n            tooMany: \"(Выбрано слишком много значений)\",\n            filterResults: \"Возможные значения\",\n            totals: \"Всего\",\n            vs: \"на\",\n            by: \"с\"\n\n        aggregators: \n            \"Кол-во\": tpl.count(frFmtInt),\n            \"Кол-во уникальных\": tpl.countUnique(frFmtInt),\n            \"Список уникальных\": tpl.listUnique(\", \"),\n            \"Сумма\": tpl.sum(frFmt),\n            \"Сумма целых\": tpl.sum(frFmtInt),\n            \"Среднее\": tpl.average(frFmt),\n            \"Минимум\": tpl.min(frFmt),\n            \"Максимум\": tpl.max(frFmt),\n            \"Сумма по сумме\": tpl.sumOverSum(frFmt),\n            \"80% верхней границы\": tpl.sumOverSumBound80(true, frFmt),\n            \"80% нижней границы\": tpl.sumOverSumBound80(false, frFmt),\n            \"Доля по всему\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct),\n            \"Доля по строке\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct),\n            \"Доля по столбцу\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct),\n            \"Кол-во по всему\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct),\n            \"Кол-во по строке\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct),\n            \"Кол-во по столбцу\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n\n        renderers:\n            \"Таблица\": $.pivotUtilities.renderers[\"Table\"]\n            \"График столбцы\": $.pivotUtilities.renderers[\"Table Barchart\"] # TODO придумать более понятный вариант\n            \"Тепловая карта\": $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Тепловая карта по строке\": $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Тепловая карта по столбцу\": $.pivotUtilities.renderers[\"Col Heatmap\"]\n\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    var frFmt, frFmtInt, frFmtPct, nf, tpl;\n    nf = $.pivotUtilities.numberFormat;\n    tpl = $.pivotUtilities.aggregatorTemplates;\n    frFmt = nf({\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    frFmtInt = nf({\n      digitsAfterDecimal: 0,\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    frFmtPct = nf({\n      digitsAfterDecimal: 1,\n      scaler: 100,\n      suffix: \"%\",\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    return $.pivotUtilities.locales.ru = {\n      localeStrings: {\n        renderError: \"Ошибка рендеринга страницы.\",\n        computeError: \"Ошибка табличных расчетов.\",\n        uiRenderError: \"Ошибка во время прорисовки и динамического расчета таблицы.\",\n        selectAll: \"Выбрать все\",\n        selectNone: \"Снять выделение\",\n        tooMany: \"(Выбрано слишком много значений)\",\n        filterResults: \"Возможные значения\",\n        totals: \"Всего\",\n        vs: \"на\",\n        by: \"с\"\n      },\n      aggregators: {\n        \"Кол-во\": tpl.count(frFmtInt),\n        \"Кол-во уникальных\": tpl.countUnique(frFmtInt),\n        \"Список уникальных\": tpl.listUnique(\", \"),\n        \"Сумма\": tpl.sum(frFmt),\n        \"Сумма целых\": tpl.sum(frFmtInt),\n        \"Среднее\": tpl.average(frFmt),\n        \"Минимум\": tpl.min(frFmt),\n        \"Максимум\": tpl.max(frFmt),\n        \"Сумма по сумме\": tpl.sumOverSum(frFmt),\n        \"80% верхней границы\": tpl.sumOverSumBound80(true, frFmt),\n        \"80% нижней границы\": tpl.sumOverSumBound80(false, frFmt),\n        \"Доля по всему\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct),\n        \"Доля по строке\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct),\n        \"Доля по столбцу\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct),\n        \"Кол-во по всему\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct),\n        \"Кол-во по строке\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct),\n        \"Кол-во по столбцу\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n      },\n      renderers: {\n        \"Таблица\": $.pivotUtilities.renderers[\"Table\"],\n        \"График столбцы\": $.pivotUtilities.renderers[\"Table Barchart\"],\n        \"Тепловая карта\": $.pivotUtilities.renderers[\"Heatmap\"],\n        \"Тепловая карта по строке\": $.pivotUtilities.renderers[\"Row Heatmap\"],\n        \"Тепловая карта по столбцу\": $.pivotUtilities.renderers[\"Col Heatmap\"]\n      }\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot.ru.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.min.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.min.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..27fcceae1cd4e61e47e81a800568157b0eb54aa9
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.min.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.ru.min.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.min.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.min.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8fed91d01441ba6ce7b1ac325700610a39ea2b62
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.ru.min.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.ru.min.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..080b336ed5106a881c4b1097a2f91315e4dab6d9
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.js.js
@@ -0,0 +1,78 @@
+(function() {
+  var callWithJQuery;
+
+  callWithJQuery = function(pivotModule) {
+    if (typeof exports === "object" && typeof module === "object") {
+      return pivotModule(require("jquery"));
+    } else if (typeof define === "function" && define.amd) {
+      return define(["jquery"], pivotModule);
+    } else {
+      return pivotModule(jQuery);
+    }
+  };
+
+  callWithJQuery(function($) {
+    var frFmt, frFmtInt, frFmtPct, nf, tpl;
+    nf = $.pivotUtilities.numberFormat;
+    tpl = $.pivotUtilities.aggregatorTemplates;
+    frFmt = nf({
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    frFmtInt = nf({
+      digitsAfterDecimal: 0,
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    frFmtPct = nf({
+      digitsAfterDecimal: 1,
+      scaler: 100,
+      suffix: "%",
+      thousandsSep: " ",
+      decimalSep: ","
+    });
+    return $.pivotUtilities.locales.sq = {
+      localeStrings: {
+        renderError: "Ka ndodhur një gabim gjatë shfaqjes së rezultateve të PivotTable.",
+        computeError: "Ka ndodhur një gabim gjatë llogaritjes së rezultateve të PivotTable.",
+        uiRenderError: "Ka ndodhur një gabim gjatë shfaqjes së ndërfaqes së PivotTable.",
+        selectAll: "Përzgjedh të gjitha",
+        selectNone: "Mos përzgjedh asnjërën",
+        tooMany: "(shumë për t'u listuar)",
+        filterResults: "Filtro vlerat",
+        totals: "Totalet",
+        vs: "kundër",
+        by: "për"
+      },
+      aggregators: {
+        "Numëro": tpl.count(frFmtInt),
+        "Numëro vlerat unike": tpl.countUnique(frFmtInt),
+        "Listo vlerat unike": tpl.listUnique(", "),
+        "Shuma": tpl.sum(frFmt),
+        "Shuma si numër i plotë": tpl.sum(frFmtInt),
+        "Mesatarja": tpl.average(frFmt),
+        "Minimumi": tpl.min(frFmt),
+        "Maksimumi": tpl.max(frFmt),
+        "Shuma mbi shumë": tpl.sumOverSum(frFmt),
+        "80% kufiri i sipërm": tpl.sumOverSumBound80(true, frFmt),
+        "80% kufiri i poshtëm": tpl.sumOverSumBound80(false, frFmt),
+        "Shuma si thyesë e totalit": tpl.fractionOf(tpl.sum(), "total", frFmtPct),
+        "Shuma si thyesë e rreshtave": tpl.fractionOf(tpl.sum(), "row", frFmtPct),
+        "Shuma si thyesë e kolonave": tpl.fractionOf(tpl.sum(), "col", frFmtPct),
+        "Numërimi si thyesë e totalit": tpl.fractionOf(tpl.count(), "total", frFmtPct),
+        "Numërimi si thyesë e rreshtave": tpl.fractionOf(tpl.count(), "row", frFmtPct),
+        "Numërimi si thyesë e kolonave": tpl.fractionOf(tpl.count(), "col", frFmtPct)
+      },
+      renderers: {
+        "Tabela": $.pivotUtilities.renderers["Table"],
+        "Tabela me diagram vertikal": $.pivotUtilities.renderers["Table Barchart"],
+        "Heatmap": $.pivotUtilities.renderers["Heatmap"],
+        "Heatmap për rresht": $.pivotUtilities.renderers["Row Heatmap"],
+        "Heatmap për kolonë": $.pivotUtilities.renderers["Col Heatmap"]
+      }
+    };
+  });
+
+}).call(this);
+
+//# sourceMappingURL=pivot.sq.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..604860b707ed0dc74d7937931d57bbc95faeeace
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"file":"pivot.sq.js","sources":["pivot.sq.coffee"],"names":[],"mappings":"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","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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.sq = \n        localeStrings:\n            renderError: \"Ka ndodhur një gabim gjatë shfaqjes së rezultateve të PivotTable.\"\n            computeError: \"Ka ndodhur një gabim gjatë llogaritjes së rezultateve të PivotTable.\"\n            uiRenderError: \"Ka ndodhur një gabim gjatë shfaqjes së ndërfaqes së PivotTable.\"\n            selectAll: \"Përzgjedh të gjitha\"\n            selectNone: \"Mos përzgjedh asnjërën\"\n            tooMany: \"(shumë për t'u listuar)\"\n            filterResults: \"Filtro vlerat\"\n            totals: \"Totalet\"\n            vs: \"kundër\"\n            by: \"për\"\n\n        aggregators: \n            \"Numëro\":                       tpl.count(frFmtInt)\n            \"Numëro vlerat unike\":     tpl.countUnique(frFmtInt)\n            \"Listo vlerat unike\":      tpl.listUnique(\", \")\n            \"Shuma\":                        tpl.sum(frFmt)\n            \"Shuma si numër i plotë\":\t\t\ttpl.sum(frFmtInt)\n            \"Mesatarja\":                 tpl.average(frFmt)\n            \"Minimumi\":                      tpl.min(frFmt)\n            \"Maksimumi\":                      tpl.max(frFmt)\n            \"Shuma mbi shumë\":             tpl.sumOverSum(frFmt)\n            \"80% kufiri i sipërm\":               tpl.sumOverSumBound80(true, frFmt)\n            \"80% kufiri i poshtëm\":        \t\ttpl.sumOverSumBound80(false, frFmt)\n            \"Shuma si thyesë e totalit\":  tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Shuma si thyesë e rreshtave\":   tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Shuma si thyesë e kolonave\":  tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Numërimi si thyesë e totalit\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Numërimi si thyesë e rreshtave\":  tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Numërimi si thyesë e kolonave\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n        \n        renderers:\n            \"Tabela\":                      $.pivotUtilities.renderers[\"Table\"]\n            \"Tabela me diagram vertikal\":   $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Heatmap\":                      $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Heatmap për rresht\":            $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Heatmap për kolonë\":           $.pivotUtilities.renderers[\"Col Heatmap\"]\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..20ae1b98ee7a1e07e2d1f13bac889ae7304da3f7
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.sq.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a7fe9fcd7de89aee787b1288bd256d1fd98f9516
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.sq.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.min.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e15c7735053dee52526b46eb090221214b81b1c
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.min.js.js
@@ -0,0 +1,2 @@
+(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var t,i,r,a,s;return a=e.pivotUtilities.numberFormat,s=e.pivotUtilities.aggregatorTemplates,t=a({thousandsSep:" ",decimalSep:","}),i=a({digitsAfterDecimal:0,thousandsSep:" ",decimalSep:","}),r=a({digitsAfterDecimal:1,scaler:100,suffix:"%",thousandsSep:" ",decimalSep:","}),e.pivotUtilities.locales.sq={localeStrings:{renderError:"Ka ndodhur një gabim gjatë shfaqjes së rezultateve të PivotTable.",computeError:"Ka ndodhur një gabim gjatë llogaritjes së rezultateve të PivotTable.",uiRenderError:"Ka ndodhur një gabim gjatë shfaqjes së ndërfaqes së PivotTable.",selectAll:"Përzgjedh të gjitha",selectNone:"Mos përzgjedh asnjërën",tooMany:"(shumë për t'u listuar)",filterResults:"Filtro vlerat",totals:"Totalet",vs:"kundër",by:"për"},aggregators:{"Numëro":s.count(i),"Numëro vlerat unike":s.countUnique(i),"Listo vlerat unike":s.listUnique(", "),Shuma:s.sum(t),"Shuma si numër i plotë":s.sum(i),Mesatarja:s.average(t),Minimumi:s.min(t),Maksimumi:s.max(t),"Shuma mbi shumë":s.sumOverSum(t),"80% kufiri i sipërm":s.sumOverSumBound80(!0,t),"80% kufiri i poshtëm":s.sumOverSumBound80(!1,t),"Shuma si thyesë e totalit":s.fractionOf(s.sum(),"total",r),"Shuma si thyesë e rreshtave":s.fractionOf(s.sum(),"row",r),"Shuma si thyesë e kolonave":s.fractionOf(s.sum(),"col",r),"Numërimi si thyesë e totalit":s.fractionOf(s.count(),"total",r),"Numërimi si thyesë e rreshtave":s.fractionOf(s.count(),"row",r),"Numërimi si thyesë e kolonave":s.fractionOf(s.count(),"col",r)},renderers:{Tabela:e.pivotUtilities.renderers.Table,"Tabela me diagram vertikal":e.pivotUtilities.renderers["Table Barchart"],Heatmap:e.pivotUtilities.renderers.Heatmap,"Heatmap për rresht":e.pivotUtilities.renderers["Row Heatmap"],"Heatmap për kolonë":e.pivotUtilities.renderers["Col Heatmap"]}}})}).call(this);
+//# sourceMappingURL=pivot.sq.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.min.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3f6df7853d94bdbb41c2bed56a64354b6d66f688
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.min.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"sources":["pivot.sq.coffee","pivot.sq.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","frFmt","frFmtInt","frFmtPct","nf","tpl","pivotUtilities","numberFormat","aggregatorTemplates","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","sq","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","totals","vs","by","aggregators","Numëro","count","Numëro vlerat unike","countUnique","Listo vlerat unike","listUnique","Shuma","sum","Shuma si numër i plotë","Mesatarja","average","Minimumi","min","Maksimumi","max","Shuma mbi shumë","sumOverSum","80% kufiri i sipërm","sumOverSumBound80","80% kufiri i poshtëm","Shuma si thyesë e totalit","fractionOf","Shuma si thyesë e rreshtave","Shuma si thyesë e kolonave","Numërimi si thyesë e totalit","Numërimi si thyesë e rreshtave","Numërimi si thyesë e kolonave","renderers","Tabela","Tabela me diagram vertikal","Heatmap","Heatmap për rresht","Heatmap për kolonë","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GACd,MAAqB,gBAAXC,UAAyC,gBAAVC,QACrCF,EAAYG,QAAQ,WACC,kBAAVC,SAAyBA,OAAOC,IAC3CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAEL,SAACC,GACZ,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,CCuBA,ODvBAD,GAAKJ,EAAEM,eAAeC,aACtBF,EAAML,EAAEM,eAAeE,oBAEvBP,EAAWG,GAAGK,aAAc,IAAKC,WAAY,MAC7CR,EAAWE,GAAGO,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEP,EAAWC,GAAGO,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FV,EAAEM,eAAeQ,QAAQC,IACrBC,eACIC,YAAa,oEACbC,aAAc,uEACdC,cAAe,kEACfC,UAAW,sBACXC,WAAY,yBACZC,QAAS,0BACTC,cAAe,gBACfC,OAAQ,UACRC,GAAI,SACJC,GAAI,OAERC,aACIC,SAAgCvB,EAAIwB,MAAM3B,GAC1C4B,sBAA2BzB,EAAI0B,YAAY7B,GAC3C8B,qBAA2B3B,EAAI4B,WAAW,MAC1CC,MAAgC7B,EAAI8B,IAAIlC,GACxCmC,yBAA4B/B,EAAI8B,IAAIjC,GACpCmC,UAA6BhC,EAAIiC,QAAQrC,GACzCsC,SAAiClC,EAAImC,IAAIvC,GACzCwC,UAAkCpC,EAAIqC,IAAIzC,GAC1C0C,kBAA+BtC,EAAIuC,WAAW3C,GAC9C4C,sBAAqCxC,EAAIyC,mBAAkB,EAAM7C,GACjE8C,uBAAiC1C,EAAIyC,mBAAkB,EAAO7C,GAC9D+C,4BAA8B3C,EAAI4C,WAAW5C,EAAI8B,MAAS,QAAShC,GACnE+C,8BAAiC7C,EAAI4C,WAAW5C,EAAI8B,MAAS,MAAShC,GACtEgD,6BAA+B9C,EAAI4C,WAAW5C,EAAI8B,MAAS,MAAShC,GACpEiD,+BAAgC/C,EAAI4C,WAAW5C,EAAIwB,QAAS,QAAS1B,GACrEkD,iCAAmChD,EAAI4C,WAAW5C,EAAIwB,QAAS,MAAS1B,GACxEmD,gCAAiCjD,EAAI4C,WAAW5C,EAAIwB,QAAS,MAAS1B,IAE1EoD,WACIC,OAA+BxD,EAAEM,eAAeiD,UAAU,MAC1DE,6BAAgCzD,EAAEM,eAAeiD,UAAU,kBAC3DG,QAAgC1D,EAAEM,eAAeiD,UAAU,QAC3DI,qBAAiC3D,EAAEM,eAAeiD,UAAU,eAC5DK,qBAAgC5D,EAAEM,eAAeiD,UAAU,qBCqBpEM,KAAKC","file":"pivot.sq.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    nf = $.pivotUtilities.numberFormat\n    tpl = $.pivotUtilities.aggregatorTemplates\n\n    frFmt =    nf(thousandsSep: \" \", decimalSep: \",\")\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \" \", decimalSep: \",\")\n    frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: \"%\", thousandsSep: \" \", decimalSep: \",\")\n\n    $.pivotUtilities.locales.sq = \n        localeStrings:\n            renderError: \"Ka ndodhur një gabim gjatë shfaqjes së rezultateve të PivotTable.\"\n            computeError: \"Ka ndodhur një gabim gjatë llogaritjes së rezultateve të PivotTable.\"\n            uiRenderError: \"Ka ndodhur një gabim gjatë shfaqjes së ndërfaqes së PivotTable.\"\n            selectAll: \"Përzgjedh të gjitha\"\n            selectNone: \"Mos përzgjedh asnjërën\"\n            tooMany: \"(shumë për t'u listuar)\"\n            filterResults: \"Filtro vlerat\"\n            totals: \"Totalet\"\n            vs: \"kundër\"\n            by: \"për\"\n\n        aggregators: \n            \"Numëro\":                       tpl.count(frFmtInt)\n            \"Numëro vlerat unike\":     tpl.countUnique(frFmtInt)\n            \"Listo vlerat unike\":      tpl.listUnique(\", \")\n            \"Shuma\":                        tpl.sum(frFmt)\n            \"Shuma si numër i plotë\":\t\t\ttpl.sum(frFmtInt)\n            \"Mesatarja\":                 tpl.average(frFmt)\n            \"Minimumi\":                      tpl.min(frFmt)\n            \"Maksimumi\":                      tpl.max(frFmt)\n            \"Shuma mbi shumë\":             tpl.sumOverSum(frFmt)\n            \"80% kufiri i sipërm\":               tpl.sumOverSumBound80(true, frFmt)\n            \"80% kufiri i poshtëm\":        \t\ttpl.sumOverSumBound80(false, frFmt)\n            \"Shuma si thyesë e totalit\":  tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\n            \"Shuma si thyesë e rreshtave\":   tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\n            \"Shuma si thyesë e kolonave\":  tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\n            \"Numërimi si thyesë e totalit\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n            \"Numërimi si thyesë e rreshtave\":  tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\n            \"Numërimi si thyesë e kolonave\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\n        \n        renderers:\n            \"Tabela\":                      $.pivotUtilities.renderers[\"Table\"]\n            \"Tabela me diagram vertikal\":   $.pivotUtilities.renderers[\"Table Barchart\"]\n            \"Heatmap\":                      $.pivotUtilities.renderers[\"Heatmap\"]\n            \"Heatmap për rresht\":            $.pivotUtilities.renderers[\"Row Heatmap\"]\n            \"Heatmap për kolonë\":           $.pivotUtilities.renderers[\"Col Heatmap\"]\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    var frFmt, frFmtInt, frFmtPct, nf, tpl;\n    nf = $.pivotUtilities.numberFormat;\n    tpl = $.pivotUtilities.aggregatorTemplates;\n    frFmt = nf({\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    frFmtInt = nf({\n      digitsAfterDecimal: 0,\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    frFmtPct = nf({\n      digitsAfterDecimal: 1,\n      scaler: 100,\n      suffix: \"%\",\n      thousandsSep: \" \",\n      decimalSep: \",\"\n    });\n    return $.pivotUtilities.locales.sq = {\n      localeStrings: {\n        renderError: \"Ka ndodhur një gabim gjatë shfaqjes së rezultateve të PivotTable.\",\n        computeError: \"Ka ndodhur një gabim gjatë llogaritjes së rezultateve të PivotTable.\",\n        uiRenderError: \"Ka ndodhur një gabim gjatë shfaqjes së ndërfaqes së PivotTable.\",\n        selectAll: \"Përzgjedh të gjitha\",\n        selectNone: \"Mos përzgjedh asnjërën\",\n        tooMany: \"(shumë për t'u listuar)\",\n        filterResults: \"Filtro vlerat\",\n        totals: \"Totalet\",\n        vs: \"kundër\",\n        by: \"për\"\n      },\n      aggregators: {\n        \"Numëro\": tpl.count(frFmtInt),\n        \"Numëro vlerat unike\": tpl.countUnique(frFmtInt),\n        \"Listo vlerat unike\": tpl.listUnique(\", \"),\n        \"Shuma\": tpl.sum(frFmt),\n        \"Shuma si numër i plotë\": tpl.sum(frFmtInt),\n        \"Mesatarja\": tpl.average(frFmt),\n        \"Minimumi\": tpl.min(frFmt),\n        \"Maksimumi\": tpl.max(frFmt),\n        \"Shuma mbi shumë\": tpl.sumOverSum(frFmt),\n        \"80% kufiri i sipërm\": tpl.sumOverSumBound80(true, frFmt),\n        \"80% kufiri i poshtëm\": tpl.sumOverSumBound80(false, frFmt),\n        \"Shuma si thyesë e totalit\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct),\n        \"Shuma si thyesë e rreshtave\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct),\n        \"Shuma si thyesë e kolonave\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct),\n        \"Numërimi si thyesë e totalit\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct),\n        \"Numërimi si thyesë e rreshtave\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct),\n        \"Numërimi si thyesë e kolonave\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n      },\n      renderers: {\n        \"Tabela\": $.pivotUtilities.renderers[\"Table\"],\n        \"Tabela me diagram vertikal\": $.pivotUtilities.renderers[\"Table Barchart\"],\n        \"Heatmap\": $.pivotUtilities.renderers[\"Heatmap\"],\n        \"Heatmap për rresht\": $.pivotUtilities.renderers[\"Row Heatmap\"],\n        \"Heatmap për kolonë\": $.pivotUtilities.renderers[\"Col Heatmap\"]\n      }\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot.sq.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.min.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.min.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4a8074ce8d3f359166b6f738dae1a51a3d6d6f84
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.min.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.sq.min.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.min.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.min.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1970b59f2d462875339e5ec25d5aceab81efea2e
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.sq.min.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.sq.min.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.js.js
index 03cbec7149b760b0090c706d4619d363a9b9495e..1a95e56aabfaa5cb819bfabdb948e84908e4f61d 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.js.js
@@ -37,61 +37,63 @@
     });
     $.pivotUtilities.locales.tr = {
       localeStrings: {
-        renderError: "PivotTable sonu&ccedil;lar&#305;n&#305; olu&#351;tuturken hata olu&#351;tu",
-        computeError: "PivotTable sonu&ccedil;lar&#305;n&#305; i&#351;lerken hata olu&#351;tu",
-        uiRenderError: "PivotTable UI sonu&ccedil;lar&#305;n&#305; olu&#351;tuturken hata olu&#351;tu",
-        selectAll: "T&uuml;m&uuml;n&uuml; Se&ccedil;",
-        selectNone: "T&uuml;m&uuml;n&uuml; B&#305;rak",
-        tooMany: "(listelemek i&ccedil;in fazla)",
-        filterResults: "Sonu&ccedil;lar&#305; filtrele",
+        renderError: "PivotTable sonuçlarını oluştuturken hata oluştu",
+        computeError: "PivotTable sonuçlarını işlerken hata oluştu",
+        uiRenderError: "PivotTable UI sonuçlarını oluştuturken hata oluştu",
+        selectAll: "Tümünü Seç",
+        selectNone: "Tümünü Bırak",
+        tooMany: "(listelemek için fazla)",
+        filterResults: "Sonuçları filtrele",
         totals: "Toplam",
         vs: "vs",
         by: "ile"
       },
       aggregators: {
-        "Say&#305;": tpl.count(frFmtInt),
-        "Benzersiz de&#287;erler say&#305;s&#305;": tpl.countUnique(frFmtInt),
-        "Benzersiz de&#287;erler listesi": tpl.listUnique(", "),
+        "Sayı": tpl.count(frFmtInt),
+        "Benzersiz değerler sayısı": tpl.countUnique(frFmtInt),
+        "Benzersiz deÄŸerler listesi": tpl.listUnique(", "),
         "Toplam": tpl.sum(frFmt),
-        "Toplam (tam say&#305;)": tpl.sum(frFmtInt),
+        "Toplam (tam sayı)": tpl.sum(frFmtInt),
         "Ortalama": tpl.average(frFmt),
         "Min": tpl.min(frFmt),
         "Maks": tpl.max(frFmt),
-        "Miktarlar&#305;n toplam&#305;": tpl.sumOverSum(frFmt),
-        "%80 daha y&uuml;ksek": tpl.sumOverSumBound80(true, frFmt),
-        "%80 daha d&uuml;&#351;&uuml;k": tpl.sumOverSumBound80(false, frFmt),
-        "Toplam oran&#305; (toplam)": tpl.fractionOf(tpl.sum(), "total", frFmtPct),
-        "Sat&#305;r oran&#305; (toplam)": tpl.fractionOf(tpl.sum(), "row", frFmtPct),
-        "S&uuml;tunun oran&#305; (toplam)": tpl.fractionOf(tpl.sum(), "col", frFmtPct),
-        "Toplam oran&#305; (say&#305;)": tpl.fractionOf(tpl.count(), "total", frFmtPct),
-        "Sat&#305;r oran&#305; (say&#305;)": tpl.fractionOf(tpl.count(), "row", frFmtPct),
-        "S&uuml;tunun oran&#305; (say&#305;)": tpl.fractionOf(tpl.count(), "col", frFmtPct)
+        "Miktarların toplamı": tpl.sumOverSum(frFmt),
+        "%80 daha yüksek": tpl.sumOverSumBound80(true, frFmt),
+        "%80 daha düşük": tpl.sumOverSumBound80(false, frFmt),
+        "Toplam oranı (toplam)": tpl.fractionOf(tpl.sum(), "total", frFmtPct),
+        "Satır oranı (toplam)": tpl.fractionOf(tpl.sum(), "row", frFmtPct),
+        "Sütunun oranı (toplam)": tpl.fractionOf(tpl.sum(), "col", frFmtPct),
+        "Toplam oranı (sayı)": tpl.fractionOf(tpl.count(), "total", frFmtPct),
+        "Satır oranı (sayı)": tpl.fractionOf(tpl.count(), "row", frFmtPct),
+        "Sütunun oranı (sayı)": tpl.fractionOf(tpl.count(), "col", frFmtPct)
       },
       renderers: {
         "Tablo": r["Table"],
-        "Tablo (&Ccedil;ubuklar)": r["Table Barchart"],
-        "&#304;lgi haritas&#305;": r["Heatmap"],
-        "Sat&#305;r ilgi haritas&#305;": r["Row Heatmap"],
-        "S&uuml;tun ilgi haritas&#305;": r["Col Heatmap"]
+        "Tablo (Çubuklar)": r["Table Barchart"],
+        "İlgi haritası": r["Heatmap"],
+        "Satır ilgi haritası": r["Row Heatmap"],
+        "Sütun ilgi haritası": r["Col Heatmap"]
       }
     };
     if (gcr) {
       $.pivotUtilities.locales.tr.gchart_renderers = {
-        "&Ccedil;izgi Grafi&#287;i (gchart)": gcr["Line Chart"],
-        "Bar Grafi&#287;i (gchart)": gcr["Bar Chart"],
-        "Y&#305;&#287;&#305;lm&#305;&#351; &Ccedil;ubuk Grafik (gchart)": gcr["Stacked Bar Chart"],
-        "Alan Grafi&#287;i (gchart)": gcr["Area Chart"]
+        "Çizgi Grafiği": gcr["Line Chart"],
+        "Bar GrafiÄŸi": gcr["Bar Chart"],
+        "Yığılmış Çubuk Grafik ": gcr["Stacked Bar Chart"],
+        "Alan GrafiÄŸi": gcr["Area Chart"]
       };
     }
     if (d3r) {
       $.pivotUtilities.locales.tr.d3_renderers = {
-        "Hiyerar&#351;ik Alan Grafi&#287;i (Treemap)": d3r["Treemap"]
+        "HiyerarÅŸik Alan GrafiÄŸi (Treemap)": d3r["Treemap"]
       };
     }
     if (c3r) {
       $.pivotUtilities.locales.tr.c3_renderers = {
-        "&Ccedil;izgi Grafi&#287;i (C3)": c3r["Line Chart C3"],
-        "Bar Grafi&#287;i (C3)": c3r["Bar Chart C3"]
+        "Çizgi Grafiği": c3r["Line Chart"],
+        "Bar GrafiÄŸi": c3r["Bar Chart"],
+        "Yığılmış Çubuk Grafik ": c3r["Stacked Bar Chart"],
+        "Alan GrafiÄŸi": c3r["Area Chart"]
       };
     }
     return $.pivotUtilities.locales.tr;
@@ -99,4 +101,4 @@
 
 }).call(this);
 
-//# sourceMappingURL=pivot.tr.js.map
\ No newline at end of file
+//# sourceMappingURL=pivot.tr.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.js.map.txt
index f59a5340da2fae7a9a7cc453a7ded754e7dd2b43..3b5dbe012ad3b88f4148bfdd07a5ea0014c4d3e7 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["pivot.tr.coffee"],"names":[],"mappings":"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","file":"pivot.tr.js","sourceRoot":"/source/","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  nf = $.pivotUtilities.numberFormat\n  tpl = $.pivotUtilities.aggregatorTemplates\n  r = $.pivotUtilities.renderers\n  gcr = $.pivotUtilities.gchart_renderers\n  d3r = $.pivotUtilities.d3_renderers\n  c3r = $.pivotUtilities.c3_renderers\n\n  frFmt = nf(thousandsSep: \".\", decimalSep: \",\")\n  frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \".\", decimalSep: \",\")\n  frFmtPct = nf(digitsAfterDecimal: 2, scaler: 100, suffix: \"%\", thousandsSep: \".\", decimalSep: \",\")\n\n  $.pivotUtilities.locales.tr =\n\n    localeStrings:\n      renderError: \"PivotTable sonu&ccedil;lar&#305;n&#305; olu&#351;tuturken hata olu&#351;tu\"\n      computeError: \"PivotTable sonu&ccedil;lar&#305;n&#305; i&#351;lerken hata olu&#351;tu\"\n      uiRenderError: \"PivotTable UI sonu&ccedil;lar&#305;n&#305; olu&#351;tuturken hata olu&#351;tu\"\n      selectAll: \"T&uuml;m&uuml;n&uuml; Se&ccedil;\"\n      selectNone: \"T&uuml;m&uuml;n&uuml; B&#305;rak\"\n      tooMany: \"(listelemek i&ccedil;in fazla)\"\n      filterResults: \"Sonu&ccedil;lar&#305; filtrele\"\n      totals: \"Toplam\"\n      vs: \"vs\"\n      by: \"ile\"\n\n    aggregators:\n      \"Say&#305;\": tpl.count(frFmtInt)\n      \"Benzersiz de&#287;erler say&#305;s&#305;\": tpl.countUnique(frFmtInt)\n      \"Benzersiz de&#287;erler listesi\": tpl.listUnique(\", \")\n      \"Toplam\": tpl.sum(frFmt)\n      \"Toplam (tam say&#305;)\": tpl.sum(frFmtInt)\n      \"Ortalama\": tpl.average(frFmt)\n      \"Min\": tpl.min(frFmt)\n      \"Maks\": tpl.max(frFmt)\n      \"Miktarlar&#305;n toplam&#305;\": tpl.sumOverSum(frFmt)\n      \"%80 daha y&uuml;ksek\": tpl.sumOverSumBound80(true, frFmt)\n      \"%80 daha d&uuml;&#351;&uuml;k\": tpl.sumOverSumBound80(false, frFmt)\n      \"Toplam oran&#305; (toplam)\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct)\n      \"Sat&#305;r oran&#305; (toplam)\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct)\n      \"S&uuml;tunun oran&#305; (toplam)\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct)\n      \"Toplam oran&#305; (say&#305;)\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n      \"Sat&#305;r oran&#305; (say&#305;)\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct)\n      \"S&uuml;tunun oran&#305; (say&#305;)\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n\n    renderers:\n      \"Tablo\": r[\"Table\"]\n      \"Tablo (&Ccedil;ubuklar)\": r[\"Table Barchart\"]\n      \"&#304;lgi haritas&#305;\": r[\"Heatmap\"]\n      \"Sat&#305;r ilgi haritas&#305;\": r[\"Row Heatmap\"]\n      \"S&uuml;tun ilgi haritas&#305;\": r[\"Col Heatmap\"]\n  if gcr\n    $.pivotUtilities.locales.tr.gchart_renderers =\n      \"&Ccedil;izgi Grafi&#287;i (gchart)\": gcr[\"Line Chart\"]\n      \"Bar Grafi&#287;i (gchart)\": gcr[\"Bar Chart\"]\n      \"Y&#305;&#287;&#305;lm&#305;&#351; &Ccedil;ubuk Grafik (gchart)\": gcr[\"Stacked Bar Chart\"]\n      \"Alan Grafi&#287;i (gchart)\": gcr[\"Area Chart\"]\n\n  if d3r\n    $.pivotUtilities.locales.tr.d3_renderers =\n      \"Hiyerar&#351;ik Alan Grafi&#287;i (Treemap)\": d3r[\"Treemap\"]\n\n  if c3r\n    $.pivotUtilities.locales.tr.c3_renderers =\n      \"&Ccedil;izgi Grafi&#287;i (C3)\": c3r[\"Line Chart C3\"]\n      \"Bar Grafi&#287;i (C3)\": c3r[\"Bar Chart C3\"]\n\n  return $.pivotUtilities.locales.tr\n\n"]}
\ No newline at end of file
+{"version":3,"file":"pivot.tr.js","sources":["pivot.tr.coffee"],"names":[],"mappings":"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","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  nf = $.pivotUtilities.numberFormat\n  tpl = $.pivotUtilities.aggregatorTemplates\n  r = $.pivotUtilities.renderers\n  gcr = $.pivotUtilities.gchart_renderers\n  d3r = $.pivotUtilities.d3_renderers\n  c3r = $.pivotUtilities.c3_renderers\n\n  frFmt = nf(thousandsSep: \".\", decimalSep: \",\")\n  frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \".\", decimalSep: \",\")\n  frFmtPct = nf(digitsAfterDecimal: 2, scaler: 100, suffix: \"%\", thousandsSep: \".\", decimalSep: \",\")\n\n  $.pivotUtilities.locales.tr =\n\n    localeStrings:\n      renderError: \"PivotTable sonuçlarını oluştuturken hata oluştu\"\n      computeError: \"PivotTable sonuçlarını işlerken hata oluştu\"\n      uiRenderError: \"PivotTable UI sonuçlarını oluştuturken hata oluştu\"\n      selectAll: \"Tümünü Seç\"\n      selectNone: \"Tümünü Bırak\"\n      tooMany: \"(listelemek için fazla)\"\n      filterResults: \"Sonuçları filtrele\"\n      totals: \"Toplam\"\n      vs: \"vs\"\n      by: \"ile\"\n\n    aggregators:\n      \"Sayı\": tpl.count(frFmtInt)\n      \"Benzersiz değerler sayısı\": tpl.countUnique(frFmtInt)\n      \"Benzersiz değerler listesi\": tpl.listUnique(\", \")\n      \"Toplam\": tpl.sum(frFmt)\n      \"Toplam (tam sayı)\": tpl.sum(frFmtInt)\n      \"Ortalama\": tpl.average(frFmt)\n      \"Min\": tpl.min(frFmt)\n      \"Maks\": tpl.max(frFmt)\n      \"Miktarların toplamı\": tpl.sumOverSum(frFmt)\n      \"%80 daha yüksek\": tpl.sumOverSumBound80(true, frFmt)\n      \"%80 daha düşük\": tpl.sumOverSumBound80(false, frFmt)\n      \"Toplam oranı (toplam)\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct)\n      \"Satır oranı (toplam)\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct)\n      \"Sütunun oranı (toplam)\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct)\n      \"Toplam oranı (sayı)\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n      \"Satır oranı (sayı)\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct)\n      \"Sütunun oranı (sayı)\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n\n    renderers:\n      \"Tablo\": r[\"Table\"]\n      \"Tablo (Çubuklar)\": r[\"Table Barchart\"]\n      \"İlgi haritası\": r[\"Heatmap\"]\n      \"Satır ilgi haritası\": r[\"Row Heatmap\"]\n      \"Sütun ilgi haritası\": r[\"Col Heatmap\"]\n  if gcr\n    $.pivotUtilities.locales.tr.gchart_renderers =\n      \"Çizgi Grafiği\": gcr[\"Line Chart\"]\n      \"Bar Grafiği\": gcr[\"Bar Chart\"]\n      \"Yığılmış Çubuk Grafik \": gcr[\"Stacked Bar Chart\"]\n      \"Alan Grafiği\": gcr[\"Area Chart\"]\n\n  if d3r\n    $.pivotUtilities.locales.tr.d3_renderers =\n      \"Hiyerarşik Alan Grafiği (Treemap)\": d3r[\"Treemap\"]\n\n  if c3r\n    $.pivotUtilities.locales.tr.c3_renderers =\n      \"Çizgi Grafiği\": c3r[\"Line Chart\"]\n      \"Bar Grafiği\": c3r[\"Bar Chart\"]\n      \"Yığılmış Çubuk Grafik \": c3r[\"Stacked Bar Chart\"]\n      \"Alan Grafiği\": c3r[\"Area Chart\"]\n\n  return $.pivotUtilities.locales.tr\n\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.min.js.js
index 709b64b7f21bb7cd0883c3eb2a54a9597c24e646..d3689a52550759ca17e88b390a97ef0f2c1f4337 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.min.js.js
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.min.js.js
@@ -1,2 +1,2 @@
-(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var a,r,t,i,l,o,u,n,s;return u=e.pivotUtilities.numberFormat,s=e.pivotUtilities.aggregatorTemplates,n=e.pivotUtilities.renderers,o=e.pivotUtilities.gchart_renderers,r=e.pivotUtilities.d3_renderers,a=e.pivotUtilities.c3_renderers,t=u({thousandsSep:".",decimalSep:","}),i=u({digitsAfterDecimal:0,thousandsSep:".",decimalSep:","}),l=u({digitsAfterDecimal:2,scaler:100,suffix:"%",thousandsSep:".",decimalSep:","}),e.pivotUtilities.locales.tr={localeStrings:{renderError:"PivotTable sonu&ccedil;lar&#305;n&#305; olu&#351;tuturken hata olu&#351;tu",computeError:"PivotTable sonu&ccedil;lar&#305;n&#305; i&#351;lerken hata olu&#351;tu",uiRenderError:"PivotTable UI sonu&ccedil;lar&#305;n&#305; olu&#351;tuturken hata olu&#351;tu",selectAll:"T&uuml;m&uuml;n&uuml; Se&ccedil;",selectNone:"T&uuml;m&uuml;n&uuml; B&#305;rak",tooMany:"(listelemek i&ccedil;in fazla)",filterResults:"Sonu&ccedil;lar&#305; filtrele",totals:"Toplam",vs:"vs",by:"ile"},aggregators:{"Say&#305;":s.count(i),"Benzersiz de&#287;erler say&#305;s&#305;":s.countUnique(i),"Benzersiz de&#287;erler listesi":s.listUnique(", "),Toplam:s.sum(t),"Toplam (tam say&#305;)":s.sum(i),Ortalama:s.average(t),Min:s.min(t),Maks:s.max(t),"Miktarlar&#305;n toplam&#305;":s.sumOverSum(t),"%80 daha y&uuml;ksek":s.sumOverSumBound80(!0,t),"%80 daha d&uuml;&#351;&uuml;k":s.sumOverSumBound80(!1,t),"Toplam oran&#305; (toplam)":s.fractionOf(s.sum(),"total",l),"Sat&#305;r oran&#305; (toplam)":s.fractionOf(s.sum(),"row",l),"S&uuml;tunun oran&#305; (toplam)":s.fractionOf(s.sum(),"col",l),"Toplam oran&#305; (say&#305;)":s.fractionOf(s.count(),"total",l),"Sat&#305;r oran&#305; (say&#305;)":s.fractionOf(s.count(),"row",l),"S&uuml;tunun oran&#305; (say&#305;)":s.fractionOf(s.count(),"col",l)},renderers:{Tablo:n.Table,"Tablo (&Ccedil;ubuklar)":n["Table Barchart"],"&#304;lgi haritas&#305;":n.Heatmap,"Sat&#305;r ilgi haritas&#305;":n["Row Heatmap"],"S&uuml;tun ilgi haritas&#305;":n["Col Heatmap"]}},o&&(e.pivotUtilities.locales.tr.gchart_renderers={"&Ccedil;izgi Grafi&#287;i (gchart)":o["Line Chart"],"Bar Grafi&#287;i (gchart)":o["Bar Chart"],"Y&#305;&#287;&#305;lm&#305;&#351; &Ccedil;ubuk Grafik (gchart)":o["Stacked Bar Chart"],"Alan Grafi&#287;i (gchart)":o["Area Chart"]}),r&&(e.pivotUtilities.locales.tr.d3_renderers={"Hiyerar&#351;ik Alan Grafi&#287;i (Treemap)":r.Treemap}),a&&(e.pivotUtilities.locales.tr.c3_renderers={"&Ccedil;izgi Grafi&#287;i (C3)":a["Line Chart C3"],"Bar Grafi&#287;i (C3)":a["Bar Chart C3"]}),e.pivotUtilities.locales.tr})}).call(this);
-//# sourceMappingURL=pivot.tr.min.js.map
\ No newline at end of file
+(function(){var a;(a=function(a){return"object"==typeof exports&&"object"==typeof module?a(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)})(function(a){var e,r,t,i,l,o,n,s,u;return n=a.pivotUtilities.numberFormat,u=a.pivotUtilities.aggregatorTemplates,s=a.pivotUtilities.renderers,o=a.pivotUtilities.gchart_renderers,r=a.pivotUtilities.d3_renderers,e=a.pivotUtilities.c3_renderers,t=n({thousandsSep:".",decimalSep:","}),i=n({digitsAfterDecimal:0,thousandsSep:".",decimalSep:","}),l=n({digitsAfterDecimal:2,scaler:100,suffix:"%",thousandsSep:".",decimalSep:","}),a.pivotUtilities.locales.tr={localeStrings:{renderError:"PivotTable sonuçlarını oluştuturken hata oluştu",computeError:"PivotTable sonuçlarını işlerken hata oluştu",uiRenderError:"PivotTable UI sonuçlarını oluştuturken hata oluştu",selectAll:"Tümünü Seç",selectNone:"Tümünü Bırak",tooMany:"(listelemek için fazla)",filterResults:"Sonuçları filtrele",totals:"Toplam",vs:"vs",by:"ile"},aggregators:{"Sayı":u.count(i),"Benzersiz değerler sayısı":u.countUnique(i),"Benzersiz değerler listesi":u.listUnique(", "),Toplam:u.sum(t),"Toplam (tam sayı)":u.sum(i),Ortalama:u.average(t),Min:u.min(t),Maks:u.max(t),"Miktarların toplamı":u.sumOverSum(t),"%80 daha yüksek":u.sumOverSumBound80(!0,t),"%80 daha düşük":u.sumOverSumBound80(!1,t),"Toplam oranı (toplam)":u.fractionOf(u.sum(),"total",l),"Satır oranı (toplam)":u.fractionOf(u.sum(),"row",l),"Sütunun oranı (toplam)":u.fractionOf(u.sum(),"col",l),"Toplam oranı (sayı)":u.fractionOf(u.count(),"total",l),"Satır oranı (sayı)":u.fractionOf(u.count(),"row",l),"Sütunun oranı (sayı)":u.fractionOf(u.count(),"col",l)},renderers:{Tablo:s.Table,"Tablo (Çubuklar)":s["Table Barchart"],"İlgi haritası":s.Heatmap,"Satır ilgi haritası":s["Row Heatmap"],"Sütun ilgi haritası":s["Col Heatmap"]}},o&&(a.pivotUtilities.locales.tr.gchart_renderers={"Çizgi Grafiği":o["Line Chart"],"Bar Grafiği":o["Bar Chart"],"Yığılmış Çubuk Grafik ":o["Stacked Bar Chart"],"Alan Grafiği":o["Area Chart"]}),r&&(a.pivotUtilities.locales.tr.d3_renderers={"Hiyerarşik Alan Grafiği (Treemap)":r.Treemap}),e&&(a.pivotUtilities.locales.tr.c3_renderers={"Çizgi Grafiği":e["Line Chart"],"Bar Grafiği":e["Bar Chart"],"Yığılmış Çubuk Grafik ":e["Stacked Bar Chart"],"Alan Grafiği":e["Area Chart"]}),a.pivotUtilities.locales.tr})}).call(this);
+//# sourceMappingURL=pivot.tr.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.min.js.map.txt
index 0f1a112d6a3932ee383fcd5c3c1d313f449c56ee..90d8eb9a795ce0dc7805eeb5339c8d7148f69920 100644
--- a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.min.js.map.txt
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.tr.min.js.map.txt
@@ -1 +1 @@
-{"version":3,"sources":["/source/pivot.tr.coffee","pivot.tr.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","c3r","d3r","frFmt","frFmtInt","frFmtPct","gcr","nf","r","tpl","pivotUtilities","numberFormat","aggregatorTemplates","renderers","gchart_renderers","d3_renderers","c3_renderers","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","tr","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","totals","vs","by","aggregators","Say&#305;","count","Benzersiz de&#287;erler say&#305;s&#305;","countUnique","Benzersiz de&#287;erler listesi","listUnique","Toplam","sum","Toplam (tam say&#305;)","Ortalama","average","Min","min","Maks","max","Miktarlar&#305;n toplam&#305;","sumOverSum","%80 daha y&uuml;ksek","sumOverSumBound80","%80 daha d&uuml;&#351;&uuml;k","Toplam oran&#305; (toplam)","fractionOf","Sat&#305;r oran&#305; (toplam)","S&uuml;tunun oran&#305; (toplam)","Toplam oran&#305; (say&#305;)","Sat&#305;r oran&#305; (say&#305;)","S&uuml;tunun oran&#305; (say&#305;)","Tablo","Tablo (&Ccedil;ubuklar)","&#304;lgi haritas&#305;","Sat&#305;r ilgi haritas&#305;","S&uuml;tun ilgi haritas&#305;","&Ccedil;izgi Grafi&#287;i (gchart)","Bar Grafi&#287;i (gchart)","Y&#305;&#287;&#305;lm&#305;&#351; &Ccedil;ubuk Grafik (gchart)","Alan Grafi&#287;i (gchart)","Hiyerar&#351;ik Alan Grafi&#287;i (Treemap)","&Ccedil;izgi Grafi&#287;i (C3)","Bar Grafi&#287;i (C3)","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GAChB,MAAqB,gBAAlBC,UAAgD,gBAAjBC,QAChCF,EAAYG,QAAQ,WACG,kBAAjBC,SAAgCA,OAAOC,IAC7CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAED,SAACC,GACd,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAkEA,OAlEAF,GAAKP,EAAEU,eAAeC,aACtBF,EAAMT,EAAEU,eAAeE,oBACvBJ,EAAIR,EAAEU,eAAeG,UACrBP,EAAMN,EAAEU,eAAeI,iBACvBZ,EAAMF,EAAEU,eAAeK,aACvBd,EAAMD,EAAEU,eAAeM,aAEvBb,EAAQI,GAAGU,aAAc,IAAKC,WAAY,MAC1Cd,EAAWG,GAAGY,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEb,EAAWE,GAAGY,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FlB,EAAEU,eAAeY,QAAQC,IAEvBC,eACEC,YAAa,6EACbC,aAAc,yEACdC,cAAe,gFACfC,UAAW,mCACXC,WAAY,mCACZC,QAAS,iCACTC,cAAe,iCACfC,OAAQ,SACRC,GAAI,KACJC,GAAI,OAENC,aACEC,YAAa3B,EAAI4B,MAAMjC,GACvBkC,2CAA4C7B,EAAI8B,YAAYnC,GAC5DoC,kCAAmC/B,EAAIgC,WAAW,MAClDC,OAAUjC,EAAIkC,IAAIxC,GAClByC,yBAA0BnC,EAAIkC,IAAIvC,GAClCyC,SAAYpC,EAAIqC,QAAQ3C,GACxB4C,IAAOtC,EAAIuC,IAAI7C,GACf8C,KAAQxC,EAAIyC,IAAI/C,GAChBgD,gCAAiC1C,EAAI2C,WAAWjD,GAChDkD,uBAAwB5C,EAAI6C,mBAAkB,EAAMnD,GACpDoD,gCAAiC9C,EAAI6C,mBAAkB,EAAOnD,GAC9DqD,6BAA8B/C,EAAIgD,WAAWhD,EAAIkC,MAAO,QAAStC,GACjEqD,iCAAkCjD,EAAIgD,WAAWhD,EAAIkC,MAAO,MAAOtC,GACnEsD,mCAAoClD,EAAIgD,WAAWhD,EAAIkC,MAAO,MAAOtC,GACrEuD,gCAAiCnD,EAAIgD,WAAWhD,EAAI4B,QAAS,QAAShC,GACtEwD,oCAAqCpD,EAAIgD,WAAWhD,EAAI4B,QAAS,MAAOhC,GACxEyD,sCAAuCrD,EAAIgD,WAAWhD,EAAI4B,QAAS,MAAOhC,IAE5EQ,WACEkD,MAASvD,EAAE,MACXwD,0BAA2BxD,EAAE,kBAC7ByD,0BAA2BzD,EAAE,QAC7B0D,gCAAiC1D,EAAE,eACnC2D,gCAAiC3D,EAAE,iBACpCF,IACDN,EAAEU,eAAeY,QAAQC,GAAGT,kBAC1BsD,qCAAsC9D,EAAI,cAC1C+D,4BAA6B/D,EAAI,aACjCgE,iEAAkEhE,EAAI,qBACtEiE,6BAA8BjE,EAAI,gBAEnCJ,IACDF,EAAEU,eAAeY,QAAQC,GAAGR,cAC1ByD,8CAA+CtE,EAAI,UAEpDD,IACDD,EAAEU,eAAeY,QAAQC,GAAGP,cAC1ByD,iCAAkCxE,EAAI,iBACtCyE,wBAAyBzE,EAAI,kBAE1BD,EAAEU,eAAeY,QAAQC,OCuB/BoD,KAAKC","file":"pivot.tr.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  nf = $.pivotUtilities.numberFormat\n  tpl = $.pivotUtilities.aggregatorTemplates\n  r = $.pivotUtilities.renderers\n  gcr = $.pivotUtilities.gchart_renderers\n  d3r = $.pivotUtilities.d3_renderers\n  c3r = $.pivotUtilities.c3_renderers\n\n  frFmt = nf(thousandsSep: \".\", decimalSep: \",\")\n  frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \".\", decimalSep: \",\")\n  frFmtPct = nf(digitsAfterDecimal: 2, scaler: 100, suffix: \"%\", thousandsSep: \".\", decimalSep: \",\")\n\n  $.pivotUtilities.locales.tr =\n\n    localeStrings:\n      renderError: \"PivotTable sonu&ccedil;lar&#305;n&#305; olu&#351;tuturken hata olu&#351;tu\"\n      computeError: \"PivotTable sonu&ccedil;lar&#305;n&#305; i&#351;lerken hata olu&#351;tu\"\n      uiRenderError: \"PivotTable UI sonu&ccedil;lar&#305;n&#305; olu&#351;tuturken hata olu&#351;tu\"\n      selectAll: \"T&uuml;m&uuml;n&uuml; Se&ccedil;\"\n      selectNone: \"T&uuml;m&uuml;n&uuml; B&#305;rak\"\n      tooMany: \"(listelemek i&ccedil;in fazla)\"\n      filterResults: \"Sonu&ccedil;lar&#305; filtrele\"\n      totals: \"Toplam\"\n      vs: \"vs\"\n      by: \"ile\"\n\n    aggregators:\n      \"Say&#305;\": tpl.count(frFmtInt)\n      \"Benzersiz de&#287;erler say&#305;s&#305;\": tpl.countUnique(frFmtInt)\n      \"Benzersiz de&#287;erler listesi\": tpl.listUnique(\", \")\n      \"Toplam\": tpl.sum(frFmt)\n      \"Toplam (tam say&#305;)\": tpl.sum(frFmtInt)\n      \"Ortalama\": tpl.average(frFmt)\n      \"Min\": tpl.min(frFmt)\n      \"Maks\": tpl.max(frFmt)\n      \"Miktarlar&#305;n toplam&#305;\": tpl.sumOverSum(frFmt)\n      \"%80 daha y&uuml;ksek\": tpl.sumOverSumBound80(true, frFmt)\n      \"%80 daha d&uuml;&#351;&uuml;k\": tpl.sumOverSumBound80(false, frFmt)\n      \"Toplam oran&#305; (toplam)\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct)\n      \"Sat&#305;r oran&#305; (toplam)\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct)\n      \"S&uuml;tunun oran&#305; (toplam)\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct)\n      \"Toplam oran&#305; (say&#305;)\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n      \"Sat&#305;r oran&#305; (say&#305;)\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct)\n      \"S&uuml;tunun oran&#305; (say&#305;)\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n\n    renderers:\n      \"Tablo\": r[\"Table\"]\n      \"Tablo (&Ccedil;ubuklar)\": r[\"Table Barchart\"]\n      \"&#304;lgi haritas&#305;\": r[\"Heatmap\"]\n      \"Sat&#305;r ilgi haritas&#305;\": r[\"Row Heatmap\"]\n      \"S&uuml;tun ilgi haritas&#305;\": r[\"Col Heatmap\"]\n  if gcr\n    $.pivotUtilities.locales.tr.gchart_renderers =\n      \"&Ccedil;izgi Grafi&#287;i (gchart)\": gcr[\"Line Chart\"]\n      \"Bar Grafi&#287;i (gchart)\": gcr[\"Bar Chart\"]\n      \"Y&#305;&#287;&#305;lm&#305;&#351; &Ccedil;ubuk Grafik (gchart)\": gcr[\"Stacked Bar Chart\"]\n      \"Alan Grafi&#287;i (gchart)\": gcr[\"Area Chart\"]\n\n  if d3r\n    $.pivotUtilities.locales.tr.d3_renderers =\n      \"Hiyerar&#351;ik Alan Grafi&#287;i (Treemap)\": d3r[\"Treemap\"]\n\n  if c3r\n    $.pivotUtilities.locales.tr.c3_renderers =\n      \"&Ccedil;izgi Grafi&#287;i (C3)\": c3r[\"Line Chart C3\"]\n      \"Bar Grafi&#287;i (C3)\": c3r[\"Bar Chart C3\"]\n\n  return $.pivotUtilities.locales.tr\n\n","(function(){var e;(e=function(e){return\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"jquery\")):\"function\"==typeof define&&define.amd?define([\"jquery\"],e):e(jQuery)})(function(e){var a,r,t,i,l,o,u,n,s;return u=e.pivotUtilities.numberFormat,s=e.pivotUtilities.aggregatorTemplates,n=e.pivotUtilities.renderers,o=e.pivotUtilities.gchart_renderers,r=e.pivotUtilities.d3_renderers,a=e.pivotUtilities.c3_renderers,t=u({thousandsSep:\".\",decimalSep:\",\"}),i=u({digitsAfterDecimal:0,thousandsSep:\".\",decimalSep:\",\"}),l=u({digitsAfterDecimal:2,scaler:100,suffix:\"%\",thousandsSep:\".\",decimalSep:\",\"}),e.pivotUtilities.locales.tr={localeStrings:{renderError:\"PivotTable sonu&ccedil;lar&#305;n&#305; olu&#351;tuturken hata olu&#351;tu\",computeError:\"PivotTable sonu&ccedil;lar&#305;n&#305; i&#351;lerken hata olu&#351;tu\",uiRenderError:\"PivotTable UI sonu&ccedil;lar&#305;n&#305; olu&#351;tuturken hata olu&#351;tu\",selectAll:\"T&uuml;m&uuml;n&uuml; Se&ccedil;\",selectNone:\"T&uuml;m&uuml;n&uuml; B&#305;rak\",tooMany:\"(listelemek i&ccedil;in fazla)\",filterResults:\"Sonu&ccedil;lar&#305; filtrele\",totals:\"Toplam\",vs:\"vs\",by:\"ile\"},aggregators:{\"Say&#305;\":s.count(i),\"Benzersiz de&#287;erler say&#305;s&#305;\":s.countUnique(i),\"Benzersiz de&#287;erler listesi\":s.listUnique(\", \"),Toplam:s.sum(t),\"Toplam (tam say&#305;)\":s.sum(i),Ortalama:s.average(t),Min:s.min(t),Maks:s.max(t),\"Miktarlar&#305;n toplam&#305;\":s.sumOverSum(t),\"%80 daha y&uuml;ksek\":s.sumOverSumBound80(!0,t),\"%80 daha d&uuml;&#351;&uuml;k\":s.sumOverSumBound80(!1,t),\"Toplam oran&#305; (toplam)\":s.fractionOf(s.sum(),\"total\",l),\"Sat&#305;r oran&#305; (toplam)\":s.fractionOf(s.sum(),\"row\",l),\"S&uuml;tunun oran&#305; (toplam)\":s.fractionOf(s.sum(),\"col\",l),\"Toplam oran&#305; (say&#305;)\":s.fractionOf(s.count(),\"total\",l),\"Sat&#305;r oran&#305; (say&#305;)\":s.fractionOf(s.count(),\"row\",l),\"S&uuml;tunun oran&#305; (say&#305;)\":s.fractionOf(s.count(),\"col\",l)},renderers:{Tablo:n.Table,\"Tablo (&Ccedil;ubuklar)\":n[\"Table Barchart\"],\"&#304;lgi haritas&#305;\":n.Heatmap,\"Sat&#305;r ilgi haritas&#305;\":n[\"Row Heatmap\"],\"S&uuml;tun ilgi haritas&#305;\":n[\"Col Heatmap\"]}},o&&(e.pivotUtilities.locales.tr.gchart_renderers={\"&Ccedil;izgi Grafi&#287;i (gchart)\":o[\"Line Chart\"],\"Bar Grafi&#287;i (gchart)\":o[\"Bar Chart\"],\"Y&#305;&#287;&#305;lm&#305;&#351; &Ccedil;ubuk Grafik (gchart)\":o[\"Stacked Bar Chart\"],\"Alan Grafi&#287;i (gchart)\":o[\"Area Chart\"]}),r&&(e.pivotUtilities.locales.tr.d3_renderers={\"Hiyerar&#351;ik Alan Grafi&#287;i (Treemap)\":r.Treemap}),a&&(e.pivotUtilities.locales.tr.c3_renderers={\"&Ccedil;izgi Grafi&#287;i (C3)\":a[\"Line Chart C3\"],\"Bar Grafi&#287;i (C3)\":a[\"Bar Chart C3\"]}),e.pivotUtilities.locales.tr})}).call(this);\n//# sourceMappingURL=pivot.tr.min.js.map"],"sourceRoot":"/source/"}
\ No newline at end of file
+{"version":3,"sources":["pivot.tr.coffee","pivot.tr.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","c3r","d3r","frFmt","frFmtInt","frFmtPct","gcr","nf","r","tpl","pivotUtilities","numberFormat","aggregatorTemplates","renderers","gchart_renderers","d3_renderers","c3_renderers","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","tr","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","totals","vs","by","aggregators","Sayı","count","Benzersiz değerler sayısı","countUnique","Benzersiz değerler listesi","listUnique","Toplam","sum","Toplam (tam sayı)","Ortalama","average","Min","min","Maks","max","Miktarların toplamı","sumOverSum","%80 daha yüksek","sumOverSumBound80","%80 daha düşük","Toplam oranı (toplam)","fractionOf","Satır oranı (toplam)","Sütunun oranı (toplam)","Toplam oranı (sayı)","Satır oranı (sayı)","Sütunun oranı (sayı)","Tablo","Tablo (Çubuklar)","İlgi haritası","Satır ilgi haritası","Sütun ilgi haritası","Çizgi Grafiği","Bar Grafiği","Yığılmış Çubuk Grafik ","Alan Grafiği","Hiyerarşik Alan Grafiği (Treemap)","call","this"],"mappings":"CAAA,WAAA,GAAAA,IAAAA,EAAiB,SAACC,GAChB,MAAqB,gBAAXC,UAAyC,gBAAVC,QACvCF,EAAYG,QAAQ,WACG,kBAAVC,SAAyBA,OAAOC,IAC7CD,QAAQ,UAAWJ,GAGnBA,EAAYM,UAED,SAACC,GACd,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAoEA,OApEAF,GAAKP,EAAEU,eAAeC,aACtBF,EAAMT,EAAEU,eAAeE,oBACvBJ,EAAIR,EAAEU,eAAeG,UACrBP,EAAMN,EAAEU,eAAeI,iBACvBZ,EAAMF,EAAEU,eAAeK,aACvBd,EAAMD,EAAEU,eAAeM,aAEvBb,EAAQI,GAAGU,aAAc,IAAKC,WAAY,MAC1Cd,EAAWG,GAAGY,mBAAoB,EAAGF,aAAc,IAAKC,WAAY,MACpEb,EAAWE,GAAGY,mBAAoB,EAAGC,OAAQ,IAAKC,OAAQ,IAAKJ,aAAc,IAAKC,WAAY,MAE9FlB,EAAEU,eAAeY,QAAQC,IAEvBC,eACEC,YAAa,kDACbC,aAAc,8CACdC,cAAe,qDACfC,UAAW,aACXC,WAAY,eACZC,QAAS,0BACTC,cAAe,qBACfC,OAAQ,SACRC,GAAI,KACJC,GAAI,OAENC,aACEC,OAAQ3B,EAAI4B,MAAMjC,GAClBkC,4BAA6B7B,EAAI8B,YAAYnC,GAC7CoC,6BAA8B/B,EAAIgC,WAAW,MAC7CC,OAAUjC,EAAIkC,IAAIxC,GAClByC,oBAAqBnC,EAAIkC,IAAIvC,GAC7ByC,SAAYpC,EAAIqC,QAAQ3C,GACxB4C,IAAOtC,EAAIuC,IAAI7C,GACf8C,KAAQxC,EAAIyC,IAAI/C,GAChBgD,sBAAuB1C,EAAI2C,WAAWjD,GACtCkD,kBAAmB5C,EAAI6C,mBAAkB,EAAMnD,GAC/CoD,iBAAkB9C,EAAI6C,mBAAkB,EAAOnD,GAC/CqD,wBAAyB/C,EAAIgD,WAAWhD,EAAIkC,MAAO,QAAStC,GAC5DqD,uBAAwBjD,EAAIgD,WAAWhD,EAAIkC,MAAO,MAAOtC,GACzDsD,yBAA0BlD,EAAIgD,WAAWhD,EAAIkC,MAAO,MAAOtC,GAC3DuD,sBAAuBnD,EAAIgD,WAAWhD,EAAI4B,QAAS,QAAShC,GAC5DwD,qBAAsBpD,EAAIgD,WAAWhD,EAAI4B,QAAS,MAAOhC,GACzDyD,uBAAwBrD,EAAIgD,WAAWhD,EAAI4B,QAAS,MAAOhC,IAE7DQ,WACEkD,MAASvD,EAAE,MACXwD,mBAAoBxD,EAAE,kBACtByD,gBAAiBzD,EAAE,QACnB0D,sBAAuB1D,EAAE,eACzB2D,sBAAuB3D,EAAE,iBAC1BF,IACDN,EAAEU,eAAeY,QAAQC,GAAGT,kBAC1BsD,gBAAiB9D,EAAI,cACrB+D,cAAe/D,EAAI,aACnBgE,yBAA0BhE,EAAI,qBAC9BiE,eAAgBjE,EAAI,gBAErBJ,IACDF,EAAEU,eAAeY,QAAQC,GAAGR,cAC1ByD,oCAAqCtE,EAAI,UAE1CD,IACDD,EAAEU,eAAeY,QAAQC,GAAGP,cAC1BoD,gBAAiBnE,EAAI,cACrBoE,cAAepE,EAAI,aACnBqE,yBAA0BrE,EAAI,qBAC9BsE,eAAgBtE,EAAI,gBAEjBD,EAAEU,eAAeY,QAAQC,OCuB/BkD,KAAKC","file":"pivot.tr.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  nf = $.pivotUtilities.numberFormat\n  tpl = $.pivotUtilities.aggregatorTemplates\n  r = $.pivotUtilities.renderers\n  gcr = $.pivotUtilities.gchart_renderers\n  d3r = $.pivotUtilities.d3_renderers\n  c3r = $.pivotUtilities.c3_renderers\n\n  frFmt = nf(thousandsSep: \".\", decimalSep: \",\")\n  frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \".\", decimalSep: \",\")\n  frFmtPct = nf(digitsAfterDecimal: 2, scaler: 100, suffix: \"%\", thousandsSep: \".\", decimalSep: \",\")\n\n  $.pivotUtilities.locales.tr =\n\n    localeStrings:\n      renderError: \"PivotTable sonuçlarını oluştuturken hata oluştu\"\n      computeError: \"PivotTable sonuçlarını işlerken hata oluştu\"\n      uiRenderError: \"PivotTable UI sonuçlarını oluştuturken hata oluştu\"\n      selectAll: \"Tümünü Seç\"\n      selectNone: \"Tümünü Bırak\"\n      tooMany: \"(listelemek için fazla)\"\n      filterResults: \"Sonuçları filtrele\"\n      totals: \"Toplam\"\n      vs: \"vs\"\n      by: \"ile\"\n\n    aggregators:\n      \"Sayı\": tpl.count(frFmtInt)\n      \"Benzersiz değerler sayısı\": tpl.countUnique(frFmtInt)\n      \"Benzersiz değerler listesi\": tpl.listUnique(\", \")\n      \"Toplam\": tpl.sum(frFmt)\n      \"Toplam (tam sayı)\": tpl.sum(frFmtInt)\n      \"Ortalama\": tpl.average(frFmt)\n      \"Min\": tpl.min(frFmt)\n      \"Maks\": tpl.max(frFmt)\n      \"Miktarların toplamı\": tpl.sumOverSum(frFmt)\n      \"%80 daha yüksek\": tpl.sumOverSumBound80(true, frFmt)\n      \"%80 daha düşük\": tpl.sumOverSumBound80(false, frFmt)\n      \"Toplam oranı (toplam)\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct)\n      \"Satır oranı (toplam)\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct)\n      \"Sütunun oranı (toplam)\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct)\n      \"Toplam oranı (sayı)\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\n      \"Satır oranı (sayı)\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct)\n      \"Sütunun oranı (sayı)\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n\n    renderers:\n      \"Tablo\": r[\"Table\"]\n      \"Tablo (Çubuklar)\": r[\"Table Barchart\"]\n      \"İlgi haritası\": r[\"Heatmap\"]\n      \"Satır ilgi haritası\": r[\"Row Heatmap\"]\n      \"Sütun ilgi haritası\": r[\"Col Heatmap\"]\n  if gcr\n    $.pivotUtilities.locales.tr.gchart_renderers =\n      \"Çizgi Grafiği\": gcr[\"Line Chart\"]\n      \"Bar Grafiği\": gcr[\"Bar Chart\"]\n      \"Yığılmış Çubuk Grafik \": gcr[\"Stacked Bar Chart\"]\n      \"Alan Grafiği\": gcr[\"Area Chart\"]\n\n  if d3r\n    $.pivotUtilities.locales.tr.d3_renderers =\n      \"Hiyerarşik Alan Grafiği (Treemap)\": d3r[\"Treemap\"]\n\n  if c3r\n    $.pivotUtilities.locales.tr.c3_renderers =\n      \"Çizgi Grafiği\": c3r[\"Line Chart\"]\n      \"Bar Grafiği\": c3r[\"Bar Chart\"]\n      \"Yığılmış Çubuk Grafik \": c3r[\"Stacked Bar Chart\"]\n      \"Alan Grafiği\": c3r[\"Area Chart\"]\n\n  return $.pivotUtilities.locales.tr\n\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    var c3r, d3r, frFmt, frFmtInt, frFmtPct, gcr, nf, r, tpl;\n    nf = $.pivotUtilities.numberFormat;\n    tpl = $.pivotUtilities.aggregatorTemplates;\n    r = $.pivotUtilities.renderers;\n    gcr = $.pivotUtilities.gchart_renderers;\n    d3r = $.pivotUtilities.d3_renderers;\n    c3r = $.pivotUtilities.c3_renderers;\n    frFmt = nf({\n      thousandsSep: \".\",\n      decimalSep: \",\"\n    });\n    frFmtInt = nf({\n      digitsAfterDecimal: 0,\n      thousandsSep: \".\",\n      decimalSep: \",\"\n    });\n    frFmtPct = nf({\n      digitsAfterDecimal: 2,\n      scaler: 100,\n      suffix: \"%\",\n      thousandsSep: \".\",\n      decimalSep: \",\"\n    });\n    $.pivotUtilities.locales.tr = {\n      localeStrings: {\n        renderError: \"PivotTable sonuçlarını oluştuturken hata oluştu\",\n        computeError: \"PivotTable sonuçlarını işlerken hata oluştu\",\n        uiRenderError: \"PivotTable UI sonuçlarını oluştuturken hata oluştu\",\n        selectAll: \"Tümünü Seç\",\n        selectNone: \"Tümünü Bırak\",\n        tooMany: \"(listelemek için fazla)\",\n        filterResults: \"Sonuçları filtrele\",\n        totals: \"Toplam\",\n        vs: \"vs\",\n        by: \"ile\"\n      },\n      aggregators: {\n        \"Sayı\": tpl.count(frFmtInt),\n        \"Benzersiz değerler sayısı\": tpl.countUnique(frFmtInt),\n        \"Benzersiz değerler listesi\": tpl.listUnique(\", \"),\n        \"Toplam\": tpl.sum(frFmt),\n        \"Toplam (tam sayı)\": tpl.sum(frFmtInt),\n        \"Ortalama\": tpl.average(frFmt),\n        \"Min\": tpl.min(frFmt),\n        \"Maks\": tpl.max(frFmt),\n        \"Miktarların toplamı\": tpl.sumOverSum(frFmt),\n        \"%80 daha yüksek\": tpl.sumOverSumBound80(true, frFmt),\n        \"%80 daha düşük\": tpl.sumOverSumBound80(false, frFmt),\n        \"Toplam oranı (toplam)\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct),\n        \"Satır oranı (toplam)\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct),\n        \"Sütunun oranı (toplam)\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct),\n        \"Toplam oranı (sayı)\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct),\n        \"Satır oranı (sayı)\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct),\n        \"Sütunun oranı (sayı)\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n      },\n      renderers: {\n        \"Tablo\": r[\"Table\"],\n        \"Tablo (Çubuklar)\": r[\"Table Barchart\"],\n        \"İlgi haritası\": r[\"Heatmap\"],\n        \"Satır ilgi haritası\": r[\"Row Heatmap\"],\n        \"Sütun ilgi haritası\": r[\"Col Heatmap\"]\n      }\n    };\n    if (gcr) {\n      $.pivotUtilities.locales.tr.gchart_renderers = {\n        \"Çizgi Grafiği\": gcr[\"Line Chart\"],\n        \"Bar Grafiği\": gcr[\"Bar Chart\"],\n        \"Yığılmış Çubuk Grafik \": gcr[\"Stacked Bar Chart\"],\n        \"Alan Grafiği\": gcr[\"Area Chart\"]\n      };\n    }\n    if (d3r) {\n      $.pivotUtilities.locales.tr.d3_renderers = {\n        \"Hiyerarşik Alan Grafiği (Treemap)\": d3r[\"Treemap\"]\n      };\n    }\n    if (c3r) {\n      $.pivotUtilities.locales.tr.c3_renderers = {\n        \"Çizgi Grafiği\": c3r[\"Line Chart\"],\n        \"Bar Grafiği\": c3r[\"Bar Chart\"],\n        \"Yığılmış Çubuk Grafik \": c3r[\"Stacked Bar Chart\"],\n        \"Alan Grafiği\": c3r[\"Area Chart\"]\n      };\n    }\n    return $.pivotUtilities.locales.tr;\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot.tr.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f30fb4571c2395cb4b492f04c191d17f26f39e0
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.js.js
@@ -0,0 +1,113 @@
+(function() {
+  var callWithJQuery;
+
+  callWithJQuery = function(pivotModule) {
+    if (typeof exports === "object" && typeof module === "object") {
+      return pivotModule(require("jquery"));
+    } else if (typeof define === "function" && define.amd) {
+      return define(["jquery"], pivotModule);
+    } else {
+      return pivotModule(jQuery);
+    }
+  };
+
+  callWithJQuery(function($) {
+    var c3r, d3r, frFmt, frFmtInt, frFmtPct, gcr, nf, r, tpl;
+    nf = $.pivotUtilities.numberFormat;
+    tpl = $.pivotUtilities.aggregatorTemplates;
+    r = $.pivotUtilities.renderers;
+    gcr = $.pivotUtilities.gchart_renderers;
+    d3r = $.pivotUtilities.d3_renderers;
+    c3r = $.pivotUtilities.c3_renderers;
+    frFmt = nf({
+      thousandsSep: ",",
+      decimalSep: "."
+    });
+    frFmtInt = nf({
+      digitsAfterDecimal: 0,
+      thousandsSep: ",",
+      decimalSep: "."
+    });
+    frFmtPct = nf({
+      digitsAfterDecimal: 2,
+      scaler: 100,
+      suffix: "%",
+      thousandsSep: ",",
+      decimalSep: "."
+    });
+    $.pivotUtilities.locales.zh = {
+      localeStrings: {
+        renderError: "展示结果时出错。",
+        computeError: "计算结果时出错。",
+        uiRenderError: "展示界面时出错。",
+        selectAll: "选择全部",
+        selectNone: "全部不选",
+        tooMany: "(因数据过多而无法列出)",
+        filterResults: "输入值帮助筛选",
+        totals: "合计",
+        vs: "于",
+        by: "分组于"
+      },
+      aggregators: {
+        "频数": tpl.count(frFmtInt),
+        "非重复值的个数": tpl.countUnique(frFmtInt),
+        "列出非重复值": tpl.listUnique(", "),
+        "求和": tpl.sum(frFmt),
+        "求和后取整": tpl.sum(frFmtInt),
+        "平均值": tpl.average(frFmt),
+        "中位数": tpl.median(frFmt),
+        "方差": tpl["var"](1, frFmt),
+        "样本标准偏差": tpl.stdev(1, frFmt),
+        "最小值": tpl.min(frFmt),
+        "最大值": tpl.max(frFmt),
+        "第一": tpl.first(frFmt),
+        "最后": tpl.last(frFmt),
+        "两和之比": tpl.sumOverSum(frFmt),
+        "二项分布:置信度为80%时的区间上限": tpl.sumOverSumBound80(true, frFmt),
+        "二项分布:置信度为80%时的区间下限": tpl.sumOverSumBound80(false, frFmt),
+        "和在总计中的比例": tpl.fractionOf(tpl.sum(), "total", frFmtPct),
+        "和在行合计中的比例": tpl.fractionOf(tpl.sum(), "row", frFmtPct),
+        "和在列合计中的比例": tpl.fractionOf(tpl.sum(), "col", frFmtPct),
+        "频数在总计中的比例": tpl.fractionOf(tpl.count(), "total", frFmtPct),
+        "频数在行合计中的比例": tpl.fractionOf(tpl.count(), "row", frFmtPct),
+        "频数在列合计中的比例": tpl.fractionOf(tpl.count(), "col", frFmtPct)
+      },
+      renderers: {
+        "表格": r["Table"],
+        "表格内柱状图": r["Table Barchart"],
+        "热图": r["Heatmap"],
+        "行热图": r["Row Heatmap"],
+        "列热图": r["Col Heatmap"]
+      }
+    };
+    if (gcr) {
+      $.pivotUtilities.locales.zh.gchart_renderers = {
+        "折线图(g)": gcr["Line Chart"],
+        "柱形图(g)": gcr["Bar Chart"],
+        "堆栈柱形图(g)": gcr["Stacked Bar Chart"],
+        "面积图(g)": gcr["Area Chart"]
+      };
+      $.pivotUtilities.locales.zh.renderers = $.extend($.pivotUtilities.locales.zh.renderers, $.pivotUtilities.locales.zh.gchart_renderers);
+    }
+    if (d3r) {
+      $.pivotUtilities.locales.zh.d3_renderers = {
+        "树图": d3r["Treemap"]
+      };
+      $.pivotUtilities.locales.zh.renderers = $.extend($.pivotUtilities.locales.zh.renderers, $.pivotUtilities.locales.zh.d3_renderers);
+    }
+    if (c3r) {
+      $.pivotUtilities.locales.zh.c3_renderers = {
+        "折线图": c3r["Line Chart"],
+        "柱形图": c3r["Bar Chart"],
+        "堆栈柱形图": c3r["Stacked Bar Chart"],
+        "面积图": c3r["Area Chart"],
+        "散点图": c3r["Scatter Chart"]
+      };
+      $.pivotUtilities.locales.zh.renderers = $.extend($.pivotUtilities.locales.zh.renderers, $.pivotUtilities.locales.zh.c3_renderers);
+    }
+    return $.pivotUtilities.locales.zh;
+  });
+
+}).call(this);
+
+//# sourceMappingURL=pivot.zh.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6810c5f849d141498c14efc0793610a573016be4
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"file":"pivot.zh.js","sources":["pivot.zh.coffee"],"names":[],"mappings":"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","sourcesContent":["# example: http://zhoulvjun.github.io/2016/02/08/pivottable/\r\n\r\ncallWithJQuery = (pivotModule) ->\r\n    if typeof exports is \"object\" and typeof module is \"object\" # CommonJS\r\n        pivotModule require(\"jquery\")\r\n    else if typeof define is \"function\" and define.amd # AMD\r\n        define [\"jquery\"], pivotModule\r\n    # Plain browser env\r\n    else\r\n        pivotModule jQuery\r\n        \r\ncallWithJQuery ($) ->\r\n    nf = $.pivotUtilities.numberFormat\r\n    tpl = $.pivotUtilities.aggregatorTemplates\r\n    r = $.pivotUtilities.renderers\r\n    gcr = $.pivotUtilities.gchart_renderers\r\n    d3r = $.pivotUtilities.d3_renderers\r\n    c3r = $.pivotUtilities.c3_renderers\r\n\r\n    frFmt =    nf(thousandsSep: \",\", decimalSep: \".\")\r\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \",\", decimalSep: \".\")\r\n    frFmtPct = nf(digitsAfterDecimal: 2, scaler: 100, suffix: \"%\", thousandsSep: \",\", decimalSep: \".\")\r\n\r\n    $.pivotUtilities.locales.zh = \r\n\r\n        localeStrings:\r\n            renderError: \"展示结果时出错。\"\r\n            computeError: \"计算结果时出错。\"\r\n            uiRenderError: \"展示界面时出错。\"\r\n            selectAll: \"选择全部\"\r\n            selectNone: \"全部不选\"\r\n            tooMany: \"(因数据过多而无法列出)\"\r\n            filterResults: \"输入值帮助筛选\"\r\n            totals: \"合计\"\r\n            vs: \"于\"\r\n            by: \"分组于\"\r\n\r\n        aggregators:\r\n            \"频数\":                                     tpl.count(frFmtInt)\r\n            \"非重复值的个数\":            tpl.countUnique(frFmtInt)\r\n            \"列出非重复值\":               tpl.listUnique(\", \")\r\n            \"求和\":                                         tpl.sum(frFmt)\r\n            \"求和后取整\":                             tpl.sum(frFmtInt)\r\n            \"平均值\":                                        tpl.average(frFmt)\r\n            \"中位数\":                                       tpl.median(frFmt)\r\n            \"方差\":                                     tpl.var(1, frFmt)\r\n            \"样本标准偏差\":                      tpl.stdev(1, frFmt)\r\n            \"最小值\":                                       tpl.min(frFmt)\r\n            \"最大值\":                                       tpl.max(frFmt)\r\n            \"第一\":                                     tpl.first(frFmt)\r\n            \"最后\":                                       tpl.last(frFmt)\r\n            \"两和之比\":                              tpl.sumOverSum(frFmt)\r\n            \"二项分布:置信度为80%时的区间上限\":                        tpl.sumOverSumBound80(true, frFmt)\r\n            \"二项分布:置信度为80%时的区间下限\":                        tpl.sumOverSumBound80(false, frFmt)\r\n            \"和在总计中的比例\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\r\n            \"和在行合计中的比例\":      tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\r\n            \"和在列合计中的比例\":     tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\r\n            \"频数在总计中的比例\":  tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\r\n            \"频数在行合计中的比例\":  tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\r\n            \"频数在列合计中的比例\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\r\n\r\n        renderers:\r\n            \"表格\": r[\"Table\"]\r\n            \"表格内柱状图\": r[\"Table Barchart\"]\r\n            \"热图\": r[\"Heatmap\"]\r\n            \"行热图\": r[\"Row Heatmap\"]\r\n            \"列热图\": r[\"Col Heatmap\"]\r\n            \r\n    if gcr\r\n        $.pivotUtilities.locales.zh.gchart_renderers =\r\n            \"折线图(g)\":            gcr[\"Line Chart\"]\r\n            \"柱形图(g)\":            gcr[\"Bar Chart\"]\r\n            \"堆栈柱形图(g)\": gcr[\"Stacked Bar Chart\"]\r\n            \"面积图(g)\":       gcr[\"Area Chart\"]\r\n        $.pivotUtilities.locales.zh.renderers = $.extend(\r\n            $.pivotUtilities.locales.zh.renderers,\r\n            $.pivotUtilities.locales.zh.gchart_renderers)\r\n\r\n    if d3r\r\n        $.pivotUtilities.locales.zh.d3_renderers =\r\n            \"树图\": d3r[\"Treemap\"]\r\n        $.pivotUtilities.locales.zh.renderers = $.extend(\r\n            $.pivotUtilities.locales.zh.renderers,\r\n            $.pivotUtilities.locales.zh.d3_renderers)\r\n\r\n    if c3r\r\n        $.pivotUtilities.locales.zh.c3_renderers = \r\n            \"折线图\": c3r[\"Line Chart\"]\r\n            \"柱形图\": c3r[\"Bar Chart\"]\r\n            \"堆栈柱形图\": c3r[\"Stacked Bar Chart\"]\r\n            \"面积图\": c3r[\"Area Chart\"]\r\n            \"散点图\": c3r[\"Scatter Chart\"]\r\n        $.pivotUtilities.locales.zh.renderers = $.extend(\r\n            $.pivotUtilities.locales.zh.renderers,\r\n            $.pivotUtilities.locales.zh.c3_renderers)\r\n\r\n    return $.pivotUtilities.locales.zh\r\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d99a2885f10f4538bba0d8e072a0e9dc37a633b0
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.zh.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fdefe88272f63e0ce4476fdc4811f41f3c8c251d
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.zh.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.min.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..2828cadc5a752ac53da95d9949cb9955aa7d620c
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.min.js.js
@@ -0,0 +1,2 @@
+(function(){var e;(e=function(e){return"object"==typeof exports&&"object"==typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var t,r,i,s,a,o,l,n,c;return l=e.pivotUtilities.numberFormat,c=e.pivotUtilities.aggregatorTemplates,n=e.pivotUtilities.renderers,o=e.pivotUtilities.gchart_renderers,r=e.pivotUtilities.d3_renderers,t=e.pivotUtilities.c3_renderers,i=l({thousandsSep:",",decimalSep:"."}),s=l({digitsAfterDecimal:0,thousandsSep:",",decimalSep:"."}),a=l({digitsAfterDecimal:2,scaler:100,suffix:"%",thousandsSep:",",decimalSep:"."}),e.pivotUtilities.locales.zh={localeStrings:{renderError:"展示结果时出错。",computeError:"计算结果时出错。",uiRenderError:"展示界面时出错。",selectAll:"选择全部",selectNone:"全部不选",tooMany:"(因数据过多而无法列出)",filterResults:"输入值帮助筛选",totals:"合计",vs:"于",by:"分组于"},aggregators:{"频数":c.count(s),"非重复值的个数":c.countUnique(s),"列出非重复值":c.listUnique(", "),"求和":c.sum(i),"求和后取整":c.sum(s),"平均值":c.average(i),"中位数":c.median(i),"方差":c["var"](1,i),"样本标准偏差":c.stdev(1,i),"最小值":c.min(i),"最大值":c.max(i),"第一":c.first(i),"最后":c.last(i),"两和之比":c.sumOverSum(i),"二项分布:置信度为80%时的区间上限":c.sumOverSumBound80(!0,i),"二项分布:置信度为80%时的区间下限":c.sumOverSumBound80(!1,i),"和在总计中的比例":c.fractionOf(c.sum(),"total",a),"和在行合计中的比例":c.fractionOf(c.sum(),"row",a),"和在列合计中的比例":c.fractionOf(c.sum(),"col",a),"频数在总计中的比例":c.fractionOf(c.count(),"total",a),"频数在行合计中的比例":c.fractionOf(c.count(),"row",a),"频数在列合计中的比例":c.fractionOf(c.count(),"col",a)},renderers:{"表格":n.Table,"表格内柱状图":n["Table Barchart"],"热图":n.Heatmap,"行热图":n["Row Heatmap"],"列热图":n["Col Heatmap"]}},o&&(e.pivotUtilities.locales.zh.gchart_renderers={"折线图(g)":o["Line Chart"],"柱形图(g)":o["Bar Chart"],"堆栈柱形图(g)":o["Stacked Bar Chart"],"面积图(g)":o["Area Chart"]},e.pivotUtilities.locales.zh.renderers=e.extend(e.pivotUtilities.locales.zh.renderers,e.pivotUtilities.locales.zh.gchart_renderers)),r&&(e.pivotUtilities.locales.zh.d3_renderers={"树图":r.Treemap},e.pivotUtilities.locales.zh.renderers=e.extend(e.pivotUtilities.locales.zh.renderers,e.pivotUtilities.locales.zh.d3_renderers)),t&&(e.pivotUtilities.locales.zh.c3_renderers={"折线图":t["Line Chart"],"柱形图":t["Bar Chart"],"堆栈柱形图":t["Stacked Bar Chart"],"面积图":t["Area Chart"],"散点图":t["Scatter Chart"]},e.pivotUtilities.locales.zh.renderers=e.extend(e.pivotUtilities.locales.zh.renderers,e.pivotUtilities.locales.zh.c3_renderers)),e.pivotUtilities.locales.zh})}).call(this);
+//# sourceMappingURL=pivot.zh.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.min.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8b308735e6062977186ec977f6c79b2d2c7424a1
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.min.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"sources":["pivot.zh.coffee","pivot.zh.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","$","c3r","d3r","frFmt","frFmtInt","frFmtPct","gcr","nf","r","tpl","pivotUtilities","numberFormat","aggregatorTemplates","renderers","gchart_renderers","d3_renderers","c3_renderers","thousandsSep","decimalSep","digitsAfterDecimal","scaler","suffix","locales","zh","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","totals","vs","by","aggregators","频数","count","非重复值的个数","countUnique","列出非重复值","listUnique","求和","sum","求和后取整","平均值","average","中位数","median","方差","样本标准偏差","stdev","最小值","min","最大值","max","第一","first","最后","last","两和之比","sumOverSum","二项分布:置信度为80%时的区间上限","sumOverSumBound80","二项分布:置信度为80%时的区间下限","和在总计中的比例","fractionOf","和在行合计中的比例","和在列合计中的比例","频数在总计中的比例","频数在行合计中的比例","频数在列合计中的比例","表格","表格内柱状图","热图","行热图","列热图","折线图(g)","柱形图(g)","堆栈柱形图(g)","面积图(g)","extend","树图","折线图","柱形图","堆栈柱形图","面积图","散点图","call","this"],"mappings":"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","file":"pivot.zh.min.js","sourcesContent":["# example: http://zhoulvjun.github.io/2016/02/08/pivottable/\r\n\r\ncallWithJQuery = (pivotModule) ->\r\n    if typeof exports is \"object\" and typeof module is \"object\" # CommonJS\r\n        pivotModule require(\"jquery\")\r\n    else if typeof define is \"function\" and define.amd # AMD\r\n        define [\"jquery\"], pivotModule\r\n    # Plain browser env\r\n    else\r\n        pivotModule jQuery\r\n        \r\ncallWithJQuery ($) ->\r\n    nf = $.pivotUtilities.numberFormat\r\n    tpl = $.pivotUtilities.aggregatorTemplates\r\n    r = $.pivotUtilities.renderers\r\n    gcr = $.pivotUtilities.gchart_renderers\r\n    d3r = $.pivotUtilities.d3_renderers\r\n    c3r = $.pivotUtilities.c3_renderers\r\n\r\n    frFmt =    nf(thousandsSep: \",\", decimalSep: \".\")\r\n    frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: \",\", decimalSep: \".\")\r\n    frFmtPct = nf(digitsAfterDecimal: 2, scaler: 100, suffix: \"%\", thousandsSep: \",\", decimalSep: \".\")\r\n\r\n    $.pivotUtilities.locales.zh = \r\n\r\n        localeStrings:\r\n            renderError: \"展示结果时出错。\"\r\n            computeError: \"计算结果时出错。\"\r\n            uiRenderError: \"展示界面时出错。\"\r\n            selectAll: \"选择全部\"\r\n            selectNone: \"全部不选\"\r\n            tooMany: \"(因数据过多而无法列出)\"\r\n            filterResults: \"输入值帮助筛选\"\r\n            totals: \"合计\"\r\n            vs: \"于\"\r\n            by: \"分组于\"\r\n\r\n        aggregators:\r\n            \"频数\":                                     tpl.count(frFmtInt)\r\n            \"非重复值的个数\":            tpl.countUnique(frFmtInt)\r\n            \"列出非重复值\":               tpl.listUnique(\", \")\r\n            \"求和\":                                         tpl.sum(frFmt)\r\n            \"求和后取整\":                             tpl.sum(frFmtInt)\r\n            \"平均值\":                                        tpl.average(frFmt)\r\n            \"中位数\":                                       tpl.median(frFmt)\r\n            \"方差\":                                     tpl.var(1, frFmt)\r\n            \"样本标准偏差\":                      tpl.stdev(1, frFmt)\r\n            \"最小值\":                                       tpl.min(frFmt)\r\n            \"最大值\":                                       tpl.max(frFmt)\r\n            \"第一\":                                     tpl.first(frFmt)\r\n            \"最后\":                                       tpl.last(frFmt)\r\n            \"两和之比\":                              tpl.sumOverSum(frFmt)\r\n            \"二项分布:置信度为80%时的区间上限\":                        tpl.sumOverSumBound80(true, frFmt)\r\n            \"二项分布:置信度为80%时的区间下限\":                        tpl.sumOverSumBound80(false, frFmt)\r\n            \"和在总计中的比例\":      tpl.fractionOf(tpl.sum(),   \"total\", frFmtPct)\r\n            \"和在行合计中的比例\":      tpl.fractionOf(tpl.sum(),   \"row\",   frFmtPct)\r\n            \"和在列合计中的比例\":     tpl.fractionOf(tpl.sum(),   \"col\",   frFmtPct)\r\n            \"频数在总计中的比例\":  tpl.fractionOf(tpl.count(), \"total\", frFmtPct)\r\n            \"频数在行合计中的比例\":  tpl.fractionOf(tpl.count(), \"row\",   frFmtPct)\r\n            \"频数在列合计中的比例\": tpl.fractionOf(tpl.count(), \"col\",   frFmtPct)\r\n\r\n        renderers:\r\n            \"表格\": r[\"Table\"]\r\n            \"表格内柱状图\": r[\"Table Barchart\"]\r\n            \"热图\": r[\"Heatmap\"]\r\n            \"行热图\": r[\"Row Heatmap\"]\r\n            \"列热图\": r[\"Col Heatmap\"]\r\n            \r\n    if gcr\r\n        $.pivotUtilities.locales.zh.gchart_renderers =\r\n            \"折线图(g)\":            gcr[\"Line Chart\"]\r\n            \"柱形图(g)\":            gcr[\"Bar Chart\"]\r\n            \"堆栈柱形图(g)\": gcr[\"Stacked Bar Chart\"]\r\n            \"面积图(g)\":       gcr[\"Area Chart\"]\r\n        $.pivotUtilities.locales.zh.renderers = $.extend(\r\n            $.pivotUtilities.locales.zh.renderers,\r\n            $.pivotUtilities.locales.zh.gchart_renderers)\r\n\r\n    if d3r\r\n        $.pivotUtilities.locales.zh.d3_renderers =\r\n            \"树图\": d3r[\"Treemap\"]\r\n        $.pivotUtilities.locales.zh.renderers = $.extend(\r\n            $.pivotUtilities.locales.zh.renderers,\r\n            $.pivotUtilities.locales.zh.d3_renderers)\r\n\r\n    if c3r\r\n        $.pivotUtilities.locales.zh.c3_renderers = \r\n            \"折线图\": c3r[\"Line Chart\"]\r\n            \"柱形图\": c3r[\"Bar Chart\"]\r\n            \"堆栈柱形图\": c3r[\"Stacked Bar Chart\"]\r\n            \"面积图\": c3r[\"Area Chart\"]\r\n            \"散点图\": c3r[\"Scatter Chart\"]\r\n        $.pivotUtilities.locales.zh.renderers = $.extend(\r\n            $.pivotUtilities.locales.zh.renderers,\r\n            $.pivotUtilities.locales.zh.c3_renderers)\r\n\r\n    return $.pivotUtilities.locales.zh\r\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\"], pivotModule);\n    } else {\n      return pivotModule(jQuery);\n    }\n  };\n\n  callWithJQuery(function($) {\n    var c3r, d3r, frFmt, frFmtInt, frFmtPct, gcr, nf, r, tpl;\n    nf = $.pivotUtilities.numberFormat;\n    tpl = $.pivotUtilities.aggregatorTemplates;\n    r = $.pivotUtilities.renderers;\n    gcr = $.pivotUtilities.gchart_renderers;\n    d3r = $.pivotUtilities.d3_renderers;\n    c3r = $.pivotUtilities.c3_renderers;\n    frFmt = nf({\n      thousandsSep: \",\",\n      decimalSep: \".\"\n    });\n    frFmtInt = nf({\n      digitsAfterDecimal: 0,\n      thousandsSep: \",\",\n      decimalSep: \".\"\n    });\n    frFmtPct = nf({\n      digitsAfterDecimal: 2,\n      scaler: 100,\n      suffix: \"%\",\n      thousandsSep: \",\",\n      decimalSep: \".\"\n    });\n    $.pivotUtilities.locales.zh = {\n      localeStrings: {\n        renderError: \"展示结果时出错。\",\n        computeError: \"计算结果时出错。\",\n        uiRenderError: \"展示界面时出错。\",\n        selectAll: \"选择全部\",\n        selectNone: \"全部不选\",\n        tooMany: \"(因数据过多而无法列出)\",\n        filterResults: \"输入值帮助筛选\",\n        totals: \"合计\",\n        vs: \"于\",\n        by: \"分组于\"\n      },\n      aggregators: {\n        \"频数\": tpl.count(frFmtInt),\n        \"非重复值的个数\": tpl.countUnique(frFmtInt),\n        \"列出非重复值\": tpl.listUnique(\", \"),\n        \"求和\": tpl.sum(frFmt),\n        \"求和后取整\": tpl.sum(frFmtInt),\n        \"平均值\": tpl.average(frFmt),\n        \"中位数\": tpl.median(frFmt),\n        \"方差\": tpl[\"var\"](1, frFmt),\n        \"样本标准偏差\": tpl.stdev(1, frFmt),\n        \"最小值\": tpl.min(frFmt),\n        \"最大值\": tpl.max(frFmt),\n        \"第一\": tpl.first(frFmt),\n        \"最后\": tpl.last(frFmt),\n        \"两和之比\": tpl.sumOverSum(frFmt),\n        \"二项分布:置信度为80%时的区间上限\": tpl.sumOverSumBound80(true, frFmt),\n        \"二项分布:置信度为80%时的区间下限\": tpl.sumOverSumBound80(false, frFmt),\n        \"和在总计中的比例\": tpl.fractionOf(tpl.sum(), \"total\", frFmtPct),\n        \"和在行合计中的比例\": tpl.fractionOf(tpl.sum(), \"row\", frFmtPct),\n        \"和在列合计中的比例\": tpl.fractionOf(tpl.sum(), \"col\", frFmtPct),\n        \"频数在总计中的比例\": tpl.fractionOf(tpl.count(), \"total\", frFmtPct),\n        \"频数在行合计中的比例\": tpl.fractionOf(tpl.count(), \"row\", frFmtPct),\n        \"频数在列合计中的比例\": tpl.fractionOf(tpl.count(), \"col\", frFmtPct)\n      },\n      renderers: {\n        \"表格\": r[\"Table\"],\n        \"表格内柱状图\": r[\"Table Barchart\"],\n        \"热图\": r[\"Heatmap\"],\n        \"行热图\": r[\"Row Heatmap\"],\n        \"列热图\": r[\"Col Heatmap\"]\n      }\n    };\n    if (gcr) {\n      $.pivotUtilities.locales.zh.gchart_renderers = {\n        \"折线图(g)\": gcr[\"Line Chart\"],\n        \"柱形图(g)\": gcr[\"Bar Chart\"],\n        \"堆栈柱形图(g)\": gcr[\"Stacked Bar Chart\"],\n        \"面积图(g)\": gcr[\"Area Chart\"]\n      };\n      $.pivotUtilities.locales.zh.renderers = $.extend($.pivotUtilities.locales.zh.renderers, $.pivotUtilities.locales.zh.gchart_renderers);\n    }\n    if (d3r) {\n      $.pivotUtilities.locales.zh.d3_renderers = {\n        \"树图\": d3r[\"Treemap\"]\n      };\n      $.pivotUtilities.locales.zh.renderers = $.extend($.pivotUtilities.locales.zh.renderers, $.pivotUtilities.locales.zh.d3_renderers);\n    }\n    if (c3r) {\n      $.pivotUtilities.locales.zh.c3_renderers = {\n        \"折线图\": c3r[\"Line Chart\"],\n        \"柱形图\": c3r[\"Bar Chart\"],\n        \"堆栈柱形图\": c3r[\"Stacked Bar Chart\"],\n        \"面积图\": c3r[\"Area Chart\"],\n        \"散点图\": c3r[\"Scatter Chart\"]\n      };\n      $.pivotUtilities.locales.zh.renderers = $.extend($.pivotUtilities.locales.zh.renderers, $.pivotUtilities.locales.zh.c3_renderers);\n    }\n    return $.pivotUtilities.locales.zh;\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot.zh.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.min.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.min.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8b75b90ae7c35b5af61736a62f2c3b5aab180244
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.min.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.zh.min.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.min.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.min.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fd9e807ab7ace5f5544dd2aa8870e34cae46155f
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot.zh.min.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot.zh.min.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f5c4c943195e9fdf0d2ea71dda86ae117c59fd6
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.js.js
@@ -0,0 +1,614 @@
+(function() {
+  var fixtureData, raggedFixtureData;
+
+  fixtureData = [["name", "gender", "colour", "birthday", "trials", "successes"], ["Nick", "male", "blue", "1982-11-07", 103, 12], ["Jane", "female", "red", "1982-11-08", 95, 25], ["John", "male", "blue", "1982-12-08", 112, 30], ["Carol", "female", "yellow", "1983-12-08", 102, 14]];
+
+  raggedFixtureData = [
+    {
+      name: "Nick",
+      "colour": "red",
+      "age": 34
+    }, {
+      name: "Jane",
+      "gender": "female"
+    }, {
+      name: "John",
+      "gender": "male",
+      "age": 12
+    }, {
+      name: "Jim",
+      "gender": null,
+      "age": 12
+    }
+  ];
+
+  describe("$.pivotUI()", function() {
+    describe("with no rows/cols, default count aggregator, default TableRenderer", function() {
+      var table;
+      table = null;
+      beforeEach(function(done) {
+        return table = $("<div>").pivotUI(fixtureData, {
+          onRefresh: done
+        });
+      });
+      it("has all the basic UI elements", function(done) {
+        expect(table.find("td.pvtAxisContainer").length).toBe(3);
+        expect(table.find("td.pvtRendererArea").length).toBe(1);
+        expect(table.find("td.pvtVals").length).toBe(1);
+        expect(table.find("select.pvtRenderer").length).toBe(1);
+        expect(table.find("select.pvtAggregator").length).toBe(1);
+        expect(table.find("span.pvtAttr").length).toBe(6);
+        return done();
+      });
+      it("reflects its inputs", function(done) {
+        expect(table.find("td.pvtUnused span.pvtAttr").length).toBe(6);
+        expect(table.find("select.pvtRenderer").val()).toBe("Table");
+        expect(table.find("select.pvtAggregator").val()).toBe("Count");
+        return done();
+      });
+      it("renders a table", function(done) {
+        expect(table.find("table.pvtTable").length).toBe(1);
+        return done();
+      });
+      return describe("its renderer output", function() {
+        it("has the correct type and number of cells", function(done) {
+          expect(table.find("th.pvtTotalLabel").length).toBe(1);
+          expect(table.find("td.pvtGrandTotal").length).toBe(1);
+          return done();
+        });
+        it("has the correct textual representation", function(done) {
+          expect(table.find("table.pvtTable").text()).toBe(["Totals", "4"].join(""));
+          return done();
+        });
+        return it("has a correct grand total with data value", function(done) {
+          expect(table.find("td.pvtGrandTotal").text()).toBe("4");
+          expect(table.find("td.pvtGrandTotal").data("value")).toBe(4);
+          return done();
+        });
+      });
+    });
+    describe("with rows/cols, sum-over-sum aggregator, Heatmap renderer", function() {
+      var table;
+      table = null;
+      beforeEach(function(done) {
+        return table = $("<div>").pivotUI(fixtureData, {
+          rows: ["gender"],
+          cols: ["colour"],
+          aggregatorName: "Sum over Sum",
+          vals: ["successes", "trials"],
+          rendererName: "Heatmap",
+          onRefresh: done
+        });
+      });
+      it("has all the basic UI elements", function(done) {
+        expect(table.find("td.pvtAxisContainer").length).toBe(3);
+        expect(table.find("td.pvtRendererArea").length).toBe(1);
+        expect(table.find("td.pvtVals").length).toBe(1);
+        expect(table.find("select.pvtRenderer").length).toBe(1);
+        expect(table.find("select.pvtAggregator").length).toBe(1);
+        expect(table.find("span.pvtAttr").length).toBe(6);
+        return done();
+      });
+      it("reflects its inputs", function(done) {
+        expect(table.find("td.pvtUnused span.pvtAttr").length).toBe(4);
+        expect(table.find("td.pvtRows span.pvtAttr").length).toBe(1);
+        expect(table.find("td.pvtCols span.pvtAttr").length).toBe(1);
+        expect(table.find("select.pvtRenderer").val()).toBe("Heatmap");
+        expect(table.find("select.pvtAggregator").val()).toBe("Sum over Sum");
+        return done();
+      });
+      it("renders a table", function(done) {
+        expect(table.find("table.pvtTable").length).toBe(1);
+        return done();
+      });
+      return describe("its renderer output", function() {
+        it("has the correct type and number of cells", function(done) {
+          expect(table.find("th.pvtAxisLabel").length).toBe(2);
+          expect(table.find("th.pvtRowLabel").length).toBe(2);
+          expect(table.find("th.pvtColLabel").length).toBe(3);
+          expect(table.find("th.pvtTotalLabel").length).toBe(2);
+          expect(table.find("td.pvtVal").length).toBe(6);
+          expect(table.find("td.pvtTotal").length).toBe(5);
+          expect(table.find("td.pvtGrandTotal").length).toBe(1);
+          return done();
+        });
+        it("has the correct textual representation", function(done) {
+          expect(table.find("table.pvtTable").text()).toBe(["colour", "blue", "red", "yellow", "Totals", "gender", "female", "0.26", "0.14", "0.20", "male", "0.20", "0.20", "Totals", "0.20", "0.26", "0.14", "0.20"].join(""));
+          return done();
+        });
+        return it("has a correct spot-checked cell with data value", function(done) {
+          expect(table.find("td.col0.row1").text()).toBe("0.20");
+          expect(table.find("td.col0.row1").data("value")).toBe((12 + 30) / (103 + 112));
+          return done();
+        });
+      });
+    });
+    return describe("with ragged input", function() {
+      var table;
+      table = $("<div>").pivotUI(raggedFixtureData, {
+        rows: ["gender"],
+        cols: ["age"]
+      });
+      return it("renders a table with the correct textual representation", function() {
+        return expect(table.find("table.pvtTable").text()).toBe(["age", "12", "34", "null", "Totals", "gender", "female", "1", "1", "male", "1", "1", "null", "1", "1", "2", "Totals", "2", "1", "1", "4"].join(""));
+      });
+    });
+  });
+
+  describe("$.pivot()", function() {
+    describe("with no rows/cols, default count aggregator, default TableRenderer", function() {
+      var table;
+      table = $("<div>").pivot(fixtureData);
+      it("renders a table", function() {
+        return expect(table.find("table.pvtTable").length).toBe(1);
+      });
+      return describe("its renderer output", function() {
+        it("has the correct textual representation", function() {
+          return expect(table.find("table.pvtTable").text()).toBe(["Totals", "4"].join(""));
+        });
+        return it("has a correct grand total with data value", function() {
+          expect(table.find("td.pvtGrandTotal").text()).toBe("4");
+          return expect(table.find("td.pvtGrandTotal").data("value")).toBe(4);
+        });
+      });
+    });
+    describe("with rows/cols, sum aggregator, derivedAttributes, filter and sorters", function() {
+      var aggregators, derivers, ref, sortAs, table;
+      ref = $.pivotUtilities, sortAs = ref.sortAs, derivers = ref.derivers, aggregators = ref.aggregators;
+      table = $("<div>").pivot(fixtureData, {
+        rows: ["gender"],
+        cols: ["birthyear"],
+        aggregator: aggregators["Sum"](["trialbins"]),
+        filter: function(record) {
+          return record.name !== "Nick";
+        },
+        derivedAttributes: {
+          birthyear: derivers.dateFormat("birthday", "%y"),
+          trialbins: derivers.bin("trials", 10)
+        },
+        sorters: function(attr) {
+          if (attr === "gender") {
+            return sortAs(["male", "female"]);
+          }
+        }
+      });
+      return it("renders a table with the correct textual representation", function() {
+        return expect(table.find("table.pvtTable").text()).toBe(["birthyear", "1982", "1983", "Totals", "gender", "male", "110.00", "110.00", "female", "90.00", "100.00", "190.00", "Totals", "200.00", "100.00", "300.00"].join(""));
+      });
+    });
+    describe("with rows/cols, fraction-of aggregator", function() {
+      var aggregators, table;
+      aggregators = $.pivotUtilities.aggregators;
+      table = $("<div>").pivot(fixtureData, {
+        rows: ["gender"],
+        aggregator: aggregators["Sum as Fraction of Total"](["trials"])
+      });
+      return it("renders a table with the correct textual representation", function() {
+        return expect(table.find("table.pvtTable").text()).toBe(["gender", "Totals", "female", "47.8%", "male", "52.2%", "Totals", "100.0%"].join(""));
+      });
+    });
+    describe("with rows/cols, custom aggregator, custom renderer with options", function() {
+      var received_PivotData, received_rendererOptions, table;
+      received_PivotData = null;
+      received_rendererOptions = null;
+      table = $("<div>").pivot(fixtureData, {
+        rows: ["name", "colour"],
+        cols: ["trials", "successes"],
+        aggregator: function() {
+          return {
+            count2x: 0,
+            push: function() {
+              return this.count2x += 2;
+            },
+            value: function() {
+              return this.count2x;
+            },
+            format: function(x) {
+              return "formatted " + x;
+            }
+          };
+        },
+        renderer: function(a, b) {
+          received_PivotData = a;
+          received_rendererOptions = b;
+          return $("<div>").addClass(b.greeting).text("world");
+        },
+        rendererOptions: {
+          greeting: "hithere"
+        }
+      });
+      it("renders the custom renderer as per options", function() {
+        return expect(table.find("div.hithere").length).toBe(1);
+      });
+      return describe("its received PivotData object", function() {
+        return it("has a correct grand total value and format for custom aggregator", function() {
+          var agg, val;
+          agg = received_PivotData.getAggregator([], []);
+          val = agg.value();
+          expect(val).toBe(8);
+          return expect(agg.format(val)).toBe("formatted 8");
+        });
+      });
+    });
+    return describe("with ragged input", function() {
+      var table;
+      table = $("<div>").pivot(raggedFixtureData, {
+        rows: ["gender"],
+        cols: ["age"]
+      });
+      return it("renders a table with the correct textual representation", function() {
+        return expect(table.find("table.pvtTable").text()).toBe(["age", "12", "34", "null", "Totals", "gender", "female", "1", "1", "male", "1", "1", "null", "1", "1", "2", "Totals", "2", "1", "1", "4"].join(""));
+      });
+    });
+  });
+
+  describe("$.pivotUtilities", function() {
+    describe(".PivotData()", function() {
+      var sumOverSumOpts;
+      sumOverSumOpts = {
+        aggregator: $.pivotUtilities.aggregators["Sum over Sum"](["a", "b"])
+      };
+      describe("with no options", function() {
+        var aoaInput, pd;
+        aoaInput = [["a", "b"], [1, 2], [3, 4]];
+        pd = new $.pivotUtilities.PivotData(aoaInput);
+        return it("has the correct grand total value", function() {
+          return expect(pd.getAggregator([], []).value()).toBe(2);
+        });
+      });
+      describe("with array-of-array input", function() {
+        var aoaInput, pd;
+        aoaInput = [["a", "b"], [1, 2], [3, 4]];
+        pd = new $.pivotUtilities.PivotData(aoaInput, sumOverSumOpts);
+        return it("has the correct grand total value", function() {
+          return expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4));
+        });
+      });
+      describe("with array-of-object input", function() {
+        var aosInput, pd;
+        aosInput = [
+          {
+            a: 1,
+            b: 2
+          }, {
+            a: 3,
+            b: 4
+          }
+        ];
+        pd = new $.pivotUtilities.PivotData(aosInput, sumOverSumOpts);
+        return it("has the correct grand total value", function() {
+          return expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4));
+        });
+      });
+      describe("with ragged array-of-object input", function() {
+        var pd, raggedAosInput;
+        raggedAosInput = [
+          {
+            a: 1
+          }, {
+            b: 4
+          }, {
+            a: 3,
+            b: 2
+          }
+        ];
+        pd = new $.pivotUtilities.PivotData(raggedAosInput, sumOverSumOpts);
+        return it("has the correct grand total value", function() {
+          return expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4));
+        });
+      });
+      describe("with function input", function() {
+        var functionInput, pd;
+        functionInput = function(record) {
+          record({
+            a: 1,
+            b: 2
+          });
+          return record({
+            a: 3,
+            b: 4
+          });
+        };
+        pd = new $.pivotUtilities.PivotData(functionInput, sumOverSumOpts);
+        return it("has the correct grand total value", function() {
+          return expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4));
+        });
+      });
+      describe("with jQuery table element input", function() {
+        var pd, tableInput;
+        tableInput = $("<table>\n    <thead>\n        <tr> <th>a</th><th>b</th> </tr>\n    </thead>\n    <tbody>\n        <tr> <td>1</td> <td>2</td> </tr>\n        <tr> <td>3</td> <td>4</td> </tr>\n    </tbody>\n</table>");
+        pd = new $.pivotUtilities.PivotData(tableInput, sumOverSumOpts);
+        return it("has the correct grand total value", function() {
+          return expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4));
+        });
+      });
+      return describe("with rows/cols", function() {
+        var pd;
+        pd = new $.pivotUtilities.PivotData(fixtureData, {
+          rows: ["name", "colour"],
+          cols: ["trials", "successes"]
+        });
+        it("has correctly-ordered row keys", function() {
+          return expect(pd.getRowKeys()).toEqual([['Carol', 'yellow'], ['Jane', 'red'], ['John', 'blue'], ['Nick', 'blue']]);
+        });
+        it("has correctly-ordered col keys", function() {
+          return expect(pd.getColKeys()).toEqual([[95, 25], [102, 14], [103, 12], [112, 30]]);
+        });
+        it("can be iterated over", function() {
+          var c, i, j, len, len1, numNotNull, numNull, r, ref, ref1;
+          numNotNull = 0;
+          numNull = 0;
+          ref = pd.getRowKeys();
+          for (i = 0, len = ref.length; i < len; i++) {
+            r = ref[i];
+            ref1 = pd.getColKeys();
+            for (j = 0, len1 = ref1.length; j < len1; j++) {
+              c = ref1[j];
+              if (pd.getAggregator(r, c).value() != null) {
+                numNotNull++;
+              } else {
+                numNull++;
+              }
+            }
+          }
+          expect(numNotNull).toBe(4);
+          return expect(numNull).toBe(12);
+        });
+        it("returns matching records", function() {
+          var records;
+          records = [];
+          pd.forEachMatchingRecord({
+            gender: "male"
+          }, function(x) {
+            return records.push(x.name);
+          });
+          return expect(records).toEqual(["Nick", "John"]);
+        });
+        it("has a correct spot-checked aggregator", function() {
+          var agg, val;
+          agg = pd.getAggregator(['Carol', 'yellow'], [102, 14]);
+          val = agg.value();
+          expect(val).toBe(1);
+          return expect(agg.format(val)).toBe("1");
+        });
+        return it("has a correct grand total aggregator", function() {
+          var agg, val;
+          agg = pd.getAggregator([], []);
+          val = agg.value();
+          expect(val).toBe(4);
+          return expect(agg.format(val)).toBe("4");
+        });
+      });
+    });
+    describe(".aggregatorTemplates", function() {
+      var getVal, tpl;
+      getVal = function(aggregator) {
+        var pd;
+        pd = new $.pivotUtilities.PivotData(fixtureData, {
+          aggregator: aggregator
+        });
+        return pd.getAggregator([], []).value();
+      };
+      tpl = $.pivotUtilities.aggregatorTemplates;
+      describe(".count", function() {
+        return it("works", function() {
+          return expect(getVal(tpl.count()())).toBe(4);
+        });
+      });
+      describe(".countUnique", function() {
+        return it("works", function() {
+          return expect(getVal(tpl.countUnique()(['gender']))).toBe(2);
+        });
+      });
+      describe(".listUnique", function() {
+        return it("works", function() {
+          return expect(getVal(tpl.listUnique()(['gender']))).toBe('male,female');
+        });
+      });
+      describe(".average", function() {
+        return it("works", function() {
+          return expect(getVal(tpl.average()(['trials']))).toBe(103);
+        });
+      });
+      describe(".sum", function() {
+        return it("works", function() {
+          return expect(getVal(tpl.sum()(['trials']))).toBe(412);
+        });
+      });
+      describe(".min", function() {
+        return it("works", function() {
+          return expect(getVal(tpl.min()(['trials']))).toBe(95);
+        });
+      });
+      describe(".max", function() {
+        return it("works", function() {
+          return expect(getVal(tpl.max()(['trials']))).toBe(112);
+        });
+      });
+      describe(".first", function() {
+        return it("works", function() {
+          return expect(getVal(tpl.first()(['name']))).toBe('Carol');
+        });
+      });
+      describe(".last", function() {
+        return it("works", function() {
+          return expect(getVal(tpl.last()(['name']))).toBe('Nick');
+        });
+      });
+      describe(".average", function() {
+        return it("works", function() {
+          return expect(getVal(tpl.average()(['trials']))).toBe(103);
+        });
+      });
+      describe(".median", function() {
+        return it("works", function() {
+          return expect(getVal(tpl.median()(['trials']))).toBe(102.5);
+        });
+      });
+      describe(".quantile", function() {
+        return it("works", function() {
+          expect(getVal(tpl.quantile(0)(['trials']))).toBe(95);
+          expect(getVal(tpl.quantile(0.1)(['trials']))).toBe(98.5);
+          expect(getVal(tpl.quantile(0.25)(['trials']))).toBe(98.5);
+          expect(getVal(tpl.quantile(1 / 3)(['trials']))).toBe(102);
+          return expect(getVal(tpl.quantile(1)(['trials']))).toBe(112);
+        });
+      });
+      describe(".var", function() {
+        return it("works", function() {
+          return expect(getVal(tpl["var"]()(['trials']))).toBe(48.666666666666686);
+        });
+      });
+      describe(".stdev", function() {
+        return it("works", function() {
+          return expect(getVal(tpl.stdev()(['trials']))).toBe(6.976149845485451);
+        });
+      });
+      return describe(".sumOverSum", function() {
+        return it("works", function() {
+          return expect(getVal(tpl.sumOverSum()(['successes', 'trials']))).toBe((12 + 25 + 30 + 14) / (95 + 102 + 103 + 112));
+        });
+      });
+    });
+    describe(".naturalSort()", function() {
+      var naturalSort, sortedArr;
+      naturalSort = $.pivotUtilities.naturalSort;
+      sortedArr = [null, 0/0, -2e308, '-Infinity', -3, '-3', -2, '-2', -1, '-1', 0, '2e-1', 1, '01', '1', 2, '002', '002e0', '02', '2', '2e-0', 3, 10, '10', '11', '12', '1e2', '112', 2e308, 'Infinity', '1a', '2a', '12a', '20a', 'A', 'A', 'NaN', 'a', 'a', 'a01', 'a012', 'a02', 'a1', 'a2', 'a12', 'a12', 'a21', 'a21', 'b', 'c', 'd', 'null'];
+      return it("sorts naturally (null, NaN, numbers & numbery strings, Alphanum for text strings)", function() {
+        return expect(sortedArr.slice().sort(naturalSort)).toEqual(sortedArr);
+      });
+    });
+    describe(".sortAs()", function() {
+      var sortAs;
+      sortAs = $.pivotUtilities.sortAs;
+      it("sorts with unknown values sorted at the end", function() {
+        return expect([5, 2, 3, 4, 1].sort(sortAs([4, 3, 2]))).toEqual([4, 3, 2, 1, 5]);
+      });
+      return it("sorts lowercase after uppercase", function() {
+        return expect(["Ab", "aA", "aa", "ab"].sort(sortAs(["Ab", "Aa"]))).toEqual(["Ab", "ab", "aa", "aA"]);
+      });
+    });
+    describe(".numberFormat()", function() {
+      var numberFormat;
+      numberFormat = $.pivotUtilities.numberFormat;
+      it("formats numbers", function() {
+        var nf;
+        nf = numberFormat();
+        return expect(nf(1234567.89123456)).toEqual("1,234,567.89");
+      });
+      it("formats booleans", function() {
+        var nf;
+        nf = numberFormat();
+        return expect(nf(true)).toEqual("1.00");
+      });
+      it("formats numbers in strings", function() {
+        var nf;
+        nf = numberFormat();
+        return expect(nf("1234567.89123456")).toEqual("1,234,567.89");
+      });
+      it("doesn't formats strings", function() {
+        var nf;
+        nf = numberFormat();
+        return expect(nf("hi there")).toEqual("");
+      });
+      it("doesn't formats objects", function() {
+        var nf;
+        nf = numberFormat();
+        return expect(nf({
+          a: 1
+        })).toEqual("");
+      });
+      it("formats percentages", function() {
+        var nf;
+        nf = numberFormat({
+          scaler: 100,
+          suffix: "%"
+        });
+        return expect(nf(0.12345)).toEqual("12.35%");
+      });
+      it("adds separators", function() {
+        var nf;
+        nf = numberFormat({
+          thousandsSep: "a",
+          decimalSep: "b"
+        });
+        return expect(nf(1234567.89123456)).toEqual("1a234a567b89");
+      });
+      it("adds prefixes and suffixes", function() {
+        var nf;
+        nf = numberFormat({
+          prefix: "a",
+          suffix: "b"
+        });
+        return expect(nf(1234567.89123456)).toEqual("a1,234,567.89b");
+      });
+      return it("scales and rounds", function() {
+        var nf;
+        nf = numberFormat({
+          digitsAfterDecimal: 3,
+          scaler: 1000
+        });
+        return expect(nf(1234567.89123456)).toEqual("1,234,567,891.235");
+      });
+    });
+    return describe(".derivers", function() {
+      describe(".dateFormat()", function() {
+        var df;
+        df = $.pivotUtilities.derivers.dateFormat("x", "abc % %% %%% %a %y %m %n %d %w %x %H %M %S", true);
+        it("formats date objects", function() {
+          return expect(df({
+            x: new Date("2015-01-02T23:43:11Z")
+          })).toBe('abc % %% %%% %a 2015 01 Jan 02 Fri 5 23 43 11');
+        });
+        return it("formats input parsed by Date.parse()", function() {
+          expect(df({
+            x: "2015-01-02T23:43:11Z"
+          })).toBe('abc % %% %%% %a 2015 01 Jan 02 Fri 5 23 43 11');
+          return expect(df({
+            x: "bla"
+          })).toBe('');
+        });
+      });
+      return describe(".bin()", function() {
+        var binner;
+        binner = $.pivotUtilities.derivers.bin("x", 10);
+        it("bins numbers", function() {
+          expect(binner({
+            x: 11
+          })).toBe(10);
+          expect(binner({
+            x: 9
+          })).toBe(0);
+          return expect(binner({
+            x: 111
+          })).toBe(110);
+        });
+        it("bins booleans", function() {
+          return expect(binner({
+            x: true
+          })).toBe(0);
+        });
+        it("bins negative numbers", function() {
+          return expect(binner({
+            x: -12
+          })).toBe(-10);
+        });
+        it("doesn't bin strings", function() {
+          return expect(binner({
+            x: "a"
+          })).toBeNaN();
+        });
+        return it("doesn't bin objects", function() {
+          return expect(binner({
+            x: {
+              a: 1
+            }
+          })).toBeNaN();
+        });
+      });
+    });
+  });
+
+}).call(this);
+
+//# sourceMappingURL=pivot_spec.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..abcf078bba10744d5d075a8d49ca7c15b38206cc
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.js.map.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>text/html</string> </value>
+        </item>
+        <item>
+            <key> <string>expand</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>pivot_spec.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>output_encoding</string> </key>
+            <value> <string>iso-8859-15</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.js.map.zpt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.js.map.zpt
new file mode 100644
index 0000000000000000000000000000000000000000..7506e6a06d67b8f09fb9c99eb3f843d86f703a52
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.js.map.zpt
@@ -0,0 +1 @@
+{"version":3,"file":"pivot_spec.js","sources":["pivot_spec.coffee"],"names":[],"mappings":"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","sourcesContent":["fixtureData = [\n    [\"name\",    \"gender\",   \"colour\",    \"birthday\",     \"trials\",   \"successes\"],\n    [\"Nick\",    \"male\",     \"blue\",      \"1982-11-07\",   103,        12],\n    [\"Jane\",    \"female\",   \"red\",       \"1982-11-08\",   95,         25],\n    [\"John\",    \"male\",     \"blue\",      \"1982-12-08\",   112,        30],\n    [\"Carol\",   \"female\",   \"yellow\",    \"1983-12-08\",   102,        14]\n]\n\nraggedFixtureData = [\n    {name: \"Nick\", \"colour\": \"red\", \"age\": 34}\n    {name: \"Jane\", \"gender\": \"female\"}\n    {name: \"John\", \"gender\": \"male\", \"age\": 12}\n    {name: \"Jim\", \"gender\": null, \"age\": 12}\n]\n\ndescribe \"$.pivotUI()\", ->\n    describe \"with no rows/cols, default count aggregator, default TableRenderer\",  ->\n        table = null\n\n        beforeEach (done) ->\n            table = $(\"<div>\").pivotUI fixtureData, onRefresh: done\n        it \"has all the basic UI elements\", (done) ->\n            expect table.find(\"td.pvtAxisContainer\").length\n            .toBe  3\n            expect table.find(\"td.pvtRendererArea\").length\n            .toBe  1\n            expect table.find(\"td.pvtVals\").length\n            .toBe  1\n            expect table.find(\"select.pvtRenderer\").length\n            .toBe  1\n            expect table.find(\"select.pvtAggregator\").length\n            .toBe  1\n            expect table.find(\"span.pvtAttr\").length\n            .toBe  6\n            done()\n\n        it \"reflects its inputs\", (done) ->\n            expect table.find(\"td.pvtUnused span.pvtAttr\").length\n            .toBe  6\n            expect table.find(\"select.pvtRenderer\").val()\n            .toBe  \"Table\"\n            expect table.find(\"select.pvtAggregator\").val()\n            .toBe  \"Count\"\n            done()\n\n        it \"renders a table\", (done) ->\n            expect table.find(\"table.pvtTable\").length\n            .toBe  1\n            done()\n\n\n        describe \"its renderer output\", ->\n            it \"has the correct type and number of cells\", (done) ->\n                expect table.find(\"th.pvtTotalLabel\").length\n                .toBe  1\n                expect table.find(\"td.pvtGrandTotal\").length\n                .toBe  1\n                done()\n\n            it \"has the correct textual representation\", (done) ->\n                expect table.find(\"table.pvtTable\").text()\n                .toBe [\"Totals\", \"4\"].join(\"\")\n                done()\n\n            it \"has a correct grand total with data value\", (done) ->\n                expect table.find(\"td.pvtGrandTotal\").text()\n                .toBe  \"4\"\n                expect table.find(\"td.pvtGrandTotal\").data(\"value\")\n                .toBe  4\n                done()\n\n    describe \"with rows/cols, sum-over-sum aggregator, Heatmap renderer\",  ->\n        table = null\n\n        beforeEach (done) ->\n            table = $(\"<div>\").pivotUI fixtureData,\n                rows: [\"gender\"], cols: [\"colour\"]\n                aggregatorName: \"Sum over Sum\"\n                vals: [\"successes\", \"trials\"]\n                rendererName: \"Heatmap\"\n                onRefresh: done\n\n        it \"has all the basic UI elements\", (done) ->\n            expect table.find(\"td.pvtAxisContainer\").length\n            .toBe  3\n            expect table.find(\"td.pvtRendererArea\").length\n            .toBe  1\n            expect table.find(\"td.pvtVals\").length\n            .toBe  1\n            expect table.find(\"select.pvtRenderer\").length\n            .toBe  1\n            expect table.find(\"select.pvtAggregator\").length\n            .toBe  1\n            expect table.find(\"span.pvtAttr\").length\n            .toBe  6\n            done()\n\n        it \"reflects its inputs\", (done) ->\n            expect table.find(\"td.pvtUnused span.pvtAttr\").length\n            .toBe  4\n            expect table.find(\"td.pvtRows span.pvtAttr\").length\n            .toBe  1\n            expect table.find(\"td.pvtCols span.pvtAttr\").length\n            .toBe  1\n            expect table.find(\"select.pvtRenderer\").val()\n            .toBe  \"Heatmap\"\n            expect table.find(\"select.pvtAggregator\").val()\n            .toBe  \"Sum over Sum\"\n            done()\n\n        it \"renders a table\", (done) ->\n            expect table.find(\"table.pvtTable\").length\n            .toBe  1\n            done()\n\n        describe \"its renderer output\", ->\n            it \"has the correct type and number of cells\", (done) ->\n                expect table.find(\"th.pvtAxisLabel\").length\n                .toBe  2\n                expect table.find(\"th.pvtRowLabel\").length\n                .toBe  2\n                expect table.find(\"th.pvtColLabel\").length\n                .toBe  3\n                expect table.find(\"th.pvtTotalLabel\").length\n                .toBe  2\n                expect table.find(\"td.pvtVal\").length\n                .toBe  6\n                expect table.find(\"td.pvtTotal\").length\n                .toBe  5\n                expect table.find(\"td.pvtGrandTotal\").length\n                .toBe  1\n                done()\n\n            it \"has the correct textual representation\", (done) ->\n                expect table.find(\"table.pvtTable\").text()\n                .toBe [\n                    \"colour\",   \"blue\", \"red\",  \"yellow\",   \"Totals\",\n                    \"gender\",\n                    \"female\",           \"0.26\", \"0.14\",     \"0.20\",\n                    \"male\",     \"0.20\",                     \"0.20\",\n                    \"Totals\",   \"0.20\", \"0.26\", \"0.14\",     \"0.20\"\n                    ].join(\"\")\n                done()\n\n            it \"has a correct spot-checked cell with data value\", (done) ->\n                expect table.find(\"td.col0.row1\").text()\n                .toBe  \"0.20\"\n                expect table.find(\"td.col0.row1\").data(\"value\")\n                .toBe  (12+30)/(103+112)\n                done()\n\n    describe \"with ragged input\",  ->\n        table = $(\"<div>\").pivotUI raggedFixtureData, rows: [\"gender\"], cols: [\"age\"]\n\n        it \"renders a table with the correct textual representation\", ->\n            expect table.find(\"table.pvtTable\").text()\n            .toBe [\n                \"age\",     \"12\",  \"34\",  \"null\",  \"Totals\"\n                \"gender\",\n                \"female\",                 \"1\",    \"1\"\n                \"male\",    \"1\",                   \"1\"\n                \"null\",    \"1\",    \"1\",           \"2\"\n                \"Totals\",  \"2\",    \"1\",   \"1\",    \"4\"\n                ].join(\"\")\n\ndescribe \"$.pivot()\", ->\n\n    describe \"with no rows/cols, default count aggregator, default TableRenderer\",  ->\n        table = $(\"<div>\").pivot fixtureData\n\n        it \"renders a table\", ->\n            expect table.find(\"table.pvtTable\").length\n            .toBe  1\n\n        describe \"its renderer output\", ->\n\n            it \"has the correct textual representation\", ->\n                expect table.find(\"table.pvtTable\").text()\n                .toBe [\"Totals\", \"4\"].join(\"\")\n\n            it \"has a correct grand total with data value\", ->\n                expect table.find(\"td.pvtGrandTotal\").text()\n                .toBe  \"4\"\n                expect table.find(\"td.pvtGrandTotal\").data(\"value\")\n                .toBe  4\n\n    describe \"with rows/cols, sum aggregator, derivedAttributes, filter and sorters\",  ->\n        {sortAs, derivers, aggregators} = $.pivotUtilities\n        table = $(\"<div>\").pivot fixtureData,\n            rows: [\"gender\"], cols: [\"birthyear\"], aggregator: aggregators[\"Sum\"]([\"trialbins\"])\n            filter: (record) -> record.name != \"Nick\"\n            derivedAttributes:\n                birthyear: derivers.dateFormat \"birthday\", \"%y\"\n                trialbins: derivers.bin \"trials\", 10\n            sorters: (attr) ->\n                if attr == \"gender\" then return sortAs([\"male\", \"female\"])\n\n        it \"renders a table with the correct textual representation\", ->\n            expect table.find(\"table.pvtTable\").text()\n            .toBe [\n                \"birthyear\",    \"1982\",     \"1983\",     \"Totals\"\n                \"gender\",\n                \"male\",         \"110.00\",               \"110.00\"\n                \"female\",       \"90.00\",    \"100.00\",   \"190.00\"\n                \"Totals\",       \"200.00\",   \"100.00\",   \"300.00\"\n                ].join(\"\")\n\n    describe \"with rows/cols, fraction-of aggregator\",  ->\n        {aggregators} = $.pivotUtilities\n        table = $(\"<div>\").pivot fixtureData,\n            rows: [\"gender\"]\n            aggregator: aggregators[\"Sum as Fraction of Total\"]([\"trials\"])\n\n        it \"renders a table with the correct textual representation\", ->\n            expect table.find(\"table.pvtTable\").text()\n            .toBe [\n                \"gender\",  \"Totals\"\n                \"female\",  \"47.8%\"\n                \"male\",    \"52.2%\"\n                \"Totals\",  \"100.0%\"\n                ].join(\"\")\n\n    describe \"with rows/cols, custom aggregator, custom renderer with options\",  ->\n        received_PivotData = null\n        received_rendererOptions = null\n\n        table = $(\"<div>\").pivot fixtureData,\n            rows: [\"name\", \"colour\"], cols: [\"trials\", \"successes\"]\n            aggregator: ->\n                count2x: 0\n                push: -> @count2x +=2\n                value: -> @count2x\n                format: (x) -> \"formatted \" + x\n            renderer: (a,b) ->\n                received_PivotData = a\n                received_rendererOptions = b\n                return $(\"<div>\").addClass(b.greeting).text(\"world\")\n            rendererOptions: {greeting:\"hithere\"}\n\n        it \"renders the custom renderer as per options\", ->\n            expect table.find(\"div.hithere\").length\n            .toBe  1\n\n        describe \"its received PivotData object\", ->\n            it \"has a correct grand total value and format for custom aggregator\", ->\n                agg = received_PivotData.getAggregator([],[])\n                val = agg.value()\n                expect(val).toBe 8\n                expect(agg.format(val)).toBe \"formatted 8\"\n\n\n    describe \"with ragged input\",  ->\n        table = $(\"<div>\").pivot raggedFixtureData, rows: [\"gender\"], cols: [\"age\"]\n\n        it \"renders a table with the correct textual representation\", ->\n            expect table.find(\"table.pvtTable\").text()\n            .toBe [\n                \"age\",     \"12\",  \"34\",  \"null\",  \"Totals\"\n                \"gender\",\n                \"female\",                 \"1\",    \"1\"\n                \"male\",    \"1\",                   \"1\"\n                \"null\",    \"1\",    \"1\",           \"2\"\n                \"Totals\",  \"2\",    \"1\",   \"1\",    \"4\"\n                ].join(\"\")\n\ndescribe \"$.pivotUtilities\", ->\n\n    describe \".PivotData()\", ->\n        sumOverSumOpts =\n            aggregator: $.pivotUtilities.aggregators[\"Sum over Sum\"]([\"a\",\"b\"])\n\n        describe \"with no options\", ->\n            aoaInput =  [ [\"a\",\"b\"], [1,2], [3,4] ]\n            pd = new $.pivotUtilities.PivotData aoaInput\n\n            it \"has the correct grand total value\", ->\n                expect pd.getAggregator([],[]).value()\n                .toBe 2\n\n        describe \"with array-of-array input\", ->\n            aoaInput =  [ [\"a\",\"b\"], [1,2], [3,4] ]\n            pd = new $.pivotUtilities.PivotData aoaInput, sumOverSumOpts\n\n            it \"has the correct grand total value\", ->\n                expect pd.getAggregator([],[]).value()\n                .toBe (1+3)/(2+4)\n\n        describe \"with array-of-object input\", ->\n            aosInput =  [ {a:1, b:2}, {a:3, b:4} ]\n            pd = new $.pivotUtilities.PivotData aosInput, sumOverSumOpts\n\n            it \"has the correct grand total value\", ->\n                expect pd.getAggregator([],[]).value()\n                .toBe (1+3)/(2+4)\n\n        describe \"with ragged array-of-object input\", ->\n            raggedAosInput =  [ {a:1}, {b:4}, {a: 3, b: 2} ]\n            pd = new $.pivotUtilities.PivotData raggedAosInput, sumOverSumOpts\n\n            it \"has the correct grand total value\", ->\n                expect pd.getAggregator([],[]).value()\n                .toBe (1+3)/(2+4)\n\n        describe \"with function input\", ->\n            functionInput = (record) ->\n                record a:1, b:2\n                record a:3, b:4\n            pd = new $.pivotUtilities.PivotData functionInput, sumOverSumOpts\n\n            it \"has the correct grand total value\", ->\n                expect pd.getAggregator([],[]).value()\n                .toBe (1+3)/(2+4)\n\n        describe \"with jQuery table element input\", ->\n            tableInput = $ \"\"\"\n                <table>\n                    <thead>\n                        <tr> <th>a</th><th>b</th> </tr>\n                    </thead>\n                    <tbody>\n                        <tr> <td>1</td> <td>2</td> </tr>\n                        <tr> <td>3</td> <td>4</td> </tr>\n                    </tbody>\n                </table>\n                \"\"\"\n            pd = new $.pivotUtilities.PivotData tableInput, sumOverSumOpts\n\n            it \"has the correct grand total value\", ->\n                expect pd.getAggregator([],[]).value()\n                .toBe (1+3)/(2+4)\n\n\n        describe \"with rows/cols\", ->\n            pd = new $.pivotUtilities.PivotData fixtureData,\n                rows: [\"name\", \"colour\"],\n                cols: [\"trials\", \"successes\"]\n\n            it \"has correctly-ordered row keys\", ->\n                expect pd.getRowKeys()\n                .toEqual [ [ 'Carol', 'yellow' ], [ 'Jane', 'red' ], [ 'John', 'blue' ], [ 'Nick', 'blue' ] ]\n\n            it \"has correctly-ordered col keys\", ->\n                expect pd.getColKeys()\n                .toEqual [ [ 95, 25 ], [ 102, 14 ], [ 103, 12 ], [ 112, 30 ] ]\n\n            it \"can be iterated over\", ->\n                numNotNull = 0\n                numNull = 0\n                for r in pd.getRowKeys()\n                    for c in pd.getColKeys()\n                        if pd.getAggregator(r, c).value()?\n                            numNotNull++\n                        else\n                            numNull++\n                expect numNotNull\n                .toBe 4\n                expect numNull\n                .toBe 12\n\n            it \"returns matching records\", ->\n                records = []\n                pd.forEachMatchingRecord gender: \"male\", (x) -> records.push(x.name)\n                expect records\n                .toEqual [\"Nick\", \"John\"]\n\n            it \"has a correct spot-checked aggregator\", ->\n                agg = pd.getAggregator([ 'Carol', 'yellow' ],[ 102, 14 ])\n                val = agg.value()\n                expect(val).toBe 1\n                expect(agg.format(val)).toBe \"1\"\n\n            it \"has a correct grand total aggregator\", ->\n                agg = pd.getAggregator([],[])\n                val = agg.value()\n                expect(val).toBe 4\n                expect(agg.format(val)).toBe \"4\"\n\n    describe \".aggregatorTemplates\", ->\n\n        getVal = (aggregator) ->\n            pd = new $.pivotUtilities.PivotData(fixtureData, {aggregator})\n            return pd.getAggregator([],[]).value()\n        tpl = $.pivotUtilities.aggregatorTemplates\n\n        describe \".count\", ->\n            it \"works\", ->\n                expect getVal(tpl.count()())\n                .toBe 4\n\n        describe \".countUnique\", ->\n            it \"works\", ->\n                expect getVal(tpl.countUnique()(['gender']))\n                .toBe 2\n\n        describe \".listUnique\", ->\n            it \"works\", ->\n                expect getVal(tpl.listUnique()(['gender']))\n                .toBe 'male,female'\n\n        describe \".average\", ->\n            it \"works\", ->\n                expect getVal(tpl.average()(['trials']))\n                .toBe 103\n\n        describe \".sum\", ->\n            it \"works\", ->\n                expect getVal(tpl.sum()(['trials']))\n                .toBe 412\n\n        describe \".min\", ->\n            it \"works\", ->\n                expect getVal(tpl.min()(['trials']))\n                .toBe 95\n\n        describe \".max\", ->\n            it \"works\", ->\n                expect getVal(tpl.max()(['trials']))\n                .toBe 112\n\n        describe \".first\", ->\n            it \"works\", ->\n                expect getVal(tpl.first()(['name']))\n                .toBe 'Carol'\n\n        describe \".last\", ->\n            it \"works\", ->\n                expect getVal(tpl.last()(['name']))\n                .toBe 'Nick'\n\n        describe \".average\", ->\n            it \"works\", ->\n                expect getVal(tpl.average()(['trials']))\n                .toBe 103\n\n        describe \".median\", ->\n            it \"works\", ->\n                expect getVal(tpl.median()(['trials']))\n                .toBe 102.5\n\n        describe \".quantile\", ->\n            it \"works\", ->\n                expect getVal(tpl.quantile(0)(['trials']))\n                .toBe 95\n                expect getVal(tpl.quantile(0.1)(['trials']))\n                .toBe 98.5\n                expect getVal(tpl.quantile(0.25)(['trials']))\n                .toBe 98.5\n                expect getVal(tpl.quantile(1/3)(['trials']))\n                .toBe 102\n                expect getVal(tpl.quantile(1)(['trials']))\n                .toBe 112\n\n        describe \".var\", ->\n            it \"works\", ->\n                expect getVal(tpl.var()(['trials']))\n                .toBe 48.666666666666686\n\n        describe \".stdev\", ->\n            it \"works\", ->\n                expect getVal(tpl.stdev()(['trials']))\n                .toBe 6.976149845485451\n\n        describe \".sumOverSum\", ->\n            it \"works\", ->\n                expect getVal(tpl.sumOverSum()(['successes', 'trials']))\n                .toBe (12+25+30+14)/(95+102+103+112)\n\n    describe \".naturalSort()\", ->\n        naturalSort = $.pivotUtilities.naturalSort\n\n        sortedArr = [\n            null, NaN,\n            -Infinity, '-Infinity', -3, '-3', -2, '-2', -1, '-1',\n            0, '2e-1', 1, '01', '1', 2, '002', '002e0', '02', '2', '2e-0',\n            3, 10, '10', '11', '12', '1e2', '112', Infinity, 'Infinity',\n            '1a', '2a','12a','20a',\n            'A', 'A', 'NaN', 'a', 'a',\n            'a01', 'a012', 'a02', 'a1', 'a2', 'a12', 'a12', 'a21', 'a21',\n            'b', 'c', 'd', 'null'\n        ]\n\n        it \"sorts naturally (null, NaN, numbers & numbery strings, Alphanum for text strings)\", ->\n            expect sortedArr.slice().sort(naturalSort)\n            .toEqual sortedArr\n\n    describe \".sortAs()\", ->\n        sortAs = $.pivotUtilities.sortAs\n\n        it \"sorts with unknown values sorted at the end\", ->\n            expect [5,2,3,4,1].sort sortAs([4,3,2])\n            .toEqual [4,3,2,1,5]\n\n        it \"sorts lowercase after uppercase\", ->\n            expect [\"Ab\",\"aA\",\"aa\",\"ab\"].sort sortAs([\"Ab\",\"Aa\"])\n            .toEqual [\"Ab\",\"ab\",\"aa\",\"aA\"]\n\n    describe \".numberFormat()\", ->\n        numberFormat = $.pivotUtilities.numberFormat\n\n        it \"formats numbers\", ->\n            nf = numberFormat()\n            expect nf 1234567.89123456\n            .toEqual \"1,234,567.89\"\n\n        it \"formats booleans\", ->\n            nf = numberFormat()\n            expect nf true\n            .toEqual \"1.00\"\n\n        it \"formats numbers in strings\", ->\n            nf = numberFormat()\n            expect nf \"1234567.89123456\"\n            .toEqual \"1,234,567.89\"\n\n        it \"doesn't formats strings\", ->\n            nf = numberFormat()\n            expect nf \"hi there\"\n            .toEqual \"\"\n\n        it \"doesn't formats objects\", ->\n            nf = numberFormat()\n            expect nf {a:1}\n            .toEqual \"\"\n\n        it \"formats percentages\", ->\n            nf = numberFormat(scaler: 100, suffix: \"%\")\n            expect nf 0.12345\n            .toEqual \"12.35%\"\n\n        it \"adds separators\", ->\n            nf = numberFormat(thousandsSep: \"a\", decimalSep: \"b\")\n            expect nf 1234567.89123456\n            .toEqual \"1a234a567b89\"\n\n        it \"adds prefixes and suffixes\", ->\n            nf = numberFormat(prefix: \"a\", suffix: \"b\")\n            expect nf 1234567.89123456\n            .toEqual \"a1,234,567.89b\"\n\n        it \"scales and rounds\", ->\n            nf = numberFormat(digitsAfterDecimal: 3, scaler: 1000)\n            expect nf 1234567.89123456\n            .toEqual \"1,234,567,891.235\"\n\n    describe \".derivers\", ->\n        describe \".dateFormat()\", ->\n            df = $.pivotUtilities.derivers.dateFormat \"x\", \"abc % %% %%% %a %y %m %n %d %w %x %H %M %S\", true\n\n            it \"formats date objects\", ->\n                expect df {x: new Date(\"2015-01-02T23:43:11Z\")}\n                .toBe 'abc % %% %%% %a 2015 01 Jan 02 Fri 5 23 43 11'\n\n            it \"formats input parsed by Date.parse()\", ->\n                expect df {x: \"2015-01-02T23:43:11Z\"}\n                .toBe 'abc % %% %%% %a 2015 01 Jan 02 Fri 5 23 43 11'\n\n                expect df {x: \"bla\"}\n                .toBe ''\n\n        describe \".bin()\", ->\n            binner = $.pivotUtilities.derivers.bin \"x\", 10\n\n            it \"bins numbers\", ->\n                expect binner {x: 11}\n                .toBe 10\n\n                expect binner {x: 9}\n                .toBe 0\n\n                expect binner {x: 111}\n                .toBe 110\n\n            it \"bins booleans\", ->\n                expect binner {x: true}\n                .toBe 0\n\n            it \"bins negative numbers\", ->\n                expect binner {x: -12}\n                .toBe -10\n\n            it \"doesn't bin strings\", ->\n                expect binner {x: \"a\"}\n                .toBeNaN()\n\n            it \"doesn't bin objects\", ->\n                expect binner {x: {a:1}}\n                .toBeNaN()\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dcbe5983531e0661f2e8de804b91ba676f3f0ce4
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot_spec.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.min.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..17b293141a86da182c5f9589f33e929e9b49c434
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.min.js.js
@@ -0,0 +1,2 @@
+(function(){var t,e;t=[["name","gender","colour","birthday","trials","successes"],["Nick","male","blue","1982-11-07",103,12],["Jane","female","red","1982-11-08",95,25],["John","male","blue","1982-12-08",112,30],["Carol","female","yellow","1983-12-08",102,14]],e=[{name:"Nick",colour:"red",age:34},{name:"Jane",gender:"female"},{name:"John",gender:"male",age:12},{name:"Jim",gender:null,age:12}],describe("$.pivotUI()",function(){return describe("with no rows/cols, default count aggregator, default TableRenderer",function(){var e;return e=null,beforeEach(function(r){return e=$("<div>").pivotUI(t,{onRefresh:r})}),it("has all the basic UI elements",function(t){return expect(e.find("td.pvtAxisContainer").length).toBe(3),expect(e.find("td.pvtRendererArea").length).toBe(1),expect(e.find("td.pvtVals").length).toBe(1),expect(e.find("select.pvtRenderer").length).toBe(1),expect(e.find("select.pvtAggregator").length).toBe(1),expect(e.find("span.pvtAttr").length).toBe(6),t()}),it("reflects its inputs",function(t){return expect(e.find("td.pvtUnused span.pvtAttr").length).toBe(6),expect(e.find("select.pvtRenderer").val()).toBe("Table"),expect(e.find("select.pvtAggregator").val()).toBe("Count"),t()}),it("renders a table",function(t){return expect(e.find("table.pvtTable").length).toBe(1),t()}),describe("its renderer output",function(){return it("has the correct type and number of cells",function(t){return expect(e.find("th.pvtTotalLabel").length).toBe(1),expect(e.find("td.pvtGrandTotal").length).toBe(1),t()}),it("has the correct textual representation",function(t){return expect(e.find("table.pvtTable").text()).toBe(["Totals","4"].join("")),t()}),it("has a correct grand total with data value",function(t){return expect(e.find("td.pvtGrandTotal").text()).toBe("4"),expect(e.find("td.pvtGrandTotal").data("value")).toBe(4),t()})})}),describe("with rows/cols, sum-over-sum aggregator, Heatmap renderer",function(){var e;return e=null,beforeEach(function(r){return e=$("<div>").pivotUI(t,{rows:["gender"],cols:["colour"],aggregatorName:"Sum over Sum",vals:["successes","trials"],rendererName:"Heatmap",onRefresh:r})}),it("has all the basic UI elements",function(t){return expect(e.find("td.pvtAxisContainer").length).toBe(3),expect(e.find("td.pvtRendererArea").length).toBe(1),expect(e.find("td.pvtVals").length).toBe(1),expect(e.find("select.pvtRenderer").length).toBe(1),expect(e.find("select.pvtAggregator").length).toBe(1),expect(e.find("span.pvtAttr").length).toBe(6),t()}),it("reflects its inputs",function(t){return expect(e.find("td.pvtUnused span.pvtAttr").length).toBe(4),expect(e.find("td.pvtRows span.pvtAttr").length).toBe(1),expect(e.find("td.pvtCols span.pvtAttr").length).toBe(1),expect(e.find("select.pvtRenderer").val()).toBe("Heatmap"),expect(e.find("select.pvtAggregator").val()).toBe("Sum over Sum"),t()}),it("renders a table",function(t){return expect(e.find("table.pvtTable").length).toBe(1),t()}),describe("its renderer output",function(){return it("has the correct type and number of cells",function(t){return expect(e.find("th.pvtAxisLabel").length).toBe(2),expect(e.find("th.pvtRowLabel").length).toBe(2),expect(e.find("th.pvtColLabel").length).toBe(3),expect(e.find("th.pvtTotalLabel").length).toBe(2),expect(e.find("td.pvtVal").length).toBe(6),expect(e.find("td.pvtTotal").length).toBe(5),expect(e.find("td.pvtGrandTotal").length).toBe(1),t()}),it("has the correct textual representation",function(t){return expect(e.find("table.pvtTable").text()).toBe(["colour","blue","red","yellow","Totals","gender","female","0.26","0.14","0.20","male","0.20","0.20","Totals","0.20","0.26","0.14","0.20"].join("")),t()}),it("has a correct spot-checked cell with data value",function(t){return expect(e.find("td.col0.row1").text()).toBe("0.20"),expect(e.find("td.col0.row1").data("value")).toBe(42/215),t()})})}),describe("with ragged input",function(){var t;return t=$("<div>").pivotUI(e,{rows:["gender"],cols:["age"]}),it("renders a table with the correct textual representation",function(){return expect(t.find("table.pvtTable").text()).toBe(["age","12","34","null","Totals","gender","female","1","1","male","1","1","null","1","1","2","Totals","2","1","1","4"].join(""))})})}),describe("$.pivot()",function(){return describe("with no rows/cols, default count aggregator, default TableRenderer",function(){var e;return e=$("<div>").pivot(t),it("renders a table",function(){return expect(e.find("table.pvtTable").length).toBe(1)}),describe("its renderer output",function(){return it("has the correct textual representation",function(){return expect(e.find("table.pvtTable").text()).toBe(["Totals","4"].join(""))}),it("has a correct grand total with data value",function(){return expect(e.find("td.pvtGrandTotal").text()).toBe("4"),expect(e.find("td.pvtGrandTotal").data("value")).toBe(4)})})}),describe("with rows/cols, sum aggregator, derivedAttributes, filter and sorters",function(){var e,r,n,a,o;return n=$.pivotUtilities,a=n.sortAs,r=n.derivers,e=n.aggregators,o=$("<div>").pivot(t,{rows:["gender"],cols:["birthyear"],aggregator:e.Sum(["trialbins"]),filter:function(t){return"Nick"!==t.name},derivedAttributes:{birthyear:r.dateFormat("birthday","%y"),trialbins:r.bin("trials",10)},sorters:function(t){if("gender"===t)return a(["male","female"])}}),it("renders a table with the correct textual representation",function(){return expect(o.find("table.pvtTable").text()).toBe(["birthyear","1982","1983","Totals","gender","male","110.00","110.00","female","90.00","100.00","190.00","Totals","200.00","100.00","300.00"].join(""))})}),describe("with rows/cols, fraction-of aggregator",function(){var e,r;return e=$.pivotUtilities.aggregators,r=$("<div>").pivot(t,{rows:["gender"],aggregator:e["Sum as Fraction of Total"](["trials"])}),it("renders a table with the correct textual representation",function(){return expect(r.find("table.pvtTable").text()).toBe(["gender","Totals","female","47.8%","male","52.2%","Totals","100.0%"].join(""))})}),describe("with rows/cols, custom aggregator, custom renderer with options",function(){var e,r,n;return e=null,r=null,n=$("<div>").pivot(t,{rows:["name","colour"],cols:["trials","successes"],aggregator:function(){return{count2x:0,push:function(){return this.count2x+=2},value:function(){return this.count2x},format:function(t){return"formatted "+t}}},renderer:function(t,n){return e=t,r=n,$("<div>").addClass(n.greeting).text("world")},rendererOptions:{greeting:"hithere"}}),it("renders the custom renderer as per options",function(){return expect(n.find("div.hithere").length).toBe(1)}),describe("its received PivotData object",function(){return it("has a correct grand total value and format for custom aggregator",function(){var t,r;return t=e.getAggregator([],[]),r=t.value(),expect(r).toBe(8),expect(t.format(r)).toBe("formatted 8")})})}),describe("with ragged input",function(){var t;return t=$("<div>").pivot(e,{rows:["gender"],cols:["age"]}),it("renders a table with the correct textual representation",function(){return expect(t.find("table.pvtTable").text()).toBe(["age","12","34","null","Totals","gender","female","1","1","male","1","1","null","1","1","2","Totals","2","1","1","4"].join(""))})})}),describe("$.pivotUtilities",function(){return describe(".PivotData()",function(){var e;return e={aggregator:$.pivotUtilities.aggregators["Sum over Sum"](["a","b"])},describe("with no options",function(){var t,e;return t=[["a","b"],[1,2],[3,4]],e=new $.pivotUtilities.PivotData(t),it("has the correct grand total value",function(){return expect(e.getAggregator([],[]).value()).toBe(2)})}),describe("with array-of-array input",function(){var t,r;return t=[["a","b"],[1,2],[3,4]],r=new $.pivotUtilities.PivotData(t,e),it("has the correct grand total value",function(){return expect(r.getAggregator([],[]).value()).toBe(4/6)})}),describe("with array-of-object input",function(){var t,r;return t=[{a:1,b:2},{a:3,b:4}],r=new $.pivotUtilities.PivotData(t,e),it("has the correct grand total value",function(){return expect(r.getAggregator([],[]).value()).toBe(4/6)})}),describe("with ragged array-of-object input",function(){var t,r;return r=[{a:1},{b:4},{a:3,b:2}],t=new $.pivotUtilities.PivotData(r,e),it("has the correct grand total value",function(){return expect(t.getAggregator([],[]).value()).toBe(4/6)})}),describe("with function input",function(){var t,r;return t=function(t){return t({a:1,b:2}),t({a:3,b:4})},r=new $.pivotUtilities.PivotData(t,e),it("has the correct grand total value",function(){return expect(r.getAggregator([],[]).value()).toBe(4/6)})}),describe("with jQuery table element input",function(){var t,r;return r=$("<table>\n    <thead>\n        <tr> <th>a</th><th>b</th> </tr>\n    </thead>\n    <tbody>\n        <tr> <td>1</td> <td>2</td> </tr>\n        <tr> <td>3</td> <td>4</td> </tr>\n    </tbody>\n</table>"),t=new $.pivotUtilities.PivotData(r,e),it("has the correct grand total value",function(){return expect(t.getAggregator([],[]).value()).toBe(4/6)})}),describe("with rows/cols",function(){var e;return e=new $.pivotUtilities.PivotData(t,{rows:["name","colour"],cols:["trials","successes"]}),it("has correctly-ordered row keys",function(){return expect(e.getRowKeys()).toEqual([["Carol","yellow"],["Jane","red"],["John","blue"],["Nick","blue"]])}),it("has correctly-ordered col keys",function(){return expect(e.getColKeys()).toEqual([[95,25],[102,14],[103,12],[112,30]])}),it("can be iterated over",function(){var t,r,n,a,o,i,c,u,s,l;for(i=0,c=0,s=e.getRowKeys(),r=0,a=s.length;r<a;r++)for(u=s[r],l=e.getColKeys(),n=0,o=l.length;n<o;n++)t=l[n],null!=e.getAggregator(u,t).value()?i++:c++;return expect(i).toBe(4),expect(c).toBe(12)}),it("returns matching records",function(){var t;return t=[],e.forEachMatchingRecord({gender:"male"},function(e){return t.push(e.name)}),expect(t).toEqual(["Nick","John"])}),it("has a correct spot-checked aggregator",function(){var t,r;return t=e.getAggregator(["Carol","yellow"],[102,14]),r=t.value(),expect(r).toBe(1),expect(t.format(r)).toBe("1")}),it("has a correct grand total aggregator",function(){var t,r;return t=e.getAggregator([],[]),r=t.value(),expect(r).toBe(4),expect(t.format(r)).toBe("4")})})}),describe(".aggregatorTemplates",function(){var e,r;return e=function(e){var r;return r=new $.pivotUtilities.PivotData(t,{aggregator:e}),r.getAggregator([],[]).value()},r=$.pivotUtilities.aggregatorTemplates,describe(".count",function(){return it("works",function(){return expect(e(r.count()())).toBe(4)})}),describe(".countUnique",function(){return it("works",function(){return expect(e(r.countUnique()(["gender"]))).toBe(2)})}),describe(".listUnique",function(){return it("works",function(){return expect(e(r.listUnique()(["gender"]))).toBe("male,female")})}),describe(".average",function(){return it("works",function(){return expect(e(r.average()(["trials"]))).toBe(103)})}),describe(".sum",function(){return it("works",function(){return expect(e(r.sum()(["trials"]))).toBe(412)})}),describe(".min",function(){return it("works",function(){return expect(e(r.min()(["trials"]))).toBe(95)})}),describe(".max",function(){return it("works",function(){return expect(e(r.max()(["trials"]))).toBe(112)})}),describe(".first",function(){return it("works",function(){return expect(e(r.first()(["name"]))).toBe("Carol")})}),describe(".last",function(){return it("works",function(){return expect(e(r.last()(["name"]))).toBe("Nick")})}),describe(".average",function(){return it("works",function(){return expect(e(r.average()(["trials"]))).toBe(103)})}),describe(".median",function(){return it("works",function(){return expect(e(r.median()(["trials"]))).toBe(102.5)})}),describe(".quantile",function(){return it("works",function(){return expect(e(r.quantile(0)(["trials"]))).toBe(95),expect(e(r.quantile(.1)(["trials"]))).toBe(98.5),expect(e(r.quantile(.25)(["trials"]))).toBe(98.5),expect(e(r.quantile(1/3)(["trials"]))).toBe(102),expect(e(r.quantile(1)(["trials"]))).toBe(112)})}),describe(".var",function(){return it("works",function(){return expect(e(r["var"]()(["trials"]))).toBe(48.666666666666686)})}),describe(".stdev",function(){return it("works",function(){return expect(e(r.stdev()(["trials"]))).toBe(6.976149845485451)})}),describe(".sumOverSum",function(){return it("works",function(){return expect(e(r.sumOverSum()(["successes","trials"]))).toBe(81/412)})})}),describe(".naturalSort()",function(){var t,e;return t=$.pivotUtilities.naturalSort,e=[null,NaN,-Infinity,"-Infinity",-3,"-3",-2,"-2",-1,"-1",0,"2e-1",1,"01","1",2,"002","002e0","02","2","2e-0",3,10,"10","11","12","1e2","112",Infinity,"Infinity","1a","2a","12a","20a","A","A","NaN","a","a","a01","a012","a02","a1","a2","a12","a12","a21","a21","b","c","d","null"],it("sorts naturally (null, NaN, numbers & numbery strings, Alphanum for text strings)",function(){return expect(e.slice().sort(t)).toEqual(e)})}),describe(".sortAs()",function(){var t;return t=$.pivotUtilities.sortAs,it("sorts with unknown values sorted at the end",function(){return expect([5,2,3,4,1].sort(t([4,3,2]))).toEqual([4,3,2,1,5])}),it("sorts lowercase after uppercase",function(){return expect(["Ab","aA","aa","ab"].sort(t(["Ab","Aa"]))).toEqual(["Ab","ab","aa","aA"])})}),describe(".numberFormat()",function(){var t;return t=$.pivotUtilities.numberFormat,it("formats numbers",function(){var e;return e=t(),expect(e(1234567.89123456)).toEqual("1,234,567.89")}),it("formats booleans",function(){var e;return e=t(),expect(e(!0)).toEqual("1.00")}),it("formats numbers in strings",function(){var e;return e=t(),expect(e("1234567.89123456")).toEqual("1,234,567.89")}),it("doesn't formats strings",function(){var e;return e=t(),expect(e("hi there")).toEqual("")}),it("doesn't formats objects",function(){var e;return e=t(),expect(e({a:1})).toEqual("")}),it("formats percentages",function(){var e;return e=t({scaler:100,suffix:"%"}),expect(e(.12345)).toEqual("12.35%")}),it("adds separators",function(){var e;return e=t({thousandsSep:"a",decimalSep:"b"}),expect(e(1234567.89123456)).toEqual("1a234a567b89")}),it("adds prefixes and suffixes",function(){var e;return e=t({prefix:"a",suffix:"b"}),expect(e(1234567.89123456)).toEqual("a1,234,567.89b")}),it("scales and rounds",function(){var e;return e=t({digitsAfterDecimal:3,scaler:1e3}),expect(e(1234567.89123456)).toEqual("1,234,567,891.235")})}),describe(".derivers",function(){return describe(".dateFormat()",function(){var t;return t=$.pivotUtilities.derivers.dateFormat("x","abc % %% %%% %a %y %m %n %d %w %x %H %M %S",!0),it("formats date objects",function(){return expect(t({x:new Date("2015-01-02T23:43:11Z")})).toBe("abc % %% %%% %a 2015 01 Jan 02 Fri 5 23 43 11")}),it("formats input parsed by Date.parse()",function(){return expect(t({x:"2015-01-02T23:43:11Z"})).toBe("abc % %% %%% %a 2015 01 Jan 02 Fri 5 23 43 11"),expect(t({x:"bla"})).toBe("")})}),describe(".bin()",function(){var t;return t=$.pivotUtilities.derivers.bin("x",10),it("bins numbers",function(){return expect(t({x:11})).toBe(10),expect(t({x:9})).toBe(0),expect(t({x:111})).toBe(110)}),it("bins booleans",function(){return expect(t({x:!0})).toBe(0)}),it("bins negative numbers",function(){return expect(t({x:-12})).toBe(-10)}),it("doesn't bin strings",function(){return expect(t({x:"a"})).toBeNaN()}),it("doesn't bin objects",function(){return expect(t({x:{a:1}})).toBeNaN()})})})})}).call(this);
+//# sourceMappingURL=pivot_spec.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.min.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.min.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ff1de0937e73cebf8224ff230aa8611bd17c1365
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.min.js.map.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>text/html</string> </value>
+        </item>
+        <item>
+            <key> <string>expand</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>pivot_spec.min.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>output_encoding</string> </key>
+            <value> <string>iso-8859-15</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.min.js.map.zpt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.min.js.map.zpt
new file mode 100644
index 0000000000000000000000000000000000000000..cdb372e560a2c9b4b6221b3feaaa2454feb5a33e
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.min.js.map.zpt
@@ -0,0 +1 @@
+{"version":3,"sources":["pivot_spec.coffee","pivot_spec.min.js"],"names":["fixtureData","raggedFixtureData","name","colour","age","gender","describe","table","beforeEach","done","$","pivotUI","onRefresh","it","expect","find","length","toBe","val","text","join","data","rows","cols","aggregatorName","vals","rendererName","pivot","aggregators","derivers","ref","sortAs","pivotUtilities","aggregator","filter","record","derivedAttributes","birthyear","dateFormat","trialbins","bin","sorters","attr","received_PivotData","received_rendererOptions","count2x","push","this","value","format","x","renderer","a","b","addClass","greeting","rendererOptions","agg","getAggregator","sumOverSumOpts","aoaInput","pd","PivotData","aosInput","raggedAosInput","functionInput","tableInput","getRowKeys","toEqual","getColKeys","c","i","j","len","len1","numNotNull","numNull","r","ref1","records","forEachMatchingRecord","getVal","tpl","aggregatorTemplates","count","countUnique","listUnique","average","sum","min","max","first","last","median","quantile","stdev","sumOverSum","naturalSort","sortedArr","slice","sort","numberFormat","nf","scaler","suffix","thousandsSep","decimalSep","prefix","digitsAfterDecimal","df","Date","binner","toBeNaN","call"],"mappings":"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","file":"pivot_spec.min.js","sourcesContent":["fixtureData = [\n    [\"name\",    \"gender\",   \"colour\",    \"birthday\",     \"trials\",   \"successes\"],\n    [\"Nick\",    \"male\",     \"blue\",      \"1982-11-07\",   103,        12],\n    [\"Jane\",    \"female\",   \"red\",       \"1982-11-08\",   95,         25],\n    [\"John\",    \"male\",     \"blue\",      \"1982-12-08\",   112,        30],\n    [\"Carol\",   \"female\",   \"yellow\",    \"1983-12-08\",   102,        14]\n]\n\nraggedFixtureData = [\n    {name: \"Nick\", \"colour\": \"red\", \"age\": 34}\n    {name: \"Jane\", \"gender\": \"female\"}\n    {name: \"John\", \"gender\": \"male\", \"age\": 12}\n    {name: \"Jim\", \"gender\": null, \"age\": 12}\n]\n\ndescribe \"$.pivotUI()\", ->\n    describe \"with no rows/cols, default count aggregator, default TableRenderer\",  ->\n        table = null\n\n        beforeEach (done) ->\n            table = $(\"<div>\").pivotUI fixtureData, onRefresh: done\n        it \"has all the basic UI elements\", (done) ->\n            expect table.find(\"td.pvtAxisContainer\").length\n            .toBe  3\n            expect table.find(\"td.pvtRendererArea\").length\n            .toBe  1\n            expect table.find(\"td.pvtVals\").length\n            .toBe  1\n            expect table.find(\"select.pvtRenderer\").length\n            .toBe  1\n            expect table.find(\"select.pvtAggregator\").length\n            .toBe  1\n            expect table.find(\"span.pvtAttr\").length\n            .toBe  6\n            done()\n\n        it \"reflects its inputs\", (done) ->\n            expect table.find(\"td.pvtUnused span.pvtAttr\").length\n            .toBe  6\n            expect table.find(\"select.pvtRenderer\").val()\n            .toBe  \"Table\"\n            expect table.find(\"select.pvtAggregator\").val()\n            .toBe  \"Count\"\n            done()\n\n        it \"renders a table\", (done) ->\n            expect table.find(\"table.pvtTable\").length\n            .toBe  1\n            done()\n\n\n        describe \"its renderer output\", ->\n            it \"has the correct type and number of cells\", (done) ->\n                expect table.find(\"th.pvtTotalLabel\").length\n                .toBe  1\n                expect table.find(\"td.pvtGrandTotal\").length\n                .toBe  1\n                done()\n\n            it \"has the correct textual representation\", (done) ->\n                expect table.find(\"table.pvtTable\").text()\n                .toBe [\"Totals\", \"4\"].join(\"\")\n                done()\n\n            it \"has a correct grand total with data value\", (done) ->\n                expect table.find(\"td.pvtGrandTotal\").text()\n                .toBe  \"4\"\n                expect table.find(\"td.pvtGrandTotal\").data(\"value\")\n                .toBe  4\n                done()\n\n    describe \"with rows/cols, sum-over-sum aggregator, Heatmap renderer\",  ->\n        table = null\n\n        beforeEach (done) ->\n            table = $(\"<div>\").pivotUI fixtureData,\n                rows: [\"gender\"], cols: [\"colour\"]\n                aggregatorName: \"Sum over Sum\"\n                vals: [\"successes\", \"trials\"]\n                rendererName: \"Heatmap\"\n                onRefresh: done\n\n        it \"has all the basic UI elements\", (done) ->\n            expect table.find(\"td.pvtAxisContainer\").length\n            .toBe  3\n            expect table.find(\"td.pvtRendererArea\").length\n            .toBe  1\n            expect table.find(\"td.pvtVals\").length\n            .toBe  1\n            expect table.find(\"select.pvtRenderer\").length\n            .toBe  1\n            expect table.find(\"select.pvtAggregator\").length\n            .toBe  1\n            expect table.find(\"span.pvtAttr\").length\n            .toBe  6\n            done()\n\n        it \"reflects its inputs\", (done) ->\n            expect table.find(\"td.pvtUnused span.pvtAttr\").length\n            .toBe  4\n            expect table.find(\"td.pvtRows span.pvtAttr\").length\n            .toBe  1\n            expect table.find(\"td.pvtCols span.pvtAttr\").length\n            .toBe  1\n            expect table.find(\"select.pvtRenderer\").val()\n            .toBe  \"Heatmap\"\n            expect table.find(\"select.pvtAggregator\").val()\n            .toBe  \"Sum over Sum\"\n            done()\n\n        it \"renders a table\", (done) ->\n            expect table.find(\"table.pvtTable\").length\n            .toBe  1\n            done()\n\n        describe \"its renderer output\", ->\n            it \"has the correct type and number of cells\", (done) ->\n                expect table.find(\"th.pvtAxisLabel\").length\n                .toBe  2\n                expect table.find(\"th.pvtRowLabel\").length\n                .toBe  2\n                expect table.find(\"th.pvtColLabel\").length\n                .toBe  3\n                expect table.find(\"th.pvtTotalLabel\").length\n                .toBe  2\n                expect table.find(\"td.pvtVal\").length\n                .toBe  6\n                expect table.find(\"td.pvtTotal\").length\n                .toBe  5\n                expect table.find(\"td.pvtGrandTotal\").length\n                .toBe  1\n                done()\n\n            it \"has the correct textual representation\", (done) ->\n                expect table.find(\"table.pvtTable\").text()\n                .toBe [\n                    \"colour\",   \"blue\", \"red\",  \"yellow\",   \"Totals\",\n                    \"gender\",\n                    \"female\",           \"0.26\", \"0.14\",     \"0.20\",\n                    \"male\",     \"0.20\",                     \"0.20\",\n                    \"Totals\",   \"0.20\", \"0.26\", \"0.14\",     \"0.20\"\n                    ].join(\"\")\n                done()\n\n            it \"has a correct spot-checked cell with data value\", (done) ->\n                expect table.find(\"td.col0.row1\").text()\n                .toBe  \"0.20\"\n                expect table.find(\"td.col0.row1\").data(\"value\")\n                .toBe  (12+30)/(103+112)\n                done()\n\n    describe \"with ragged input\",  ->\n        table = $(\"<div>\").pivotUI raggedFixtureData, rows: [\"gender\"], cols: [\"age\"]\n\n        it \"renders a table with the correct textual representation\", ->\n            expect table.find(\"table.pvtTable\").text()\n            .toBe [\n                \"age\",     \"12\",  \"34\",  \"null\",  \"Totals\"\n                \"gender\",\n                \"female\",                 \"1\",    \"1\"\n                \"male\",    \"1\",                   \"1\"\n                \"null\",    \"1\",    \"1\",           \"2\"\n                \"Totals\",  \"2\",    \"1\",   \"1\",    \"4\"\n                ].join(\"\")\n\ndescribe \"$.pivot()\", ->\n\n    describe \"with no rows/cols, default count aggregator, default TableRenderer\",  ->\n        table = $(\"<div>\").pivot fixtureData\n\n        it \"renders a table\", ->\n            expect table.find(\"table.pvtTable\").length\n            .toBe  1\n\n        describe \"its renderer output\", ->\n\n            it \"has the correct textual representation\", ->\n                expect table.find(\"table.pvtTable\").text()\n                .toBe [\"Totals\", \"4\"].join(\"\")\n\n            it \"has a correct grand total with data value\", ->\n                expect table.find(\"td.pvtGrandTotal\").text()\n                .toBe  \"4\"\n                expect table.find(\"td.pvtGrandTotal\").data(\"value\")\n                .toBe  4\n\n    describe \"with rows/cols, sum aggregator, derivedAttributes, filter and sorters\",  ->\n        {sortAs, derivers, aggregators} = $.pivotUtilities\n        table = $(\"<div>\").pivot fixtureData,\n            rows: [\"gender\"], cols: [\"birthyear\"], aggregator: aggregators[\"Sum\"]([\"trialbins\"])\n            filter: (record) -> record.name != \"Nick\"\n            derivedAttributes:\n                birthyear: derivers.dateFormat \"birthday\", \"%y\"\n                trialbins: derivers.bin \"trials\", 10\n            sorters: (attr) ->\n                if attr == \"gender\" then return sortAs([\"male\", \"female\"])\n\n        it \"renders a table with the correct textual representation\", ->\n            expect table.find(\"table.pvtTable\").text()\n            .toBe [\n                \"birthyear\",    \"1982\",     \"1983\",     \"Totals\"\n                \"gender\",\n                \"male\",         \"110.00\",               \"110.00\"\n                \"female\",       \"90.00\",    \"100.00\",   \"190.00\"\n                \"Totals\",       \"200.00\",   \"100.00\",   \"300.00\"\n                ].join(\"\")\n\n    describe \"with rows/cols, fraction-of aggregator\",  ->\n        {aggregators} = $.pivotUtilities\n        table = $(\"<div>\").pivot fixtureData,\n            rows: [\"gender\"]\n            aggregator: aggregators[\"Sum as Fraction of Total\"]([\"trials\"])\n\n        it \"renders a table with the correct textual representation\", ->\n            expect table.find(\"table.pvtTable\").text()\n            .toBe [\n                \"gender\",  \"Totals\"\n                \"female\",  \"47.8%\"\n                \"male\",    \"52.2%\"\n                \"Totals\",  \"100.0%\"\n                ].join(\"\")\n\n    describe \"with rows/cols, custom aggregator, custom renderer with options\",  ->\n        received_PivotData = null\n        received_rendererOptions = null\n\n        table = $(\"<div>\").pivot fixtureData,\n            rows: [\"name\", \"colour\"], cols: [\"trials\", \"successes\"]\n            aggregator: ->\n                count2x: 0\n                push: -> @count2x +=2\n                value: -> @count2x\n                format: (x) -> \"formatted \" + x\n            renderer: (a,b) ->\n                received_PivotData = a\n                received_rendererOptions = b\n                return $(\"<div>\").addClass(b.greeting).text(\"world\")\n            rendererOptions: {greeting:\"hithere\"}\n\n        it \"renders the custom renderer as per options\", ->\n            expect table.find(\"div.hithere\").length\n            .toBe  1\n\n        describe \"its received PivotData object\", ->\n            it \"has a correct grand total value and format for custom aggregator\", ->\n                agg = received_PivotData.getAggregator([],[])\n                val = agg.value()\n                expect(val).toBe 8\n                expect(agg.format(val)).toBe \"formatted 8\"\n\n\n    describe \"with ragged input\",  ->\n        table = $(\"<div>\").pivot raggedFixtureData, rows: [\"gender\"], cols: [\"age\"]\n\n        it \"renders a table with the correct textual representation\", ->\n            expect table.find(\"table.pvtTable\").text()\n            .toBe [\n                \"age\",     \"12\",  \"34\",  \"null\",  \"Totals\"\n                \"gender\",\n                \"female\",                 \"1\",    \"1\"\n                \"male\",    \"1\",                   \"1\"\n                \"null\",    \"1\",    \"1\",           \"2\"\n                \"Totals\",  \"2\",    \"1\",   \"1\",    \"4\"\n                ].join(\"\")\n\ndescribe \"$.pivotUtilities\", ->\n\n    describe \".PivotData()\", ->\n        sumOverSumOpts =\n            aggregator: $.pivotUtilities.aggregators[\"Sum over Sum\"]([\"a\",\"b\"])\n\n        describe \"with no options\", ->\n            aoaInput =  [ [\"a\",\"b\"], [1,2], [3,4] ]\n            pd = new $.pivotUtilities.PivotData aoaInput\n\n            it \"has the correct grand total value\", ->\n                expect pd.getAggregator([],[]).value()\n                .toBe 2\n\n        describe \"with array-of-array input\", ->\n            aoaInput =  [ [\"a\",\"b\"], [1,2], [3,4] ]\n            pd = new $.pivotUtilities.PivotData aoaInput, sumOverSumOpts\n\n            it \"has the correct grand total value\", ->\n                expect pd.getAggregator([],[]).value()\n                .toBe (1+3)/(2+4)\n\n        describe \"with array-of-object input\", ->\n            aosInput =  [ {a:1, b:2}, {a:3, b:4} ]\n            pd = new $.pivotUtilities.PivotData aosInput, sumOverSumOpts\n\n            it \"has the correct grand total value\", ->\n                expect pd.getAggregator([],[]).value()\n                .toBe (1+3)/(2+4)\n\n        describe \"with ragged array-of-object input\", ->\n            raggedAosInput =  [ {a:1}, {b:4}, {a: 3, b: 2} ]\n            pd = new $.pivotUtilities.PivotData raggedAosInput, sumOverSumOpts\n\n            it \"has the correct grand total value\", ->\n                expect pd.getAggregator([],[]).value()\n                .toBe (1+3)/(2+4)\n\n        describe \"with function input\", ->\n            functionInput = (record) ->\n                record a:1, b:2\n                record a:3, b:4\n            pd = new $.pivotUtilities.PivotData functionInput, sumOverSumOpts\n\n            it \"has the correct grand total value\", ->\n                expect pd.getAggregator([],[]).value()\n                .toBe (1+3)/(2+4)\n\n        describe \"with jQuery table element input\", ->\n            tableInput = $ \"\"\"\n                <table>\n                    <thead>\n                        <tr> <th>a</th><th>b</th> </tr>\n                    </thead>\n                    <tbody>\n                        <tr> <td>1</td> <td>2</td> </tr>\n                        <tr> <td>3</td> <td>4</td> </tr>\n                    </tbody>\n                </table>\n                \"\"\"\n            pd = new $.pivotUtilities.PivotData tableInput, sumOverSumOpts\n\n            it \"has the correct grand total value\", ->\n                expect pd.getAggregator([],[]).value()\n                .toBe (1+3)/(2+4)\n\n\n        describe \"with rows/cols\", ->\n            pd = new $.pivotUtilities.PivotData fixtureData,\n                rows: [\"name\", \"colour\"],\n                cols: [\"trials\", \"successes\"]\n\n            it \"has correctly-ordered row keys\", ->\n                expect pd.getRowKeys()\n                .toEqual [ [ 'Carol', 'yellow' ], [ 'Jane', 'red' ], [ 'John', 'blue' ], [ 'Nick', 'blue' ] ]\n\n            it \"has correctly-ordered col keys\", ->\n                expect pd.getColKeys()\n                .toEqual [ [ 95, 25 ], [ 102, 14 ], [ 103, 12 ], [ 112, 30 ] ]\n\n            it \"can be iterated over\", ->\n                numNotNull = 0\n                numNull = 0\n                for r in pd.getRowKeys()\n                    for c in pd.getColKeys()\n                        if pd.getAggregator(r, c).value()?\n                            numNotNull++\n                        else\n                            numNull++\n                expect numNotNull\n                .toBe 4\n                expect numNull\n                .toBe 12\n\n            it \"returns matching records\", ->\n                records = []\n                pd.forEachMatchingRecord gender: \"male\", (x) -> records.push(x.name)\n                expect records\n                .toEqual [\"Nick\", \"John\"]\n\n            it \"has a correct spot-checked aggregator\", ->\n                agg = pd.getAggregator([ 'Carol', 'yellow' ],[ 102, 14 ])\n                val = agg.value()\n                expect(val).toBe 1\n                expect(agg.format(val)).toBe \"1\"\n\n            it \"has a correct grand total aggregator\", ->\n                agg = pd.getAggregator([],[])\n                val = agg.value()\n                expect(val).toBe 4\n                expect(agg.format(val)).toBe \"4\"\n\n    describe \".aggregatorTemplates\", ->\n\n        getVal = (aggregator) ->\n            pd = new $.pivotUtilities.PivotData(fixtureData, {aggregator})\n            return pd.getAggregator([],[]).value()\n        tpl = $.pivotUtilities.aggregatorTemplates\n\n        describe \".count\", ->\n            it \"works\", ->\n                expect getVal(tpl.count()())\n                .toBe 4\n\n        describe \".countUnique\", ->\n            it \"works\", ->\n                expect getVal(tpl.countUnique()(['gender']))\n                .toBe 2\n\n        describe \".listUnique\", ->\n            it \"works\", ->\n                expect getVal(tpl.listUnique()(['gender']))\n                .toBe 'male,female'\n\n        describe \".average\", ->\n            it \"works\", ->\n                expect getVal(tpl.average()(['trials']))\n                .toBe 103\n\n        describe \".sum\", ->\n            it \"works\", ->\n                expect getVal(tpl.sum()(['trials']))\n                .toBe 412\n\n        describe \".min\", ->\n            it \"works\", ->\n                expect getVal(tpl.min()(['trials']))\n                .toBe 95\n\n        describe \".max\", ->\n            it \"works\", ->\n                expect getVal(tpl.max()(['trials']))\n                .toBe 112\n\n        describe \".first\", ->\n            it \"works\", ->\n                expect getVal(tpl.first()(['name']))\n                .toBe 'Carol'\n\n        describe \".last\", ->\n            it \"works\", ->\n                expect getVal(tpl.last()(['name']))\n                .toBe 'Nick'\n\n        describe \".average\", ->\n            it \"works\", ->\n                expect getVal(tpl.average()(['trials']))\n                .toBe 103\n\n        describe \".median\", ->\n            it \"works\", ->\n                expect getVal(tpl.median()(['trials']))\n                .toBe 102.5\n\n        describe \".quantile\", ->\n            it \"works\", ->\n                expect getVal(tpl.quantile(0)(['trials']))\n                .toBe 95\n                expect getVal(tpl.quantile(0.1)(['trials']))\n                .toBe 98.5\n                expect getVal(tpl.quantile(0.25)(['trials']))\n                .toBe 98.5\n                expect getVal(tpl.quantile(1/3)(['trials']))\n                .toBe 102\n                expect getVal(tpl.quantile(1)(['trials']))\n                .toBe 112\n\n        describe \".var\", ->\n            it \"works\", ->\n                expect getVal(tpl.var()(['trials']))\n                .toBe 48.666666666666686\n\n        describe \".stdev\", ->\n            it \"works\", ->\n                expect getVal(tpl.stdev()(['trials']))\n                .toBe 6.976149845485451\n\n        describe \".sumOverSum\", ->\n            it \"works\", ->\n                expect getVal(tpl.sumOverSum()(['successes', 'trials']))\n                .toBe (12+25+30+14)/(95+102+103+112)\n\n    describe \".naturalSort()\", ->\n        naturalSort = $.pivotUtilities.naturalSort\n\n        sortedArr = [\n            null, NaN,\n            -Infinity, '-Infinity', -3, '-3', -2, '-2', -1, '-1',\n            0, '2e-1', 1, '01', '1', 2, '002', '002e0', '02', '2', '2e-0',\n            3, 10, '10', '11', '12', '1e2', '112', Infinity, 'Infinity',\n            '1a', '2a','12a','20a',\n            'A', 'A', 'NaN', 'a', 'a',\n            'a01', 'a012', 'a02', 'a1', 'a2', 'a12', 'a12', 'a21', 'a21',\n            'b', 'c', 'd', 'null'\n        ]\n\n        it \"sorts naturally (null, NaN, numbers & numbery strings, Alphanum for text strings)\", ->\n            expect sortedArr.slice().sort(naturalSort)\n            .toEqual sortedArr\n\n    describe \".sortAs()\", ->\n        sortAs = $.pivotUtilities.sortAs\n\n        it \"sorts with unknown values sorted at the end\", ->\n            expect [5,2,3,4,1].sort sortAs([4,3,2])\n            .toEqual [4,3,2,1,5]\n\n        it \"sorts lowercase after uppercase\", ->\n            expect [\"Ab\",\"aA\",\"aa\",\"ab\"].sort sortAs([\"Ab\",\"Aa\"])\n            .toEqual [\"Ab\",\"ab\",\"aa\",\"aA\"]\n\n    describe \".numberFormat()\", ->\n        numberFormat = $.pivotUtilities.numberFormat\n\n        it \"formats numbers\", ->\n            nf = numberFormat()\n            expect nf 1234567.89123456\n            .toEqual \"1,234,567.89\"\n\n        it \"formats booleans\", ->\n            nf = numberFormat()\n            expect nf true\n            .toEqual \"1.00\"\n\n        it \"formats numbers in strings\", ->\n            nf = numberFormat()\n            expect nf \"1234567.89123456\"\n            .toEqual \"1,234,567.89\"\n\n        it \"doesn't formats strings\", ->\n            nf = numberFormat()\n            expect nf \"hi there\"\n            .toEqual \"\"\n\n        it \"doesn't formats objects\", ->\n            nf = numberFormat()\n            expect nf {a:1}\n            .toEqual \"\"\n\n        it \"formats percentages\", ->\n            nf = numberFormat(scaler: 100, suffix: \"%\")\n            expect nf 0.12345\n            .toEqual \"12.35%\"\n\n        it \"adds separators\", ->\n            nf = numberFormat(thousandsSep: \"a\", decimalSep: \"b\")\n            expect nf 1234567.89123456\n            .toEqual \"1a234a567b89\"\n\n        it \"adds prefixes and suffixes\", ->\n            nf = numberFormat(prefix: \"a\", suffix: \"b\")\n            expect nf 1234567.89123456\n            .toEqual \"a1,234,567.89b\"\n\n        it \"scales and rounds\", ->\n            nf = numberFormat(digitsAfterDecimal: 3, scaler: 1000)\n            expect nf 1234567.89123456\n            .toEqual \"1,234,567,891.235\"\n\n    describe \".derivers\", ->\n        describe \".dateFormat()\", ->\n            df = $.pivotUtilities.derivers.dateFormat \"x\", \"abc % %% %%% %a %y %m %n %d %w %x %H %M %S\", true\n\n            it \"formats date objects\", ->\n                expect df {x: new Date(\"2015-01-02T23:43:11Z\")}\n                .toBe 'abc % %% %%% %a 2015 01 Jan 02 Fri 5 23 43 11'\n\n            it \"formats input parsed by Date.parse()\", ->\n                expect df {x: \"2015-01-02T23:43:11Z\"}\n                .toBe 'abc % %% %%% %a 2015 01 Jan 02 Fri 5 23 43 11'\n\n                expect df {x: \"bla\"}\n                .toBe ''\n\n        describe \".bin()\", ->\n            binner = $.pivotUtilities.derivers.bin \"x\", 10\n\n            it \"bins numbers\", ->\n                expect binner {x: 11}\n                .toBe 10\n\n                expect binner {x: 9}\n                .toBe 0\n\n                expect binner {x: 111}\n                .toBe 110\n\n            it \"bins booleans\", ->\n                expect binner {x: true}\n                .toBe 0\n\n            it \"bins negative numbers\", ->\n                expect binner {x: -12}\n                .toBe -10\n\n            it \"doesn't bin strings\", ->\n                expect binner {x: \"a\"}\n                .toBeNaN()\n\n            it \"doesn't bin objects\", ->\n                expect binner {x: {a:1}}\n                .toBeNaN()\n","(function() {\n  var fixtureData, raggedFixtureData;\n\n  fixtureData = [[\"name\", \"gender\", \"colour\", \"birthday\", \"trials\", \"successes\"], [\"Nick\", \"male\", \"blue\", \"1982-11-07\", 103, 12], [\"Jane\", \"female\", \"red\", \"1982-11-08\", 95, 25], [\"John\", \"male\", \"blue\", \"1982-12-08\", 112, 30], [\"Carol\", \"female\", \"yellow\", \"1983-12-08\", 102, 14]];\n\n  raggedFixtureData = [\n    {\n      name: \"Nick\",\n      \"colour\": \"red\",\n      \"age\": 34\n    }, {\n      name: \"Jane\",\n      \"gender\": \"female\"\n    }, {\n      name: \"John\",\n      \"gender\": \"male\",\n      \"age\": 12\n    }, {\n      name: \"Jim\",\n      \"gender\": null,\n      \"age\": 12\n    }\n  ];\n\n  describe(\"$.pivotUI()\", function() {\n    describe(\"with no rows/cols, default count aggregator, default TableRenderer\", function() {\n      var table;\n      table = null;\n      beforeEach(function(done) {\n        return table = $(\"<div>\").pivotUI(fixtureData, {\n          onRefresh: done\n        });\n      });\n      it(\"has all the basic UI elements\", function(done) {\n        expect(table.find(\"td.pvtAxisContainer\").length).toBe(3);\n        expect(table.find(\"td.pvtRendererArea\").length).toBe(1);\n        expect(table.find(\"td.pvtVals\").length).toBe(1);\n        expect(table.find(\"select.pvtRenderer\").length).toBe(1);\n        expect(table.find(\"select.pvtAggregator\").length).toBe(1);\n        expect(table.find(\"span.pvtAttr\").length).toBe(6);\n        return done();\n      });\n      it(\"reflects its inputs\", function(done) {\n        expect(table.find(\"td.pvtUnused span.pvtAttr\").length).toBe(6);\n        expect(table.find(\"select.pvtRenderer\").val()).toBe(\"Table\");\n        expect(table.find(\"select.pvtAggregator\").val()).toBe(\"Count\");\n        return done();\n      });\n      it(\"renders a table\", function(done) {\n        expect(table.find(\"table.pvtTable\").length).toBe(1);\n        return done();\n      });\n      return describe(\"its renderer output\", function() {\n        it(\"has the correct type and number of cells\", function(done) {\n          expect(table.find(\"th.pvtTotalLabel\").length).toBe(1);\n          expect(table.find(\"td.pvtGrandTotal\").length).toBe(1);\n          return done();\n        });\n        it(\"has the correct textual representation\", function(done) {\n          expect(table.find(\"table.pvtTable\").text()).toBe([\"Totals\", \"4\"].join(\"\"));\n          return done();\n        });\n        return it(\"has a correct grand total with data value\", function(done) {\n          expect(table.find(\"td.pvtGrandTotal\").text()).toBe(\"4\");\n          expect(table.find(\"td.pvtGrandTotal\").data(\"value\")).toBe(4);\n          return done();\n        });\n      });\n    });\n    describe(\"with rows/cols, sum-over-sum aggregator, Heatmap renderer\", function() {\n      var table;\n      table = null;\n      beforeEach(function(done) {\n        return table = $(\"<div>\").pivotUI(fixtureData, {\n          rows: [\"gender\"],\n          cols: [\"colour\"],\n          aggregatorName: \"Sum over Sum\",\n          vals: [\"successes\", \"trials\"],\n          rendererName: \"Heatmap\",\n          onRefresh: done\n        });\n      });\n      it(\"has all the basic UI elements\", function(done) {\n        expect(table.find(\"td.pvtAxisContainer\").length).toBe(3);\n        expect(table.find(\"td.pvtRendererArea\").length).toBe(1);\n        expect(table.find(\"td.pvtVals\").length).toBe(1);\n        expect(table.find(\"select.pvtRenderer\").length).toBe(1);\n        expect(table.find(\"select.pvtAggregator\").length).toBe(1);\n        expect(table.find(\"span.pvtAttr\").length).toBe(6);\n        return done();\n      });\n      it(\"reflects its inputs\", function(done) {\n        expect(table.find(\"td.pvtUnused span.pvtAttr\").length).toBe(4);\n        expect(table.find(\"td.pvtRows span.pvtAttr\").length).toBe(1);\n        expect(table.find(\"td.pvtCols span.pvtAttr\").length).toBe(1);\n        expect(table.find(\"select.pvtRenderer\").val()).toBe(\"Heatmap\");\n        expect(table.find(\"select.pvtAggregator\").val()).toBe(\"Sum over Sum\");\n        return done();\n      });\n      it(\"renders a table\", function(done) {\n        expect(table.find(\"table.pvtTable\").length).toBe(1);\n        return done();\n      });\n      return describe(\"its renderer output\", function() {\n        it(\"has the correct type and number of cells\", function(done) {\n          expect(table.find(\"th.pvtAxisLabel\").length).toBe(2);\n          expect(table.find(\"th.pvtRowLabel\").length).toBe(2);\n          expect(table.find(\"th.pvtColLabel\").length).toBe(3);\n          expect(table.find(\"th.pvtTotalLabel\").length).toBe(2);\n          expect(table.find(\"td.pvtVal\").length).toBe(6);\n          expect(table.find(\"td.pvtTotal\").length).toBe(5);\n          expect(table.find(\"td.pvtGrandTotal\").length).toBe(1);\n          return done();\n        });\n        it(\"has the correct textual representation\", function(done) {\n          expect(table.find(\"table.pvtTable\").text()).toBe([\"colour\", \"blue\", \"red\", \"yellow\", \"Totals\", \"gender\", \"female\", \"0.26\", \"0.14\", \"0.20\", \"male\", \"0.20\", \"0.20\", \"Totals\", \"0.20\", \"0.26\", \"0.14\", \"0.20\"].join(\"\"));\n          return done();\n        });\n        return it(\"has a correct spot-checked cell with data value\", function(done) {\n          expect(table.find(\"td.col0.row1\").text()).toBe(\"0.20\");\n          expect(table.find(\"td.col0.row1\").data(\"value\")).toBe((12 + 30) / (103 + 112));\n          return done();\n        });\n      });\n    });\n    return describe(\"with ragged input\", function() {\n      var table;\n      table = $(\"<div>\").pivotUI(raggedFixtureData, {\n        rows: [\"gender\"],\n        cols: [\"age\"]\n      });\n      return it(\"renders a table with the correct textual representation\", function() {\n        return expect(table.find(\"table.pvtTable\").text()).toBe([\"age\", \"12\", \"34\", \"null\", \"Totals\", \"gender\", \"female\", \"1\", \"1\", \"male\", \"1\", \"1\", \"null\", \"1\", \"1\", \"2\", \"Totals\", \"2\", \"1\", \"1\", \"4\"].join(\"\"));\n      });\n    });\n  });\n\n  describe(\"$.pivot()\", function() {\n    describe(\"with no rows/cols, default count aggregator, default TableRenderer\", function() {\n      var table;\n      table = $(\"<div>\").pivot(fixtureData);\n      it(\"renders a table\", function() {\n        return expect(table.find(\"table.pvtTable\").length).toBe(1);\n      });\n      return describe(\"its renderer output\", function() {\n        it(\"has the correct textual representation\", function() {\n          return expect(table.find(\"table.pvtTable\").text()).toBe([\"Totals\", \"4\"].join(\"\"));\n        });\n        return it(\"has a correct grand total with data value\", function() {\n          expect(table.find(\"td.pvtGrandTotal\").text()).toBe(\"4\");\n          return expect(table.find(\"td.pvtGrandTotal\").data(\"value\")).toBe(4);\n        });\n      });\n    });\n    describe(\"with rows/cols, sum aggregator, derivedAttributes, filter and sorters\", function() {\n      var aggregators, derivers, ref, sortAs, table;\n      ref = $.pivotUtilities, sortAs = ref.sortAs, derivers = ref.derivers, aggregators = ref.aggregators;\n      table = $(\"<div>\").pivot(fixtureData, {\n        rows: [\"gender\"],\n        cols: [\"birthyear\"],\n        aggregator: aggregators[\"Sum\"]([\"trialbins\"]),\n        filter: function(record) {\n          return record.name !== \"Nick\";\n        },\n        derivedAttributes: {\n          birthyear: derivers.dateFormat(\"birthday\", \"%y\"),\n          trialbins: derivers.bin(\"trials\", 10)\n        },\n        sorters: function(attr) {\n          if (attr === \"gender\") {\n            return sortAs([\"male\", \"female\"]);\n          }\n        }\n      });\n      return it(\"renders a table with the correct textual representation\", function() {\n        return expect(table.find(\"table.pvtTable\").text()).toBe([\"birthyear\", \"1982\", \"1983\", \"Totals\", \"gender\", \"male\", \"110.00\", \"110.00\", \"female\", \"90.00\", \"100.00\", \"190.00\", \"Totals\", \"200.00\", \"100.00\", \"300.00\"].join(\"\"));\n      });\n    });\n    describe(\"with rows/cols, fraction-of aggregator\", function() {\n      var aggregators, table;\n      aggregators = $.pivotUtilities.aggregators;\n      table = $(\"<div>\").pivot(fixtureData, {\n        rows: [\"gender\"],\n        aggregator: aggregators[\"Sum as Fraction of Total\"]([\"trials\"])\n      });\n      return it(\"renders a table with the correct textual representation\", function() {\n        return expect(table.find(\"table.pvtTable\").text()).toBe([\"gender\", \"Totals\", \"female\", \"47.8%\", \"male\", \"52.2%\", \"Totals\", \"100.0%\"].join(\"\"));\n      });\n    });\n    describe(\"with rows/cols, custom aggregator, custom renderer with options\", function() {\n      var received_PivotData, received_rendererOptions, table;\n      received_PivotData = null;\n      received_rendererOptions = null;\n      table = $(\"<div>\").pivot(fixtureData, {\n        rows: [\"name\", \"colour\"],\n        cols: [\"trials\", \"successes\"],\n        aggregator: function() {\n          return {\n            count2x: 0,\n            push: function() {\n              return this.count2x += 2;\n            },\n            value: function() {\n              return this.count2x;\n            },\n            format: function(x) {\n              return \"formatted \" + x;\n            }\n          };\n        },\n        renderer: function(a, b) {\n          received_PivotData = a;\n          received_rendererOptions = b;\n          return $(\"<div>\").addClass(b.greeting).text(\"world\");\n        },\n        rendererOptions: {\n          greeting: \"hithere\"\n        }\n      });\n      it(\"renders the custom renderer as per options\", function() {\n        return expect(table.find(\"div.hithere\").length).toBe(1);\n      });\n      return describe(\"its received PivotData object\", function() {\n        return it(\"has a correct grand total value and format for custom aggregator\", function() {\n          var agg, val;\n          agg = received_PivotData.getAggregator([], []);\n          val = agg.value();\n          expect(val).toBe(8);\n          return expect(agg.format(val)).toBe(\"formatted 8\");\n        });\n      });\n    });\n    return describe(\"with ragged input\", function() {\n      var table;\n      table = $(\"<div>\").pivot(raggedFixtureData, {\n        rows: [\"gender\"],\n        cols: [\"age\"]\n      });\n      return it(\"renders a table with the correct textual representation\", function() {\n        return expect(table.find(\"table.pvtTable\").text()).toBe([\"age\", \"12\", \"34\", \"null\", \"Totals\", \"gender\", \"female\", \"1\", \"1\", \"male\", \"1\", \"1\", \"null\", \"1\", \"1\", \"2\", \"Totals\", \"2\", \"1\", \"1\", \"4\"].join(\"\"));\n      });\n    });\n  });\n\n  describe(\"$.pivotUtilities\", function() {\n    describe(\".PivotData()\", function() {\n      var sumOverSumOpts;\n      sumOverSumOpts = {\n        aggregator: $.pivotUtilities.aggregators[\"Sum over Sum\"]([\"a\", \"b\"])\n      };\n      describe(\"with no options\", function() {\n        var aoaInput, pd;\n        aoaInput = [[\"a\", \"b\"], [1, 2], [3, 4]];\n        pd = new $.pivotUtilities.PivotData(aoaInput);\n        return it(\"has the correct grand total value\", function() {\n          return expect(pd.getAggregator([], []).value()).toBe(2);\n        });\n      });\n      describe(\"with array-of-array input\", function() {\n        var aoaInput, pd;\n        aoaInput = [[\"a\", \"b\"], [1, 2], [3, 4]];\n        pd = new $.pivotUtilities.PivotData(aoaInput, sumOverSumOpts);\n        return it(\"has the correct grand total value\", function() {\n          return expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4));\n        });\n      });\n      describe(\"with array-of-object input\", function() {\n        var aosInput, pd;\n        aosInput = [\n          {\n            a: 1,\n            b: 2\n          }, {\n            a: 3,\n            b: 4\n          }\n        ];\n        pd = new $.pivotUtilities.PivotData(aosInput, sumOverSumOpts);\n        return it(\"has the correct grand total value\", function() {\n          return expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4));\n        });\n      });\n      describe(\"with ragged array-of-object input\", function() {\n        var pd, raggedAosInput;\n        raggedAosInput = [\n          {\n            a: 1\n          }, {\n            b: 4\n          }, {\n            a: 3,\n            b: 2\n          }\n        ];\n        pd = new $.pivotUtilities.PivotData(raggedAosInput, sumOverSumOpts);\n        return it(\"has the correct grand total value\", function() {\n          return expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4));\n        });\n      });\n      describe(\"with function input\", function() {\n        var functionInput, pd;\n        functionInput = function(record) {\n          record({\n            a: 1,\n            b: 2\n          });\n          return record({\n            a: 3,\n            b: 4\n          });\n        };\n        pd = new $.pivotUtilities.PivotData(functionInput, sumOverSumOpts);\n        return it(\"has the correct grand total value\", function() {\n          return expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4));\n        });\n      });\n      describe(\"with jQuery table element input\", function() {\n        var pd, tableInput;\n        tableInput = $(\"<table>\\n    <thead>\\n        <tr> <th>a</th><th>b</th> </tr>\\n    </thead>\\n    <tbody>\\n        <tr> <td>1</td> <td>2</td> </tr>\\n        <tr> <td>3</td> <td>4</td> </tr>\\n    </tbody>\\n</table>\");\n        pd = new $.pivotUtilities.PivotData(tableInput, sumOverSumOpts);\n        return it(\"has the correct grand total value\", function() {\n          return expect(pd.getAggregator([], []).value()).toBe((1 + 3) / (2 + 4));\n        });\n      });\n      return describe(\"with rows/cols\", function() {\n        var pd;\n        pd = new $.pivotUtilities.PivotData(fixtureData, {\n          rows: [\"name\", \"colour\"],\n          cols: [\"trials\", \"successes\"]\n        });\n        it(\"has correctly-ordered row keys\", function() {\n          return expect(pd.getRowKeys()).toEqual([['Carol', 'yellow'], ['Jane', 'red'], ['John', 'blue'], ['Nick', 'blue']]);\n        });\n        it(\"has correctly-ordered col keys\", function() {\n          return expect(pd.getColKeys()).toEqual([[95, 25], [102, 14], [103, 12], [112, 30]]);\n        });\n        it(\"can be iterated over\", function() {\n          var c, i, j, len, len1, numNotNull, numNull, r, ref, ref1;\n          numNotNull = 0;\n          numNull = 0;\n          ref = pd.getRowKeys();\n          for (i = 0, len = ref.length; i < len; i++) {\n            r = ref[i];\n            ref1 = pd.getColKeys();\n            for (j = 0, len1 = ref1.length; j < len1; j++) {\n              c = ref1[j];\n              if (pd.getAggregator(r, c).value() != null) {\n                numNotNull++;\n              } else {\n                numNull++;\n              }\n            }\n          }\n          expect(numNotNull).toBe(4);\n          return expect(numNull).toBe(12);\n        });\n        it(\"returns matching records\", function() {\n          var records;\n          records = [];\n          pd.forEachMatchingRecord({\n            gender: \"male\"\n          }, function(x) {\n            return records.push(x.name);\n          });\n          return expect(records).toEqual([\"Nick\", \"John\"]);\n        });\n        it(\"has a correct spot-checked aggregator\", function() {\n          var agg, val;\n          agg = pd.getAggregator(['Carol', 'yellow'], [102, 14]);\n          val = agg.value();\n          expect(val).toBe(1);\n          return expect(agg.format(val)).toBe(\"1\");\n        });\n        return it(\"has a correct grand total aggregator\", function() {\n          var agg, val;\n          agg = pd.getAggregator([], []);\n          val = agg.value();\n          expect(val).toBe(4);\n          return expect(agg.format(val)).toBe(\"4\");\n        });\n      });\n    });\n    describe(\".aggregatorTemplates\", function() {\n      var getVal, tpl;\n      getVal = function(aggregator) {\n        var pd;\n        pd = new $.pivotUtilities.PivotData(fixtureData, {\n          aggregator: aggregator\n        });\n        return pd.getAggregator([], []).value();\n      };\n      tpl = $.pivotUtilities.aggregatorTemplates;\n      describe(\".count\", function() {\n        return it(\"works\", function() {\n          return expect(getVal(tpl.count()())).toBe(4);\n        });\n      });\n      describe(\".countUnique\", function() {\n        return it(\"works\", function() {\n          return expect(getVal(tpl.countUnique()(['gender']))).toBe(2);\n        });\n      });\n      describe(\".listUnique\", function() {\n        return it(\"works\", function() {\n          return expect(getVal(tpl.listUnique()(['gender']))).toBe('male,female');\n        });\n      });\n      describe(\".average\", function() {\n        return it(\"works\", function() {\n          return expect(getVal(tpl.average()(['trials']))).toBe(103);\n        });\n      });\n      describe(\".sum\", function() {\n        return it(\"works\", function() {\n          return expect(getVal(tpl.sum()(['trials']))).toBe(412);\n        });\n      });\n      describe(\".min\", function() {\n        return it(\"works\", function() {\n          return expect(getVal(tpl.min()(['trials']))).toBe(95);\n        });\n      });\n      describe(\".max\", function() {\n        return it(\"works\", function() {\n          return expect(getVal(tpl.max()(['trials']))).toBe(112);\n        });\n      });\n      describe(\".first\", function() {\n        return it(\"works\", function() {\n          return expect(getVal(tpl.first()(['name']))).toBe('Carol');\n        });\n      });\n      describe(\".last\", function() {\n        return it(\"works\", function() {\n          return expect(getVal(tpl.last()(['name']))).toBe('Nick');\n        });\n      });\n      describe(\".average\", function() {\n        return it(\"works\", function() {\n          return expect(getVal(tpl.average()(['trials']))).toBe(103);\n        });\n      });\n      describe(\".median\", function() {\n        return it(\"works\", function() {\n          return expect(getVal(tpl.median()(['trials']))).toBe(102.5);\n        });\n      });\n      describe(\".quantile\", function() {\n        return it(\"works\", function() {\n          expect(getVal(tpl.quantile(0)(['trials']))).toBe(95);\n          expect(getVal(tpl.quantile(0.1)(['trials']))).toBe(98.5);\n          expect(getVal(tpl.quantile(0.25)(['trials']))).toBe(98.5);\n          expect(getVal(tpl.quantile(1 / 3)(['trials']))).toBe(102);\n          return expect(getVal(tpl.quantile(1)(['trials']))).toBe(112);\n        });\n      });\n      describe(\".var\", function() {\n        return it(\"works\", function() {\n          return expect(getVal(tpl[\"var\"]()(['trials']))).toBe(48.666666666666686);\n        });\n      });\n      describe(\".stdev\", function() {\n        return it(\"works\", function() {\n          return expect(getVal(tpl.stdev()(['trials']))).toBe(6.976149845485451);\n        });\n      });\n      return describe(\".sumOverSum\", function() {\n        return it(\"works\", function() {\n          return expect(getVal(tpl.sumOverSum()(['successes', 'trials']))).toBe((12 + 25 + 30 + 14) / (95 + 102 + 103 + 112));\n        });\n      });\n    });\n    describe(\".naturalSort()\", function() {\n      var naturalSort, sortedArr;\n      naturalSort = $.pivotUtilities.naturalSort;\n      sortedArr = [null, 0/0, -2e308, '-Infinity', -3, '-3', -2, '-2', -1, '-1', 0, '2e-1', 1, '01', '1', 2, '002', '002e0', '02', '2', '2e-0', 3, 10, '10', '11', '12', '1e2', '112', 2e308, 'Infinity', '1a', '2a', '12a', '20a', 'A', 'A', 'NaN', 'a', 'a', 'a01', 'a012', 'a02', 'a1', 'a2', 'a12', 'a12', 'a21', 'a21', 'b', 'c', 'd', 'null'];\n      return it(\"sorts naturally (null, NaN, numbers & numbery strings, Alphanum for text strings)\", function() {\n        return expect(sortedArr.slice().sort(naturalSort)).toEqual(sortedArr);\n      });\n    });\n    describe(\".sortAs()\", function() {\n      var sortAs;\n      sortAs = $.pivotUtilities.sortAs;\n      it(\"sorts with unknown values sorted at the end\", function() {\n        return expect([5, 2, 3, 4, 1].sort(sortAs([4, 3, 2]))).toEqual([4, 3, 2, 1, 5]);\n      });\n      return it(\"sorts lowercase after uppercase\", function() {\n        return expect([\"Ab\", \"aA\", \"aa\", \"ab\"].sort(sortAs([\"Ab\", \"Aa\"]))).toEqual([\"Ab\", \"ab\", \"aa\", \"aA\"]);\n      });\n    });\n    describe(\".numberFormat()\", function() {\n      var numberFormat;\n      numberFormat = $.pivotUtilities.numberFormat;\n      it(\"formats numbers\", function() {\n        var nf;\n        nf = numberFormat();\n        return expect(nf(1234567.89123456)).toEqual(\"1,234,567.89\");\n      });\n      it(\"formats booleans\", function() {\n        var nf;\n        nf = numberFormat();\n        return expect(nf(true)).toEqual(\"1.00\");\n      });\n      it(\"formats numbers in strings\", function() {\n        var nf;\n        nf = numberFormat();\n        return expect(nf(\"1234567.89123456\")).toEqual(\"1,234,567.89\");\n      });\n      it(\"doesn't formats strings\", function() {\n        var nf;\n        nf = numberFormat();\n        return expect(nf(\"hi there\")).toEqual(\"\");\n      });\n      it(\"doesn't formats objects\", function() {\n        var nf;\n        nf = numberFormat();\n        return expect(nf({\n          a: 1\n        })).toEqual(\"\");\n      });\n      it(\"formats percentages\", function() {\n        var nf;\n        nf = numberFormat({\n          scaler: 100,\n          suffix: \"%\"\n        });\n        return expect(nf(0.12345)).toEqual(\"12.35%\");\n      });\n      it(\"adds separators\", function() {\n        var nf;\n        nf = numberFormat({\n          thousandsSep: \"a\",\n          decimalSep: \"b\"\n        });\n        return expect(nf(1234567.89123456)).toEqual(\"1a234a567b89\");\n      });\n      it(\"adds prefixes and suffixes\", function() {\n        var nf;\n        nf = numberFormat({\n          prefix: \"a\",\n          suffix: \"b\"\n        });\n        return expect(nf(1234567.89123456)).toEqual(\"a1,234,567.89b\");\n      });\n      return it(\"scales and rounds\", function() {\n        var nf;\n        nf = numberFormat({\n          digitsAfterDecimal: 3,\n          scaler: 1000\n        });\n        return expect(nf(1234567.89123456)).toEqual(\"1,234,567,891.235\");\n      });\n    });\n    return describe(\".derivers\", function() {\n      describe(\".dateFormat()\", function() {\n        var df;\n        df = $.pivotUtilities.derivers.dateFormat(\"x\", \"abc % %% %%% %a %y %m %n %d %w %x %H %M %S\", true);\n        it(\"formats date objects\", function() {\n          return expect(df({\n            x: new Date(\"2015-01-02T23:43:11Z\")\n          })).toBe('abc % %% %%% %a 2015 01 Jan 02 Fri 5 23 43 11');\n        });\n        return it(\"formats input parsed by Date.parse()\", function() {\n          expect(df({\n            x: \"2015-01-02T23:43:11Z\"\n          })).toBe('abc % %% %%% %a 2015 01 Jan 02 Fri 5 23 43 11');\n          return expect(df({\n            x: \"bla\"\n          })).toBe('');\n        });\n      });\n      return describe(\".bin()\", function() {\n        var binner;\n        binner = $.pivotUtilities.derivers.bin(\"x\", 10);\n        it(\"bins numbers\", function() {\n          expect(binner({\n            x: 11\n          })).toBe(10);\n          expect(binner({\n            x: 9\n          })).toBe(0);\n          return expect(binner({\n            x: 111\n          })).toBe(110);\n        });\n        it(\"bins booleans\", function() {\n          return expect(binner({\n            x: true\n          })).toBe(0);\n        });\n        it(\"bins negative numbers\", function() {\n          return expect(binner({\n            x: -12\n          })).toBe(-10);\n        });\n        it(\"doesn't bin strings\", function() {\n          return expect(binner({\n            x: \"a\"\n          })).toBeNaN();\n        });\n        return it(\"doesn't bin objects\", function() {\n          return expect(binner({\n            x: {\n              a: 1\n            }\n          })).toBeNaN();\n        });\n      });\n    });\n  });\n\n}).call(this);\n\n//# sourceMappingURL=pivot_spec.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.min.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.min.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a7cf203bb4a12414644d8fa49c123a6312ab6b57
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/pivot_spec.min.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>pivot_spec.min.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..4fcfaba310609ee77de7e2e44dc186dd367d78dc
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.js.js
@@ -0,0 +1,230 @@
+(function() {
+  var callWithJQuery;
+
+  callWithJQuery = function(pivotModule) {
+    if (typeof exports === "object" && typeof module === "object") {
+      return pivotModule(require("jquery"), require("plotly.js"));
+    } else if (typeof define === "function" && define.amd) {
+      return define(["jquery", "plotly.js"], pivotModule);
+    } else {
+      return pivotModule(jQuery, Plotly);
+    }
+  };
+
+  callWithJQuery(function($, Plotly) {
+    var makePlotlyChart, makePlotlyScatterChart;
+    makePlotlyChart = function(traceOptions, layoutOptions, transpose) {
+      if (traceOptions == null) {
+        traceOptions = {};
+      }
+      if (layoutOptions == null) {
+        layoutOptions = {};
+      }
+      if (transpose == null) {
+        transpose = false;
+      }
+      return function(pivotData, opts) {
+        var colKeys, columns, d, data, datumKeys, defaults, fullAggName, groupByTitle, hAxisTitle, i, layout, result, rowKeys, rows, titleText, traceKeys;
+        defaults = {
+          localeStrings: {
+            vs: "vs",
+            by: "by"
+          },
+          plotly: {},
+          plotlyConfig: {}
+        };
+        opts = $.extend(true, {}, defaults, opts);
+        rowKeys = pivotData.getRowKeys();
+        colKeys = pivotData.getColKeys();
+        traceKeys = transpose ? colKeys : rowKeys;
+        if (traceKeys.length === 0) {
+          traceKeys.push([]);
+        }
+        datumKeys = transpose ? rowKeys : colKeys;
+        if (datumKeys.length === 0) {
+          datumKeys.push([]);
+        }
+        fullAggName = pivotData.aggregatorName;
+        if (pivotData.valAttrs.length) {
+          fullAggName += "(" + (pivotData.valAttrs.join(", ")) + ")";
+        }
+        data = traceKeys.map(function(traceKey) {
+          var datumKey, j, labels, len, trace, val, values;
+          values = [];
+          labels = [];
+          for (j = 0, len = datumKeys.length; j < len; j++) {
+            datumKey = datumKeys[j];
+            val = parseFloat(pivotData.getAggregator(transpose ? datumKey : traceKey, transpose ? traceKey : datumKey).value());
+            values.push(isFinite(val) ? val : null);
+            labels.push(datumKey.join('-') || ' ');
+          }
+          trace = {
+            name: traceKey.join('-') || fullAggName
+          };
+          if (traceOptions.type === "pie") {
+            trace.values = values;
+            trace.labels = labels.length > 1 ? labels : [fullAggName];
+          } else {
+            trace.x = transpose ? values : labels;
+            trace.y = transpose ? labels : values;
+          }
+          return $.extend(trace, traceOptions);
+        });
+        if (transpose) {
+          hAxisTitle = pivotData.rowAttrs.join("-");
+          groupByTitle = pivotData.colAttrs.join("-");
+        } else {
+          hAxisTitle = pivotData.colAttrs.join("-");
+          groupByTitle = pivotData.rowAttrs.join("-");
+        }
+        titleText = fullAggName;
+        if (hAxisTitle !== "") {
+          titleText += " " + opts.localeStrings.vs + " " + hAxisTitle;
+        }
+        if (groupByTitle !== "") {
+          titleText += " " + opts.localeStrings.by + " " + groupByTitle;
+        }
+        layout = {
+          title: titleText,
+          hovermode: 'closest',
+          width: window.innerWidth / 1.4,
+          height: window.innerHeight / 1.4 - 50
+        };
+        if (traceOptions.type === 'pie') {
+          columns = Math.ceil(Math.sqrt(data.length));
+          rows = Math.ceil(data.length / columns);
+          layout.grid = {
+            columns: columns,
+            rows: rows
+          };
+          for (i in data) {
+            d = data[i];
+            d.domain = {
+              row: Math.floor(i / columns),
+              column: i - columns * Math.floor(i / columns)
+            };
+            if (data.length > 1) {
+              d.title = d.name;
+            }
+          }
+          if (data[0].labels.length === 1) {
+            layout.showlegend = false;
+          }
+        } else {
+          layout.xaxis = {
+            title: transpose ? fullAggName : null,
+            automargin: true
+          };
+          layout.yaxis = {
+            title: transpose ? null : fullAggName,
+            automargin: true
+          };
+        }
+        result = $("<div>").appendTo($("body"));
+        Plotly.newPlot(result[0], data, $.extend(layout, layoutOptions, opts.plotly), opts.plotlyConfig);
+        return result.detach();
+      };
+    };
+    makePlotlyScatterChart = function() {
+      return function(pivotData, opts) {
+        var colKey, colKeys, data, defaults, j, k, layout, len, len1, renderArea, result, rowKey, rowKeys, v;
+        defaults = {
+          localeStrings: {
+            vs: "vs",
+            by: "by"
+          },
+          plotly: {},
+          plotlyConfig: {}
+        };
+        opts = $.extend(true, {}, defaults, opts);
+        rowKeys = pivotData.getRowKeys();
+        if (rowKeys.length === 0) {
+          rowKeys.push([]);
+        }
+        colKeys = pivotData.getColKeys();
+        if (colKeys.length === 0) {
+          colKeys.push([]);
+        }
+        data = {
+          x: [],
+          y: [],
+          text: [],
+          type: 'scatter',
+          mode: 'markers'
+        };
+        for (j = 0, len = rowKeys.length; j < len; j++) {
+          rowKey = rowKeys[j];
+          for (k = 0, len1 = colKeys.length; k < len1; k++) {
+            colKey = colKeys[k];
+            v = pivotData.getAggregator(rowKey, colKey).value();
+            if (v != null) {
+              data.x.push(colKey.join('-'));
+              data.y.push(rowKey.join('-'));
+              data.text.push(v);
+            }
+          }
+        }
+        layout = {
+          title: pivotData.rowAttrs.join("-") + ' vs ' + pivotData.colAttrs.join("-"),
+          hovermode: 'closest',
+          xaxis: {
+            title: pivotData.colAttrs.join('-'),
+            automargin: true
+          },
+          yaxis: {
+            title: pivotData.rowAttrs.join('-'),
+            automargin: true
+          },
+          width: window.innerWidth / 1.5,
+          height: window.innerHeight / 1.4 - 50
+        };
+        renderArea = $("<div>", {
+          style: "display:none;"
+        }).appendTo($("body"));
+        result = $("<div>").appendTo(renderArea);
+        Plotly.newPlot(result[0], [data], $.extend(layout, opts.plotly), opts.plotlyConfig);
+        result.detach();
+        renderArea.remove();
+        return result;
+      };
+    };
+    return $.pivotUtilities.plotly_renderers = {
+      "Horizontal Bar Chart": makePlotlyChart({
+        type: 'bar',
+        orientation: 'h'
+      }, {
+        barmode: 'group'
+      }, true),
+      "Horizontal Stacked Bar Chart": makePlotlyChart({
+        type: 'bar',
+        orientation: 'h'
+      }, {
+        barmode: 'relative'
+      }, true),
+      "Bar Chart": makePlotlyChart({
+        type: 'bar'
+      }, {
+        barmode: 'group'
+      }),
+      "Stacked Bar Chart": makePlotlyChart({
+        type: 'bar'
+      }, {
+        barmode: 'relative'
+      }),
+      "Line Chart": makePlotlyChart(),
+      "Area Chart": makePlotlyChart({
+        stackgroup: 1
+      }),
+      "Scatter Chart": makePlotlyScatterChart(),
+      'Multiple Pie Chart': makePlotlyChart({
+        type: 'pie',
+        scalegroup: 1,
+        hoverinfo: 'label+value',
+        textinfo: 'none'
+      }, {}, true)
+    };
+  });
+
+}).call(this);
+
+//# sourceMappingURL=plotly_renderers.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d045de51276cba39d875646ef762956ac1b9dc6f
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"file":"plotly_renderers.js","sources":["plotly_renderers.coffee"],"names":[],"mappings":"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","sourcesContent":["callWithJQuery = (pivotModule) ->\n    if typeof exports is \"object\" and typeof module is \"object\" # CommonJS\n        pivotModule require(\"jquery\"), require(\"plotly.js\")\n    else if typeof define is \"function\" and define.amd # AMD\n        define [\"jquery\", \"plotly.js\"], pivotModule\n    # Plain browser env\n    else\n        pivotModule jQuery, Plotly\n\ncallWithJQuery ($, Plotly) ->\n\n    makePlotlyChart = (traceOptions = {}, layoutOptions = {}, transpose = false) ->\n        (pivotData, opts) ->\n            defaults =\n                localeStrings: {vs: \"vs\", by: \"by\"}\n                plotly: {}\n                plotlyConfig: {}\n\n            opts = $.extend(true, {}, defaults, opts)\n\n            rowKeys = pivotData.getRowKeys()\n            colKeys = pivotData.getColKeys()\n            traceKeys = if transpose then colKeys else rowKeys\n            traceKeys.push([]) if traceKeys.length == 0\n            datumKeys = if transpose then rowKeys else colKeys\n            datumKeys.push([]) if datumKeys.length == 0\n\n            fullAggName = pivotData.aggregatorName\n            if pivotData.valAttrs.length\n                fullAggName += \"(#{pivotData.valAttrs.join(\", \")})\"\n\n            data = traceKeys.map (traceKey) ->\n                values = []\n                labels = []\n                for datumKey in datumKeys\n                    val = parseFloat(pivotData.getAggregator(\n                        if transpose then datumKey else traceKey,\n                        if transpose then traceKey else datumKey\n                    ).value())\n                    values.push(if isFinite(val) then val else null)\n                    labels.push(datumKey.join('-') || ' ')\n\n                trace = {name: traceKey.join('-') || fullAggName}\n                if traceOptions.type == \"pie\"\n                    trace.values = values\n                    trace.labels = if labels.length > 1 then labels else [fullAggName]\n                else\n                    trace.x = if transpose then values else labels\n                    trace.y = if transpose then labels else values\n                return $.extend(trace, traceOptions)\n\n            if transpose\n                hAxisTitle = pivotData.rowAttrs.join(\"-\")\n                groupByTitle = pivotData.colAttrs.join(\"-\")\n            else\n                hAxisTitle = pivotData.colAttrs.join(\"-\")\n                groupByTitle = pivotData.rowAttrs.join(\"-\")\n            titleText = fullAggName\n            titleText += \" #{opts.localeStrings.vs} #{hAxisTitle}\" if hAxisTitle != \"\"\n            titleText += \" #{opts.localeStrings.by} #{groupByTitle}\" if groupByTitle != \"\"\n\n            layout =\n                title: titleText\n                hovermode: 'closest'\n                width: window.innerWidth / 1.4\n                height: window.innerHeight / 1.4 - 50\n\n            if traceOptions.type == 'pie'\n                columns = Math.ceil(Math.sqrt(data.length))\n                rows = Math.ceil(data.length / columns)\n                layout.grid = {columns, rows}\n                for i, d of data\n                    d.domain = {\n                        row: Math.floor(i / columns),\n                        column: i - columns * Math.floor(i / columns),\n                    }\n                    if data.length > 1\n                        d.title = d.name\n                layout.showlegend = false if data[0].labels.length == 1\n            else\n                layout.xaxis =\n                    title: if transpose then fullAggName else null\n                    automargin: true\n                layout.yaxis =\n                    title: if transpose then null else fullAggName\n                    automargin: true\n\n\n            result = $(\"<div>\").appendTo $(\"body\")\n            Plotly.newPlot(result[0], data, $.extend(layout, layoutOptions, opts.plotly), opts.plotlyConfig)\n            return result.detach()\n\n    makePlotlyScatterChart = -> (pivotData, opts) ->\n        defaults =\n            localeStrings: {vs: \"vs\", by: \"by\"}\n            plotly: {}\n            plotlyConfig: {}\n\n        opts = $.extend(true, {}, defaults, opts)\n\n        rowKeys = pivotData.getRowKeys()\n        rowKeys.push [] if rowKeys.length == 0\n        colKeys = pivotData.getColKeys()\n        colKeys.push [] if colKeys.length == 0\n\n        data = {x: [], y: [], text: [], type: 'scatter', mode: 'markers'}\n\n        for rowKey in rowKeys\n            for colKey in colKeys\n                v = pivotData.getAggregator(rowKey, colKey).value()\n                if v?\n                    data.x.push(colKey.join('-'))\n                    data.y.push(rowKey.join('-'))\n                    data.text.push(v)\n\n        layout = {\n            title: pivotData.rowAttrs.join(\"-\") + ' vs ' + pivotData.colAttrs.join(\"-\")\n            hovermode: 'closest',\n            xaxis: {title: pivotData.colAttrs.join('-'), automargin: true},\n            yaxis: {title: pivotData.rowAttrs.join('-'), automargin: true},\n            width: window.innerWidth / 1.5,\n            height: window.innerHeight / 1.4 - 50\n        }\n\n        renderArea = $(\"<div>\", style: \"display:none;\").appendTo $(\"body\")\n        result = $(\"<div>\").appendTo renderArea\n        Plotly.newPlot(result[0], [data], $.extend(layout, opts.plotly), opts.plotlyConfig)\n        result.detach()\n        renderArea.remove()\n        return result\n\n    $.pivotUtilities.plotly_renderers =\n        \"Horizontal Bar Chart\": makePlotlyChart({type: 'bar', orientation: 'h'},\n            {barmode: 'group'}, true)\n        \"Horizontal Stacked Bar Chart\": makePlotlyChart({type: 'bar', orientation: 'h'},\n            {barmode: 'relative'}, true)\n        \"Bar Chart\": makePlotlyChart({type: 'bar'}, {barmode: 'group'})\n        \"Stacked Bar Chart\": makePlotlyChart({type: 'bar'}, {barmode: 'relative'})\n        \"Line Chart\": makePlotlyChart()\n        \"Area Chart\": makePlotlyChart({stackgroup: 1})\n        \"Scatter Chart\": makePlotlyScatterChart()\n        'Multiple Pie Chart': makePlotlyChart(\n            {type: 'pie', scalegroup: 1, hoverinfo: 'label+value', textinfo: 'none'},\n            {}, true)\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b777ce61c4aa88aa5fdc8e4f630a38e4d4bcc7fc
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>plotly_renderers.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..661fc2fc25fc2ad13fc68dbe90c4cb7c296f5c29
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>plotly_renderers.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.min.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..e7e3ddb0de0dde3b2a738abd5b89cecd93519335
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.min.js.js
@@ -0,0 +1,2 @@
+(function(){var t;(t=function(t){return"object"==typeof exports&&"object"==typeof module?t(require("jquery"),require("plotly.js")):"function"==typeof define&&define.amd?define(["jquery","plotly.js"],t):t(jQuery,Plotly)})(function(t,e){var o,n;return o=function(o,n,r){return null==o&&(o={}),null==n&&(n={}),null==r&&(r=!1),function(l,i){var a,s,h,u,g,p,y,d,c,f,v,m,w,b,j,x;if(p={localeStrings:{vs:"vs",by:"by"},plotly:{},plotlyConfig:{}},i=t.extend(!0,{},p,i),w=l.getRowKeys(),a=l.getColKeys(),x=r?a:w,0===x.length&&x.push([]),g=r?w:a,0===g.length&&g.push([]),y=l.aggregatorName,l.valAttrs.length&&(y+="("+l.valAttrs.join(", ")+")"),u=x.map(function(e){var n,i,a,s,h,u,p;for(p=[],a=[],i=0,s=g.length;i<s;i++)n=g[i],u=parseFloat(l.getAggregator(r?n:e,r?e:n).value()),p.push(isFinite(u)?u:null),a.push(n.join("-")||" ");return h={name:e.join("-")||y},"pie"===o.type?(h.values=p,h.labels=a.length>1?a:[y]):(h.x=r?p:a,h.y=r?a:p),t.extend(h,o)}),r?(c=l.rowAttrs.join("-"),d=l.colAttrs.join("-")):(c=l.colAttrs.join("-"),d=l.rowAttrs.join("-")),j=y,""!==c&&(j+=" "+i.localeStrings.vs+" "+c),""!==d&&(j+=" "+i.localeStrings.by+" "+d),v={title:j,hovermode:"closest",width:window.innerWidth/1.4,height:window.innerHeight/1.4-50},"pie"===o.type){s=Math.ceil(Math.sqrt(u.length)),b=Math.ceil(u.length/s),v.grid={columns:s,rows:b};for(f in u)h=u[f],h.domain={row:Math.floor(f/s),column:f-s*Math.floor(f/s)},u.length>1&&(h.title=h.name);1===u[0].labels.length&&(v.showlegend=!1)}else v.xaxis={title:r?y:null,automargin:!0},v.yaxis={title:r?null:y,automargin:!0};return m=t("<div>").appendTo(t("body")),e.newPlot(m[0],u,t.extend(v,n,i.plotly),i.plotlyConfig),m.detach()}},n=function(){return function(o,n){var r,l,i,a,s,h,u,g,p,y,d,c,f,v;for(a={localeStrings:{vs:"vs",by:"by"},plotly:{},plotlyConfig:{}},n=t.extend(!0,{},a,n),f=o.getRowKeys(),0===f.length&&f.push([]),l=o.getColKeys(),0===l.length&&l.push([]),i={x:[],y:[],text:[],type:"scatter",mode:"markers"},s=0,g=f.length;s<g;s++)for(c=f[s],h=0,p=l.length;h<p;h++)r=l[h],v=o.getAggregator(c,r).value(),null!=v&&(i.x.push(r.join("-")),i.y.push(c.join("-")),i.text.push(v));return u={title:o.rowAttrs.join("-")+" vs "+o.colAttrs.join("-"),hovermode:"closest",xaxis:{title:o.colAttrs.join("-"),automargin:!0},yaxis:{title:o.rowAttrs.join("-"),automargin:!0},width:window.innerWidth/1.5,height:window.innerHeight/1.4-50},y=t("<div>",{style:"display:none;"}).appendTo(t("body")),d=t("<div>").appendTo(y),e.newPlot(d[0],[i],t.extend(u,n.plotly),n.plotlyConfig),d.detach(),y.remove(),d}},t.pivotUtilities.plotly_renderers={"Horizontal Bar Chart":o({type:"bar",orientation:"h"},{barmode:"group"},!0),"Horizontal Stacked Bar Chart":o({type:"bar",orientation:"h"},{barmode:"relative"},!0),"Bar Chart":o({type:"bar"},{barmode:"group"}),"Stacked Bar Chart":o({type:"bar"},{barmode:"relative"}),"Line Chart":o(),"Area Chart":o({stackgroup:1}),"Scatter Chart":n(),"Multiple Pie Chart":o({type:"pie",scalegroup:1,hoverinfo:"label+value",textinfo:"none"},{},!0)}})}).call(this);
+//# sourceMappingURL=plotly_renderers.min.js.map
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.min.js.map.txt b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.min.js.map.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9db959691ed567c2871eeaadb7e3e893f6a6c20e
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.min.js.map.txt
@@ -0,0 +1 @@
+{"version":3,"sources":["plotly_renderers.coffee","plotly_renderers.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","Plotly","$","makePlotlyChart","makePlotlyScatterChart","traceOptions","layoutOptions","transpose","pivotData","opts","colKeys","columns","d","data","datumKeys","defaults","fullAggName","groupByTitle","hAxisTitle","i","layout","result","rowKeys","rows","titleText","traceKeys","localeStrings","vs","by","plotly","plotlyConfig","extend","getRowKeys","getColKeys","length","push","aggregatorName","valAttrs","join","map","traceKey","datumKey","j","labels","len","trace","val","values","parseFloat","getAggregator","value","isFinite","name","type","x","y","rowAttrs","colAttrs","title","hovermode","width","window","innerWidth","height","innerHeight","Math","ceil","sqrt","grid","domain","row","floor","column","showlegend","xaxis","automargin","yaxis","appendTo","newPlot","detach","colKey","k","len1","renderArea","rowKey","v","text","mode","style","remove","pivotUtilities","plotly_renderers","Horizontal Bar Chart","orientation","barmode","Horizontal Stacked Bar Chart","Bar Chart","Stacked Bar Chart","Line Chart","Area Chart","stackgroup","Scatter Chart","Multiple Pie Chart","scalegroup","hoverinfo","textinfo","call","this"],"mappings":"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","file":"plotly_renderers.min.js","sourcesContent":["callWithJQuery = (pivotModule) ->\n    if typeof exports is \"object\" and typeof module is \"object\" # CommonJS\n        pivotModule require(\"jquery\"), require(\"plotly.js\")\n    else if typeof define is \"function\" and define.amd # AMD\n        define [\"jquery\", \"plotly.js\"], pivotModule\n    # Plain browser env\n    else\n        pivotModule jQuery, Plotly\n\ncallWithJQuery ($, Plotly) ->\n\n    makePlotlyChart = (traceOptions = {}, layoutOptions = {}, transpose = false) ->\n        (pivotData, opts) ->\n            defaults =\n                localeStrings: {vs: \"vs\", by: \"by\"}\n                plotly: {}\n                plotlyConfig: {}\n\n            opts = $.extend(true, {}, defaults, opts)\n\n            rowKeys = pivotData.getRowKeys()\n            colKeys = pivotData.getColKeys()\n            traceKeys = if transpose then colKeys else rowKeys\n            traceKeys.push([]) if traceKeys.length == 0\n            datumKeys = if transpose then rowKeys else colKeys\n            datumKeys.push([]) if datumKeys.length == 0\n\n            fullAggName = pivotData.aggregatorName\n            if pivotData.valAttrs.length\n                fullAggName += \"(#{pivotData.valAttrs.join(\", \")})\"\n\n            data = traceKeys.map (traceKey) ->\n                values = []\n                labels = []\n                for datumKey in datumKeys\n                    val = parseFloat(pivotData.getAggregator(\n                        if transpose then datumKey else traceKey,\n                        if transpose then traceKey else datumKey\n                    ).value())\n                    values.push(if isFinite(val) then val else null)\n                    labels.push(datumKey.join('-') || ' ')\n\n                trace = {name: traceKey.join('-') || fullAggName}\n                if traceOptions.type == \"pie\"\n                    trace.values = values\n                    trace.labels = if labels.length > 1 then labels else [fullAggName]\n                else\n                    trace.x = if transpose then values else labels\n                    trace.y = if transpose then labels else values\n                return $.extend(trace, traceOptions)\n\n            if transpose\n                hAxisTitle = pivotData.rowAttrs.join(\"-\")\n                groupByTitle = pivotData.colAttrs.join(\"-\")\n            else\n                hAxisTitle = pivotData.colAttrs.join(\"-\")\n                groupByTitle = pivotData.rowAttrs.join(\"-\")\n            titleText = fullAggName\n            titleText += \" #{opts.localeStrings.vs} #{hAxisTitle}\" if hAxisTitle != \"\"\n            titleText += \" #{opts.localeStrings.by} #{groupByTitle}\" if groupByTitle != \"\"\n\n            layout =\n                title: titleText\n                hovermode: 'closest'\n                width: window.innerWidth / 1.4\n                height: window.innerHeight / 1.4 - 50\n\n            if traceOptions.type == 'pie'\n                columns = Math.ceil(Math.sqrt(data.length))\n                rows = Math.ceil(data.length / columns)\n                layout.grid = {columns, rows}\n                for i, d of data\n                    d.domain = {\n                        row: Math.floor(i / columns),\n                        column: i - columns * Math.floor(i / columns),\n                    }\n                    if data.length > 1\n                        d.title = d.name\n                layout.showlegend = false if data[0].labels.length == 1\n            else\n                layout.xaxis =\n                    title: if transpose then fullAggName else null\n                    automargin: true\n                layout.yaxis =\n                    title: if transpose then null else fullAggName\n                    automargin: true\n\n\n            result = $(\"<div>\").appendTo $(\"body\")\n            Plotly.newPlot(result[0], data, $.extend(layout, layoutOptions, opts.plotly), opts.plotlyConfig)\n            return result.detach()\n\n    makePlotlyScatterChart = -> (pivotData, opts) ->\n        defaults =\n            localeStrings: {vs: \"vs\", by: \"by\"}\n            plotly: {}\n            plotlyConfig: {}\n\n        opts = $.extend(true, {}, defaults, opts)\n\n        rowKeys = pivotData.getRowKeys()\n        rowKeys.push [] if rowKeys.length == 0\n        colKeys = pivotData.getColKeys()\n        colKeys.push [] if colKeys.length == 0\n\n        data = {x: [], y: [], text: [], type: 'scatter', mode: 'markers'}\n\n        for rowKey in rowKeys\n            for colKey in colKeys\n                v = pivotData.getAggregator(rowKey, colKey).value()\n                if v?\n                    data.x.push(colKey.join('-'))\n                    data.y.push(rowKey.join('-'))\n                    data.text.push(v)\n\n        layout = {\n            title: pivotData.rowAttrs.join(\"-\") + ' vs ' + pivotData.colAttrs.join(\"-\")\n            hovermode: 'closest',\n            xaxis: {title: pivotData.colAttrs.join('-'), automargin: true},\n            yaxis: {title: pivotData.rowAttrs.join('-'), automargin: true},\n            width: window.innerWidth / 1.5,\n            height: window.innerHeight / 1.4 - 50\n        }\n\n        renderArea = $(\"<div>\", style: \"display:none;\").appendTo $(\"body\")\n        result = $(\"<div>\").appendTo renderArea\n        Plotly.newPlot(result[0], [data], $.extend(layout, opts.plotly), opts.plotlyConfig)\n        result.detach()\n        renderArea.remove()\n        return result\n\n    $.pivotUtilities.plotly_renderers =\n        \"Horizontal Bar Chart\": makePlotlyChart({type: 'bar', orientation: 'h'},\n            {barmode: 'group'}, true)\n        \"Horizontal Stacked Bar Chart\": makePlotlyChart({type: 'bar', orientation: 'h'},\n            {barmode: 'relative'}, true)\n        \"Bar Chart\": makePlotlyChart({type: 'bar'}, {barmode: 'group'})\n        \"Stacked Bar Chart\": makePlotlyChart({type: 'bar'}, {barmode: 'relative'})\n        \"Line Chart\": makePlotlyChart()\n        \"Area Chart\": makePlotlyChart({stackgroup: 1})\n        \"Scatter Chart\": makePlotlyScatterChart()\n        'Multiple Pie Chart': makePlotlyChart(\n            {type: 'pie', scalegroup: 1, hoverinfo: 'label+value', textinfo: 'none'},\n            {}, true)\n","(function() {\n  var callWithJQuery;\n\n  callWithJQuery = function(pivotModule) {\n    if (typeof exports === \"object\" && typeof module === \"object\") {\n      return pivotModule(require(\"jquery\"), require(\"plotly.js\"));\n    } else if (typeof define === \"function\" && define.amd) {\n      return define([\"jquery\", \"plotly.js\"], pivotModule);\n    } else {\n      return pivotModule(jQuery, Plotly);\n    }\n  };\n\n  callWithJQuery(function($, Plotly) {\n    var makePlotlyChart, makePlotlyScatterChart;\n    makePlotlyChart = function(traceOptions, layoutOptions, transpose) {\n      if (traceOptions == null) {\n        traceOptions = {};\n      }\n      if (layoutOptions == null) {\n        layoutOptions = {};\n      }\n      if (transpose == null) {\n        transpose = false;\n      }\n      return function(pivotData, opts) {\n        var colKeys, columns, d, data, datumKeys, defaults, fullAggName, groupByTitle, hAxisTitle, i, layout, result, rowKeys, rows, titleText, traceKeys;\n        defaults = {\n          localeStrings: {\n            vs: \"vs\",\n            by: \"by\"\n          },\n          plotly: {},\n          plotlyConfig: {}\n        };\n        opts = $.extend(true, {}, defaults, opts);\n        rowKeys = pivotData.getRowKeys();\n        colKeys = pivotData.getColKeys();\n        traceKeys = transpose ? colKeys : rowKeys;\n        if (traceKeys.length === 0) {\n          traceKeys.push([]);\n        }\n        datumKeys = transpose ? rowKeys : colKeys;\n        if (datumKeys.length === 0) {\n          datumKeys.push([]);\n        }\n        fullAggName = pivotData.aggregatorName;\n        if (pivotData.valAttrs.length) {\n          fullAggName += \"(\" + (pivotData.valAttrs.join(\", \")) + \")\";\n        }\n        data = traceKeys.map(function(traceKey) {\n          var datumKey, j, labels, len, trace, val, values;\n          values = [];\n          labels = [];\n          for (j = 0, len = datumKeys.length; j < len; j++) {\n            datumKey = datumKeys[j];\n            val = parseFloat(pivotData.getAggregator(transpose ? datumKey : traceKey, transpose ? traceKey : datumKey).value());\n            values.push(isFinite(val) ? val : null);\n            labels.push(datumKey.join('-') || ' ');\n          }\n          trace = {\n            name: traceKey.join('-') || fullAggName\n          };\n          if (traceOptions.type === \"pie\") {\n            trace.values = values;\n            trace.labels = labels.length > 1 ? labels : [fullAggName];\n          } else {\n            trace.x = transpose ? values : labels;\n            trace.y = transpose ? labels : values;\n          }\n          return $.extend(trace, traceOptions);\n        });\n        if (transpose) {\n          hAxisTitle = pivotData.rowAttrs.join(\"-\");\n          groupByTitle = pivotData.colAttrs.join(\"-\");\n        } else {\n          hAxisTitle = pivotData.colAttrs.join(\"-\");\n          groupByTitle = pivotData.rowAttrs.join(\"-\");\n        }\n        titleText = fullAggName;\n        if (hAxisTitle !== \"\") {\n          titleText += \" \" + opts.localeStrings.vs + \" \" + hAxisTitle;\n        }\n        if (groupByTitle !== \"\") {\n          titleText += \" \" + opts.localeStrings.by + \" \" + groupByTitle;\n        }\n        layout = {\n          title: titleText,\n          hovermode: 'closest',\n          width: window.innerWidth / 1.4,\n          height: window.innerHeight / 1.4 - 50\n        };\n        if (traceOptions.type === 'pie') {\n          columns = Math.ceil(Math.sqrt(data.length));\n          rows = Math.ceil(data.length / columns);\n          layout.grid = {\n            columns: columns,\n            rows: rows\n          };\n          for (i in data) {\n            d = data[i];\n            d.domain = {\n              row: Math.floor(i / columns),\n              column: i - columns * Math.floor(i / columns)\n            };\n            if (data.length > 1) {\n              d.title = d.name;\n            }\n          }\n          if (data[0].labels.length === 1) {\n            layout.showlegend = false;\n          }\n        } else {\n          layout.xaxis = {\n            title: transpose ? fullAggName : null,\n            automargin: true\n          };\n          layout.yaxis = {\n            title: transpose ? null : fullAggName,\n            automargin: true\n          };\n        }\n        result = $(\"<div>\").appendTo($(\"body\"));\n        Plotly.newPlot(result[0], data, $.extend(layout, layoutOptions, opts.plotly), opts.plotlyConfig);\n        return result.detach();\n      };\n    };\n    makePlotlyScatterChart = function() {\n      return function(pivotData, opts) {\n        var colKey, colKeys, data, defaults, j, k, layout, len, len1, renderArea, result, rowKey, rowKeys, v;\n        defaults = {\n          localeStrings: {\n            vs: \"vs\",\n            by: \"by\"\n          },\n          plotly: {},\n          plotlyConfig: {}\n        };\n        opts = $.extend(true, {}, defaults, opts);\n        rowKeys = pivotData.getRowKeys();\n        if (rowKeys.length === 0) {\n          rowKeys.push([]);\n        }\n        colKeys = pivotData.getColKeys();\n        if (colKeys.length === 0) {\n          colKeys.push([]);\n        }\n        data = {\n          x: [],\n          y: [],\n          text: [],\n          type: 'scatter',\n          mode: 'markers'\n        };\n        for (j = 0, len = rowKeys.length; j < len; j++) {\n          rowKey = rowKeys[j];\n          for (k = 0, len1 = colKeys.length; k < len1; k++) {\n            colKey = colKeys[k];\n            v = pivotData.getAggregator(rowKey, colKey).value();\n            if (v != null) {\n              data.x.push(colKey.join('-'));\n              data.y.push(rowKey.join('-'));\n              data.text.push(v);\n            }\n          }\n        }\n        layout = {\n          title: pivotData.rowAttrs.join(\"-\") + ' vs ' + pivotData.colAttrs.join(\"-\"),\n          hovermode: 'closest',\n          xaxis: {\n            title: pivotData.colAttrs.join('-'),\n            automargin: true\n          },\n          yaxis: {\n            title: pivotData.rowAttrs.join('-'),\n            automargin: true\n          },\n          width: window.innerWidth / 1.5,\n          height: window.innerHeight / 1.4 - 50\n        };\n        renderArea = $(\"<div>\", {\n          style: \"display:none;\"\n        }).appendTo($(\"body\"));\n        result = $(\"<div>\").appendTo(renderArea);\n        Plotly.newPlot(result[0], [data], $.extend(layout, opts.plotly), opts.plotlyConfig);\n        result.detach();\n        renderArea.remove();\n        return result;\n      };\n    };\n    return $.pivotUtilities.plotly_renderers = {\n      \"Horizontal Bar Chart\": makePlotlyChart({\n        type: 'bar',\n        orientation: 'h'\n      }, {\n        barmode: 'group'\n      }, true),\n      \"Horizontal Stacked Bar Chart\": makePlotlyChart({\n        type: 'bar',\n        orientation: 'h'\n      }, {\n        barmode: 'relative'\n      }, true),\n      \"Bar Chart\": makePlotlyChart({\n        type: 'bar'\n      }, {\n        barmode: 'group'\n      }),\n      \"Stacked Bar Chart\": makePlotlyChart({\n        type: 'bar'\n      }, {\n        barmode: 'relative'\n      }),\n      \"Line Chart\": makePlotlyChart(),\n      \"Area Chart\": makePlotlyChart({\n        stackgroup: 1\n      }),\n      \"Scatter Chart\": makePlotlyScatterChart(),\n      'Multiple Pie Chart': makePlotlyChart({\n        type: 'pie',\n        scalegroup: 1,\n        hoverinfo: 'label+value',\n        textinfo: 'none'\n      }, {}, true)\n    };\n  });\n\n}).call(this);\n\n//# sourceMappingURL=plotly_renderers.js.map\n"]}
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.min.js.map.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.min.js.map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..882f8207cf34eeb158f6968253dd43da00c5110a
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.min.js.map.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="DTMLMethod" module="OFS.DTMLMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>plotly_renderers.min.js.map</string> </value>
+        </item>
+        <item>
+            <key> <string>_vars</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+        <item>
+            <key> <string>globals</string> </key>
+            <value>
+              <dictionary/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.min.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.min.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..63131a8fe10888b5027303620c1f8739002d7d34
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/plotly_renderers.min.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>plotly_renderers.min.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/tips_data.min.js.js b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/tips_data.min.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..0e2c7ae3d3112e1cc4db97c16f33a974b550f0e9
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/tips_data.min.js.js
@@ -0,0 +1,247 @@
+$.pivotUtilities.tipsData = [
+["row","total_bill","tip","sex","smoker","day","time","size"],
+["1",16.99,1.01,"Female","No","Sun","Dinner",2],
+["2",10.34,1.66,"Male","No","Sun","Dinner",3],
+["3",21.01,3.5,"Male","No","Sun","Dinner",3],
+["4",23.68,3.31,"Male","No","Sun","Dinner",2],
+["5",24.59,3.61,"Female","No","Sun","Dinner",4],
+["6",25.29,4.71,"Male","No","Sun","Dinner",4],
+["7",8.77,2,"Male","No","Sun","Dinner",2],
+["8",26.88,3.12,"Male","No","Sun","Dinner",4],
+["9",15.04,1.96,"Male","No","Sun","Dinner",2],
+["10",14.78,3.23,"Male","No","Sun","Dinner",2],
+["11",10.27,1.71,"Male","No","Sun","Dinner",2],
+["12",35.26,5,"Female","No","Sun","Dinner",4],
+["13",15.42,1.57,"Male","No","Sun","Dinner",2],
+["14",18.43,3,"Male","No","Sun","Dinner",4],
+["15",14.83,3.02,"Female","No","Sun","Dinner",2],
+["16",21.58,3.92,"Male","No","Sun","Dinner",2],
+["17",10.33,1.67,"Female","No","Sun","Dinner",3],
+["18",16.29,3.71,"Male","No","Sun","Dinner",3],
+["19",16.97,3.5,"Female","No","Sun","Dinner",3],
+["20",20.65,3.35,"Male","No","Sat","Dinner",3],
+["21",17.92,4.08,"Male","No","Sat","Dinner",2],
+["22",20.29,2.75,"Female","No","Sat","Dinner",2],
+["23",15.77,2.23,"Female","No","Sat","Dinner",2],
+["24",39.42,7.58,"Male","No","Sat","Dinner",4],
+["25",19.82,3.18,"Male","No","Sat","Dinner",2],
+["26",17.81,2.34,"Male","No","Sat","Dinner",4],
+["27",13.37,2,"Male","No","Sat","Dinner",2],
+["28",12.69,2,"Male","No","Sat","Dinner",2],
+["29",21.7,4.3,"Male","No","Sat","Dinner",2],
+["30",19.65,3,"Female","No","Sat","Dinner",2],
+["31",9.55,1.45,"Male","No","Sat","Dinner",2],
+["32",18.35,2.5,"Male","No","Sat","Dinner",4],
+["33",15.06,3,"Female","No","Sat","Dinner",2],
+["34",20.69,2.45,"Female","No","Sat","Dinner",4],
+["35",17.78,3.27,"Male","No","Sat","Dinner",2],
+["36",24.06,3.6,"Male","No","Sat","Dinner",3],
+["37",16.31,2,"Male","No","Sat","Dinner",3],
+["38",16.93,3.07,"Female","No","Sat","Dinner",3],
+["39",18.69,2.31,"Male","No","Sat","Dinner",3],
+["40",31.27,5,"Male","No","Sat","Dinner",3],
+["41",16.04,2.24,"Male","No","Sat","Dinner",3],
+["42",17.46,2.54,"Male","No","Sun","Dinner",2],
+["43",13.94,3.06,"Male","No","Sun","Dinner",2],
+["44",9.68,1.32,"Male","No","Sun","Dinner",2],
+["45",30.4,5.6,"Male","No","Sun","Dinner",4],
+["46",18.29,3,"Male","No","Sun","Dinner",2],
+["47",22.23,5,"Male","No","Sun","Dinner",2],
+["48",32.4,6,"Male","No","Sun","Dinner",4],
+["49",28.55,2.05,"Male","No","Sun","Dinner",3],
+["50",18.04,3,"Male","No","Sun","Dinner",2],
+["51",12.54,2.5,"Male","No","Sun","Dinner",2],
+["52",10.29,2.6,"Female","No","Sun","Dinner",2],
+["53",34.81,5.2,"Female","No","Sun","Dinner",4],
+["54",9.94,1.56,"Male","No","Sun","Dinner",2],
+["55",25.56,4.34,"Male","No","Sun","Dinner",4],
+["56",19.49,3.51,"Male","No","Sun","Dinner",2],
+["57",38.01,3,"Male","Yes","Sat","Dinner",4],
+["58",26.41,1.5,"Female","No","Sat","Dinner",2],
+["59",11.24,1.76,"Male","Yes","Sat","Dinner",2],
+["60",48.27,6.73,"Male","No","Sat","Dinner",4],
+["61",20.29,3.21,"Male","Yes","Sat","Dinner",2],
+["62",13.81,2,"Male","Yes","Sat","Dinner",2],
+["63",11.02,1.98,"Male","Yes","Sat","Dinner",2],
+["64",18.29,3.76,"Male","Yes","Sat","Dinner",4],
+["65",17.59,2.64,"Male","No","Sat","Dinner",3],
+["66",20.08,3.15,"Male","No","Sat","Dinner",3],
+["67",16.45,2.47,"Female","No","Sat","Dinner",2],
+["68",3.07,1,"Female","Yes","Sat","Dinner",1],
+["69",20.23,2.01,"Male","No","Sat","Dinner",2],
+["70",15.01,2.09,"Male","Yes","Sat","Dinner",2],
+["71",12.02,1.97,"Male","No","Sat","Dinner",2],
+["72",17.07,3,"Female","No","Sat","Dinner",3],
+["73",26.86,3.14,"Female","Yes","Sat","Dinner",2],
+["74",25.28,5,"Female","Yes","Sat","Dinner",2],
+["75",14.73,2.2,"Female","No","Sat","Dinner",2],
+["76",10.51,1.25,"Male","No","Sat","Dinner",2],
+["77",17.92,3.08,"Male","Yes","Sat","Dinner",2],
+["78",27.2,4,"Male","No","Thur","Lunch",4],
+["79",22.76,3,"Male","No","Thur","Lunch",2],
+["80",17.29,2.71,"Male","No","Thur","Lunch",2],
+["81",19.44,3,"Male","Yes","Thur","Lunch",2],
+["82",16.66,3.4,"Male","No","Thur","Lunch",2],
+["83",10.07,1.83,"Female","No","Thur","Lunch",1],
+["84",32.68,5,"Male","Yes","Thur","Lunch",2],
+["85",15.98,2.03,"Male","No","Thur","Lunch",2],
+["86",34.83,5.17,"Female","No","Thur","Lunch",4],
+["87",13.03,2,"Male","No","Thur","Lunch",2],
+["88",18.28,4,"Male","No","Thur","Lunch",2],
+["89",24.71,5.85,"Male","No","Thur","Lunch",2],
+["90",21.16,3,"Male","No","Thur","Lunch",2],
+["91",28.97,3,"Male","Yes","Fri","Dinner",2],
+["92",22.49,3.5,"Male","No","Fri","Dinner",2],
+["93",5.75,1,"Female","Yes","Fri","Dinner",2],
+["94",16.32,4.3,"Female","Yes","Fri","Dinner",2],
+["95",22.75,3.25,"Female","No","Fri","Dinner",2],
+["96",40.17,4.73,"Male","Yes","Fri","Dinner",4],
+["97",27.28,4,"Male","Yes","Fri","Dinner",2],
+["98",12.03,1.5,"Male","Yes","Fri","Dinner",2],
+["99",21.01,3,"Male","Yes","Fri","Dinner",2],
+["100",12.46,1.5,"Male","No","Fri","Dinner",2],
+["101",11.35,2.5,"Female","Yes","Fri","Dinner",2],
+["102",15.38,3,"Female","Yes","Fri","Dinner",2],
+["103",44.3,2.5,"Female","Yes","Sat","Dinner",3],
+["104",22.42,3.48,"Female","Yes","Sat","Dinner",2],
+["105",20.92,4.08,"Female","No","Sat","Dinner",2],
+["106",15.36,1.64,"Male","Yes","Sat","Dinner",2],
+["107",20.49,4.06,"Male","Yes","Sat","Dinner",2],
+["108",25.21,4.29,"Male","Yes","Sat","Dinner",2],
+["109",18.24,3.76,"Male","No","Sat","Dinner",2],
+["110",14.31,4,"Female","Yes","Sat","Dinner",2],
+["111",14,3,"Male","No","Sat","Dinner",2],
+["112",7.25,1,"Female","No","Sat","Dinner",1],
+["113",38.07,4,"Male","No","Sun","Dinner",3],
+["114",23.95,2.55,"Male","No","Sun","Dinner",2],
+["115",25.71,4,"Female","No","Sun","Dinner",3],
+["116",17.31,3.5,"Female","No","Sun","Dinner",2],
+["117",29.93,5.07,"Male","No","Sun","Dinner",4],
+["118",10.65,1.5,"Female","No","Thur","Lunch",2],
+["119",12.43,1.8,"Female","No","Thur","Lunch",2],
+["120",24.08,2.92,"Female","No","Thur","Lunch",4],
+["121",11.69,2.31,"Male","No","Thur","Lunch",2],
+["122",13.42,1.68,"Female","No","Thur","Lunch",2],
+["123",14.26,2.5,"Male","No","Thur","Lunch",2],
+["124",15.95,2,"Male","No","Thur","Lunch",2],
+["125",12.48,2.52,"Female","No","Thur","Lunch",2],
+["126",29.8,4.2,"Female","No","Thur","Lunch",6],
+["127",8.52,1.48,"Male","No","Thur","Lunch",2],
+["128",14.52,2,"Female","No","Thur","Lunch",2],
+["129",11.38,2,"Female","No","Thur","Lunch",2],
+["130",22.82,2.18,"Male","No","Thur","Lunch",3],
+["131",19.08,1.5,"Male","No","Thur","Lunch",2],
+["132",20.27,2.83,"Female","No","Thur","Lunch",2],
+["133",11.17,1.5,"Female","No","Thur","Lunch",2],
+["134",12.26,2,"Female","No","Thur","Lunch",2],
+["135",18.26,3.25,"Female","No","Thur","Lunch",2],
+["136",8.51,1.25,"Female","No","Thur","Lunch",2],
+["137",10.33,2,"Female","No","Thur","Lunch",2],
+["138",14.15,2,"Female","No","Thur","Lunch",2],
+["139",16,2,"Male","Yes","Thur","Lunch",2],
+["140",13.16,2.75,"Female","No","Thur","Lunch",2],
+["141",17.47,3.5,"Female","No","Thur","Lunch",2],
+["142",34.3,6.7,"Male","No","Thur","Lunch",6],
+["143",41.19,5,"Male","No","Thur","Lunch",5],
+["144",27.05,5,"Female","No","Thur","Lunch",6],
+["145",16.43,2.3,"Female","No","Thur","Lunch",2],
+["146",8.35,1.5,"Female","No","Thur","Lunch",2],
+["147",18.64,1.36,"Female","No","Thur","Lunch",3],
+["148",11.87,1.63,"Female","No","Thur","Lunch",2],
+["149",9.78,1.73,"Male","No","Thur","Lunch",2],
+["150",7.51,2,"Male","No","Thur","Lunch",2],
+["151",14.07,2.5,"Male","No","Sun","Dinner",2],
+["152",13.13,2,"Male","No","Sun","Dinner",2],
+["153",17.26,2.74,"Male","No","Sun","Dinner",3],
+["154",24.55,2,"Male","No","Sun","Dinner",4],
+["155",19.77,2,"Male","No","Sun","Dinner",4],
+["156",29.85,5.14,"Female","No","Sun","Dinner",5],
+["157",48.17,5,"Male","No","Sun","Dinner",6],
+["158",25,3.75,"Female","No","Sun","Dinner",4],
+["159",13.39,2.61,"Female","No","Sun","Dinner",2],
+["160",16.49,2,"Male","No","Sun","Dinner",4],
+["161",21.5,3.5,"Male","No","Sun","Dinner",4],
+["162",12.66,2.5,"Male","No","Sun","Dinner",2],
+["163",16.21,2,"Female","No","Sun","Dinner",3],
+["164",13.81,2,"Male","No","Sun","Dinner",2],
+["165",17.51,3,"Female","Yes","Sun","Dinner",2],
+["166",24.52,3.48,"Male","No","Sun","Dinner",3],
+["167",20.76,2.24,"Male","No","Sun","Dinner",2],
+["168",31.71,4.5,"Male","No","Sun","Dinner",4],
+["169",10.59,1.61,"Female","Yes","Sat","Dinner",2],
+["170",10.63,2,"Female","Yes","Sat","Dinner",2],
+["171",50.81,10,"Male","Yes","Sat","Dinner",3],
+["172",15.81,3.16,"Male","Yes","Sat","Dinner",2],
+["173",7.25,5.15,"Male","Yes","Sun","Dinner",2],
+["174",31.85,3.18,"Male","Yes","Sun","Dinner",2],
+["175",16.82,4,"Male","Yes","Sun","Dinner",2],
+["176",32.9,3.11,"Male","Yes","Sun","Dinner",2],
+["177",17.89,2,"Male","Yes","Sun","Dinner",2],
+["178",14.48,2,"Male","Yes","Sun","Dinner",2],
+["179",9.6,4,"Female","Yes","Sun","Dinner",2],
+["180",34.63,3.55,"Male","Yes","Sun","Dinner",2],
+["181",34.65,3.68,"Male","Yes","Sun","Dinner",4],
+["182",23.33,5.65,"Male","Yes","Sun","Dinner",2],
+["183",45.35,3.5,"Male","Yes","Sun","Dinner",3],
+["184",23.17,6.5,"Male","Yes","Sun","Dinner",4],
+["185",40.55,3,"Male","Yes","Sun","Dinner",2],
+["186",20.69,5,"Male","No","Sun","Dinner",5],
+["187",20.9,3.5,"Female","Yes","Sun","Dinner",3],
+["188",30.46,2,"Male","Yes","Sun","Dinner",5],
+["189",18.15,3.5,"Female","Yes","Sun","Dinner",3],
+["190",23.1,4,"Male","Yes","Sun","Dinner",3],
+["191",15.69,1.5,"Male","Yes","Sun","Dinner",2],
+["192",19.81,4.19,"Female","Yes","Thur","Lunch",2],
+["193",28.44,2.56,"Male","Yes","Thur","Lunch",2],
+["194",15.48,2.02,"Male","Yes","Thur","Lunch",2],
+["195",16.58,4,"Male","Yes","Thur","Lunch",2],
+["196",7.56,1.44,"Male","No","Thur","Lunch",2],
+["197",10.34,2,"Male","Yes","Thur","Lunch",2],
+["198",43.11,5,"Female","Yes","Thur","Lunch",4],
+["199",13,2,"Female","Yes","Thur","Lunch",2],
+["200",13.51,2,"Male","Yes","Thur","Lunch",2],
+["201",18.71,4,"Male","Yes","Thur","Lunch",3],
+["202",12.74,2.01,"Female","Yes","Thur","Lunch",2],
+["203",13,2,"Female","Yes","Thur","Lunch",2],
+["204",16.4,2.5,"Female","Yes","Thur","Lunch",2],
+["205",20.53,4,"Male","Yes","Thur","Lunch",4],
+["206",16.47,3.23,"Female","Yes","Thur","Lunch",3],
+["207",26.59,3.41,"Male","Yes","Sat","Dinner",3],
+["208",38.73,3,"Male","Yes","Sat","Dinner",4],
+["209",24.27,2.03,"Male","Yes","Sat","Dinner",2],
+["210",12.76,2.23,"Female","Yes","Sat","Dinner",2],
+["211",30.06,2,"Male","Yes","Sat","Dinner",3],
+["212",25.89,5.16,"Male","Yes","Sat","Dinner",4],
+["213",48.33,9,"Male","No","Sat","Dinner",4],
+["214",13.27,2.5,"Female","Yes","Sat","Dinner",2],
+["215",28.17,6.5,"Female","Yes","Sat","Dinner",3],
+["216",12.9,1.1,"Female","Yes","Sat","Dinner",2],
+["217",28.15,3,"Male","Yes","Sat","Dinner",5],
+["218",11.59,1.5,"Male","Yes","Sat","Dinner",2],
+["219",7.74,1.44,"Male","Yes","Sat","Dinner",2],
+["220",30.14,3.09,"Female","Yes","Sat","Dinner",4],
+["221",12.16,2.2,"Male","Yes","Fri","Lunch",2],
+["222",13.42,3.48,"Female","Yes","Fri","Lunch",2],
+["223",8.58,1.92,"Male","Yes","Fri","Lunch",1],
+["224",15.98,3,"Female","No","Fri","Lunch",3],
+["225",13.42,1.58,"Male","Yes","Fri","Lunch",2],
+["226",16.27,2.5,"Female","Yes","Fri","Lunch",2],
+["227",10.09,2,"Female","Yes","Fri","Lunch",2],
+["228",20.45,3,"Male","No","Sat","Dinner",4],
+["229",13.28,2.72,"Male","No","Sat","Dinner",2],
+["230",22.12,2.88,"Female","Yes","Sat","Dinner",2],
+["231",24.01,2,"Male","Yes","Sat","Dinner",4],
+["232",15.69,3,"Male","Yes","Sat","Dinner",3],
+["233",11.61,3.39,"Male","No","Sat","Dinner",2],
+["234",10.77,1.47,"Male","No","Sat","Dinner",2],
+["235",15.53,3,"Male","Yes","Sat","Dinner",2],
+["236",10.07,1.25,"Male","No","Sat","Dinner",2],
+["237",12.6,1,"Male","Yes","Sat","Dinner",2],
+["238",32.83,1.17,"Male","Yes","Sat","Dinner",2],
+["239",35.83,4.67,"Female","No","Sat","Dinner",3],
+["240",29.03,5.92,"Male","No","Sat","Dinner",3],
+["241",27.18,2,"Female","Yes","Sat","Dinner",2],
+["242",22.67,2,"Male","Yes","Sat","Dinner",2],
+["243",17.82,1.75,"Male","No","Sat","Dinner",2],
+["244",18.78,3,"Female","No","Thur","Dinner",2]
+];
\ No newline at end of file
diff --git a/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/tips_data.min.js.xml b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/tips_data.min.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..df05471e0160100da91f07abe5dadbe1eea8fa26
--- /dev/null
+++ b/bt5/erp5_pivot_table/SkinTemplateItem/portal_skins/erp5_pivot_table/pivottable/tips_data.min.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>tips_data.min.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>