PageSourceSearch

https://formation.ch-alpes-isere.fr/lib/javascript.php/1789977024/…/js/login_widget_modal.js

js ch-alpes-isere.fr collected 2026-10-02 19:10:06 UTC 12,429 bytes, 65 lines download raw bytes

1
2/**
3 * js for login_widget_modal local
4 *
5 * @package    local_login_widget_modal
6 * @copyright  2022 May Eticeo <[email protected]>
7 * @author     2022 May Guevara Gabrielle <[email protected]>
8 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
9 */
10var signuptitle='';var forgottitle='';var logintitle='';var signupbutton='';var signupbuttontext='';var signupwithlogin=!1;var hasheader=!1;var otherLoginTitle='';var otherLoginButton='';var otherLoginLink='';var displayOtherLogin=!1;var displayCookies=!1;var showPassword=!1;var modalEnabled=!1;function loginWidgetModal_initVar(varList){signuptitle=varList.signupTitle;forgottitle=varList.forgotTitle;logintitle=varList.loginTitle;signupbutton=varList.signupButton;signupbuttontext=varList.signupButtonText;signupwithlogin=varList.signupWithLogin;hasheader=varList.hasHeader;otherLoginTitle=varList.otherLoginTitle;otherLoginButton=varList.otherLoginButton;otherLoginLink=varList.otherLoginLink;displayOtherLogin=varList.displayOtherLogin;displayCookies=varList.displayCookies;showPassword=varList.showPassword;modalEnabled=varList.modalEnabled}
11function moveForgotBeforeSubmit(scope){const root=scope||document;const forgotBlock=root.querySelector('.login-form-forgotpassword, .forgetpass');if(!forgotBlock)return;const submit=root.querySelector('form button[type="submit"], form input[type="submit"]');if(!submit)return;const submitGroup=submit.closest('.form-group, .form-item, .fitem, .submit, .mb-3, div')||submit.parentNode;if(submitGroup&&submitGroup.parentNode){submitGroup.parentNode.insertBefore(forgotBlock,submitGroup)}}
12function loginWidgetModal_updateSignup(){let buttonSignup=document.querySelector('#signup button');let url=buttonSignup?.getAttribute('action');if(!url){buttonSignup=document.querySelector('.login-signup a');url=buttonSignup?.getAttribute('href');if(buttonSignup){buttonSignup.removeAttribute('href')}}else{buttonSignup?.setAttribute('type','button')}
13if(buttonSignup&&url){buttonSignup.setAttribute('onclick','loginWidgetModal_callModal("'+url+'", "signup", false)')}}
14function loginWidgetModal_updateLogin(){const buttonLogin=document.querySelector('#login_widget_modal_custom_login_button');const url=M.cfg.wwwroot+"/login/index.php";if(buttonLogin){buttonLogin.removeAttribute('onclick');buttonLogin.setAttribute('onclick','loginWidgetModal_callModal("'+url+'", "login")')}
15const firstLoginLink=document.querySelector('.login a');const firstLoginUrl=M.cfg.wwwroot+"/login/index.php";if(firstLoginLink){firstLoginLink.addEventListener('click',function(event){event.preventDefault();if(this.dataset.clicked){return}
16this.dataset.clicked=!0;loginWidgetModal_callModal(firstLoginUrl,'login');const modal=document.getElementById('loginWidgetModal');if(modal){modal.addEventListener('hidden.bs.modal',function handler(){delete firstLoginLink.dataset.clicked;modal.removeEventListener('hidden.bs.modal',handler)})}})}}
17function loginWidgetModal_updateForgot(){let buttonForget=document.querySelector('.forgetpass a');let url=buttonForget?.getAttribute('href');if(!url){buttonForget=document.querySelector('.login-form-forgotpassword a');url=buttonForget?.getAttribute('href')}
18if(buttonForget&&url){buttonForget.removeAttribute('href');buttonForget.setAttribute('onclick','loginWidgetModal_callModal("'+url+'", "forgot")');buttonForget.classList.add('customForgotPassword')}}
19function createPasswordToggle(passwordFieldSelector,containerSelector){const passwordField=document.querySelector(`#loginWidgetModal ${passwordFieldSelector}`);if(!passwordField)return;const container=document.querySelector(`#loginWidgetModal ${containerSelector}`);container.style.position="relative";const toggleButton=document.createElement("span");toggleButton.id="toggle-password";const eyeIcon=document.createElement("div");eyeIcon.classList.add("fa","fa-eye");toggleButton.appendChild(eyeIcon);container.appendChild(toggleButton);eyeIcon.addEventListener("click",function(){const isPasswordVisible=passwordField.type==="password";passwordField.type=isPasswordVisible?"text":"password";eyeIcon.classList.toggle("fa-eye");eyeIcon.classList.toggle("fa-eye-slash")})}
20function attachLoginInterceptor(form,container){form.addEventListener('submit',function(e){e.preventDefault();e.stopPropagation();const fd=new FormData(form);fetch(form.action,{method:'POST',body:fd,credentials:'same-origin'}).then(res=>res.text()).then(html=>{if(html.includes('id="page-login-index"')){const formMatch=html.match(/<form[\s\S]*?<\/form>/);if(!formMatch)return;const newFormHtml=formMatch[0];const errorBoxMatch=html.match(/<div class="alert alert-danger"[\s\S]*?<\/div>/);const errorBox=errorBoxMatch?errorBoxMatch[0]:null;const errorContainer=container.querySelector('.login_modal_col');if(!errorContainer)return;const formtitle=container.querySelector('.login_title');const guestlogin=container.querySelector('#guestlogin');errorContainer.innerHTML=`<div class="login_modal_col">${newFormHtml}</div>`;errorContainer.prepend(formtitle);if(guestlogin){errorContainer.append(guestlogin)}
21if(showPassword!=="0"){createPasswordToggle("#password",".login-form-password")}
22loginWidgetModal_updateForgot();moveForgotBeforeSubmit(errorContainer);const newForm=errorContainer.querySelector('form');if(newForm&&errorBox){const usernameInput=newForm.querySelector('#username');if(usernameInput){const wrapper=document.createElement('div');wrapper.innerHTML=errorBox;usernameInput.parentNode.insertBefore(wrapper.firstChild,usernameInput)}}
23attachLoginInterceptor(newForm,container)}else{window.location.href=M.cfg.wwwroot+"/my/"}}).catch(err=>console.error('Erreur AJAX login:',err))})}
24function loginWidgetModal_callModal(url,type,sendDataId){if(!modalEnabled||modalEnabled=="0"){window.location.href=url;return}
25let formData=null;if(sendDataId){const formElement=document.getElementById(sendDataId);formData=new FormData(formElement)}
26const xhr=new XMLHttpRequest();xhr.open('POST',url,!0);xhr.onload=function(){if(xhr.status===200){const data=xhr.responseText;const modalBody=document.querySelector('#loginWidgetModal .modal-body');if(modalBody){modalBody.innerHTML=''}
27const newContainer=document.querySelector('.new_container');if(newContainer){newContainer.innerHTML=''}
28if(data.includes('<body id="page-admin-tool-policy-view')||data.includes('<body id="page-admin-tool-policy-index')){document.body.innerHTML=data;return}
29if(data.includes('<div id="notice"')){const noticeStart=data.split('<div id="notice"')[1];const notice='<div id="notice"'+noticeStart.split('</div>')[0]+'</div>';const modalBody=document.querySelector('#loginWidgetModal .modal-body');if(modalBody){modalBody.innerHTML=`<div class="login_modal_col">${notice}</div>`}}else{const formParts=data.split('<form');let allForms='';for(let i=1;i<formParts.length;i++){const splitForm=formParts[i].split('</form>');allForms+='<form'+splitForm[0]+'</form>'}
30if(allForms!==''){const modalBody=document.querySelector('#loginWidgetModal .modal-body');if(modalBody){const container=document.createElement('div');container.className='new_container';modalBody.appendChild(container);container.innerHTML=`<div class="login_modal_col">${allForms}</div>`;const loginForm=container.querySelector('form');if(loginForm){attachLoginInterceptor(loginForm,container)}}}
31let forms=document.querySelectorAll('#loginWidgetModal .modal-body form');
31forms.forEach((form,index)=>{let action=form.getAttribute('action');let id=form.getAttribute('id');if(!id){id=type+'_'+index;form.setAttribute('id',id)}
32form.querySelectorAll('input[type="submit"]').forEach((btn)=>{btn.setAttribute('onclick',`loginWidgetModal_callModal("${action}", "${type}", "${id}")`);btn.setAttribute('type','button')});form.querySelectorAll('input[name="cancel"]').forEach((btn)=>{btn.setAttribute('type','button');btn.setAttribute('data-dismiss','modal');btn.setAttribute('data-bs-dismiss','modal');btn.setAttribute('aria-label','Close');btn.removeAttribute('onclick');btn.addEventListener('click',()=>{const modal=document.getElementById('loginWidgetModal');if(modal&&bootstrap?.Modal){bootstrap.Modal.getInstance(modal)?.hide()}})})})}
33const title=loginWidgetModal_getTitle(type);const modalTitle=document.querySelector('div.eticeo-loginWidgetModal#loginWidgetModal .loginWidgetModal_title');if(hasheader&&modalTitle){modalTitle.innerHTML=title}else{const loginTitle=document.querySelector('.modal-body .login_title');const loginModalCol=document.querySelector('.modal-body .login_modal_col');if(loginTitle){loginTitle.innerHTML=title}else if(loginModalCol){const span=document.createElement('span');span.className='login_title';span.innerHTML=title;loginModalCol.prepend(span)}}
34const formContainer=document.createElement('div');formContainer.className='login_modal_form_container';document.querySelector('#loginWidgetModal .modal-body')?.appendChild(formContainer);if(signupwithlogin&&type==='login'){const signupUrl=M.cfg.wwwroot+"/login/signup.php";let buttonHtml='';
34if(!hasheader&&!document.querySelector('.modal-body .signup_title')){buttonHtml='<span class="signup_title">'+signupbutton+'</span>'}
35const signupDiv=document.createElement('div');signupDiv.className='login_modal_col';signupDiv.innerHTML=buttonHtml+`<button type="button" class="btn btn-primary" onclick="loginWidgetModal_callModal('${signupUrl}', 'signup', false);">${signupbuttontext}</button>`;formContainer.appendChild(signupDiv)}
36if(displayOtherLogin!=="0"&&type==='login'){const otherContainer=document.createElement('div');otherContainer.className='login_modal_other_container';formContainer.appendChild(otherContainer);const otherLogin=document.createElement('div');otherLogin.className='login_modal_other';otherLogin.innerHTML=`<span class="other_title">${otherLoginTitle}</span>`+`<a href="${otherLoginLink}" class="btn btn-primary btn-other">${otherLoginButton}</a>`;otherContainer.appendChild(otherLogin)}
37if(displayCookies!=="0"){const cookiesButton=document.createElement('button');cookiesButton.id='cookies_btn';cookiesButton.classList.add("btn","btn-secondary");cookiesButton.type='button';cookiesButton.dataset.modal='alert';cookiesButton.dataset.modalTitleStr='["cookiesenabled", "core"]';cookiesButton.dataset.modalContentStr='["cookiesenabled_help_html", "core"]';cookiesButton.textContent='Avis relatif aux cookies';document.querySelector('#loginWidgetModal .modal-body')?.appendChild(cookiesButton)}
38loginWidgetModal_updateForgot();moveForgotBeforeSubmit(document.querySelector('#loginWidgetModal .new_container')||document);const modalElement=document.getElementById('loginWidgetModal');if(modalElement&&bootstrap?.Modal){new bootstrap.Modal(modalElement).show()}
39if(showPassword!=="0"){createPasswordToggle("#id_password",".felement[data-fieldtype='password']");createPasswordToggle("#password",".login-form-password")}}};xhr.send(formData)}
40function loginWidgetModal_getTitle(type){var title='';switch(type){case 'forgot':title=forgottitle;break;case 'signup':title=signuptitle;break;case 'login':title=logintitle;break}
41return title}
42function loginWidgetModal_buildModal(header,headerBackgroundColor,headerFontColor){let htmldata=`
43        <div class="modal fade eticeo-loginWidgetModal" id="loginWidgetModal"
44             tabindex="-1" aria-labelledby="loginWidgetModal_label" aria-hidden="true">
45           <div class="modal-dialog modal-dialog-centered" style="width: 85%!important;">
46               <div class="modal-content" style="border: 0px!important;">
47    `;if(header){htmldata+=`
48            <div class="modal-header" style="color:${headerFontColor};background-color:${headerBackgroundColor}">
49                <span class="loginWidgetModal_title"></span>
50                <button type="button" class="btn btn-link eticeo-close" data-bs-dismiss="modal" aria-label="Close">
51                    <span aria-hidden="true">&times;</span>
52                </button>
53            </div>
54        `}else{htmldata+=`
55            <div class="eticeo-close-btn">
56                <button type="button" class="btn btn-link eticeo-close" data-bs-dismiss="modal" aria-label="Close">
57                    <span aria-hidden="true">&times;</span>
58                </button>
59            </div>
60        `}
61htmldata+=`
62            <div class="modal-body"></div>
63            </div>
64        </div>
65    </div>`;const wrapper=document.createElement('span');wrapper.innerHTML=htmldata;const page=document.getElementById('page');if(page){page.appendChild(wrapper)}}

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.