chore(widgets): adds defensive code to the widgets function

Accessing an inexistant widget now raises an exception.
The `widgets` function can be called without the `on` option.
In that case the call fallback to `init`.
The novelist that was processed by a widget is also passed
to the widget function as the last argument.