% if ( !$init ) { % $init++; % } <& /elements/tr-input-text.html, id => $id, @_ &> <%shared> my $init = 0; <%init> my %opt = @_; # must have a DOM id my $id = $opt{id} || sprintf('input%04d',random_id(4)); my $value = length($opt{curr_value}) ? $opt{curr_value} : $opt{value} || ''; my $clipboard_hack = $FS::CurrentUser::CurrentUser->option('enable_mask_clipboard_hack'); <%doc> Set up a text input field with input masking. <& /elements/tr-input-mask.html, format => '____-__-__', #typeon => '_YMDhms', # which characters in the format represent blanks #allowed => '0123456789', # characters allowed in the blanks ... all other options as for tr-input-text.html &> Note that the value sent on form submission will contain the mask separators, and if value/curr_value is passed, it should also be formatted to fit the mask. Uses masked_input_1.1.js by Kendall Conrad, available under a Creative Commons Attribution-ShareAlike license.