modules.popup: new plugin pattern