Htk.FullImage = new Class ({ Extends: Vn.Object ,Properties: { /** * Subdirectory where full images are allocated. **/ fullDir: { type: String ,set: function (x) { this._fullDir = x; } ,get: function () { return this._fullDir; } } } ,show: function (src) { var popup = new Htk.Popup ({class: 'htk-full-image', modal: true}); var img = document.createElement ('img'); img.className = 'htk-full-image'; img.addEventListener ('click', this._onImageClick.bind (this, popup)); //img.addEventListener ('error', this._onImageError.bind (this, popup)); img.src = src; if (!img.complete) { img.addEventListener ('load', this._onImageLoad.bind (this, popup, img)); var spinner = new Htk.Spinner (); spinner.start (); popup.child = spinner; } else this._onImageLoad (popup, img); popup.open (); } ,_onImageLoad: function (popup, img) { var scale = null; var width = img.width; var height = img.height; var innerWidth = Vn.Browser.getInnerWidth () - 50; var innerHeight = Vn.Browser.getInnerHeight () - 50; if (width > innerWidth) { scale = width / innerWidth; height = parseInt (height / scale); width = innerWidth; } if (height > innerHeight) { scale = height / innerHeight; width = parseInt (width / scale); height = innerHeight; } if (scale !== null) { img.style.width = width +'px'; img.style.height = height +'px'; } popup.childNode = img; popup.reset (); } ,_onImageClick: function (popup) { popup.hide (); } ,_onImageError: function (popup) {} });