annotate src/layout/Layout.ts @ 110:3cdbbd913f1d

table displays now just barely
author drewp@bigasterisk.com
date Fri, 18 Mar 2022 23:41:24 -0700
parents 5e6840229a05
children 4b33a479dc2f
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";
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
5 import { rdf, rdfs } 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[];
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
19 rowHeaders: NamedNode[];
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
20 rows: Term[][][];
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
21 }
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
22
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
23 export interface PredRow {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
24 pred: NamedNode;
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
25 objs: Term[];
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
26 }
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
27
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
28 export interface SubjRow {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
29 subj: NamedNode;
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
30 predRows: PredRow[];
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
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
33 export interface FreeStatements {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
34 subjRows: SubjRow[];
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
35 }
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
36
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
37 export interface LayoutResult {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
38 sections: (AlignedTable | FreeStatements)[];
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
39 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
40
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
41 interface ISP {
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
42 subj: NamedNode;
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
43 pred: NamedNode;
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
44 }
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
45 const makeSP = Immutable.Record<ISP>({
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
46 subj: new NamedNode(""),
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
47 pred: new NamedNode(""),
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
48 });
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
49
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
50 class AlignedTableBuilder {
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
51 subjSet = Immutable.Set<NamedNode>();
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
52 predSet = Immutable.Set<NamedNode>();
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
53 cell = Immutable.Map<string, Immutable.Set<Term>>();
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
54 constructor(
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
55 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
56 ) {}
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
57
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
58 addQuad(q: Quad) {
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
59 const subj = q.subject as NamedNode;
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
60 const pred = q.predicate as NamedNode;
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
61 this.subjSet = this.subjSet.add(subj);
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
62 this.predSet = this.predSet.add(pred);
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
63
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
64 const key =subj.id+pred.id//makeSP({ subj, pred });
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
65 const cur = this.cell.get(key, undefined);
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
66 const newval =
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
67 cur === undefined ? Immutable.Set([q.object]) : cur.add(q.object);
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
68
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
69 this.cell = this.cell.set(key, newval);
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
70 }
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
71
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
72 value(): AlignedTable {
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
73 let preds = uniqueSortedTerms(this.predSet);
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
74 const tagged = preds.map((p, i)=>{
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
75 if (p.equals(rdf.type)) {
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
76 i=999;
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
77 }
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
78 if (p.equals(rdfs.label)) {
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
79 i=-1
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
80 }
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
81 return {sort:i, val: p}
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
82 })
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
83 tagged.sort((a,b)=>{
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
84 return a.sort - b.sort;
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
85 });
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
86 preds = tagged.map((e)=>e.val);
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
87
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
88 // const omittedColumn = pred.equals(rdf.type);
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
89 const subjs = uniqueSortedTerms(this.subjSet);
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
90 const outputGrid: Term[][][] = [];
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
91 for (let subj of subjs) {
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
92 const row: Term[][] = [];
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
93 preds.forEach((pred) => {
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
94 const key = subj.id+pred.id;//makeSP({ subj, pred });
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
95 const objs = this.cell.get(key, Immutable.Set<Term>([]));
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
96 const uniq = uniqueSortedTerms(objs);
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
97 console.log("cell objs", objs.size, uniq.length);
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
98 row.push(uniq);
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
99 });
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
100 outputGrid.push(row);
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
101 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
102
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
103 const headers = preds.map((pred) => {
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
104 return { rdfType: this.rdfType, pred: pred };
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
105 });
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
106 return { columnHeaders: headers, rowHeaders: subjs, rows: outputGrid };
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
107 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
108 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
109
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
110 function findTypesNeededForTables(viewConfig?: ViewConfig): UriSet {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
111 const typesToGather: NamedNode[] = [];
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
112 if (viewConfig) {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
113 viewConfig.tables.forEach((t: TableDesc) => {
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
114 typesToGather.push(t.primary);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
115 });
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
116 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
117 return Immutable.Set(typesToGather);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
118 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
119
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
120 function findSubjectsWithTypes(graph: Store, typesToGather: UriSet): UriSet {
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
121 const subjectsToGather: NamedNode[] = [];
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
122 const ft = typesToGather.toArray()[0];
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
123 graph.forEach(
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
124 (q: Quad) => {
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
125 if (q.object.equals(ft)) {
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
126 //typesToGather.has(q.object as NamedNode)) {
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
127 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
128 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
129 },
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
130 null,
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
131 rdf.type,
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
132 null,
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
133 null
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
134 );
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
135 return Immutable.Set(subjectsToGather);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
136 }
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
137
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
138 function freeStatmentsSection(stmts: Quad[]): FreeStatements {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
139 const subjs: NamedNode[] = [];
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
140 stmts.forEach((q) => {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
141 subjs.push(q.subject as NamedNode);
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
142 });
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
143 return {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
144 subjRows: uniqueSortedTerms(subjs).map((subj) => {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
145 const preds: NamedNode[] = [];
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
146 let po = Immutable.Map<NamedNode, Term[]>();
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
147 stmts.forEach((q) => {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
148 if (q.subject.equals(subj)) {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
149 const p = q.predicate as NamedNode;
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
150 preds.push(p);
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
151 po = po.set(p, po.get(p, []));
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
152 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
153 }
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
154 });
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
155
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
156 const rows: PredRow[] = [];
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
157 uniqueSortedTerms(preds).forEach((p) => {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
158 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
159 });
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
160 return { subj: subj, predRows: rows };
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
161 }),
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
162 };
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
163 }
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
164
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
165 // The description of how this page should look: sections, tables, etc.
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
166 export class Layout {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
167 constructor(public viewConfig?: ViewConfig) {}
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
168 plan(graph: Store): LayoutResult {
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
169 const typesToTable = findTypesNeededForTables(this.viewConfig);
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
170
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
171 const subjectsToTable = findSubjectsWithTypes(graph, typesToTable);
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
172 const ungrouped: Quad[] = [];
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
173 const vc = this.viewConfig;
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
174 const table =
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
175 vc && vc.tables.length > 0
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
176 ? new AlignedTableBuilder(vc.tables[0].primary) //todo multiple tables
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
177 : null;
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
178
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
179 graph.forEach(
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
180 (q: Quad) => {
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
181 let contains = false;
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
182 subjectsToTable.forEach((s) => {
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
183 if (s.equals(q.subject)) {
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
184 contains = true;
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
185 }
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
186 });
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
187
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
188 // if (subjectsToTable.has(q.subject as NamedNode) && table) { // not working
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
189 if (contains && table) {
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
190 table.addQuad(q);
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
191 } else {
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
192 ungrouped.push(q);
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
193 }
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
194 },
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
195 null,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
196 null,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
197 null,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
198 null
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
199 );
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
200 const res: LayoutResult = { sections: [] };
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
201 if (table) {
110
3cdbbd913f1d table displays now just barely
drewp@bigasterisk.com
parents: 108
diff changeset
202 console.log("table value");
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
203 res.sections.push(table.value());
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
204 }
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
205 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
206 return res;
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
207 }
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
208 }
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
209
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
210 // // One table of rows with a common rdf:type.
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
211 // export class MultiSubjsTypeBlockLayout {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
212 // subjs: NamedNode[];
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
213 // preds: NamedNode[];
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
214 // graphCells: Immutable.Map<ISP, Immutable.Set<Term>>;
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
215 // constructor(graph: Store, byType: TypeToSubjs, table: TableDesc) {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
216 // const subjSet = byType.get(table.primary);
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
217 // this.subjs = subjSet ? Array.from(subjSet) : [];
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
218 // this.subjs.sort();
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
219
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
220 // let preds = Immutable.Set<NamedNode>();
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
221
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
222 // this.graphCells = Immutable.Map<ISP, Immutable.Set<Term>>().withMutations(
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
223 // (mutGraphCells) => {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
224 // this.subjs.forEach((subj: NamedNode) => {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
225 // graph.forEach(
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
226 // (q: Quad) => {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
227 // if (!Util.isNamedNode(q.predicate)) {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
228 // throw new Error();
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
229 // }
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
230
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
231 // const pred = q.predicate as NamedNode;
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
232 // if (pred.equals(rdf.type)) {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
233 // // the whole block is labeled with the type
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
234 // return;
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
235 // }
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
236 // preds = preds.add(pred);
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
237 // const cellKey = this.makeCellKey(subj, pred);
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
238 // mutGraphCells.set(
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
239 // cellKey,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
240 // mutGraphCells.get(cellKey, Immutable.Set<Term>()).add(q.object)
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
241 // );
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
242 // },
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
243 // subj,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
244 // null,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
245 // null,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
246 // null
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
247 // );
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
248 // });
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
249 // }
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
250 // );
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
251 // this.preds = Array.from(preds);
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
252 // this.preds.splice(this.preds.indexOf(rdf.type), 1);
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
253 // // also pull out label, which should be used on 1st column
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
254 // this.preds.sort();
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
255 // }
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
256
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
257 // makeCellKey(subj: NamedNode, pred: NamedNode): ISP {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
258 // return SP({
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
259 // subj: subj,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
260 // pred: pred,
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
261 // });
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
262 // }
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 97
diff changeset
263 // }