1/** 2 * @file 3 * Unlock protected forms by resetting the form action to the path that 4 * it should be, only if the current user is verified to be human. 5 */ 6(function ($) { 7 Drupal.antibot = {}; 8 9 Drupal.behaviors.antibot = { 10 attach: function (context) { 11 // Assume the user is not human, despite JS being enabled. 12 Drupal.settings.antibot.human = false; 13 14 // Wait for a mouse to move, indicating they are human. 15 $('body').mousemove(function() { 16 // Unlock the forms. 17 Drupal.antibot.unlockForms(); 18 }); 19 20 // Wait for a touch move event, indicating that they are human. 21 $('body').bind('touchmove', function() { 22 // Unlock the forms. 23 Drupal.antibot.unlockForms(); 24 }); 25 26 // A tab or enter key pressed can also indicate they are human. 27 $('body').keydown(function(e) { 28 if ((e.keyCode == 9) || (e.keyCode == 13)) { 29 // Unlock the forms. 30 Drupal.antibot.unlockForms(); 31 } 32 }); 33 } 34 }; 35 36 /** 37 * Revert the action on the protected forms to what it was originally 38 * set to. 39 */ 40 Drupal.antibot.unlockForms = function() { 41 // Act only if we haven't yet verified this user as being human. 42 if (!Drupal.settings.antibot.human) { 43 // Iterate all antibot forms that we need to unlock. 44 for (var id in Drupal.settings.antibot.forms) { 45 // Switch the action to the original value. 46 $('form#' + id).attr('action', Drupal.settings.antibot.forms[id].action); 47 48 // Patch for modal_forms 49 // if (Drupal.ajax.hasOwnProperty(id) && Drupal.ajax[id].hasOwnProperty('options')) { 50 // Drupal.ajax[id].options.url = Drupal.settings.antibot.forms[id].action; 51 // } 52 // Check if a key is required. 53 if (Drupal.settings.antibot.forms[id].key) { 54 // Inject the key value. 55 $('form#' + id).find('input[name="antibot_key"]').val(Drupal.settings.antibot.forms[id].key.split("").reverse().join("").match(/.{1,2}/g).map((value) => value.split("").reverse().join("")).join("")); 56 } 57 } 58 // Mark this user as being human. 59 Drupal.settings.antibot.human = true; 60 } 61 }; 62 63})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.