Skip to content

Commit

Permalink
Merge pull request #9 from pat310/supportForLowerNodeV
Browse files Browse the repository at this point in the history
fixing formatting in README, supporting older versions of node by add…
  • Loading branch information
pat310 committed Jan 25, 2017
2 parents 2a7e7b5 + 4a5e78b commit e45776c
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 17 deletions.
8 changes: 1 addition & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
[![Build Status](https://img.shields.io/travis/pat310/quick-pivot.svg)](https://travis-ci.org/pat310/quick-pivot)
[![Coverage Status](https://coveralls.io/repos/github/pat310/quick-pivot/badge.svg?branch=addingCoveralls)](https://coveralls.io/github/pat310/quick-pivot?branch=addingCoveralls)
[![Code Climate](https://codeclimate.com/github/pat310/quick-pivot/badges/gpa.svg)](https://codeclimate.com/github/pat310/quick-pivot)
[![Dependency Status](https://img.shields.io/david/pat310/quick-pivot.svg?style=flat-square)](https://david-dm.org/pat310/quick-pivot)

## What it does
Say you have this example data set:<br>
Expand Down Expand Up @@ -55,12 +54,7 @@ console.log(pivotedData);
console logs:
```js
{ table:
[ [ 'sum age',
'Stark',
'Stark',
'Baratheon',
'Baratheon',
'Lannister' ],
[ [ 'sum age', 'Stark', 'Stark', 'Baratheon', 'Baratheon', 'Lannister' ],
[ 'sum age', 'm', 'f', 'f', 'm', 'm' ],
[ 'Jon', 14, '', '', '', '' ],
[ 'Arya', '', 10, '', '', '' ],
Expand Down
77 changes: 71 additions & 6 deletions logic.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,69 @@
'use strict';
//polyfill for Object.assign
function assignObject(target, varArgs) { // .length of function is 2
'use strict';
if (target === null) { // TypeError if undefined or null
throw new TypeError('Cannot convert undefined or null to object');
}

var to = Object(target);

for (var index = 1; index < arguments.length; index++) {
var nextSource = arguments[index];

if (nextSource !== null) { // Skip over if undefined or null
for (var nextKey in nextSource) {
// Avoid bugs when hasOwnProperty is shadowed
if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
to[nextKey] = nextSource[nextKey];
}
}
}
}
return to;
}

// polyfill for Array.fill
function arrayFill(value) {

// Steps 1-2.
if (this === null) {
throw new TypeError('this is null or not defined');
}

var O = Object(this);

// Steps 3-5.
var len = O.length >>> 0;

// Steps 6-7.
var start = arguments[1];
var relativeStart = start >> 0;

// Step 8.
var k = relativeStart < 0 ?
Math.max(len + relativeStart, 0) :
Math.min(relativeStart, len);

// Steps 9-10.
var end = arguments[2];
var relativeEnd = end === undefined ?
len : end >> 0;

// Step 11.
var final = relativeEnd < 0 ?
Math.max(len + relativeEnd, 0) :
Math.min(relativeEnd, len);

// Step 12.
while (k < final) {
O[k] = value;
k++;
}

// Step 13.
return O;
}

function fixDataFormat(data){
if(!Array.isArray(data) || !data.length) return [];
Expand Down Expand Up @@ -38,7 +103,7 @@ function groupByCategories(data, groups = [], acc = {}){

if(!groups.length) return data;

var groupCopy = Object.assign([], groups);
var groupCopy = assignObject([], groups);
var groupedData = groupByCategory(data, groupCopy.shift());
var groupedDataKeys = Object.keys(groupedData);
var children = groupedDataKeys.map(el => {
Expand All @@ -57,7 +122,7 @@ function createColumnHeaders(data, cols = [], firstColumn = ''){

var groupedData = groupByCategories(data, cols);
var columnHeaders = [];
var mapToHeader = Object.assign({}, groupedData);
var mapToHeader = assignObject({}, groupedData);
var mapPos = 1;

(function columnHeaderRecursion(data, pos = 0, headerMap){
Expand All @@ -72,7 +137,7 @@ function createColumnHeaders(data, cols = [], firstColumn = ''){
mapPos += 1;
}
reqLength += currLength;
columnHeaders[pos] = !columnHeaders[pos] ? [firstColumn].concat(Array(currLength).fill(currKeys[i])) : columnHeaders[pos].concat(Array(currLength).fill(currKeys[i]));
columnHeaders[pos] = !columnHeaders[pos] ? [firstColumn].concat(arrayFill.call(Array(currLength), currKeys[i])) : columnHeaders[pos].concat(arrayFill.call(Array(currLength), currKeys[i]));
}
return reqLength;
}
Expand Down Expand Up @@ -147,8 +212,8 @@ function tableCreator(data, rows = [], cols = [], accCatOrCB, accTypeOrInitVal,
rawData[rawData.length - 1] = rawDataDatum;
}else{
prevKey = key;
let datum = [key].concat(Array(map - 1).fill(''), accumulator(dataPos, accCatOrCB, accTypeOrInitVal), Array(headerLength - (map + 1)).fill(''));
let rawDataDatum = [key].concat(Array(map - 1).fill(''), [dataPos], Array(headerLength - (map + 1)).fill(''));
let datum = [key].concat(arrayFill.call(Array(map - 1), ''), accumulator(dataPos, accCatOrCB, accTypeOrInitVal), arrayFill.call(Array(headerLength - (map + 1)), ''));
let rawDataDatum = [key].concat(arrayFill.call(Array(map - 1), ''), [dataPos], arrayFill.call(Array(headerLength - (map + 1)), ''));
rawData.push(rawDataDatum);
dataRows.push(datum);
}
Expand All @@ -160,7 +225,7 @@ function tableCreator(data, rows = [], cols = [], accCatOrCB, accTypeOrInitVal,
})(recursedData, mapToHeader || 1);

}else{
dataRows.push([key].concat(Array(headerLength - 1).fill('')));
dataRows.push([key].concat(arrayFill.call(Array(headerLength - 1), '')));
rowRecurse(rowGroups[key], key);
}
}
Expand Down
11 changes: 7 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,20 @@
"url": "git+https://github.com/pat310/quick-pivot.git"
},
"keywords": [
"pivot"
"pivot",
"pivotchart",
"pivotgrid",
"pivottable",
"table",
"grid",
"crosstab"
],
"author": "Patrick Trasborg",
"license": "MIT",
"bugs": {
"url": "https://github.com/pat310/quick-pivot/issues"
},
"homepage": "https://github.com/pat310/quick-pivot#readme",
"engines": {
"node": ">=4.0.0"
},
"devDependencies": {
"babel-cli": "^6.22.2",
"babel-preset-es2015": "^6.22.0",
Expand Down

0 comments on commit e45776c

Please sign in to comment.