masked input clipboard hack, #25599
authorMark Wells <mark@freeside.biz>
Thu, 24 Oct 2013 23:00:08 +0000 (16:00 -0700)
committerMark Wells <mark@freeside.biz>
Thu, 24 Oct 2013 23:00:08 +0000 (16:00 -0700)
httemplate/elements/tr-input-mask.html
httemplate/pref/pref-process.html
httemplate/pref/pref.html

index 33725b9..8a494c8 100644 (file)
@@ -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.
index 84f0832..55f306a 100644 (file)
@@ -52,6 +52,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
index fcd2596..e504ffc 100644 (file)
@@ -134,6 +134,13 @@ Email Address
     </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>