UNPKG

sparnatural

Version:

Visual client-side SPARQL query builder and knowledge graph exploration tool

141 lines (125 loc) 5.01 kB
import { getSettings } from "../../sparnatural/settings/defaultSettings"; import ISparnaturalSpecification from "../spec-providers/ISparnaturalSpecification"; import BgWrapper from "./builder-section/BgWrapper"; import SubmitSection from "./submit-section/SubmitSection"; import SparnaturalSpecificationFactory from "../spec-providers/SparnaturalSpecificationFactory"; import ActionStore from "../statehandling/ActionStore"; import VariableSection from "./variables-section/VariableSelection"; import HTMLComponent from "./HtmlComponent"; import { SparnaturalElement } from "../../SparnaturalElement"; import { Catalog } from "../settings/Catalog"; import { I18n } from "../settings/I18n"; class SparnaturalComponent extends HTMLComponent { specProvider: ISparnaturalSpecification; actionStore: ActionStore; BgWrapper: BgWrapper; submitSection: SubmitSection; variableSection: VariableSection; catalog?: Catalog; // filter that is applied to optional/not exists green arrows, based on its ID filter = $( '<svg data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 0 0" style="width:0;height:0;display:block"><defs><filter style="color-interpolation-filters:sRGB;" inkscape:label="Drop Shadow" id="filter19278" x="-0.15483875" y="-0.11428573" width="1.3096775" height="1.2714286"><feFlood flood-opacity="0.811765" flood-color="rgb(120,120,120)" result="flood" id="feFlood19268" /><feComposite in="flood" in2="SourceGraphic" operator="out" result="composite1" id="feComposite19270" /><feGaussianBlur in="composite1" stdDeviation="2" result="blur" id="feGaussianBlur19272" /><feOffset dx="3.60822e-16" dy="1.8" result="offset" id="feOffset19274" /><feComposite in="offset" in2="SourceGraphic" operator="atop" result="composite2" id="feComposite19276" /></filter></defs></svg>' ); constructor() { //Sparnatural: Does not have a ParentComponent! super("Sparnatural", null, null); } render(): this { this.#initLang(); let afterSpecificationLoaded = (sp: ISparnaturalSpecification) => { this.specProvider = sp; this.actionStore = new ActionStore(this, this.specProvider); this.BgWrapper = new BgWrapper(this, this.specProvider).render(); // display the submit button only if a callback was provided if (getSettings().submitButton) { this.submitSection = new SubmitSection(this).render(); } console.log("submit section", this.submitSection); this.variableSection = new VariableSection( this, this.specProvider ).render(); //BGWrapper must be rendered first this.html[0].dispatchEvent( new CustomEvent("redrawBackgroundAndLinks", { bubbles: true }) ); this.html.append(this.filter); console.log( "Found languages in configuration : " + this.specProvider.getLanguages() ); this.html[0].dispatchEvent( new CustomEvent(SparnaturalElement.EVENT_INIT, { bubbles: true, detail: { sparnatural: this, }, }) ); }; // chain catalog loading and spec loading let afterCatalogLoaded = (catalog: Catalog | undefined) => { this.catalog = catalog; this.initSpecificationProvider(afterSpecificationLoaded); }; this.#initCatalog(afterCatalogLoaded); return this; } #initCatalog(callback: (catalog: Catalog | undefined) => void) { let settings = getSettings(); let me = this; if (settings.catalog) { $.getJSON(settings.catalog, function (data) { callback(new Catalog(data)); }).fail(function (response) { console.error( "Sparnatural - unable to load catalog file : " + settings.catalog ); callback(undefined); }); } else { // no catalog provided callback(undefined); } } initSpecificationProvider(callback: (sp: ISparnaturalSpecification) => void) { let settings = getSettings(); let specProviderFactory = new SparnaturalSpecificationFactory(); // load only the statistics of the selected endpoints specProviderFactory.build( settings.src, settings.language, this.catalog ? this.catalog.extractSubCatalog(settings.endpoints) : undefined, (sp: any) => { // call the call back when done callback(sp); } ); } // method is exposed from the HTMLElement enablePlayBtn = () => { this.submitSection.playBtn.removeLoading(); }; // method is exposed from the HTMLElement disablePlayBtn = () => { this.submitSection.playBtn.disable(); }; setQuiet(quiet: boolean) { this.actionStore.quiet = quiet; } isEmpty() { return ( this.BgWrapper.componentsList.rootGroupWrapper.CriteriaGroup .StartClassGroup.startClassVal?.type == null ); } #initLang() { if (getSettings().language === "fr") { I18n.init("fr"); } else { I18n.init("en"); } } } export default SparnaturalComponent;