aboutsummaryrefslogtreecommitdiff
path: root/src/client/util/LinkManager.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/util/LinkManager.ts')
-rw-r--r--src/client/util/LinkManager.ts81
1 files changed, 56 insertions, 25 deletions
diff --git a/src/client/util/LinkManager.ts b/src/client/util/LinkManager.ts
index a6d649395..5e8e0475b 100644
--- a/src/client/util/LinkManager.ts
+++ b/src/client/util/LinkManager.ts
@@ -10,6 +10,43 @@ import { Doc } from "../../new_fields/Doc";
import { listSpec } from "../../new_fields/Schema";
import { List } from "../../new_fields/List";
+export namespace LinkUtils {
+ export function findOppositeAnchor(link: Doc, anchor: Doc): Doc {
+ if (Doc.AreProtosEqual(anchor, Cast(link.anchor1, Doc, new Doc))) {
+ return Cast(link.anchor2, Doc, new Doc);
+ } else {
+ return Cast(link.anchor1, Doc, new Doc);
+ }
+ }
+
+ // export function getAnchorGroups(link: Doc, anchor: Doc): Doc[] {
+ // let groups;
+ // if (Doc.AreProtosEqual(anchor, Cast(link.anchor1, Doc, new Doc))) {
+ // groups = Cast(link.anchor1Groups, listSpec(Doc), []);
+ // } else {
+ // groups = Cast(link.anchor2Groups, listSpec(Doc), []);
+ // }
+
+ // if (groups instanceof Doc[]) {
+ // return groups;
+ // } else {
+ // return [];
+ // }
+ // // if (Doc.AreProtosEqual(anchor, Cast(link.anchor1, Doc, new Doc))) {
+ // // returnCast(link.anchor1Groups, listSpec(Doc), []);
+ // // } else {
+ // // return Cast(link.anchor2Groups, listSpec(Doc), []);
+ // // }
+ // }
+
+ export function setAnchorGroups(link: Doc, anchor: Doc, groups: Doc[]) {
+ if (Doc.AreProtosEqual(anchor, Cast(link.anchor1, Doc, new Doc))) {
+ link.anchor1Groups = new List<Doc>(groups);
+ } else {
+ link.anchor2Groups = new List<Doc>(groups);
+ }
+ }
+}
export class LinkManager {
private static _instance: LinkManager;
@@ -19,31 +56,30 @@ export class LinkManager {
private constructor() {
}
- @observable
- public allLinks: Array<Doc> = [];
+ @observable public allLinks: Array<Doc> = [];
+ @observable public allGroups: Map<string, Doc> = new Map();
- public findAllRelatedLinks(source: Doc): Array<Doc> {
- let related = LinkManager.Instance.allLinks.filter(
- link => Doc.AreProtosEqual(source, Cast(link.anchor1, Doc, new Doc)) || Doc.AreProtosEqual(source, Cast(link.anchor2, Doc, new Doc)));
- return related;
+ public findAllRelatedLinks(anchor: Doc): Array<Doc> {
+ return LinkManager.Instance.allLinks.filter(
+ link => Doc.AreProtosEqual(anchor, Cast(link.anchor1, Doc, new Doc)) || Doc.AreProtosEqual(anchor, Cast(link.anchor2, Doc, new Doc)));
}
- public findRelatedGroupedLinks(source: Doc): Map<string, Array<Doc>> {
- let related = this.findAllRelatedLinks(source);
+ public findRelatedGroupedLinks(anchor: Doc): Map<string, Array<Doc>> {
+ let related = this.findAllRelatedLinks(anchor);
- let categories = new Map();
+ let anchorGroups = new Map();
related.forEach(link => {
// get groups of given doc
- let groups = (Doc.AreProtosEqual(source, Cast(link.anchor1, Doc, new Doc))) ? Cast(link.anchor1Groups, listSpec(Doc), []) : Cast(link.anchor2Groups, listSpec(Doc), []);
- if (groups) {
- if (groups.length > 0) {
- groups.forEach(groupDoc => {
+ let oppGroups = (Doc.AreProtosEqual(anchor, Cast(link.anchor1, Doc, new Doc))) ? Cast(link.anchor1Groups, listSpec(Doc), []) : Cast(link.anchor2Groups, listSpec(Doc), []);
+ if (oppGroups) {
+ if (oppGroups.length > 0) {
+ oppGroups.forEach(groupDoc => {
if (groupDoc instanceof Doc) {
let groupType = StrCast(groupDoc.proto!.type);
- let group = categories.get(groupType); // TODO: clean this up lol
+ let group = anchorGroups.get(groupType); // TODO: clean this up lol
if (group) group.push(link);
else group = [link];
- categories.set(groupType, group);
+ anchorGroups.set(groupType, group);
} else {
// promise doc
}
@@ -52,10 +88,10 @@ export class LinkManager {
}
else {
// if link is in no groups then put it in default group
- let group = categories.get("*");
+ let group = anchorGroups.get("*");
if (group) group.push(link);
else group = [link];
- categories.set("*", group);
+ anchorGroups.set("*", group);
}
}
@@ -66,16 +102,11 @@ export class LinkManager {
// else group = [link];
// categories.set(link.linkTags, group);
})
- return categories;
+ return anchorGroups;
}
- public findOppositeAnchor(link: Doc, source: Doc): Doc {
- if (Doc.AreProtosEqual(source, Cast(link.anchor1, Doc, new Doc))) {
- return Cast(link.anchor2, Doc, new Doc);
- } else {
- return Cast(link.anchor1, Doc, new Doc);
- }
- }
+
+
// public findAnchorTags(link: Doc, source: Doc): Doc[] {
// if (source)