// insert characters in a textarea or text input field // special characters are enclosed in {}; use {{} for the { character itself // documentation: http://bililite.com/blog/2008/08/20/the-fnsendkeys-plugin/ // source: https://github.com/dwachss/bililiteRange/blob/master/jquery.sendkeys.js // Version: 4 // Copyright (c) 2013 Daniel Wachsstock // MIT license: // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation // files (the "Software"), to deal in the Software without // restriction, including without limitation the rights to use, // copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following // conditions: // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR // OTHER DEALINGS IN THE SOFTWARE. (function($){ $.fn.sendkeys = function (x){ x = x.replace(/([^{])\n/g, '$1{enter}'); // turn line feeds into explicit break insertions, but not if escaped return this.each( function(){ bililiteRange(this).bounds('selection').sendkeys(x).select(); this.focus(); }); }; // sendkeys // add a default handler for keydowns so that we can send keystrokes, even though code-generated events // are untrusted (http://www.w3.org/TR/DOM-Level-3-Events/#trusted-events) // documentation of special event handlers is at http://learn.jquery.com/events/event-extensions/ $.event.special.keydown = $.event.special.keydown || {}; $.event.special.keydown._default = function (evt){ if (evt.isTrusted) return false; if (evt.ctrlKey || evt.altKey || evt.metaKey) return false; // only deal with printable characters. This may be a false assumption if (evt.key == null) return false; // nothing to print. Use the keymap plugin to set this var target = evt.target; if (target.isContentEditable || target.nodeName == 'INPUT' || target.nodeName == 'TEXTAREA') { // only insert into editable elements var key = evt.key; if (key.length > 1 && key.charAt(0) != '{') key = '{'+key+'}'; // sendkeys notation $(target).sendkeys(key); return true; } return false; } })(jQuery)