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