js adaptive