@iiif/3d-manifesto-dev
Version:
IIIF Presentation API utility library for client and server with 3D extension
154 lines • 5.71 kB
JavaScript
import { Collection, Manifest } from "./internal";
var Deserialiser = /** @class */ (function () {
function Deserialiser() {
}
Deserialiser.parse = function (manifest, options) {
if (typeof manifest === "string") {
manifest = JSON.parse(manifest);
}
return this.parseJson(manifest, options);
};
Deserialiser.parseJson = function (json, options) {
var resource;
// have options been passed for the manifest to inherit?
if (options) {
if (options.navDate && !isNaN(options.navDate.getTime())) {
json.navDate = options.navDate.toString();
}
}
if (json["@type"]) {
switch (json["@type"]) {
case "sc:Collection":
resource = this.parseCollection(json, options);
break;
case "sc:Manifest":
resource = this.parseManifest(json, options);
break;
default:
return null;
}
}
else {
// presentation 3
switch (json["type"]) {
case "Collection":
resource = this.parseCollection(json, options);
break;
case "Manifest":
resource = this.parseManifest(json, options);
break;
default:
return null;
}
}
// Top-level resource was loaded from a URI, so flag it to prevent
// unnecessary reload:
resource.isLoaded = true;
return resource;
};
Deserialiser.parseCollection = function (json, options) {
var collection = new Collection(json, options);
if (options) {
collection.index = options.index || 0;
if (options.resource) {
collection.parentCollection = options.resource.parentCollection;
}
}
else {
collection.index = 0;
}
this.parseCollections(collection, options);
this.parseManifests(collection, options);
this.parseItems(collection, options);
return collection;
};
Deserialiser.parseCollections = function (collection, options) {
var items;
if (collection.__jsonld.collections) {
items = collection.__jsonld.collections;
}
else if (collection.__jsonld.items) {
items = collection.__jsonld.items.filter(function (m) { return m.type.toLowerCase() === "collection"; });
}
if (items) {
for (var i = 0; i < items.length; i++) {
if (options) {
options.index = i;
}
var item = this.parseCollection(items[i], options);
item.index = i;
item.parentCollection = collection;
collection.items.push(item);
}
}
};
Deserialiser.parseManifest = function (json, options) {
var manifest = new Manifest(json, options);
return manifest;
};
Deserialiser.parseManifests = function (collection, options) {
var items;
if (collection.__jsonld.manifests) {
items = collection.__jsonld.manifests;
}
else if (collection.__jsonld.items) {
items = collection.__jsonld.items.filter(function (m) { return m.type.toLowerCase() === "manifest"; });
}
if (items) {
for (var i = 0; i < items.length; i++) {
var item = this.parseManifest(items[i], options);
item.index = i;
item.parentCollection = collection;
collection.items.push(item);
}
}
};
Deserialiser.parseItem = function (json, options) {
if (json["@type"]) {
if (json["@type"].toLowerCase() === "sc:manifest") {
return this.parseManifest(json, options);
}
else if (json["@type"].toLowerCase() === "sc:collection") {
return this.parseCollection(json, options);
}
}
else if (json.type) {
if (json.type.toLowerCase() === "manifest") {
return this.parseManifest(json, options);
}
else if (json.type.toLowerCase() === "collection") {
return this.parseCollection(json, options);
}
}
return null;
};
Deserialiser.parseItems = function (collection, options) {
var items = collection.__jsonld.members || collection.__jsonld.items;
if (items) {
var _loop_1 = function (i) {
if (options) {
options.index = i;
}
var item = this_1.parseItem(items[i], options);
if (!item)
return { value: void 0 };
// only add to items if not already parsed from backwards-compatible collections/manifests arrays
if (collection.items.filter(function (m) { return m.id === item.id; })[0]) {
return "continue";
}
item.index = i;
item.parentCollection = collection;
collection.items.push(item);
};
var this_1 = this;
for (var i = 0; i < items.length; i++) {
var state_1 = _loop_1(i);
if (typeof state_1 === "object")
return state_1.value;
}
}
};
return Deserialiser;
}());
export { Deserialiser };
//# sourceMappingURL=Serialisation.js.map