generalize preview to content types

addresses items Brian brought up in #396 
@bamnet, I'll let you merge this one when you're happy with it.