view src/elements/graph-view/NodeDisplay.ts @ 139:cf642d395be4

new simpler Patch class; fancier 'hide' view config support
author drewp@bigasterisk.com
date Mon, 08 May 2023 13:05:20 -0700
parents 5a1a79f54779
children
line wrap: on
line source

import { html, TemplateResult } from "lit";
import { Literal, NamedNode, Term, Util } from "n3";
import { SuffixLabels } from "../../layout/suffixLabels";

export class NodeDisplay {
  labels: SuffixLabels;
  constructor(labels: SuffixLabels) {
    this.labels = labels;
  }
  render(n: Term | NamedNode): TemplateResult {
    if (Util.isLiteral(n)) {
      n = n as Literal;
      let dtPart: any = "";
      if (n.datatype &&
        n.datatype.value != "http://www.w3.org/2001/XMLSchema#string" && // boring
        n.datatype.value !=
        "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" //  boring
      ) {
        dtPart = html`
          ^^<span class="literalType"> ${this.render(n.datatype)} </span>
        `;
      }
      return html` <span class="literal">${n.value}${dtPart}</span> `;
    }

    if (Util.isNamedNode(n)) {
      n = n as NamedNode;
      let shortened = false;
      let uriValue: string = n.value;
      for (let [long, short] of [
        ["http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdf:"],
        ["http://www.w3.org/2000/01/rdf-schema#", "rdfs:"],
        ["http://purl.org/dc/elements/1.1/", "dc:"],
        ["http://www.w3.org/2001/XMLSchema#", "xsd:"],
      ]) {
        if (uriValue.startsWith(long)) {
          uriValue = short + uriValue.substr(long.length);
          shortened = true;
          break;
        }
      }
      if (!shortened) {
        let dn: string | undefined = this.labels.getLabelForNode(uriValue);
        if (dn === undefined) {
          throw new Error(`dn=${dn}`);
        }
        uriValue = dn;
      }

      return html` <a class="graphUri" href="${n.value}">${uriValue}</a> `;
    }

    return html` [${n.termType} ${n.value}] `;
  }
}