Event delegation refactor