1/** 2 * WP User Frontend Pro - Login Form Frontend Logic 3 * 4 * Handles placeholder conversion, help text, and form element manipulation 5 * for all login form layouts. 6 * 7 * @package WP User Frontend Pro 8 * @since 1.0.0 9 */ 10 11(function($) { 12 'use strict'; 13 14 /** 15 * Initialize login form enhancements 16 */ 17 function initializeLoginForm() { 18 var loginForm = document.getElementById('wpuf-login-form'); 19 20 if (!loginForm) { 21 return; 22 } 23 24 // Get current layout from localized data 25 var layout = wpufLoginForm.layout || 'layout1'; 26 var texts = wpufLoginForm.texts || {}; 27 28 // Add layout class to form 29 loginForm.classList.add('wpuf-layout-' + layout.replace('layout', '')); 30 31 // Apply custom texts to form elements 32 applyCustomTexts(loginForm, texts); 33 34 // Add help text for layout 7 35 if (layout === 'layout7') { 36 addHelpText(loginForm, texts); 37 } 38 39 // Wrap action links 40 wrapActionLinks(loginForm); 41 } 42 43 /** 44 * Apply custom texts to form labels, placeholders, and buttons 45 * 46 * @param {HTMLElement} loginForm The login form element 47 * @param {Object} texts Custom text values from settings 48 */ 49 function applyCustomTexts(loginForm, texts) { 50 var form = loginForm.querySelector('form'); 51 52 if (!form) { 53 return; 54 } 55 56 // Apply username label and placeholder 57 var usernameInput = form.querySelector('input[name="log"]'); 58 59 if (usernameInput) { 60 var usernameLabel = form.querySelector('label[for="wpuf-user_login"]'); 61 62 if (usernameLabel && texts.usernameLabel) { 63 usernameLabel.textContent = texts.usernameLabel; 64 } 65 66 if (texts.usernamePlaceholder) { 67 usernameInput.setAttribute('placeholder', texts.usernamePlaceholder); 68 } 69 } 70 71 // Apply password label and placeholder 72 var passwordInput = form.querySelector('input[name="pwd"]'); 73 74 if (passwordInput) { 75 var passwordLabel = form.querySelector('label[for="wpuf-user_pass"]'); 76 77 if (passwordLabel && texts.passwordLabel) { 78 passwordLabel.textContent = texts.passwordLabel; 79 } 80 81 if (texts.passwordPlaceholder) { 82 passwordInput.setAttribute('placeholder', texts.passwordPlaceholder); 83 } 84 } 85 86 // Apply Remember Me text 87 var rememberMeLabel = form.querySelector('.wpuf-remember-me label[for="wpuf-rememberme"]'); 88 89 if (rememberMeLabel && texts.rememberMe) { 90 rememberMeLabel.textContent = texts.rememberMe; 91 } 92 93 // Apply Lost Password text 94 var lostPasswordLink = form.querySelector('.wpuf-lost-password a'); 95 96 if (lostPasswordLink && texts.lostPassword) { 97 lostPasswordLink.textContent = texts.lostPassword; 98 } 99 100 // Apply Login Button text 101 var submitButton = form.querySelector('input[type="submit"]'); 102 103 if (submitButton && texts.buttonText) { 104 submitButton.value = texts.buttonText; 105 } 106 } 107 108 /** 109 * Add help text to form fields (Layout 7 only) 110 * 111 * @param {HTMLElement} loginForm The login form element 112 * @param {Object} texts Custom text values from settings 113 */ 114 function addHelpText(loginForm, texts) { 115 var form = loginForm.querySelector('form'); 116 117 if (!form) { 118 return; 119 } 120 121 // Help text from custom texts or defaults 122 var usernameHelp = texts.usernameHelp || 'Please enter your username or email address'; 123 var passwordHelp = texts.passwordHelp || 'Please enter your password'; 124 125 // Add help text to username/email field 126 var usernameField = form.querySelector('input[name="log"]'); 127 128 if (usernameField && !usernameField.parentElement.querySelector('.wpuf-help')) { 129 var usernameHelpSpan = document.createElement('span'); 130 usernameHelpSpan.className = 'wpuf-help'; 131 usernameHelpSpan.textContent = usernameHelp; 132 usernameField.parentElement.appendChild(usernameHelpSpan); 133 } 134 135 // Add help text to password field 136 var passwordField = form.querySelector('input[type="password"]'); 137 138 if (passwordField && !passwordField.parentElement.querySelector('.wpuf-help')) { 139 var passwordHelpSpan = document.createElement('span'); 140 passwordHelpSpan.className = 'wpuf-help'; 141 passwordHelpSpan.textContent = passwordHelp; 142 passwordField.parentElement.appendChild(passwordHelpSpan); 143 } 144 } 145 146 /** 147 * Wrap action links in proper containers 148 * 149 * @param {HTMLElement} loginForm The login form element 150 */ 151 function wrapActionLinks(loginForm) { 152 var links = loginForm.querySelectorAll('a'); 153 154 links.forEach(function(link) { 155 // Skip if already wrapped 156 if (link.parentElement.classList.contains('wpuf-lost-password-wrapper')) { 157 return; 158 } 159 160 // Skip if inside form 161 if (link.closest('form')) { 162 return; 163 } 164 165 // Check if it's an action link (lost password, register, etc.) 166 var isActionLink = /lostpassword|action=login|\/login\/|register/.test(link.href); 167 168 if (isActionLink || link.parentElement.id === 'wpuf-login-form') { 169 var wrapper = document.createElement('span'); 170 wrapper.className = 'wpuf-lost-password-wrapper'; 171 link.parentNode.insertBefore(wrapper, link); 172 wrapper.appendChild(link); 173 } 174 }); 175 } 176 177 /** 178 * Initialize on DOM ready 179 */ 180 $(document).ready(function() { 181 initializeLoginForm(); 182 });
183 184})(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.