1/* * 2 * @file 3 * Global utilities. 4 * 5 */ 6(function ($, Drupal, once) { 7 'use strict'; 8 9 // Focus effect. 10 Drupal.behaviors.loginFocus = { 11 attach: function (context) { 12 $('.user-login-form .form-item-name').addClass('focused'); 13 $( 14 "input[type='text'], input[type='email'], input[type='tel'], input[type='number'], input[data-drupal-selector='edit-pass'], input[type='text'], .password-field, .password-confirm", 15 '.user-login-form, .user-pass, .user-register-form, .user-form' 16 ) 17 .focus(function () { 18 $(this).parent('.js-form-item').addClass('focused'); 19 }) 20 .blur(function () { 21 if ($(this).val() == '') { 22 $(this).parent('.js-form-item').removeClass('focused'); 23 } 24 }); 25 } 26 }; 27 28 Drupal.behaviors.togglePassword = { 29 attach: function (context, settings) { 30 $('.user-register-form, .user-login-form').each(function () { 31 var _this = $(this); 32 _this.find('.js-form-type-password').append('<span toggle="#password-field" class="toggle-password"></span>'); 33 _this.find('.toggle-password').on('click', function () { 34 $(this).toggleClass('icon-eye-slash'); 35 var input = $(this).parent().find('input'); 36 if (input.attr('type') == 'password') { 37 input.attr('type', 'text'); 38 } else { 39 input.attr('type', 'password'); 40 } 41 }); 42 }); 43 } 44 }; 45 46 Drupal.behaviors.loginModal = { 47 attach: function (context, settings) { 48 if (!once('loadedAjaxLoginModal', 'html').length) { 49 return; 50 } 51 $(document).ajaxSuccess(function (event, data) { 52 setTimeout(function () { 53 if ($('body').find('.modal--login').length > 0) { 54 $('html').addClass('overflow-hidden'); 55 if (!window.location.href.includes('#login-modal')) { 56 var newurl = window.location.href + '#login-modal'; 57 history.pushState('', 'open-modal', newurl); 58 } 59 } 60 }, 100); 61 }); 62 63 $(document).on('click', '.modal-close-btn', function (e) { 64 $('html').removeClass('overflow-hidden'); 65 $(this).parents('.modal--login').find('.ui-dialog-titlebar-close').click(); 66 if (window.location.href.includes('#login-modal')) { 67 var newurl = window.location.href.replace('#login-modal', ''); 68 history.pushState('', 'closed-modal', newurl); 69 } 70 }); 71 72 var currentPageURL = window.location.href; 73 if (currentPageURL.includes('/user/login')) { 74 $('.modal-close-btn').on('click', function () { 75 history.go(-1); 76 }); 77 } 78 } 79 }; 80 81 // Fill placeholder and change labels on register. 82 Drupal.behaviors.registerChangePlaceholdersAndLabels = { 83 attach: function (context, settings) { 84 var user_register = $('.page-user-register .user-register-form'); 85 var user_login = $('.user-login-form'); 86 var user_password = $('.user-pass'); 87 var user_recover = $('.page-user-reset .user-form'); 88 89 //LOGIN. 90 91 // Insert placeholder login. 92 user_login.find('.form-type-email input').removeAttr('autofocus'); 93 user_login.find('.form-type-email input').blur(); 94 user_login.find('.form-type-email input').attr('placeholder', Drupal.t('Insira o seu email')); 95 user_login.find('.form-item-pass input').attr('placeholder', Drupal.t('Insira a sua palavra-passe')); 96 97 // Change labels login. 98 user_login.find('.form-item-mail label').text(Drupal.t('Email')); 99 user_login.find('.form-item-pass label').text(Drupal.t('Palavra-passe')); 100 101 // Add link forgot password login. 102 user_login 103 .find('.js-form-type-password') 104 .prepend( 105 '<a href="/user/password" class="forgot-password">' + Drupal.t('Esqueceu-se da palavra-passe?') + '</a>' 106 ); 107 108 // Change submit button classes. 109 user_login.find('.form-actions button.js-form-submit.form-submit').addClass('button-ffms button-ffms-blue '); 110 111 // Disable button when not filled. 112 var submit = user_login.find(':input[type=submit]'), 113 inputs = user_login.find(':input[type=email],:input[type=password]'); 114 115 submit.prop('disabled', true); 116 setTimeout(function () { 117 disableCheck(); 118 }, 500); 119 120 inputs.keydown(function () { 121 disableCheck(); 122 }); 123 124 inputs.on('blur input', function () { 125 disableCheck(); 126 }); 127 128 function disableCheck() { 129 var input_status = true; 130 inputs.each(function () { 131 if ($(this).val() == '') { 132 input_status = false;
133 } 134 }); 135 if (input_status == true) { 136 submit.prop('disabled', false); 137 } else { 138 submit.prop('disabled', true); 139 } 140 } 141 142 //REGISTO. 143 144 // Insert placeholder registo. 145 user_register.find('.field--name-field-user-name input').attr('placeholder', Drupal.t('Insira o seu nome')); 146 user_register.find('.field--name-field-user-surname input').attr('placeholder', Drupal.t('Insira o seu apelido')); 147 user_register 148 .find('.field--name-field-user-mobile-phone input') 149 .attr('placeholder', Drupal.t('Insira o seu número')); 150 user_register.find('.field--name-field-user-birth-date input').attr('placeholder', Drupal.t('DD/MM/AAAA')); 151 user_register.find('.form-item-mail input').attr('placeholder', Drupal.t('Insira o seu email')); 152 user_register 153 .find('.form-item-pass .form-item-pass-pass1 input') 154 .attr('placeholder', Drupal.t('Insira a sua palavra-passe')); 155 user_register 156 .find('.form-item-pass .form-item-pass-pass2 input') 157 .attr('placeholder', Drupal.t('Insira novamente a sua palavra-passe')); 158 159 // Change labels registo. 160 user_register.find('.form-item-mail label').text(Drupal.t('Email')); 161 user_register.find('.form-item-pass .form-item-pass-pass1 label').text(Drupal.t('Palavra-passe')); 162 user_register.find('.form-item-pass .form-item-pass-pass2 label').text(Drupal.t('Confirmar palavra-passe')); 163 user_register.find('.form-actions button.js-form-submit.form-submit').text(Drupal.t('Submeter')); 164 165 // Change submit button classes. 166 user_register.find('.form-actions button.js-form-submit.form-submit').addClass('button-ffms button-ffms-blue '); 167 168 // Add Required fields text. 169 $(once('loadPage', '.form-actions', user_register[0])).append( 170 '<div class="required-fields-text">' + Drupal.t('*Campos de preenchimento obrigatório') + '</div>' 171 ); 172 173 // Password fields 174 var user_register_pass = user_register.find('.form-item-pass .form-item-pass-pass1'); 175 var user_recover_pass = user_recover.find('.form-item-pass .form-item-pass-pass1'); 176 177 // Add Required fields text. 178 user_register_pass.append( 179 '<span class="password-legend">' + Drupal.t('Enter a secure password: it must be at least 8 characters long and include at least one uppercase letter, one special character, and one number.') + '</span>' 180 ); 181 user_recover_pass.append( 182 '<span class="password-legend">' + Drupal.t('Enter a secure password: it must be at least 8 characters long and include at least one uppercase letter, one special character, and one number.') + '</span>' 183 ); 184 185 //Add select2. 186 $(once('genderSelect', '.js-form-item-field-user-gender .form-select', user_register[0])).select2({ 187 placeholder: { 188 id: '_none', // the value of the option 189 text: 'Selecione uma opção' 190 }, 191 allowClear: true, 192 minimumResultsForSearch: Infinity, 193 allowClear: true, 194 minimumResultsForSearch: Infinity, 195 selectionCssClass: 'filter-selector', 196 dropdownCssClass: 'filter-dropdown', 197 dropdownParent: $('.js-form-item-field-user-gender') 198 }); 199 user_register.find('.js-form-item-field-country-state-0-country select').select2({ 200 placeholder: 'Selecione uma opção', 201 allowClear: true, 202 minimumResultsForSearch: Infinity, 203 selectionCssClass: 'filter-selector', 204 dropdownCssClass: 'filter-dropdown', 205 dropdownParent: $('.js-form-item-field-country-state-0-country') 206 }); 207 if (!once('loadedContries', 'html').length) { 208 return; 209 } 210 $(document).ajaxSuccess(function (event, data) { 211 setTimeout(function () { 212 user_register.find('.js-form-item-field-country-state-0-state select').select2({ 213 placeholder: 'Selecione uma opção', 214 allowClear: true, 215 minimumResultsForSearch: Infinity, 216 selectionCssClass: 'filter-selector', 217 dropdownCssClass: 'filter-dropdown', 218 dropdownParent: $('.js-form-item-field-country-state-0-state') 219 }); 220 lockedStatus(inputsRegister, submitRegister); 221 }, 100); 222 }); 223 224 // Create dummy input birthdate for formatting. 225 var date = user_register.find('.field--name-field-user-birth-date .form-item-field-user-birth-date-0-value-date'); 226 227 $(once('dateForFormatting', date.eq(0))).append( 228 '<input class="bef-datepicker-user" autocomplete="off" name="field_birthdate_dummy" id="edit-field-birthdate-dummy" type="text" maxlength="128" value="">' 229 ); 230 231 user_register 232 .find('.field--name-field-user-birth-date .bef-datepicker-user') 233 .attr('placeholder', Drupal.t('DD/MM/AAAA')); 234 $(once('dateChange', '.bef-datepicker-user', user_register[0])).on('change', function () { 235 var _this = $(this), 236 _val = _this.val().split('/'); 237 if (_this.attr('name') == 'field_birthdate_dummy') { 238 date.find('input#edit-field-user-birth-date-0-value-date').val(_val[2] + '-' + _val[1] + '-' + _val.eq(0)); 239 } 240 }); 241 242 date.find('input#edit-field-user-birth-date-0-value-date').each(function () { 243 var _this = $(this), 244 _val = _this.val().split('-'); 245 if (_this.val() != '') { 246 _this 247 .parents('.form-item-field-user-birth-date-0-value-date ') 248 .find('.bef-datepicker-user') 249 .val(_val[2] + '/' + _val[1] + '/' + _val.eq(0)); 250 } 251 }); 252 253 // Create date picker with dd-mm-yyyy format 254 date.find('.bef-datepicker-user').each(function () { 255 $(this) 256 .datepicker({ 257 format: 'dd/mm/yyyy', 258 language: 'pt', 259 container: '.form-item-field-user-birth-date-0-value-date' 260 }) 261 .on('changeDate', function () { 262 $(this).datepicker('hide'); 263 }); 264 }); 265 266 // Focused behaviour 267 $('.bef-datepicker-user').change(function () { 268 var _date = $(this).val(); 269 if (_date != '') { 270 $(this).parents('.field--type-datetime').addClass('has-value'); 271 $(this).parents('.field--type-datetime').addClass('focused'); 272 } else { 273 $(this).parents('.field--type-datetime').removeClass('has-value'); 274 $(this).parents('.field--type-datetime').removeClass('focused'); 275 } 276 }); 277 278 // Disable button when not filled. 279 var submitRegister = user_register.find(':input[type=submit]'), 280 inputsRegister = user_register.find('input[required="required"]'); 281 282 submitRegister.prop('disabled', true); 283 inputsRegister.keyup(function () { 284 lockedStatus(inputsRegister, submitRegister); 285 }); 286 287 inputsRegister.click(function () { 288 lockedStatus(inputsRegister, submitRegister); 289 }); 290 291 var locked = false;
292 293 function lockedStatus(inputsRegister, submitRegister) { 294 locked = false; 295 inputsRegister.each(function () { 296 if ($(this).attr('type') == 'checkbox' && !$(this).prop('checked')) { 297 locked = true; 298 } else if ($(this).val() == '') { 299 locked = true; 300 } 301 }); 302 303 if ($('.password-confirm-message .ok').length == 0) { 304 locked = true; 305 } 306 307 if (locked == false) { 308 submitRegister.prop('disabled', false); 309 } else { 310 submitRegister.prop('disabled', true); 311 } 312 } 313 314 //RECOVER PASSWORD. 315 316 //Change labels password. 317 user_password.find('.form-type-textfield label').text(Drupal.t('Email')); 318 user_password.find('.form-actions button.js-form-submit.form-submit').text(Drupal.t('Enviar')); 319 320 // Insert placeholder password. 321 user_password.find('.form-type-email input').removeAttr('autofocus'); 322 user_password.find('.form-type-email input').blur(); 323 user_password.find('.form-type-email input').attr('placeholder', Drupal.t('Insira o seu email')); 324 325 // Change submit button classes. 326 user_password.find('.form-actions button.js-form-submit.form-submit').addClass('button-ffms button-ffms-blue '); 327 328 // If the email comes pre-filled, add focused class. 329 if (user_password.find('.js-form-type-email input').val() != '') { 330 user_password.find('.js-form-type-email').addClass('focused'); 331 } 332 333 //RECOVER. 334 335 // Change labels. 336 user_recover.find('.form-actions button').text(Drupal.t('Guardar alterações')); 337 user_recover.find('.form-actions a').addClass('clear-filters button-ffms button-ffms-black button-border'); 338 339 // Change labels. 340 user_recover.find('.form-item-pass-pass1 label').text(Drupal.t('Palavra-passe nova')); 341 user_recover.find('.form-item-pass-pass2 label').text(Drupal.t('Confirmar palavra-passe')); 342 343 //Change placeholders. 344 user_recover.find('.form-item-pass-pass1 input').attr('placeholder', Drupal.t('Insira uma nova palavra-passe')); 345 user_recover.find('.form-item-pass-pass2 input').attr('placeholder', Drupal.t('Confirme a nova palavra-passe')); 346 user_recover.find('.form-actions button.js-form-submit.form-submit').addClass('button-ffms button-ffms-blue '); 347 348 // Disable button when not filled. 349 var submit_recover = user_recover.find(':input[type=submit]'), 350 inputs_recover = user_recover.find('.password-field,.password-confirm'); 351 352 submit_recover.prop('disabled', true); 353 setTimeout(function () { 354 disableCheckRecover(inputs_recover, submit_recover); 355 }, 500); 356 357 inputs_recover.keydown(function () { 358 disableCheckRecover(inputs_recover, submit_recover); 359 }); 360 361 inputs_recover.on('blur input', function () { 362 disableCheckRecover(inputs_recover, submit_recover); 363 }); 364 365 function disableCheckRecover(inputs_recover, submit_recover) { 366 var input_status_recover = true; 367 inputs_recover.each(function () { 368 if ($(this).val() == '') { 369 input_status_recover = false; 370 } 371 }); 372 if ($('.password-confirm-message .ok').length == 0) { 373 locked = true; 374 } 375 376 if (input_status_recover == true) { 377 submit_recover.prop('disabled', false); 378 } else { 379 submit_recover.prop('disabled', true); 380 } 381 } 382 383 // Disable button when not filled. 384 var submitRecover = user_password.find(':input[type=submit]'), 385 inputsRecover = user_password.find(':input[type=email]'); 386 387 submitRecover.prop('disabled', true); 388 389 // Enable button when email is pre-filled. 390 if (user_password.find('.js-form-type-email input').val() != '') { 391 user_password.find(':input[type=submit]').prop('disabled', false); 392 } 393 394 inputsRecover.keyup(function () { 395 if ($(this).val() != '') { 396 submitRecover.prop('disabled', false); 397 } else { 398 submitRecover.prop('disabled', true); 399 } 400 }); 401 } 402 }; 403 Drupal.behaviors.registerFocus = { 404 attach: function (context) { 405 var _select = $('.select2-selection'); 406 407 $(once('resgisterFocus', _select.eq(0))).each(function () { 408 var _this = $(this); 409 _this.click(function (e) { 410 e.stopPropagation(); 411 if ($('span.select2-selection').attr('aria-expanded', 'true')) { 412 $(this).parents('.js-form-item').addClass('focused'); 413 } 414 }); 415 if (_this.find('.select2-selection__placeholder').length == 0) { 416 $(this).parents('.js-form-item').addClass('focused'); 417 } 418 }); 419 420 if (!once('resgisterFocus', 'html').length) { 421 return; 422 } 423 $(document).click(function () { 424 $('.form-date').parents('.field--type-datetime').removeClass('focused'); 425 426 _select.each(function () { 427 var _this = $(this); 428 if (_this.find('.select2-selection__placeholder').length != 0) { 429 $(this).parents('.js-form-item').removeClass('focused'); 430 } else { 431 $(this).parents('.js-form-item').addClass('focused'); 432 } 433 }); 434 }); 435 } 436 }; 437})(jQuery, Drupal, once);
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.