annotate src/layout/Layout.ts @ 108:5e6840229a05

rewrite freeStatements rendering to put more planning in layout
author drewp@bigasterisk.com
date Fri, 18 Mar 2022 11:57:38 -0700
parents 2468f2227d22
children 3cdbbd913f1d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
1 // Organize graph data into tables (column orders, etc) for the view layer.
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
2
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
3 import Immutable from "immutable"; // mostly using this for the builtin equals() testing, since NamedNode(x)!=NamedNode(x)
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
4 import { NamedNode, Quad, Store, Term } from "n3";
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
5 import { rdf } from "./namespaces";
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
6 import { uniqueSortedTerms } from "./rdf_value";
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
7 import { TableDesc, ViewConfig } from "./ViewConfig";
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
8
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
9 type UriSet = Immutable.Set<NamedNode>;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
10 export type TypeToSubjs = Immutable.Map<NamedNode, UriSet>;
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
11
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
12 interface ColumnHeader {
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
13 rdfType: NamedNode;
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
14 pred: NamedNode;
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
15 }
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
16
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
17 export interface AlignedTable {
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
18 columnHeaders: ColumnHeader[];
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
19 rows: (Term | null)[][]; // each row is 1 wider than columnHeaders since the 1st element is the subject for that row
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
20 }
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
21
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
22 export interface PredRow {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
23 pred: NamedNode;
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
24 objs: Term[];
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
25 }
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
26
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
27 export interface SubjRow {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
28 subj: NamedNode;
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
29 predRows: PredRow[];
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
30 }
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
31
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
32 export interface FreeStatements {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
33 subjRows: SubjRow[];
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
34 }
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
35
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
36 export interface LayoutResult {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
37 sections: (AlignedTable | FreeStatements)[];
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
38 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
39
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
40 class AlignedTableBuilder {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
41 columnPreds = Immutable.List<NamedNode>();
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
42 subjRowIndices = Immutable.Map<NamedNode, number>();
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
43 rows: (Term | null)[][] = [];
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
44 constructor(
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
45 public rdfType: NamedNode /* plus join types, sort instructions */
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
46 ) {}
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
47
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
48 addQuad(q: Quad) {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
49 const pred = q.predicate as NamedNode;
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
50 const omittedColumn = pred.equals(rdf.type);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
51 if (!this.columnPreds.contains(pred) && !omittedColumn) {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
52 this.columnPreds = this.columnPreds.push(pred); // this is putting cols in random order
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
53 this.rows.forEach((r) => r.push(null));
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
54 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
55
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
56 const predIndex = omittedColumn ? null : this.columnPreds.indexOf(pred);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
57 let rowIndex = this.subjRowIndices.get(q.subject as NamedNode);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
58 if (rowIndex === undefined) {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
59 const newRow = new Array(1 + this.columnPreds.size).fill(null);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
60 newRow[0] = q.subject;
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
61 this.rows.push(newRow);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
62 rowIndex = this.rows.length - 1;
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
63 this.subjRowIndices = this.subjRowIndices.set(
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
64 q.subject as NamedNode,
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
65 rowIndex
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
66 );
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
67 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
68 if (predIndex !== null) {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
69 this.rows[rowIndex][1 + predIndex] = q.object;
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
70 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
71 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
72
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
73 value(): AlignedTable {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
74 this.rows.sort((a, b) => {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
75 const uriA = (a[0] as NamedNode).value,
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
76 uriB = (b[0] as NamedNode).value;
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
77 return uriA.localeCompare(uriB);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
78 });
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
79 const headers = this.columnPreds
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
80 .map((pred) => {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
81 return { rdfType: this.rdfType, pred: pred };
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
82 })
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
83 .toArray();
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
84 return { columnHeaders: headers, rows: this.rows };
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
85 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
86 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
87
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
88 function findTypesNeededForTables(viewConfig?: ViewConfig): UriSet {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
89 const typesToGather: NamedNode[] = [];
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
90 if (viewConfig) {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
91 viewConfig.tables.forEach((t: TableDesc) => {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
92 typesToGather.push(t.primary);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
93 });
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
94 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
95 return Immutable.Set(typesToGather);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
96 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
97
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
98 function findSubjectsWithTypes(graph: Store, typesToGatherSet: UriSet): UriSet {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
99 const subjectsToGather: NamedNode[] = [];
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
100 graph.forEach(
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
101 (q: Quad) => {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
102 if (typesToGatherSet.contains(q.object as NamedNode)) {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
103 subjectsToGather.push(q.subject as NamedNode);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
104 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
105 },
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
106 null,
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
107 rdf.type,
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
108 null,
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
109 null
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
110 );
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
111 return Immutable.Set(subjectsToGather);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
112 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
113
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
114 function freeStatmentsSection(stmts: Quad[]): FreeStatements {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
115 const subjs: NamedNode[] = [];
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
116 stmts.forEach((q) => {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
117 subjs.push(q.subject as NamedNode);
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
118 });
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
119 return {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
120 subjRows: uniqueSortedTerms(subjs).map((subj) => {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
121 const preds: NamedNode[] = [];
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
122 let po = Immutable.Map<NamedNode, Term[]>();
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
123 stmts.forEach((q) => {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
124 if (q.subject.equals(subj)) {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
125 const p = q.predicate as NamedNode;
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
126 preds.push(p);
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
127 po = po.set(p, po.get(p, []));
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
128 po.get(p)?.push(q.object as Term);
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
129 }
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
130 });
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
131
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
132 const rows: PredRow[] = [];
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
133 uniqueSortedTerms(preds).forEach((p) => {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
134 rows.push({ pred: p, objs: uniqueSortedTerms(po.get(p, [])) });
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
135 });
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
136 return { subj: subj, predRows: rows };
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
137 }),
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
138 };
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
139 }
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
140
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
141 // The description of how this page should look: sections, tables, etc.
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
142 export class Layout {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
143 constructor(public viewConfig?: ViewConfig) {}
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
144 plan(graph: Store): LayoutResult {
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
145 const typesToGatherSet = findTypesNeededForTables(this.viewConfig);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
146
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
147 const subjectsToGatherSet = findSubjectsWithTypes(graph, typesToGatherSet);
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
148 const ungrouped: Quad[] = [];
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
149 const vc = this.viewConfig;
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
150 const table =
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
151 vc && vc.tables.length > 0
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
152 ? new AlignedTableBuilder(vc.tables[0].primary)
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
153 : null;
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
154
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
155 graph.forEach(
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
156 (q: Quad) => {
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
157 if (!subjectsToGatherSet.contains(q.subject as NamedNode) || !table) {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
158 ungrouped.push(q);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
159 } else {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
160 table.addQuad(q);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
161 }
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
162 },
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
163 null,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
164 null,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
165 null,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
166 null
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
167 );
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
168 const res: LayoutResult = { sections: [] };
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
169 if (table) {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
170 res.sections.push(table.value());
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
171 }
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
172 res.sections.push(freeStatmentsSection(ungrouped));
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
173 return res;
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
174 }
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
175 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
176
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
177 // interface ISP {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
178 // subj: NamedNode;
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
179 // pred: NamedNode;
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
180 // }
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
181 // const SP = Immutable.Record<ISP>({
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
182 // subj: new NamedNode(""),
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
183 // pred: new NamedNode(""),
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
184 // });
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
185
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
186 // // One table of rows with a common rdf:type.
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
187 // export class MultiSubjsTypeBlockLayout {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
188 // subjs: NamedNode[];
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
189 // preds: NamedNode[];
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
190 // graphCells: Immutable.Map<ISP, Immutable.Set<Term>>;
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
191 // constructor(graph: Store, byType: TypeToSubjs, table: TableDesc) {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
192 // const subjSet = byType.get(table.primary);
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
193 // this.subjs = subjSet ? Array.from(subjSet) : [];
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
194 // this.subjs.sort();
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
195
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
196 // let preds = Immutable.Set<NamedNode>();
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
197
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
198 // this.graphCells = Immutable.Map<ISP, Immutable.Set<Term>>().withMutations(
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
199 // (mutGraphCells) => {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
200 // this.subjs.forEach((subj: NamedNode) => {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
201 // graph.forEach(
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
202 // (q: Quad) => {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
203 // if (!Util.isNamedNode(q.predicate)) {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
204 // throw new Error();
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
205 // }
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
206
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
207 // const pred = q.predicate as NamedNode;
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
208 // if (pred.equals(rdf.type)) {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
209 // // the whole block is labeled with the type
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
210 // return;
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
211 // }
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
212 // preds = preds.add(pred);
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
213 // const cellKey = this.makeCellKey(subj, pred);
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
214 // mutGraphCells.set(
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
215 // cellKey,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
216 // mutGraphCells.get(cellKey, Immutable.Set<Term>()).add(q.object)
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
217 // );
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
218 // },
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
219 // subj,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
220 // null,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
221 // null,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
222 // null
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
223 // );
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
224 // });
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
225 // }
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
226 // );
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
227 // this.preds = Array.from(preds);
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
228 // this.preds.splice(this.preds.indexOf(rdf.type), 1);
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
229 // // also pull out label, which should be used on 1st column
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
230 // this.preds.sort();
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
231 // }
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
232
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
233 // makeCellKey(subj: NamedNode, pred: NamedNode): ISP {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
234 // return SP({
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
235 // subj: subj,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
236 // pred: pred,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
237 // });
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
238 // }
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
239 // }