diff --git a/index.html b/index.html index 9d79970..73d18a6 100644 --- a/index.html +++ b/index.html @@ -83,27 +83,41 @@ var N = { let Leafify = inRows => inRows.map(r => N.Create({Row:r})); let Pivot = (inParent, inColumnIndicies, inSumIndicies, inDepth) => { + /* + arguments: + - a Node with leaf Nodes temporarily stored in its Meta.Leaves + - where each leaf Node has a row of table data in it's Meta.Row + - a list of columns to pivot on + - a list of columns to sum + - optional traversal depth, defaults to 0 + */ let depth = inDepth||0; let uniques = {}; - let columnIndex = inColumnIndicies[depth]; - inParent.Meta.Leaves.forEach((inLeaf)=> { - let row = inLeaf.Meta.Row; - let value = row[columnIndex]; - let match = uniques[value]; + let row = inLeaf.Meta.Row; // get the raw "CSV" row out of the leaf Node's Meta + let value = row[inColumnIndicies[depth]]; // get the pivot column + let match = uniques[value]; // check in the uniques list if this pivot column exists if(!match) { - match = uniques[value] = {Label:value, Row:[...row], Leaves:[]}; + // if not, store a value under that key that will be the meta object for a new child + match = uniques[value] = { + Label:value, + Row:inSumIndicies.map((inColumnIndex, inIndex, inArray) => row[inColumnIndex]), // create a Meta.Row also on the new child nodes to store summed totals + Leaves:[] + }; + // grow a child off of the parent using the meta object N.Connect(inParent, "Children", N.Create(match), "Parents"); } else { - inSumIndicies.forEach(inIndex => match.Row[inIndex] += row[inIndex]); + // if a match does exist, sum the appropriate columns + inSumIndicies.forEach((inColumnIndex, inIndex, inArray) => match.Row[inIndex] += row[inColumnIndex]); } + // move the leaves into the child match.Leaves.push(inLeaf); }); - + delete inParent.Meta.Leaves; if(depth == inColumnIndicies.length-1) { @@ -128,9 +142,12 @@ let csv = Leafify([ ["#6", "a", "short", 0], ["#7", "b", "short", 7], ]); -let pivotRoot = N.Create({Leaves:csv}); -Pivot(pivotRoot, [1, 2], [3]); -console.log(pivotRoot); +let pivotRoot1 = N.Create({Leaves:csv}); +Pivot(pivotRoot1, [1, 2], [3]); +let pivotRoot2 = N.Create({Leaves:csv}); +Pivot(pivotRoot2, [2, 1], [3]); + +let pivots = [pivotRoot1, pivotRoot2]; let ElNode = ({node}) => { @@ -157,7 +174,14 @@ let ElNode = ({node}) => } return h("div", {style:{padding:"10px"}}, children); } -let ElRoot = ({root}) => + +let ElPivot = ({pivot}) => +{ + return h("div", {}, [ + + ]); +} +let ElRoot = () => { return h("div", null, [ h("h3", null, "tree view"),