1(function () { 2 if (window.teamBuildingTestDataReady) return; 3 window.teamBuildingTestDataReady = true; 4 5 function randomLetters(length) { 6 var letters = 'abcdefghijklmnopqrstuvwxyz'; 7 var result = ''; 8 for (var index = 0; index < length; index += 1) { 9 result += letters.charAt(Math.floor(Math.random() * letters.length)); 10 } 11 return result; 12 } 13 14 function dispatchFieldEvents(field) { 15 field.dispatchEvent(new Event('input', { bubbles: true })); 16 field.dispatchEvent(new Event('change', { bubbles: true })); 17 } 18 19 function findField(form, selectors) { 20 for (var index = 0; index < selectors.length; index += 1) { 21 var field = form.querySelector(selectors[index]); 22 if (field) return field; 23 } 24 return null; 25 } 26 27 function fillField(form, selectors, value) { 28 var field = findField(form, selectors); 29 if (!field || field.readOnly || field.disabled) return; 30 field.value = value; 31 dispatchFieldEvents(field); 32 } 33 34 function chooseSelectValue(form, selectors, preferredValues) { 35 var field = findField(form, selectors); 36 if (!field || field.disabled) return; 37 38 var availableValues = Array.prototype.map.call(field.options || [], function (option) { 39 return option.value; 40 }); 41 var selectedValue = preferredValues.find(function (value) { 42 return availableValues.indexOf(value) !== -1; 43 }); 44 45 if (!selectedValue) { 46 var firstUsableOption = Array.prototype.find.call(field.options || [], function (option) { 47 return Boolean(option.value) && !option.disabled; 48 }); 49 selectedValue = firstUsableOption ? firstUsableOption.value : ''; 50 } 51 52 if (selectedValue) { 53 field.value = selectedValue; 54 dispatchFieldEvents(field); 55 } 56 } 57 58 function tomorrowAsString() { 59 var tomorrow = new Date(); 60 tomorrow.setDate(tomorrow.getDate() + 1); 61 return tomorrow.toISOString().split('T')[0]; 62 } 63 64 function fillTeamBuildingTestData(form, prefix) { 65 if (!form) return; 66 67 var safePrefix = String(prefix || 'team').toLowerCase().replace(/[^a-z]+/g, '') || 'team'; 68 fillField(form, ['[name="full_name"]', '#meeting_name', '#glm_full_name'], 'Test User'); 69 fillField(form, ['[name="first_name"]'], 'Test'); 70 fillField(form, ['[name="last_name"]'], 'User'); 71 fillField(form, ['[name="email"]', '#meeting_email', '#glm_email'], 'test+' + safePrefix + '-' + randomLetters(10) + '@letsroam.com'); 72 fillField(form, ['[name="phone"]', '#meeting_phone', '#glm_phone'], '4078089625'); 73 fillField(form, ['[name="company"]', '#meeting_company', '#glm_company'], "Let's Roam"); 74 fillField(form, ['[name="event_date"]', '#glm_event_date'], tomorrowAsString()); 75 fillField(form, ['textarea[name="lead_event_notes"]', '[name="lead_event_notes"]', '[name="event_vision"]', '#meeting_vision'], 'We want to build stronger team connections and have fun together!'); 76 77 var cityField = findField(form, ['input[name="city"]:not([type="hidden"])', '#tb_City', '#glm_city']); 78 if (cityField && !cityField.readOnly && !cityField.disabled) { 79 cityField.value = 'Denver, Colorado'; 80 dispatchFieldEvents(cityField); 81 } 82 83 chooseSelectValue(form, ['select[name="group_size"]', '#meeting_participants', '#glm_group_size'], ['71-80', '51-100', '26-50', '10-25']); 84 chooseSelectValue(form, ['select[name="event_category"]', '#glm_event_category'], ['scavenger_hunt', 'team_building', 'virtual_team_building']); 85 86 var hiddenGroupSize = form.querySelector('input[name="group_size"]'); 87 if (hiddenGroupSize) { 88 hiddenGroupSize.value = '26-50'; 89 dispatchFieldEvents(hiddenGroupSize); 90 } 91 92 var eventTypeRadio = form.querySelector('input[name="event_category"][value="scavenger_hunt"]'); 93 if (eventTypeRadio) { 94 eventTypeRadio.checked = true; 95 dispatchFieldEvents(eventTypeRadio); 96 } 97 } 98 99 function resolveForm(trigger) { 100 var explicitSelector = trigger.getAttribute('data-team-building-test-form'); 101 if (explicitSelector) { 102 var explicitForm = document.querySelector(explicitSelector); 103 if (explicitForm) return explicitForm; 104 } 105 106 var closestForm = trigger.closest('form'); 107 if (closestForm) return closestForm; 108 109 var ancestor = trigger.parentElement; 110 for (var depth = 0; ancestor && depth < 7; depth += 1) { 111 var nestedForm = ancestor.querySelector('form'); 112 if (nestedForm) return nestedForm; 113 ancestor = ancestor.parentElement; 114 } 115 return null; 116 } 117 118 window.generateTeamBuildingTestLetters = randomLetters; 119 window.fillTeamBuildingTestData = fillTeamBuildingTestData; 120 121 document.addEventListener('click', function (event) { 122 var trigger = event.target.closest('[data-team-building-test-fill]'); 123 if (!trigger || event.detail !== 3) return; 124 125 fillTeamBuildingTestData( 126 resolveForm(trigger), 127 trigger.getAttribute('data-team-building-test-prefix') || 'team' 128 ); 129 }); 130})();
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.