To avoid hardcoded references to ImageViewer here too, perhaps it could be passed into showCustomViewer() as a "provider" object.  Then we can call both getImageHolder() and render() from here... maybe even collapse them into one API?