we do not depend on jquery