button module: dry out mixin