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