javascript interaction framework