diff --git a/src/extensions/uv-mediaelement-extension/DownloadDialogue.ts b/src/extensions/uv-mediaelement-extension/DownloadDialogue.ts
index 47b14f67a..a8fa635d1 100644
--- a/src/extensions/uv-mediaelement-extension/DownloadDialogue.ts
+++ b/src/extensions/uv-mediaelement-extension/DownloadDialogue.ts
@@ -23,7 +23,7 @@ class DownloadDialogue extends BaseDownloadDialogue {
// add each file src
var canvas = this.provider.getCurrentCanvas();
- _.each(this.provider.getRenderings(canvas), (rendering: any) => {
+ _.each(canvas.getRenderings(), (rendering: any) => {
this.addEntireFileDownloadOption(rendering);
});
}
diff --git a/src/extensions/uv-pdf-extension/DownloadDialogue.ts b/src/extensions/uv-pdf-extension/DownloadDialogue.ts
index 47b14f67a..a8fa635d1 100644
--- a/src/extensions/uv-pdf-extension/DownloadDialogue.ts
+++ b/src/extensions/uv-pdf-extension/DownloadDialogue.ts
@@ -23,7 +23,7 @@ class DownloadDialogue extends BaseDownloadDialogue {
// add each file src
var canvas = this.provider.getCurrentCanvas();
- _.each(this.provider.getRenderings(canvas), (rendering: any) => {
+ _.each(canvas.getRenderings(), (rendering: any) => {
this.addEntireFileDownloadOption(rendering);
});
}
diff --git a/src/extensions/uv-seadragon-extension/DownloadDialogue.ts b/src/extensions/uv-seadragon-extension/DownloadDialogue.ts
index 0c2fec04e..868bdec69 100644
--- a/src/extensions/uv-seadragon-extension/DownloadDialogue.ts
+++ b/src/extensions/uv-seadragon-extension/DownloadDialogue.ts
@@ -153,9 +153,9 @@ class DownloadDialogue extends BaseDownloadDialogue {
this.$downloadOptions.find('.dynamic').remove();
}
- addDownloadOptionsForRenderings(resource: any, defaultLabel: string)
+ addDownloadOptionsForRenderings(resource: Manifesto.IManifestResource, defaultLabel: string)
{
- var renderings: Manifesto.IRendering[] = this.provider.getRenderings(resource);
+ var renderings: Manifesto.IRendering[] = manifesto.getRenderings(resource);
for (var i = 0; i < renderings.length; i++) {
var rendering: Manifesto.IRendering = renderings[i];
diff --git a/src/extensions/uv-seadragon-extension/Provider.ts b/src/extensions/uv-seadragon-extension/Provider.ts
index 89a80ab31..46e248c50 100644
--- a/src/extensions/uv-seadragon-extension/Provider.ts
+++ b/src/extensions/uv-seadragon-extension/Provider.ts
@@ -183,7 +183,7 @@ class Provider extends BaseProvider implements ISeadragonProvider{
}
getAutoCompleteService(): Manifesto.IService {
- return this.getService(this.manifest, manifesto.ServiceProfile.autoComplete());
+ return this.manifest.getService(manifesto.ServiceProfile.autoComplete());
}
getAutoCompleteUri(): string{
@@ -195,7 +195,7 @@ class Provider extends BaseProvider implements ISeadragonProvider{
}
getSearchWithinService(): Manifesto.IService {
- return this.getService(this.manifest, manifesto.ServiceProfile.searchWithin());
+ return this.manifest.getService(manifesto.ServiceProfile.searchWithin());
}
getSearchWithinServiceUri(): string {
diff --git a/src/lib/embed.js b/src/lib/embed.js
index 089555a5a..1d9ffc578 100644
--- a/src/lib/embed.js
+++ b/src/lib/embed.js
@@ -424,7 +424,7 @@ docReady(function() {
if (config) uri += "&config=" + config;
if (jsonp) uri += "&jsonp=" + jsonp;
- // these are values that getParam can either retrieve from hash or query string
+ // these are values that getParam can either retrieve from the iframe querystring or parent document hash params
if (sequenceIndex) uri += "&si=" + sequenceIndex;
if (canvasIndex) uri += "&ci=" + canvasIndex;
if (zoom) uri += "&z=" + zoom;
diff --git a/src/lib/manifesto.js b/src/lib/manifesto.js
index 111f6bcc3..ad8aa4f93 100644
--- a/src/lib/manifesto.js
+++ b/src/lib/manifesto.js
@@ -255,19 +255,7 @@ var Manifesto;
this.__jsonld.__parsed = this;
this.context = this.getProperty('@context');
this.id = this.getProperty('@id');
- this._label = this.getProperty('label');
}
- JSONLDResource.prototype.getManifest = function () {
- return this.getProperty('__manifest');
- };
- JSONLDResource.prototype.getLabel = function () {
- // todo: why test if it's a digit?
- //var regExp = /\d/;
- //if (regExp.test(this._label)) {
- return this.getManifest().getLocalisedValue(this._label);
- //}
- //return null;
- };
JSONLDResource.prototype.getProperty = function (name) {
return this.__jsonld[name];
};
@@ -279,12 +267,34 @@ var Manifesto;
(function (Manifesto) {
var ManifestResource = (function (_super) {
__extends(ManifestResource, _super);
- function ManifestResource() {
- _super.apply(this, arguments);
+ function ManifestResource(jsonld, options) {
+ _super.call(this, jsonld);
+ this.options = options;
}
+ ManifestResource.prototype.getLabel = function () {
+ return Manifesto.Utils.getLocalisedValue(this.getProperty('label'), this.options.locale);
+ };
+ ManifestResource.prototype.getMetadata = function () {
+ var metadata = this.getProperty('metadata');
+ // get localised value for each metadata item.
+ for (var i = 0; i < metadata.length; i++) {
+ var item = metadata[i];
+ item.label = Manifesto.Utils.getLocalisedValue(item.label, this.options.locale);
+ item.value = Manifesto.Utils.getLocalisedValue(item.value, this.options.locale);
+ }
+ return metadata;
+ };
+ ManifestResource.prototype.getRendering = function (format) {
+ return Manifesto.Utils.getRendering(this, format);
+ };
+ ManifestResource.prototype.getRenderings = function () {
+ return Manifesto.Utils.getRenderings(this);
+ };
ManifestResource.prototype.getService = function (profile) {
- var m = this.getManifest();
- return m.getService(this, profile);
+ return Manifesto.Utils.getService(this, profile);
+ };
+ ManifestResource.prototype.getServices = function () {
+ return Manifesto.Utils.getServices(this);
};
return ManifestResource;
})(Manifesto.JSONLDResource);
@@ -296,13 +306,13 @@ var Manifesto;
(function (Manifesto) {
var Canvas = (function (_super) {
__extends(Canvas, _super);
- function Canvas(jsonld) {
- _super.call(this, jsonld);
+ function Canvas(jsonld, options) {
+ _super.call(this, jsonld, options);
this.ranges = [];
}
// todo: return all image services matching the IIIFIMAGELEVEL1/2 profile
// https://github.com/UniversalViewer/universalviewer/issues/119
- //getImages(): IService[] {
+ //getImages(): IAnnotation[] {
//
//}
// todo: use getImages instead. the client must decide which to use.
@@ -367,8 +377,8 @@ var Manifesto;
(function (Manifesto) {
var Element = (function (_super) {
__extends(Element, _super);
- function Element(jsonld) {
- _super.call(this, jsonld);
+ function Element(jsonld, options) {
+ _super.call(this, jsonld, options);
}
Element.prototype.getType = function () {
return new Manifesto.ElementType(this.getProperty('@type'));
@@ -383,7 +393,7 @@ var Manifesto;
var IIIFResource = (function (_super) {
__extends(IIIFResource, _super);
function IIIFResource(jsonld, options) {
- _super.call(this, jsonld);
+ _super.call(this, jsonld, options);
this.isLoaded = false;
var defaultOptions = {
defaultLabel: '-',
@@ -393,123 +403,25 @@ var Manifesto;
this.options = _assign(defaultOptions, options);
}
IIIFResource.prototype.getAttribution = function () {
- return this.getLocalisedValue(this.getProperty('attribution'));
+ return Manifesto.Utils.getLocalisedValue(this.getProperty('attribution'), this.options.locale);
+ };
+ IIIFResource.prototype.getDescription = function () {
+ return Manifesto.Utils.getLocalisedValue(this.getProperty('description'), this.options.locale);
};
IIIFResource.prototype.getIIIFResourceType = function () {
return new Manifesto.IIIFResourceType(this.getProperty('@type'));
};
- IIIFResource.prototype.getLocalisedValue = function (resource, locale) {
- // if the resource is not an array of translations, return the string.
- if (!_isArray(resource)) {
- return resource;
- }
- if (!locale)
- locale = this.options.locale;
- // test for exact match
- for (var i = 0; i < resource.length; i++) {
- var value = resource[i];
- var language = value['@language'];
- if (locale === language) {
- return value['@value'];
- }
- }
- // test for inexact match
- var match = locale.substr(0, locale.indexOf('-'));
- for (var i = 0; i < resource.length; i++) {
- var value = resource[i];
- var language = value['@language'];
- if (language === match) {
- return value['@value'];
- }
- }
- return null;
- };
IIIFResource.prototype.getLogo = function () {
return this.getProperty('logo');
};
IIIFResource.prototype.getLicense = function () {
- return this.getLocalisedValue(this.getProperty('license'));
- };
- // todo: remove includeRootProperties
- // todo: any resource may have metadata, add resource param
- IIIFResource.prototype.getMetadata = function (includeRootProperties) {
- var metadata = this.getProperty('metadata');
- // get localised value for each metadata item.
- for (var i = 0; i < metadata.length; i++) {
- var item = metadata[i];
- item.label = this.getLocalisedValue(item.label);
- item.value = this.getLocalisedValue(item.value);
- }
- if (metadata && includeRootProperties) {
- if (this.getProperty('description')) {
- metadata.push({
- "label": "description",
- "value": this.getLocalisedValue(this.getProperty('description'))
- });
- }
- if (this.getProperty('attribution')) {
- metadata.push({
- "label": "attribution",
- "value": this.getLocalisedValue(this.getProperty('attribution'))
- });
- }
- if (this.getProperty('license')) {
- metadata.push({
- "label": "license",
- "value": this.getLocalisedValue(this.getProperty('license'))
- });
- }
- if (this.getProperty('logo')) {
- metadata.push({
- "label": "logo",
- "value": '
' });
- }
- }
- return metadata;
+ return Manifesto.Utils.getLocalisedValue(this.getProperty('license'), this.options.locale);
};
IIIFResource.prototype.getSeeAlso = function () {
- return this.getLocalisedValue(this.getProperty('seeAlso'));
- };
- IIIFResource.prototype.getService = function (resource, profile) {
- var services = this.getServices(resource);
- // normalise profile to string
- if (typeof profile !== 'string') {
- profile = profile.toString();
- }
- for (var i = 0; i < services.length; i++) {
- var service = services[i];
- if (service.getProfile().toString() === profile) {
- return service;
- }
- }
- return null;
- };
- IIIFResource.prototype.getServices = function (resource) {
- var service;
- // if passing a parsed object, use the __jsonld.service property,
- // otherwise look for a service property
- if (resource.__jsonld) {
- service = resource.__jsonld.service;
- }
- else {
- service = resource.service;
- }
- var parsed = [];
- if (!service)
- return parsed;
- // normalise to array
- if (!_isArray(service)) {
- service = [service];
- }
- for (var i = 0; i < service.length; i++) {
- var s = service[i];
- s.__manifest = this;
- parsed.push(new Manifesto.Service(s));
- }
- return parsed;
+ return Manifesto.Utils.getLocalisedValue(this.getProperty('seeAlso'), this.options.locale);
};
IIIFResource.prototype.getTitle = function () {
- return this.getLocalisedValue(this.getProperty('label'));
+ return Manifesto.Utils.getLocalisedValue(this.getProperty('label'), this.options.locale);
};
IIIFResource.prototype.load = function () {
var that = this;
@@ -519,7 +431,7 @@ var Manifesto;
}
else {
var options = that.options;
- Manifesto.Utils.loadManifest(that.__jsonld['@id']).then(function (data) {
+ Manifesto.Utils.loadResource(that.__jsonld['@id']).then(function (data) {
that.isLoaded = true;
resolve(Manifesto.Deserialiser.parse(data, options));
});
@@ -527,7 +439,7 @@ var Manifesto;
});
};
return IIIFResource;
- })(Manifesto.JSONLDResource);
+ })(Manifesto.ManifestResource);
Manifesto.IIIFResource = IIIFResource;
})(Manifesto || (Manifesto = {}));
var _isArray = _dereq_("lodash.isarray");
@@ -541,6 +453,36 @@ var Manifesto;
this.sequences = [];
jsonld.__manifest = this;
}
+ //getMetadata(): any {
+ // var metadata = this.getMetadata();
+ //
+ // if (this.getLicense()){
+ // metadata.unshift({
+ // "label": "license",
+ // "value": this.getLicense()
+ // });
+ // }
+ //
+ // if (this.getAttribution()){
+ // metadata.unshift({
+ // "label": "attribution",
+ // "value": this.getAttribution()
+ // });
+ // }
+ //
+ // if (this.getDescription()){
+ // metadata.unshift({
+ // "label": "description",
+ // "value": this.getDescription()
+ // });
+ // }
+ //
+ // if (this.getLogo()){
+ // metadata.pop({
+ // "label": "logo",
+ // "value": '
'});
+ // }
+ //}
// todo: use jmespath to flatten tree?
// https://github.com/jmespath/jmespath.js/issues/6
// using r.__parsed in the meantime
@@ -575,45 +517,6 @@ var Manifesto;
}
return null;
};
- Manifest.prototype.getRendering = function (resource, format) {
- var renderings = this.getRenderings(resource);
- // normalise format to string
- if (typeof format !== 'string') {
- format = format.toString();
- }
- for (var i = 0; i < renderings.length; i++) {
- var rendering = renderings[i];
- if (rendering.getFormat().toString() === format) {
- return rendering;
- }
- }
- return null;
- };
- Manifest.prototype.getRenderings = function (resource) {
- var rendering;
- // if passing a parsed object, use the __jsonld.rendering property,
- // otherwise look for a rendering property
- if (resource.__jsonld) {
- rendering = resource.__jsonld.rendering;
- }
- else {
- rendering = resource.rendering;
- }
- var parsed = [];
- if (!rendering) {
- return parsed;
- }
- // normalise to array
- if (!_isArray(rendering)) {
- rendering = [rendering];
- }
- for (var i = 0; i < rendering.length; i++) {
- var r = rendering[i];
- r.__manifest = this;
- parsed.push(new Manifesto.Rendering(r));
- }
- return parsed;
- };
Manifest.prototype.getSequenceByIndex = function (sequenceIndex) {
return this.sequences[sequenceIndex];
};
@@ -692,20 +595,11 @@ var Manifesto;
(function (Manifesto) {
var Range = (function (_super) {
__extends(Range, _super);
- function Range(jsonld) {
- _super.call(this, jsonld);
+ function Range(jsonld, options) {
+ _super.call(this, jsonld, options);
this.canvases = [];
this.ranges = [];
}
- //getLabel(): string {
- // var regExp = /\d/;
- //
- // if (regExp.test(this.__jsonld.label)) {
- // return this.manifest.getLocalisedValue(this.__jsonld.label);
- // }
- //
- // return null;
- //}
Range.prototype.getViewingDirection = function () {
if (this.getProperty('viewingDirection')) {
return new Manifesto.ViewingDirection(this.getProperty('viewingDirection'));
@@ -719,21 +613,21 @@ var Manifesto;
return null;
};
return Range;
- })(Manifesto.JSONLDResource);
+ })(Manifesto.ManifestResource);
Manifesto.Range = Range;
})(Manifesto || (Manifesto = {}));
var Manifesto;
(function (Manifesto) {
var Rendering = (function (_super) {
__extends(Rendering, _super);
- function Rendering(jsonld) {
- _super.call(this, jsonld);
+ function Rendering(jsonld, options) {
+ _super.call(this, jsonld, options);
}
Rendering.prototype.getFormat = function () {
return new Manifesto.RenderingFormat(this.getProperty('format'));
};
return Rendering;
- })(Manifesto.JSONLDResource);
+ })(Manifesto.ManifestResource);
Manifesto.Rendering = Rendering;
})(Manifesto || (Manifesto = {}));
var _last = _dereq_("lodash.last");
@@ -741,8 +635,8 @@ var Manifesto;
(function (Manifesto) {
var Sequence = (function (_super) {
__extends(Sequence, _super);
- function Sequence(jsonld) {
- _super.call(this, jsonld);
+ function Sequence(jsonld, options) {
+ _super.call(this, jsonld, options);
this.canvases = [];
}
Sequence.prototype.getCanvasById = function (id) {
@@ -797,12 +691,21 @@ var Manifesto;
}
return -1;
};
- Sequence.prototype.getLastCanvasLabel = function () {
+ Sequence.prototype.getLastCanvasLabel = function (digitsOnly) {
for (var i = this.getTotalCanvases() - 1; i >= 0; i--) {
var canvas = this.getCanvasByIndex(i);
- return canvas.getLabel();
+ var label = canvas.getLabel();
+ if (digitsOnly) {
+ var regExp = /\d/;
+ if (regExp.test(label)) {
+ return label;
+ }
+ }
+ else if (label) {
+ return label;
+ }
}
- return this.getManifest().options.defaultLabel;
+ return this.options.defaultLabel;
};
Sequence.prototype.getLastPageIndex = function () {
return this.getTotalCanvases() - 1;
@@ -976,7 +879,7 @@ var Manifesto;
};
Deserialiser.parseManifest = function (json, options) {
var manifest = new Manifesto.Manifest(json, options);
- this.parseSequences(manifest);
+ this.parseSequences(manifest, options);
if (manifest.__jsonld.structures && manifest.__jsonld.structures.length) {
this.parseRanges(manifest, JsonUtils.getRootRange(manifest.__jsonld), '');
}
@@ -991,34 +894,31 @@ var Manifesto;
}
}
};
- Deserialiser.parseSequences = function (manifest) {
+ Deserialiser.parseSequences = function (manifest, options) {
// if IxIF mediaSequences is present, use that. Otherwise fall back to IIIF sequences.
var children = manifest.__jsonld.mediaSequences || manifest.__jsonld.sequences;
if (children) {
for (var i = 0; i < children.length; i++) {
var s = children[i];
- s.__manifest = manifest;
- var sequence = new Manifesto.Sequence(s);
- sequence.canvases = this.parseCanvases(manifest, s);
+ var sequence = new Manifesto.Sequence(s, options);
+ sequence.canvases = this.parseCanvases(s, options);
manifest.sequences.push(sequence);
}
}
};
- Deserialiser.parseCanvases = function (manifest, sequence) {
+ Deserialiser.parseCanvases = function (sequence, options) {
var canvases = [];
// if IxIF elements are present, use them. Otherwise fall back to IIIF canvases.
var children = sequence.elements || sequence.canvases;
for (var i = 0; i < children.length; i++) {
var c = children[i];
- c.__manifest = manifest;
- var canvas = new Manifesto.Canvas(c);
+ var canvas = new Manifesto.Canvas(c, options);
canvases.push(canvas);
}
return canvases;
};
Deserialiser.parseRanges = function (manifest, r, path, parentRange) {
- r.__manifest = manifest;
- var range = new Manifesto.Range(r);
+ var range = new Manifesto.Range(r, manifest.options);
// if no parent range is passed, assign the new range to manifest.rootRange
if (!parentRange) {
manifest.rootRange = range;
@@ -1098,14 +998,14 @@ var Manifesto;
(function (Manifesto) {
var Service = (function (_super) {
__extends(Service, _super);
- function Service(resource) {
- _super.call(this, resource);
+ function Service(jsonld, options) {
+ _super.call(this, jsonld, options);
}
Service.prototype.getProfile = function () {
return new Manifesto.ServiceProfile(this.getProperty('profile'));
};
Service.prototype.getDescription = function () {
- return this.getManifest().getLocalisedValue(this.getProperty('description'));
+ return Manifesto.Utils.getLocalisedValue(this.getProperty('description'), this.options.locale);
};
Service.prototype.getInfoUri = function () {
var infoUri = this.id;
@@ -1116,7 +1016,7 @@ var Manifesto;
return infoUri;
};
return Service;
- })(Manifesto.JSONLDResource);
+ })(Manifesto.ManifestResource);
Manifesto.Service = Service;
})(Manifesto || (Manifesto = {}));
var Manifesto;
@@ -1159,7 +1059,31 @@ var Manifesto;
var Utils = (function () {
function Utils() {
}
- Utils.loadManifest = function (uri) {
+ Utils.getLocalisedValue = function (resource, locale) {
+ // if the resource is not an array of translations, return the string.
+ if (!_isArray(resource)) {
+ return resource;
+ }
+ // test for exact match
+ for (var i = 0; i < resource.length; i++) {
+ var value = resource[i];
+ var language = value['@language'];
+ if (locale === language) {
+ return value['@value'];
+ }
+ }
+ // test for inexact match
+ var match = locale.substr(0, locale.indexOf('-'));
+ for (var i = 0; i < resource.length; i++) {
+ var value = resource[i];
+ var language = value['@language'];
+ if (language === match) {
+ return value['@value'];
+ }
+ }
+ return null;
+ };
+ Utils.loadResource = function (uri) {
return new Promise(function (resolve, reject) {
var u = url.parse(uri);
var fetch = http.request({
@@ -1304,11 +1228,85 @@ var Manifesto;
});
});
};
+ Utils.getRendering = function (resource, format) {
+ var renderings = this.getRenderings(resource);
+ // normalise format to string
+ if (typeof format !== 'string') {
+ format = format.toString();
+ }
+ for (var i = 0; i < renderings.length; i++) {
+ var rendering = renderings[i];
+ if (rendering.getFormat().toString() === format) {
+ return rendering;
+ }
+ }
+ return null;
+ };
+ Utils.getRenderings = function (resource) {
+ var rendering;
+ // if passing a manifesto-parsed object, use the __jsonld.rendering property,
+ // otherwise look for a rendering property
+ if (resource.__jsonld) {
+ rendering = resource.__jsonld.rendering;
+ }
+ else {
+ rendering = resource.rendering;
+ }
+ var parsed = [];
+ if (!rendering) {
+ return parsed;
+ }
+ // coerce to array
+ if (!_isArray(rendering)) {
+ rendering = [rendering];
+ }
+ for (var i = 0; i < rendering.length; i++) {
+ var r = rendering[i];
+ parsed.push(new Manifesto.Rendering(r, resource.options));
+ }
+ return parsed;
+ };
+ Utils.getService = function (resource, profile) {
+ var services = this.getServices(resource);
+ // coerce profile to string
+ if (typeof profile !== 'string') {
+ profile = profile.toString();
+ }
+ for (var i = 0; i < services.length; i++) {
+ var service = services[i];
+ if (service.getProfile().toString() === profile) {
+ return service;
+ }
+ }
+ return null;
+ };
+ Utils.getServices = function (resource) {
+ var service;
+ // if passing a manifesto-parsed object, use the __jsonld.service property,
+ // otherwise look for a service property (info.json services)
+ if (resource.__jsonld) {
+ service = resource.__jsonld.service;
+ }
+ else {
+ service = resource.service;
+ }
+ var parsed = [];
+ if (!service)
+ return parsed;
+ // coerce to array
+ if (!_isArray(service)) {
+ service = [service];
+ }
+ for (var i = 0; i < service.length; i++) {
+ var s = service[i];
+ parsed.push(new Manifesto.Service(s, resource.options));
+ }
+ return parsed;
+ };
return Utils;
})();
Manifesto.Utils = Utils;
})(Manifesto || (Manifesto = {}));
-;
module.exports = {
CanvasType: new Manifesto.CanvasType(),
ElementType: new Manifesto.ElementType(),
@@ -1318,14 +1316,21 @@ module.exports = {
ServiceProfile: new Manifesto.ServiceProfile(),
ViewingDirection: new Manifesto.ViewingDirection(),
ViewingHint: new Manifesto.ViewingHint(),
- loadManifest: function (uri) {
- return Manifesto.Utils.loadManifest(uri);
+ create: function (manifest, options) {
+ return Manifesto.Deserialiser.parse(manifest, options);
+ },
+ // todo: deprecate this - temporary to enable current UV download menu
+ getRenderings: function (resource) {
+ return Manifesto.Utils.getRenderings(resource);
+ },
+ getService: function (resource, profile) {
+ return Manifesto.Utils.getService(resource, profile);
},
loadExternalResources: function (resources, clickThrough, login, getAccessToken, storeAccessToken, getStoredAccessToken, handleResourceResponse, options) {
return Manifesto.Utils.loadExternalResources(resources, clickThrough, login, getAccessToken, storeAccessToken, getStoredAccessToken, handleResourceResponse, options);
},
- create: function (manifest, options) {
- return Manifesto.Deserialiser.parse(manifest, options);
+ loadManifest: function (uri) {
+ return Manifesto.Utils.loadResource(uri);
}
};
///
diff --git a/src/modules/uv-mediaelementcenterpanel-module/MediaElementCenterPanel.ts b/src/modules/uv-mediaelementcenterpanel-module/MediaElementCenterPanel.ts
index 8d68e37be..9baa1fa39 100644
--- a/src/modules/uv-mediaelementcenterpanel-module/MediaElementCenterPanel.ts
+++ b/src/modules/uv-mediaelementcenterpanel-module/MediaElementCenterPanel.ts
@@ -77,7 +77,7 @@ class MediaElementCenterPanel extends CenterPanel {
var sources = [];
- _.each(this.provider.getRenderings(canvas), (rendering: Manifesto.IRendering) => {
+ _.each(canvas.getRenderings(), (rendering: Manifesto.IRendering) => {
sources.push({
type: rendering.getFormat().toString(),
src: rendering.id
diff --git a/src/modules/uv-moreinforightpanel-module/MoreInfoRightPanel.ts b/src/modules/uv-moreinforightpanel-module/MoreInfoRightPanel.ts
index a62861ff4..82539787a 100644
--- a/src/modules/uv-moreinforightpanel-module/MoreInfoRightPanel.ts
+++ b/src/modules/uv-moreinforightpanel-module/MoreInfoRightPanel.ts
@@ -47,7 +47,7 @@ class MoreInfoRightPanel extends RightPanel {
// show loading icon.
this.$main.addClass('loading');
- var data = this.provider.getMetadata(true);
+ var data = this.provider.getMetadata();
this.displayInfo(data);
}
diff --git a/src/modules/uv-shared-module/BaseProvider.ts b/src/modules/uv-shared-module/BaseProvider.ts
index e5cf00152..9713177f0 100644
--- a/src/modules/uv-shared-module/BaseProvider.ts
+++ b/src/modules/uv-shared-module/BaseProvider.ts
@@ -89,18 +89,6 @@ class BaseProvider implements IProvider{
return manifestType;
}
- getService(resource: any, profile: Manifesto.ServiceProfile | string): Manifesto.IService {
- return this.manifest.getService(resource, profile);
- }
-
- getRendering(resource: any, format: Manifesto.RenderingFormat | string): Manifesto.IRendering {
- return this.manifest.getRendering(resource, format);
- }
-
- getRenderings(resource: any): Manifesto.IRendering[] {
- return this.manifest.getRenderings(resource);
- }
-
getCanvasIndexParam(): number {
return this.bootstrapper.params.getParam(Params.canvasIndex);
}
@@ -207,7 +195,7 @@ class BaseProvider implements IProvider{
getInfoUri(canvas: Manifesto.ICanvas): string{
// default to IxIF
- var service = this.manifest.getService(canvas, manifesto.ServiceProfile.ixif());
+ var service = canvas.getService(manifesto.ServiceProfile.ixif());
return service.getInfoUri();
}
@@ -317,8 +305,37 @@ class BaseProvider implements IProvider{
return this.embedDomain;
}
- getMetadata(includeRootProperties?: boolean): any{
- return this.manifest.getMetadata(includeRootProperties);
+ getMetadata(): any{
+ var metadata = this.manifest.getMetadata();
+
+ if (this.manifest.getDescription()){
+ metadata.unshift({
+ "label": "description",
+ "value": this.manifest.getDescription()
+ });
+ }
+
+ if (this.manifest.getAttribution()){
+ metadata.unshift({
+ "label": "attribution",
+ "value": this.manifest.getAttribution()
+ });
+ }
+
+ if (this.manifest.getLicense()){
+ metadata.unshift({
+ "label": "license",
+ "value": this.manifest.getLicense()
+ });
+ }
+
+ if (this.manifest.getLogo()){
+ metadata.push({
+ "label": "logo",
+ "value": '
'});
+ }
+
+ return metadata;
}
defaultToThumbsView(): boolean{
diff --git a/src/modules/uv-shared-module/ExternalResource.ts b/src/modules/uv-shared-module/ExternalResource.ts
index da91991bf..3066f0835 100644
--- a/src/modules/uv-shared-module/ExternalResource.ts
+++ b/src/modules/uv-shared-module/ExternalResource.ts
@@ -18,10 +18,10 @@ class ExternalResource implements Manifesto.IExternalResource {
}
private _parseAuthServices(resource: any): void {
- this.clickThroughService = this.provider.getService(resource, manifesto.ServiceProfile.clickThrough().toString());
- this.loginService = this.provider.getService(resource, manifesto.ServiceProfile.login().toString());
- this.logoutService = this.provider.getService(resource, manifesto.ServiceProfile.logout().toString());
- this.tokenService = this.provider.getService(resource, manifesto.ServiceProfile.token().toString());
+ this.clickThroughService = manifesto.getService(resource, manifesto.ServiceProfile.clickThrough().toString());
+ this.loginService = manifesto.getService(resource, manifesto.ServiceProfile.login().toString());
+ this.logoutService = manifesto.getService(resource, manifesto.ServiceProfile.logout().toString());
+ this.tokenService = manifesto.getService(resource, manifesto.ServiceProfile.token().toString());
}
public isAccessControlled(): boolean {
diff --git a/src/modules/uv-shared-module/IProvider.ts b/src/modules/uv-shared-module/IProvider.ts
index 12cd1a79a..72e2cccb3 100644
--- a/src/modules/uv-shared-module/IProvider.ts
+++ b/src/modules/uv-shared-module/IProvider.ts
@@ -26,16 +26,13 @@ interface IProvider{
getLicense(): string;
getLogo(): string;
getManifestType(): Manifesto.ManifestType;
- getMetadata(includeRootProperties?: boolean): any;
+ getMetadata(): any;
getNextPageIndex(index?: number): number;
getPagedIndices(index?: number): number[];
getPrevPageIndex(index?: number): number;
getRangeByPath(path: string): Manifesto.IRange;
- getRendering(resource: any, format: Manifesto.RenderingFormat): Manifesto.IRendering;
- getRenderings(resource: any): Manifesto.IRendering[];
getSeeAlso(): any;
getSequenceIndexParam(): number;
- getService(resource: any, profile: Manifesto.ServiceProfile | string): Manifesto.IService;
getStartCanvasIndex(): number;
getThumbs(width: number, height: number): Manifesto.Thumb[];
getTitle(): string;
diff --git a/src/typings/manifesto.d.ts b/src/typings/manifesto.d.ts
index 8086a4e7a..38d05d45b 100644
--- a/src/typings/manifesto.d.ts
+++ b/src/typings/manifesto.d.ts
@@ -106,16 +106,20 @@ declare module Manifesto {
context: string;
id: string;
__jsonld: any;
- private _label;
constructor(jsonld: any);
- getManifest(): IManifest;
- getLabel(): string;
getProperty(name: string): any;
}
}
declare module Manifesto {
- class ManifestResource extends JSONLDResource {
+ class ManifestResource extends JSONLDResource implements IManifestResource {
+ options: IManifestoOptions;
+ constructor(jsonld: any, options: IManifestoOptions);
+ getLabel(): string;
+ getMetadata(): any;
+ getRendering(format: RenderingFormat | string): IRendering;
+ getRenderings(): IRendering[];
getService(profile: ServiceProfile | string): IService;
+ getServices(): IService[];
}
}
declare var _endsWith: any;
@@ -123,7 +127,7 @@ declare var _last: any;
declare module Manifesto {
class Canvas extends ManifestResource implements ICanvas {
ranges: IRange[];
- constructor(jsonld: any);
+ constructor(jsonld: any, options: IManifestoOptions);
getInfoUri(): string;
getRange(): IRange;
getThumbUri(width: number, height: number): string;
@@ -135,25 +139,21 @@ declare module Manifesto {
declare module Manifesto {
class Element extends ManifestResource implements IElement {
type: ElementType;
- constructor(jsonld: any);
+ constructor(jsonld: any, options: IManifestoOptions);
getType(): ElementType;
}
}
declare var _assign: any;
declare module Manifesto {
- class IIIFResource extends JSONLDResource implements IIIIFResource {
- options: IManifestoOptions;
+ class IIIFResource extends ManifestResource implements IIIIFResource {
isLoaded: boolean;
constructor(jsonld: any, options?: IManifestoOptions);
getAttribution(): string;
+ getDescription(): string;
getIIIFResourceType(): IIIFResourceType;
- getLocalisedValue(resource: any, locale?: string): string;
getLogo(): string;
getLicense(): string;
- getMetadata(includeRootProperties?: boolean): any;
getSeeAlso(): any;
- getService(resource: IJSONLDResource, profile: ServiceProfile | string): IService;
- getServices(resource: any): IService[];
getTitle(): string;
load(): Promise;
}
@@ -163,14 +163,12 @@ declare var _map: any;
declare module Manifesto {
class Manifest extends IIIFResource implements IManifest {
rootRange: IRange;
- sequences: Sequence[];
+ sequences: ISequence[];
treeRoot: TreeNode;
constructor(jsonld: any, options?: IManifestoOptions);
getRanges(): IRange[];
getRangeById(id: string): IRange;
getRangeByPath(path: string): IRange;
- getRendering(resource: IJSONLDResource, format: RenderingFormat | string): IRendering;
- getRenderings(resource: any): IRendering[];
getSequenceByIndex(sequenceIndex: number): ISequence;
getTotalSequences(): number;
getTree(): TreeNode;
@@ -181,9 +179,9 @@ declare module Manifesto {
}
declare module Manifesto {
class Collection extends IIIFResource implements ICollection {
- collections: Collection[];
- manifests: Manifest[];
- constructor(jsonld: any, options?: IManifestoOptions);
+ collections: ICollection[];
+ manifests: IManifest[];
+ constructor(jsonld: any, options: IManifestoOptions);
getCollectionByIndex(collectionIndex: number): ICollection;
getManifestByIndex(manifestIndex: number): IManifest;
getTotalCollections(): number;
@@ -191,20 +189,20 @@ declare module Manifesto {
}
}
declare module Manifesto {
- class Range extends JSONLDResource implements IRange {
+ class Range extends ManifestResource implements IRange {
canvases: any[];
parentRange: Range;
path: string;
ranges: Range[];
treeNode: TreeNode;
- constructor(jsonld: any);
+ constructor(jsonld: any, options: IManifestoOptions);
getViewingDirection(): ViewingDirection;
getViewingHint(): ViewingHint;
}
}
declare module Manifesto {
- class Rendering extends JSONLDResource implements IRendering {
- constructor(jsonld: any);
+ class Rendering extends ManifestResource implements IRendering {
+ constructor(jsonld: any, options: IManifestoOptions);
getFormat(): RenderingFormat;
}
}
@@ -212,12 +210,12 @@ declare var _last: any;
declare module Manifesto {
class Sequence extends ManifestResource implements ISequence {
canvases: ICanvas[];
- constructor(jsonld: any);
+ constructor(jsonld: any, options: IManifestoOptions);
getCanvasById(id: string): ICanvas;
getCanvasByIndex(canvasIndex: number): any;
getCanvasIndexById(id: string): number;
getCanvasIndexByLabel(label: string, foliated?: boolean): number;
- getLastCanvasLabel(): string;
+ getLastCanvasLabel(digitsOnly?: boolean): string;
getLastPageIndex(): number;
getNextPageIndex(canvasIndex: number, pagingEnabled?: boolean): number;
getPagedIndices(canvasIndex: number, pagingEnabled?: boolean): number[];
@@ -245,9 +243,9 @@ declare module Manifesto {
static parseCollections(collection: Collection, options?: IManifestoOptions): void;
static parseManifest(json: any, options?: IManifestoOptions): Manifest;
static parseManifests(collection: Collection, options?: IManifestoOptions): void;
- static parseSequences(manifest: Manifest): void;
- static parseCanvases(manifest: Manifest, sequence: any): Canvas[];
- static parseRanges(manifest: Manifest, r: any, path: string, parentRange?: Range): void;
+ static parseSequences(manifest: Manifest, options: IManifestoOptions): void;
+ static parseCanvases(sequence: any, options: IManifestoOptions): ICanvas[];
+ static parseRanges(manifest: Manifest, r: any, path: string, parentRange?: IRange): void;
static getCanvasById(manifest: Manifest, id: string): ICanvas;
}
class Serialiser {
@@ -256,8 +254,8 @@ declare module Manifesto {
}
declare var _endsWith: any;
declare module Manifesto {
- class Service extends JSONLDResource implements IService {
- constructor(resource: any);
+ class Service extends ManifestResource implements IService {
+ constructor(jsonld: any, options: IManifestoOptions);
getProfile(): ServiceProfile;
getDescription(): string;
getInfoUri(): string;
@@ -290,10 +288,15 @@ declare var http: any;
declare var url: any;
declare module Manifesto {
class Utils {
- static loadManifest(uri: string): Promise;
+ static getLocalisedValue(resource: any, locale: string): string;
+ static loadResource(uri: string): Promise;
static loadExternalResource(resource: IExternalResource, clickThrough: (resource: IExternalResource) => Promise, login: (resource: IExternalResource) => Promise, getAccessToken: (resource: IExternalResource) => Promise, storeAccessToken: (resource: IExternalResource, token: IAccessToken) => Promise, getStoredAccessToken: (resource: IExternalResource) => Promise, handleResourceResponse: (resource: IExternalResource) => Promise, options?: IManifestoOptions): Promise;
static loadExternalResources(resources: IExternalResource[], clickThrough: (resource: IExternalResource) => Promise, login: (resource: IExternalResource) => Promise, getAccessToken: (resource: IExternalResource) => Promise, storeAccessToken: (resource: IExternalResource, token: IAccessToken) => Promise, getStoredAccessToken: (resource: IExternalResource) => Promise, handleResourceResponse: (resource: IExternalResource) => Promise, options?: IManifestoOptions): Promise;
static authorize(resource: IExternalResource, clickThrough: (resource: IExternalResource) => Promise, login: (resource: IExternalResource) => Promise, getAccessToken: (resource: IExternalResource) => Promise, storeAccessToken: (resource: IExternalResource, token: IAccessToken) => Promise, getStoredAccessToken: (resource: IExternalResource) => Promise): Promise;
+ static getRendering(resource: any, format: RenderingFormat | string): IRendering;
+ static getRenderings(resource: any): IRendering[];
+ static getService(resource: any, profile: ServiceProfile | string): IService;
+ static getServices(resource: any): IService[];
}
}
declare module Manifesto {
@@ -350,17 +353,13 @@ declare module Manifesto {
}
}
declare module Manifesto {
- interface IIIIFResource extends IJSONLDResource {
- options: IManifestoOptions;
+ interface IIIIFResource extends IManifestResource {
isLoaded: boolean;
getAttribution(): string;
+ getDescription(): string;
getLicense(): string;
- getLocalisedValue(resource: IJSONLDResource | string, locale?: string): string;
getLogo(): string;
- getMetadata(includeRootProperties?: boolean): any;
getSeeAlso(): any;
- getService(resource: IJSONLDResource, profile: ServiceProfile | string): IService;
- getServices(resource: any): IService[];
getTitle(): string;
getIIIFResourceType(): IIIFResourceType;
load(): Promise;
@@ -371,7 +370,6 @@ declare module Manifesto {
context: string;
id: string;
__jsonld: any;
- getLabel(): string;
getProperty(name: string): any;
}
}
@@ -379,8 +377,6 @@ declare module Manifesto {
interface IManifest extends IIIIFResource {
getRangeById(id: string): IRange;
getRangeByPath(path: string): IRange;
- getRendering(resource: IJSONLDResource, format: RenderingFormat | string): IRendering;
- getRenderings(resource: any): IRendering[];
getSequenceByIndex(index: number): ISequence;
getTotalSequences(): number;
getTree(): TreeNode;
@@ -393,16 +389,24 @@ declare module Manifesto {
}
declare module Manifesto {
interface IManifestResource extends IJSONLDResource {
+ options: IManifestoOptions;
+ getLabel(): string;
+ getMetadata(): any;
+ getRendering(format: RenderingFormat | string): IRendering;
+ getRenderings(): IRendering[];
getService(profile: ServiceProfile | string): IService;
+ getServices(): IService[];
}
}
interface IManifesto {
- loadManifest: (uri: string) => Promise;
- loadExternalResources: (resources: Manifesto.IExternalResource[], clickThrough: (resource: Manifesto.IExternalResource) => Promise, login: (resource: Manifesto.IExternalResource) => Promise, getAccessToken: (resource: Manifesto.IExternalResource) => Promise, storeAccessToken: (resource: Manifesto.IExternalResource, token: Manifesto.IAccessToken) => Promise, getStoredAccessToken: (resource: Manifesto.IExternalResource) => Promise, handleResourceResponse: (resource: Manifesto.IExternalResource) => Promise, options?: Manifesto.IManifestoOptions) => Promise;
- create: (manifest: string, options?: Manifesto.IManifestoOptions) => Manifesto.IIIIFResource;
CanvasType: Manifesto.CanvasType;
+ create: (manifest: string, options?: Manifesto.IManifestoOptions) => Manifesto.IIIIFResource;
ElementType: Manifesto.ElementType;
+ getRenderings(resource: any): Manifesto.IRendering[];
+ getService: (resource: any, profile: Manifesto.ServiceProfile | string) => Manifesto.IService;
IIIFResourceType: Manifesto.IIIFResourceType;
+ loadExternalResources: (resources: Manifesto.IExternalResource[], clickThrough: (resource: Manifesto.IExternalResource) => Promise, login: (resource: Manifesto.IExternalResource) => Promise, getAccessToken: (resource: Manifesto.IExternalResource) => Promise, storeAccessToken: (resource: Manifesto.IExternalResource, token: Manifesto.IAccessToken) => Promise, getStoredAccessToken: (resource: Manifesto.IExternalResource) => Promise, handleResourceResponse: (resource: Manifesto.IExternalResource) => Promise, options?: Manifesto.IManifestoOptions) => Promise;
+ loadManifest: (uri: string) => Promise;
ManifestType: Manifesto.ManifestType;
RenderingFormat: Manifesto.RenderingFormat;
ServiceProfile: Manifesto.ServiceProfile;
@@ -417,18 +421,18 @@ declare module Manifesto {
}
}
declare module Manifesto {
- interface IRange extends IJSONLDResource {
+ interface IRange extends IManifestResource {
canvases: any[];
getViewingDirection(): ViewingDirection;
getViewingHint(): ViewingHint;
- parentRange: Range;
+ parentRange: IRange;
path: string;
- ranges: Range[];
+ ranges: IRange[];
treeNode: TreeNode;
}
}
declare module Manifesto {
- interface IRendering extends IJSONLDResource {
+ interface IRendering extends IManifestResource {
getFormat(): RenderingFormat;
}
}
@@ -439,12 +443,12 @@ declare module Manifesto {
getCanvasByIndex(index: number): ICanvas;
getCanvasIndexById(id: string): number;
getCanvasIndexByLabel(label: string, foliated: boolean): number;
- getLastCanvasLabel(): string;
+ getLastCanvasLabel(digitsOnly?: boolean): string;
getLastPageIndex(): number;
getNextPageIndex(index: number): number;
getPagedIndices(index: number): number[];
getPrevPageIndex(index: number): number;
- getService(profile: Manifesto.ServiceProfile | string): IService;
+ getRendering(format: RenderingFormat | string): IRendering;
getStartCanvas(): string;
getStartCanvasIndex(): number;
getThumbs(width: number, height: number): Manifesto.Thumb[];
@@ -460,9 +464,8 @@ declare module Manifesto {
}
}
declare module Manifesto {
- interface IService extends IJSONLDResource {
+ interface IService extends IManifestResource {
getProfile(): ServiceProfile;
- getDescription(): string;
getInfoUri(): string;
}
}
diff --git a/tests b/tests
index 7e4813988..57c89f5bb 160000
--- a/tests
+++ b/tests
@@ -1 +1 @@
-Subproject commit 7e48139889e1115f89b6421f6ee6d1e1d9bb2c06
+Subproject commit 57c89f5bb74c71485caa5ffaf889f332fe422330