app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/remote_image.js in pageflow-linkmap-page-1.0.0 vs app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/remote_image.js in pageflow-linkmap-page-1.1.0

- old
+ new

@@ -1,38 +1,54 @@ -pageflow.linkmapPage.RemoteImage = function(url, image) { - this.width = function() { - return image.width; - }; +pageflow.linkmapPage.RemoteImage = (function() { + function RemoteImage(url, image) { + this.width = function() { + return image.width; + }; - this.height = function() { - return image.height; - }; + this.height = function() { + return image.height; + }; - this.draw = function(canvas, options) { - options = options || {}; - var context = canvas.getContext('2d'); + this.draw = function(canvas, options) { + options = options || {}; + var context = canvas.getContext('2d'); - if (options.disableImageSmoothing) { - context.imageSmoothingEnabled = false; - } + if (options.disableImageSmoothing) { + context.imageSmoothingEnabled = false; + } - context.drawImage(image, - 0, - 0, - canvas.width, - canvas.height); + context.drawImage(image, + 0, + 0, + canvas.width, + canvas.height); + }; + } + + RemoteImage.load = function(url) { + return new $.Deferred(function(deferred) { + var image = new Image(); + + image.onload = onLoad; + image.onerror = onError; + image.crossOrigin = 'Anonymous'; + image.src = url; + + function onLoad() { + deferred.resolve(new pageflow.linkmapPage.RemoteImage(url, image)); + } + + function onError() { + deferred.reject(loadError(url)); + } + }).promise(); }; -}; -pageflow.linkmapPage.RemoteImage.load = function(url) { - return new $.Deferred(function(deferred) { - var image = new Image(); + return RemoteImage; - image.onload = onLoad; - image.crossOrigin = 'Anonymous'; - image.src = url; + function loadError(url) { + var error = new Error('Error while loading ' + url + '.'); + error.i18nKey = 'pageflow.linkmap_page.errors.loading_remote_image_failed'; - function onLoad() { - deferred.resolve(new pageflow.linkmapPage.RemoteImage(url, image)); - } - }).promise(); -}; + return error; + } +}()); \ No newline at end of file