From 7e3064734ec32de2521c2f4f13f940d3a34f3b0d Mon Sep 17 00:00:00 2001 From: Matthias Lindinger Date: Fri, 2 Feb 2018 13:34:35 +0100 Subject: [PATCH] Fix bug with display in fullscreen --- CanvasLink/canvasLink.js | 87 +++++++++++++++++++++++++--------------- 1 file changed, 54 insertions(+), 33 deletions(-) diff --git a/CanvasLink/canvasLink.js b/CanvasLink/canvasLink.js index b4f6c49..a2835bd 100644 --- a/CanvasLink/canvasLink.js +++ b/CanvasLink/canvasLink.js @@ -23,7 +23,7 @@ var CanvasLink = { /* the template for the modal containing the canvas link */ modalTemplate: Mirador.Handlebars.compile([ - '', + '' ].join('')), /* adds event handlers to the modal */ @@ -54,7 +55,6 @@ var CanvasLink = { }.bind(this)); }, - /* adds the locales to the internationalization module of the viewer */ addLocalesToViewer: function(){ var currentLocales = {}; @@ -70,12 +70,26 @@ var CanvasLink = { } }, + /* extracts information like label and attribution from a window object */ + extractInformationFromWindow: function(viewerWindow){ + var currentImage = viewerWindow.imagesList[viewerWindow.focusModules[viewerWindow.viewType].currentImgIndex]; + var service = currentImage.images[0].resource.service || currentImage.images[0].resource.default.service; + return { + 'attribution': viewerWindow.manifest.jsonLd.attribution || false, + 'canvasLink': viewerWindow.canvasID + (this.options.urlExtension || '/view'), + 'label': viewerWindow.manifest.jsonLd.label, + 'thumbnailUrl': Mirador.Iiif.getImageUrl(currentImage).concat('/full/280,/0/').concat(( + Mirador.Iiif.getVersionFromContext(service['@context']) === '2.0' ? 'default.jpg' : 'native.jpg' + )) + } + }, + /* initializes the plugin */ init: function(){ i18next.on('initialized', function(){ this.addLocalesToViewer(); }.bind(this)); - this.injectModalToDom(); + this.injectViewerEventHandler(); this.injectWorkspaceEventHandler(); this.injectWindowEventHandler(); }, @@ -86,7 +100,40 @@ var CanvasLink = { }, /* injects the modal to the dom */ - injectModalToDom: function(){ + injectModalToViewerWindow: function(viewerWindow){ + var windowInformation = this.extractInformationFromWindow(viewerWindow); + var canvasLinkModal = this.modalTemplate({ + 'canvasLink': windowInformation.canvasLink + }); + viewerWindow.element[0].insertAdjacentHTML('beforeend', canvasLinkModal); + $('#canvas-link-modal').on('show.bs.modal', function(){ + if(window.ShareButtons !== undefined){ + ShareButtons.injectButtonsToDom('#canvas-link-modal .modal-footer', 'afterbegin'); + ShareButtons.updateButtonLinks({ + 'attribution': windowInformation.attribution, + 'label': windowInformation.label, + 'link': windowInformation.canvasLink, + 'thumbnailUrl': windowInformation.thumbnailUrl + }); + } + }); + $('#canvas-link-modal').on('shown.bs.modal', function(){ + $('#canvas-link', this).select(); + }); + $('#canvas-link-modal').on('hidden.bs.modal', function(){ + $(this).siblings('.modal-backdrop').remove(); + $(this).remove(); + }); + $('#canvas-link-modal').on('click', function(e){ + if(e.target === this){ + $(this).modal('hide'); + } + }); + $('#canvas-link-modal').modal('show'); + }, + + /* injects the needed viewer event handler */ + injectViewerEventHandler: function(){ var this_ = this; var origFunc = Mirador.Viewer.prototype.setupViewer; Mirador.Viewer.prototype.setupViewer = function(){ @@ -95,14 +142,8 @@ var CanvasLink = { if($.isPlainObject(options)){ this_.options = options; } - var shareButtons = ['facebook', 'twitter', 'pinterest', 'tumblr', 'envelope']; - if('ontouchstart' in window || navigator.maxTouchPoints){ - shareButtons.push('whatsapp'); - } - document.body.insertAdjacentHTML('beforeend', this_.modalTemplate()); if(window.ShareButtons !== undefined){ ShareButtons.init(this_.options.showShareButtonsInfo); - ShareButtons.injectButtonsToDom('#canvas-link-modal .modal-footer', 'afterbegin'); } }; this.addEventHandlers(); @@ -128,27 +169,7 @@ var CanvasLink = { Mirador.Window.prototype.bindEvents = function(){ origFunc.apply(this); this.element.find('.mirador-icon-canvas-cite-share').on('click', function(){ - var label = this.manifest.jsonLd.label; - var attribution = this.manifest.jsonLd.attribution || false; - var canvasLink = this.canvasID + (this_.options.urlExtension || '/view'); - var currentImage = this.imagesList[this.focusModules[this.viewType].currentImgIndex]; - var service = currentImage.images[0].resource.service || currentImage.images[0].resource.default.service; - var thumbnailUrl = Mirador.Iiif.getImageUrl(currentImage).concat('/full/280,/0/').concat(( - Mirador.Iiif.getVersionFromContext(service['@context']) === '2.0' ? 'default.jpg' : 'native.jpg' - )); - $('#canvas-link-modal #canvas-link').attr('value', canvasLink); - if(window.ShareButtons !== undefined){ - ShareButtons.updateButtonLinks({ - 'attribution': attribution, - 'label': label, - 'link': canvasLink, - 'thumbnailUrl': thumbnailUrl - }); - } - $('#canvas-link-modal').modal('show'); - $('#canvas-link-modal').on('shown.bs.modal', function(){ - $('#canvas-link-modal #canvas-link').select(); - }); + this_.injectModalToViewerWindow(this); }.bind(this)); }; }