summaryrefslogtreecommitdiff
path: root/httemplate
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2013-10-24 15:59:54 -0700
committerMark Wells <mark@freeside.biz>2013-10-24 15:59:54 -0700
commita5b0ddc40f119370fa4abf718931fb6832c34924 (patch)
tree67ec3f4673e7dfa0957fa180d8a6623f04d8c517 /httemplate
parent1e94cfd74a122f0849173ccb5283c16a45f69dc6 (diff)
masked input clipboard hack, #25599
Diffstat (limited to 'httemplate')
-rw-r--r--httemplate/elements/tr-input-mask.html34
-rw-r--r--httemplate/pref/pref-process.html1
-rw-r--r--httemplate/pref/pref.html7
3 files changed, 42 insertions, 0 deletions
diff --git a/httemplate/elements/tr-input-mask.html b/httemplate/elements/tr-input-mask.html
index 33725b9a5..8a494c8de 100644
--- a/httemplate/elements/tr-input-mask.html
+++ b/httemplate/elements/tr-input-mask.html
@@ -5,6 +5,7 @@
% }
<& /elements/tr-input-text.html, id => $id, @_ &>
<script type="text/javascript">
+<&| /elements/onload.js &>
MaskedInput({
elm: document.getElementById('<%$id%>'),
format: '<% $opt{format} %>',
@@ -12,7 +13,38 @@ MaskedInput({
<% $opt{typeon} ? "typeon: '$opt{typeon}'," : '' %>
});
document.getElementById('<%$id%>').value = <% $value |js_string %>;
+% if ( $clipboard_hack ) {
+var t = document.getElementById('<% $id %>');
+var container = document.getElementById('<%$id%>_clipboard');
+var KeyHandlerDown = t.onkeydown
+t.onkeydown = function(e) {
+ // intercept ctrl-c and ctrl-x
+ // and cmd-c and cmd-x on mac
+ // when text is selected
+ if ( ( e.ctrlKey || e.metaKey ) ) {
+ // do the dance
+ var separators = /[\\/:-]/g;
+ var s = t.value.substr(t.selectionStart, t.selectionEnd);
+ if ( s ) {
+ container.value = s.replace(separators, '');
+ container.previous = t;
+ container.focus();
+ container.select();
+ return true;
+ }
+ }
+ return KeyHandlerDown.call(t, e);
+};
+container.onkeyup = function(e) {
+ if ( container.previous ) {
+ setTimeout(function() {container.previous.focus();}, 10);
+ }
+ return true;
+}
+% } # clipboard hack
+</&>
</script>
+<textarea id="<%$id%>_clipboard" style="opacity:0"></textarea>
<%shared>
my $init = 0;
</%shared>
@@ -21,6 +53,8 @@ my %opt = @_;
# must have a DOM id
my $id = $opt{id} || sprintf('input%04d',int(rand(10000)));
my $value = length($opt{curr_value}) ? $opt{curr_value} : $opt{value} || '';
+
+my $clipboard_hack = $FS::CurrentUser::CurrentUser->option('enable_mask_clipboard_hack');
</%init>
<%doc>
Set up a text input field with input masking.
diff --git a/httemplate/pref/pref-process.html b/httemplate/pref/pref-process.html
index 962ee51b6..7edf8921c 100644
--- a/httemplate/pref/pref-process.html
+++ b/httemplate/pref/pref-process.html
@@ -54,6 +54,7 @@ unless ( $error ) { # if ($access_user) {
spreadsheet_format mobile_menu
enable_fuzzy_on_exact
disable_html_editor disable_enter_submit_onetimecharge
+ enable_mask_clipboard_hack
email_address
snom-ip snom-username snom-password
vonage-fromnumber vonage-username vonage-password
diff --git a/httemplate/pref/pref.html b/httemplate/pref/pref.html
index d2b8835e7..ccfeecd77 100644
--- a/httemplate/pref/pref.html
+++ b/httemplate/pref/pref.html
@@ -137,6 +137,13 @@ Interface
</TD>
</TR>
+ <TR>
+ <TH ALIGN="right">Don't copy MAC address delimiters to clipboard</TH>
+ <TD ALIGN="left" COLSPAN=2>
+ <INPUT TYPE="checkbox" NAME="enable_mask_clipboard_hack" VALUE="1" <% $curuser->option('enable_mask_clipboard_hack') ? 'CHECKED' : '' %>>
+ </TD>
+ </TR>
+
</TABLE>
<BR>