/// /// import * as $ from "jquery"; import {APIController} from "./controllers/connection/api"; window["jQuery"] = $; require("jquery.easing"); // Variable to check whether user actively logged in by clicking the login button let hasClickedLogin = false; $(document).ready(() => { /** * jQuery for page scrolling feature */ $('a.page-scroll').bind('click', function (event) { let $anchor = $(this); $('html, body').stop().animate({ scrollTop: $($anchor.attr('href')).offset().top }, 1000, 'easeInOutExpo', () => { if ($anchor.attr('href') === "#page-top") { location.hash = ''; } else { location.hash = $anchor.attr('href'); } }); event.preventDefault(); }); let checkScrollState = () => { const startY = 100; if ($(window).scrollTop() > startY || window.innerWidth < 768) { $('.navbar').removeClass("navbar-transparent"); } else { $('.navbar').addClass("navbar-transparent"); } }; $(window).on("scroll load resize", function () { checkScrollState(); }); checkScrollState(); let googleSigninBtn = $("#google-signin"); googleSigninBtn.click(() => { hasClickedLogin = true; }); /** * Display appropriate user buttons */ if (localStorage.getItem("googleToken") !== null) { googleSigninBtn.hide(); $(".navbar .logged-in").css("display", "inline-block"); $(".logged-in .sign-out").click(() => { let auth2 = gapi.auth2.getAuthInstance(); auth2.signOut().then(() => { // Remove session storage items localStorage.removeItem("googleToken"); localStorage.removeItem("googleTokenExpiration"); localStorage.removeItem("googleName"); localStorage.removeItem("googleEmail"); localStorage.removeItem("userId"); localStorage.removeItem("simulationId"); location.reload(); }); }); // Check whether Google auth. token has expired and signin again if necessary let currentTime = (new Date()).getTime(); if (parseInt(localStorage.getItem("googleTokenExpiration")) - currentTime <= 0) { gapi.auth2.getAuthInstance().signIn().then(() => { let authResponse = gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse(); localStorage.setItem("googleToken", authResponse.id_token); let expirationTime = (new Date()).getTime() / 1000 + parseInt(authResponse.expires_in) - 5; localStorage.setItem("googleTokenExpiration", expirationTime.toString()); }); } } }); /** * Google signin button */ window["renderButton"] = () => { gapi.signin2.render('google-signin', { 'scope': 'profile email', 'width': 100, 'height': 30, 'longtitle': false, 'theme': 'dark', 'onsuccess': (googleUser) => { let api; new APIController((apiInstance: APIController) => { api = apiInstance; let email = googleUser.getBasicProfile().getEmail(); let getUser = (userId: number) => { let reload = true; if (localStorage.getItem("userId") !== null) { reload = false; } localStorage.setItem("userId", userId.toString()); // Redirect to the projects page if (hasClickedLogin) { window.location.href = "projects"; } else if (reload) { window.location.reload(); } }; // Send the token to the server let id_token = googleUser.getAuthResponse().id_token; // Calculate token expiration time (in seconds since epoch) let expirationTime = (new Date()).getTime() / 1000 + googleUser.getAuthResponse().expires_in - 5; $.post('https://opendc.ewi.tudelft.nl/tokensignin', { idtoken: id_token }, (data: any) => { // Save user information in session storage for later use on other pages localStorage.setItem("googleToken", id_token); localStorage.setItem("googleTokenExpiration", expirationTime.toString()); localStorage.setItem("googleName", googleUser.getBasicProfile().getGivenName() + " " + googleUser.getBasicProfile().getFamilyName()); localStorage.setItem("googleEmail", email); if (data.isNewUser === true) { api.addUser({ id: -1, email, googleId: googleUser.getBasicProfile().getId(), givenName: googleUser.getBasicProfile().getGivenName(), familyName: googleUser.getBasicProfile().getFamilyName() }).then((userData: any) => { getUser(userData.id); }); } else { getUser(data.userId); } }); }); }, 'onfailure': () => { console.log("Oops, something went wrong with your Google signin... Try again?") } }); }; // Set the language of the GAuth button to be English window["___gcfg"] = { lang: 'en' };