add viewer.js, close #3725