diff --git a/__tests__/integration/mirador/svg_annos.html b/__tests__/integration/mirador/svg_annos.html index 71d87cfbadca39e3ce994659b790c8e4a795d675..c7c39733cceb8a7b084c9364c52c597fd95007a2 100644 --- a/__tests__/integration/mirador/svg_annos.html +++ b/__tests__/integration/mirador/svg_annos.html @@ -15,7 +15,7 @@ id: 'mirador', windows: [ { - manifestId: 'https://api.myjson.com/bins/ahd5y', + manifestId: 'https://collections.st-andrews.ac.uk/manifest-test/test-manifest.json', }, { manifestId: 'https://iiif.bodleian.ox.ac.uk/iiif/manifest/748a9d50-5a3a-440e-ab9d-567dd68b6abb.json', diff --git a/__tests__/src/lib/CanvasAnnotationDisplay.test.js b/__tests__/src/lib/CanvasAnnotationDisplay.test.js index 16914ca66538ce1b257d3a2876a77434f06bdee4..0427dec5209f1f1f556ec349a5f36fb1b0bb2942 100644 --- a/__tests__/src/lib/CanvasAnnotationDisplay.test.js +++ b/__tests__/src/lib/CanvasAnnotationDisplay.test.js @@ -57,6 +57,7 @@ describe('CanvasAnnotationDisplay', () => { const context = { restore: jest.fn(), save: jest.fn(), + setLineDash: jest.fn(), stroke: jest.fn(), translate: jest.fn(), }; @@ -68,8 +69,8 @@ describe('CanvasAnnotationDisplay', () => { expect(context.save).toHaveBeenCalledWith(); expect(context.restore).toHaveBeenCalledWith(); expect(context.translate).toHaveBeenCalledWith(-100, 0); - expect(context.strokeStyle).toEqual('blue'); - expect(context.lineWidth).toEqual(20); + expect(context.strokeStyle).toEqual('#00bfff'); + expect(context.lineWidth).toEqual(617.4334); }); }); describe('fragmentContext', () => { diff --git a/src/lib/CanvasAnnotationDisplay.js b/src/lib/CanvasAnnotationDisplay.js index 454c91cb56bd0a39124667a3dbea2f55c2ab76ad..c1955b0598e2b204aa7f5a0c8126f060e4f4524b 100644 --- a/src/lib/CanvasAnnotationDisplay.js +++ b/src/lib/CanvasAnnotationDisplay.js @@ -46,13 +46,27 @@ export default class CanvasAnnotationDisplay { * context.strokeStyle = element.attributes.stroke.nodeValue; * context.lineWidth = element.attributes['stroke-width'].nodeValue; */ - context.strokeStyle = this.color; // eslint-disable-line no-param-reassign - context.lineWidth = this.lineWidth(); // eslint-disable-line no-param-reassign + this.setupLineDash(context, element.attributes); + context.strokeStyle = this.strokeColor( // eslint-disable-line no-param-reassign + element.attributes, + ); + context.lineWidth = this.lineWidth( // eslint-disable-line no-param-reassign + element.attributes, + ); context.stroke(p); context.restore(); }); } + /* eslint-disable require-jsdoc, class-methods-use-this */ + setupLineDash(context, elementAttributes) { + // stroke-dasharray + if (elementAttributes['stroke-dasharray']) { + context.setLineDash(elementAttributes['stroke-dasharray'].nodeValue.split(',')); + } + } + /* eslint-enable require-jsdoc, class-methods-use-this */ + /** */ fragmentContext(context) { const fragment = this.resource.fragmentSelector; @@ -64,8 +78,20 @@ export default class CanvasAnnotationDisplay { } /** */ - lineWidth() { - return Math.ceil(10 / (this.zoom * this.width)); + strokeColor(elementAttributes) { + if (elementAttributes && elementAttributes.stroke) { + return elementAttributes.stroke.nodeValue; + } + return this.color; + } + + /** */ + lineWidth(elementAttributes) { + let calculatedWidth = Math.ceil(10 / (this.zoom * this.width)); + if (elementAttributes && elementAttributes['stroke-width']) { + calculatedWidth *= elementAttributes['stroke-width'].nodeValue; + } + return calculatedWidth; } /** */