From de3930aa3f63bd370aa7e68beb5e680d096c8d4b Mon Sep 17 00:00:00 2001
From: Patrizio Bekerle <patrizio.bekerle@tugraz.at>
Date: Tue, 16 Jul 2019 13:39:14 +0200
Subject: [PATCH] Moved JSONLD to git sub-module

---
 packages/auth/.gitmodules  |   3 +
 packages/auth/jsonld.js    | 218 -------------------------------------
 packages/auth/package.json |   3 +-
 packages/auth/vpu-auth.js  |   2 +-
 4 files changed, 6 insertions(+), 220 deletions(-)
 create mode 100644 packages/auth/.gitmodules
 delete mode 100644 packages/auth/jsonld.js

diff --git a/packages/auth/.gitmodules b/packages/auth/.gitmodules
new file mode 100644
index 00000000..d423707d
--- /dev/null
+++ b/packages/auth/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "vendor/common"]
+	path = vendor/common
+	url = git@gitlab.tugraz.at:VPU/WebComponents/Common.git
diff --git a/packages/auth/jsonld.js b/packages/auth/jsonld.js
deleted file mode 100644
index 6079bb66..00000000
--- a/packages/auth/jsonld.js
+++ /dev/null
@@ -1,218 +0,0 @@
-"use strict";
-
-let instances = {};
-let successFunctions = {};
-let failureFunctions = {};
-let initStarted = {};
-
-module.exports = class JSONLD {
-    constructor(baseApiUrl, entities) {
-        this.entities = entities;
-        this.baseApiUrl = baseApiUrl;
-
-        let idToEntityNameMatchList = {};
-        for (const entityName in entities) {
-            const id = entities[entityName]["@id"];
-            idToEntityNameMatchList[id] = entityName;
-        }
-
-        this.idToEntityNameMatchList = idToEntityNameMatchList;
-    }
-
-    static initialize(apiUrl, successFnc, failureFnc) {
-        // if init api call was already successfully finished execute the success function
-        if (instances[apiUrl] !== undefined) {
-            if (typeof successFnc == 'function') successFnc(instances[apiUrl]);
-
-            return;
-        }
-
-        // init the arrays
-        if (successFunctions[apiUrl] === undefined) successFunctions[apiUrl] = [];
-        if (failureFunctions[apiUrl] === undefined) failureFunctions[apiUrl] = [];
-
-        // add success and failure functions
-        if (typeof successFnc == 'function') successFunctions[apiUrl].push(successFnc);
-        if (typeof failureFnc == 'function') failureFunctions[apiUrl].push(failureFnc);
-
-        // check if api call was already started
-        if (initStarted[apiUrl] !== undefined) {
-            return;
-        }
-
-        initStarted[apiUrl] = true;
-
-        // window.VPUAuthToken will be set by on vpu-auth-init
-        document.addEventListener("vpu-auth-init", function(e)
-        {
-            const xhr = new XMLHttpRequest();
-            xhr.open("GET", apiUrl, true);
-            xhr.setRequestHeader('Authorization', 'Bearer ' + window.VPUAuthToken);
-
-            xhr.onreadystatechange = function () {
-                if (xhr.readyState === 4 && xhr.status === 200) {
-                    const json = JSON.parse(xhr.responseText);
-
-                    let entryPoints = {};
-                    for (let property in json) {
-                        // for some reason the properties start with a lower case character
-                        if (!property.startsWith("@")) entryPoints[property.toLowerCase()] = json[property];
-                    }
-
-                    // read the link header of the api response
-                    const utils = require("./utils");
-                    const links = utils.parseLinkHeader(this.getResponseHeader("link"));
-
-                    // get the hydra apiDocumentation url
-                    const apiDocUrl = links["http://www.w3.org/ns/hydra/core#apiDocumentation"];
-
-                    if (apiDocUrl !== undefined) {
-                        // load the hydra apiDocumentation
-                        const docXhr = new XMLHttpRequest();
-                        docXhr.open("GET", apiDocUrl, true);
-                        docXhr.setRequestHeader("Content-Type", "application/json");
-                        docXhr.onreadystatechange = function () {
-                            if (docXhr.readyState === 4 && docXhr.status === 200) {
-                                const json = JSON.parse(docXhr.responseText);
-                                const supportedClasses = json["hydra:supportedClass"];
-
-                                let entities = {};
-                                const baseUrl = utils.parseBaseUrl(apiUrl);
-
-                                // gather the entities
-                                supportedClasses.forEach(function (classData) {
-                                    // add entry point url
-                                    const entityName = classData["hydra:title"];
-                                    let entryPoint = entryPoints[entityName.toLowerCase()];
-                                    if (entryPoint !== undefined && !entryPoint.startsWith("http")) entryPoint = baseUrl + entryPoint;
-                                    classData["@entryPoint"] = entryPoint;
-
-                                    entities[entityName] = classData;
-                                });
-
-                                const instance = new JSONLD(baseUrl, entities);
-                                instances[apiUrl] = instance;
-
-                                // return the initialized JSONLD object
-                                for (const fnc of successFunctions[apiUrl]) if (typeof fnc == 'function') fnc(instance);
-                                successFunctions[apiUrl] = [];
-                            } else {
-                                for (const fnc of failureFunctions[apiUrl]) if (typeof fnc == 'function') fnc();
-                                failureFunctions[apiUrl] = [];
-                            }
-                        };
-
-                        docXhr.send();
-                    } else {
-                        for (const fnc of failureFunctions[apiUrl]) if (typeof fnc == 'function') fnc();
-                        failureFunctions[apiUrl] = [];
-                    }
-                } else {
-                    for (const fnc of failureFunctions[apiUrl]) if (typeof fnc == 'function') fnc();
-                    failureFunctions[apiUrl] = [];
-                }
-            };
-
-            xhr.send();
-        });
-    }
-
-    static getInstance(apiUrl) {
-        return instances[apiUrl];
-    }
-
-    getEntityForIdentifier(identifier) {
-        let entityName = this.getEntityNameForIdentifier(identifier);
-        return this.getEntityForEntityName(entityName);
-    }
-
-    getEntityForEntityName(entityName) {
-        return this.entities[entityName];
-    }
-
-    getApiUrlForIdentifier(identifier) {
-        return this.getEntityForIdentifier(identifier)["@entryPoint"];
-    }
-
-    getApiUrlForEntityName(entityName) {
-        return this.getEntityForEntityName(entityName)["@entryPoint"];
-    }
-
-    getEntityNameForIdentifier(identifier) {
-        return this.idToEntityNameMatchList[identifier];
-    }
-
-    getApiIdentifierList() {
-        let keys = [];
-        for (const property in this.idToEntityNameMatchList) {
-            keys.push(property);
-        }
-
-        return keys;
-    }
-
-    /**
-     * Expands a member of a list to a object with schema.org properties
-     *
-     * @param member
-     */
-    expandMember(member) {
-        const type = member["@type"];
-
-        const entity = this.getEntityForIdentifier(type);
-        let result = {"@id": member["@id"]};
-
-        entity["hydra:supportedProperty"].forEach(function (property) {
-            const id = property["hydra:property"]["@id"];
-            const title = property["hydra:title"];
-
-            result[id] = member[title];
-        });
-
-        return result;
-    }
-
-    /**
-     * Compacts an expanded member of a list to a object with local properties
-     *
-     * @param member
-     * @param localContext
-     */
-    static compactMember(member, localContext) {
-        let result = {};
-
-        for (const property in localContext) {
-            const value = member[localContext[property]];
-
-            if (value !== undefined) {
-                result[property] = value;
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Transforms hydra members to a local context
-     *
-     * @param data
-     * @param localContext
-     * @returns {Array}
-     */
-    transformMembers(data, localContext) {
-        const members = data['hydra:member'];
-
-        if (members === undefined || members.length === 0) {
-            return [];
-        }
-
-        let results = [];
-        let that = this;
-
-        members.forEach(function (member) {
-            results.push(JSONLD.compactMember(that.expandMember(member), localContext));
-        });
-
-        return results;
-    }
-};
diff --git a/packages/auth/package.json b/packages/auth/package.json
index 29ab4b98..1af24ad8 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -16,8 +16,9 @@
   },
   "dependencies": {
     "@webcomponents/webcomponentsjs": "^2.2.10",
+    "i18next": "^17.0.3",
     "lit-element": "^2.1.0",
-    "i18next": "^17.0.3"
+    "vpu-common": "file:./vendor/common"
   },
   "scripts": {
     "clean": "rm dist/*",
diff --git a/packages/auth/vpu-auth.js b/packages/auth/vpu-auth.js
index 3f15b840..5d771182 100644
--- a/packages/auth/vpu-auth.js
+++ b/packages/auth/vpu-auth.js
@@ -1,6 +1,6 @@
 import {i18n} from './i18n.js';
 import {html, LitElement} from 'lit-element';
-import JSONLD from "./jsonld";
+import JSONLD from 'vpu-common/jsonld'
 import utils from "./utils";
 
 /**
-- 
GitLab