1(function() { 2 3 var shouldKeepOpen = false; 4 var openUriAfterwards = null; 5 6 /** 7 * Luo FadeOut efekti 8 * @returns {HTMLObjectElement} 9 */ 10 function fadeOut(el) { 11 el.style.opacity = 1; 12 (function fade() { 13 if ((el.style.opacity -= .1) < 0) { 14 el.style.display = "none"; 15 } else { 16 requestAnimationFrame(fade); 17 } 18 })(); 19 }; 20 21 /** 22 * Luo FadeIn efekti 23 * @returns {HTMLObjectElement} 24 */ 25 function fadeIn(el, display) { 26 el.style.opacity = 0; 27 el.style.display = display || "block"; 28 (function fade() { 29 var val = parseFloat(el.style.opacity); 30 if (!((val += .1) > 1)) { 31 el.style.opacity = val; 32 requestAnimationFrame(fade); 33 } 34 })(); 35 }; 36 37 /** 38 * Funktio jolla avataan popuppi 39 * @returns {HTMLObjectElement} 40 */ 41 42 function openPopup() { 43 var popup = document.getElementById("prio1-login-frame-parent"); 44 fadeIn(popup, "flex"); 45 } 46 47 48 function canCloseWithoutPrompt() { 49 var frameElement = document.getElementById("prio1-login-frame"); 50 var inputList = frameElement.contentWindow.document.getElementsByClassName("login-input"); 51 var allInputsEmpty = true; 52 for(var i = 0; i < inputList.length; i++) { 53 var input = inputList.item(i); 54 if(input.value !== "") { 55 allInputsEmpty = false; 56 } 57 } 58 return allInputsEmpty; 59 } 60 61 /** 62 * Funktio jolla suljetaan popuppi 63 * @returns {HTMLObjectElement} 64 */ 65 66 function closePopup() { 67 var frameElement = document.getElementById("prio1-login-frame"); 68 var popup = document.getElementById("prio1-login-frame-parent"); 69 70 var shouldClose = false; 71 72 if(canCloseWithoutPrompt() === false && frameElement.contentWindow.document.getElementById("register-new-user-window").style.display === "block") { 73 var confirmed = window.confirm("Mikäli poistut sivustolta, valittu toiminto keskeytetään. Oletko varma, että haluat poistua?"); 74 75 if(confirmed) { 76 shouldClose = true; 77 } 78 } else { 79 shouldClose = true; 80 } 81 82 if(shouldClose === true && shouldKeepOpen === false) { 83 fadeOut(popup); 84 setTimeout(function() { 85 popup.remove(); 86 }, 300); 87 document.body.style.overflow = "visible"; 88 window.onbeforeunload = null; 89 90 if(frameElement.getAttribute("lgt") != null) { 91 frameElement.removeAttribute("lgt"); 92 } 93 } else if(shouldKeepOpen === true) { 94 var confirmResult = window.confirm("Ole hyvä ja kirjaudu. Tätä sivua ei voi käyttää ilman kirjautumista."); 95 if(confirmResult === false) { 96 window.location = "/"; 97 } 98 } 99 } 100 101 var beforeUnloadEventListener = null; 102 103 /** 104 * Lähde, josta kirjautumislomake haetaan 105 * @type {String} 106 */ 107 var loginFrameUri = "/login-system/login-page.php"; 108 109 /** 110 * Mistä osoitteesta sallitaan pyyntöjä 111 * @type {String} 112 */ 113 var loginFrameAddress = "https://"+window.location.hostname; 114 115 /** 116 * Tunnus iframe-elementille, joka generoidaan 117 * @type {String} 118 */ 119 var loginFrameElementId = "prio1-login-frame"; 120 121 /** 122 * Generoi iframe elementti kirjautumista varten 123 * @returns {HTMLElement} 124 */ 125 function generateLoginFrameElement(data) { 126 127 data =(typeof data !== 'undefined') ? data : null; 128 129 var startTime = Date.now(); 130 131 // Generoi iframe piilotettuna 132 var iframe = document.createElement('iframe'); 133 134 iframe.setAttribute('src', loginFrameUri); 135 iframe.setAttribute('id', loginFrameElementId); 136 iframe.style.visibility = "hidden"; 137 iframe.style.height = "0"; 138 iframe.style.zIndex = "-2147483647"; 139 iframe.style.position = "absolute"; 140 141 142 // Latausikoni 143 var loaderDiv = document.createElement("div"); 144 loaderDiv.setAttribute("id", loginFrameElementId + "-loader"); 145 loaderDiv.innerHTML += "<div class='lds-ring'><div></div><div></div><div></div><div></div></div>"; 146 loaderDiv.style.display = "block"; 147 loaderDiv.style.zIndex = "2147483647"; 148 149 var parentDiv = document.createElement('div'); 150 parentDiv.setAttribute("id", loginFrameElementId + "-parent"); 151 152 // Sulkemisnappi 153 var popupClose = document.createElement("div"); 154 popupClose.setAttribute("class", "open-popup"); 155 popupClose.setAttribute("id", "login-popup-close-button"); 156 popupClose.onclick = function() { closePopup(); }; 157 popupClose.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512">' + 158 '<!-- Font Awesome Pro 5.15.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) -->' + 159 '<path d="M193.94 256L296.5 153.44l21.15-21.15c3.12-3.12 3.12-8.19 0-11.31l
159-22.63-22.63c-3.12-3.12-8.19-3.12-11.31 0L160 222.06 36.29 ' + 160 '98.34c-3.12-3.12-8.19-3.12-11.31 0L2.34 120.97c-3.12 3.12-3.12 8.19 0 11.31L126.06 256 2.34 379.71c-3.12 3.12-3.12 8.19 0 11.31l22.63 ' + 161 '22.63c3.12 3.12 8.19 3.12 11.31 0L160 289.94 262.56 392.5l21.15 21.15c3.12 3.12 8.19 3.12 11.31 0l22.63-22.63c3.12-3.12 3.12-8.19 ' + 162 '0-11.31L193.94 256z"/></svg>'; 163 164 var popupCloseBG = document.createElement("div"); 165 popupCloseBG.setAttribute("id", "backdrop-close-popup"); 166 // Sulkee popupin kun painaa tummennettua taustaa 167 popupCloseBG.onclick = function() { closePopup(); }; 168 169 document.body.appendChild(parentDiv); 170 parentDiv.appendChild(iframe); 171 parentDiv.appendChild(loaderDiv); 172 parentDiv.appendChild(popupClose); 173 parentDiv.appendChild(popupCloseBG); 174 175 // Alustavasti tyhjennä kaikki input-kentät 176 var inputList = iframe.contentWindow.document.getElementsByClassName("login-input"); 177 for(var i = 0; i < inputList.length; i++) { 178 var input = inputList.item(i); 179 input.value = ""; 180 } 181 182 iframe.contentWindow.addEventListener("keyup", function() { 183 184 var canClose = canCloseWithoutPrompt(); 185 186 if(canClose === false && iframe.contentWindow.document.getElementById("register-new-user-window").style.display === "block") { 187 188 window.onbeforeunload = function(e) { 189 e.preventDefault(); 190 return "Mikäli poistut sivustolta, valittu toiminto keskeytetään. Oletko varma, että haluat poistua?"; 191 } 192 193 } else if(canClose === true) { 194 window.onbeforeunload = null; 195 } 196 }); 197 return iframe; 198 } 199 200 // Vastaanotetaan viestejä 201 bindLoginEvent(window, 'message', function (event) { 202 203 // Sallitaan vain sallitusta osoitteesta 204 if(event.origin !== loginFrameAddress) return; 205 206 try { 207 /** 208 * Vastaanotettu viesti 209 * @type {Object} 210 */ 211 var receivedMessage = JSON.parse(event.data); 212 } catch (e) {/* Ignored */} 213 214 console.log("Received message from iframe: ", receivedMessage); 215 216 // Vastaanotetaan eventti 217 if(receivedMessage != null && receivedMessage.type != null) { 218 var eventName = receivedMessage.type; 219 220 var frame_element = document.getElementById(loginFrameElementId); 221 var loaderElement = document.getElementById(loginFrameElementId + "-loader"); 222 223 // Lasketaan, mihin kohtaan sulkeutumisnappi siirretään 224 var popupCloseBtn = document.getElementById("login-popup-close-button"); 225 226 // Handlataan eventit 227 if(eventName === "endLoginProcess") { 228 229 // Kirjautuminen lopetetaan 230 if(receivedMessage.result === true) { 231 shouldKeepOpen = false; 232 closePopup(); 233 setTimeout(function() { 234 235 if ( !empty( receivedMessage.redirect ) ) { 236 console.log('redirecting to ' + receivedMessage.redirect); 237 window.open( receivedMessage.redirect, "_self" ); 238 } 239 240 else if( !empty(openUriAfterwards) ) { 241 window.open( openUriAfterwards, "_self" ); 242 } else { 243 location.reload(); 244 } 245 246 }, 500); 247 } 248 249 } else if ( eventName === 'redirect' ) { 250 window.open( receivedMessage.url, "_self" ); 251 } else if(eventName === "openUri") { 252 253 if(frame_element.getAttribute("openUri") != null) { 254 var openUri = frame_element.getAttribute("openUri"); 255 sendLoginRequest(JSON.stringify({ openUri: openUri, })); 256 } 257 258 } else if(eventName === "windowOpen") { 259 260 var openStart = Date.now(); 261 262 // Ikkuna avattiin 263 frame_element.style.visibility = "visible"; 264 frame_element.style.pointerEvents = "all"; 265 frame_element.style.zIndex = "2147483647"; 266 frame_element.style.height = frame_element.contentWindow.document.body.scrollHeight + "px"; 267 268 loaderElement.style.display = "none"; 269 loaderElement.style.zIndex = "-2147483647"; 270 271 popupCloseBtn.style.display = "flex"; 272 273 if(frame_element.getAttribute("lgt") != null) { 274 var lgt = frame_element.getAttribute("lgt"); 275 frame_element.removeAttribute("lgt"); 276 sendLoginRequest(JSON.stringify({ lgt: lgt, })); 277 } 278 279 if(frame_element.getAttribute("openNewWindow") != null) { 280 var newWindow = coalesce(frame_element.getAttribute("openNewWindow"), ""); 281 var force = coalesce(frame_element.getAttribute("force"),"false"); 282 var customValues = null; 283 if(frame_element.hasAttribute("customValues")){ 284 customValues = frame_element.getAttribute("customValues"); 285 frame_element.removeAttribute("customValues"); 286 } 287 frame_element.removeAttribute("openNewWindow"); 288 sendLoginRequest(JSON.stringify( { newWindow: newWindow, force: force, customValues:customValues } )); 289 } 290 291 if ( frame_element.getAttribute('wsdt') != null ) 292 { 293 var wsdt = coalesce(frame_element.getAttribute("wsdt"), ""); 294 wsdt = JSON.parse(wsdt); 295 frame_element.removeAttribute('wsdt'); 296 sendLoginRequest(JSON.stringify({ 297 wsdt: wsdt 298 })); 299 } 300 301 } else if(eventName === "windowClose") { 302 // Ikkuna suljettiin 303 frame_element.style.visibility = "hidden"; 304 frame_element.style.pointerEvents = "none"; 305 frame_element.style.zIndex = "-2147483647"; 306 frame_element.style.height = "0"; 307 frame_element.style.position = "absolute"; 308 309 loaderElement.style.display = "block"; 310 loaderElement.style.zIndex = "2147483647"; 311 312 popupCloseBtn.style.display = "none"; 313 314 } else if (eventName === "messageRender") { 315 // Viesti 316 317 frame_element.contentWindow.scrollTo(0,0); 318 319 frame_element.style.height = (frame_element.contentWindow.document.body.scrollHeight + 1) + "px"; 320 } else if(eventName === "appleSignIn") { 321 nativeAppleLogin(function(data) { data.appleLogin = true; sendLoginRequest(JSON.stringify(data)); }); 322 } else if(eventName === "appleRegister") { 323 nativeAppleLogin(function(data) { data.appleLogin = true; data.register_only = true; sendLoginRequest(JSON.stringify(data)); }); 324 } else { 325 if( frame_element ) { 326 frame_element.style.height = (frame_element.contentWindow.document.body.scrollHeight + 1) + "px"; 327 } 328 } 329 330 updateCloseButtonLocation(frame_element); 331 332 } 333 });
334 335 /** 336 * Päivitä "X"-napin sijainti. 337 * @param {HTMLElement} frame_element iFrame-elementti, jossa kirjautumis popup 338 */ 339 function updateCloseButtonLocation(frame_element) { 340 if( !frame_element ) return; 341 var popupCloseBtn = document.getElementById("login-popup-close-button"); 342 var iFramePosY = frame_element.offsetTop; 343 var iFramePosX = frame_element.offsetLeft + frame_element.offsetWidth; 344 popupCloseBtn.style.top = (iFramePosY + 10) + "px"; 345 popupCloseBtn.style.left = (iFramePosX - 38) + "px"; 346 } 347 348 // Kun ikkunan kokoa vaihdetaan 349 bindLoginEvent(window, "resize", function(event) { 350 var iframeEl = document.getElementById(loginFrameElementId); 351 if(iframeEl != null) updateCloseButtonLocation(iframeEl); 352 }); 353 354 /** 355 * Hae iframe elementti, jos ei olemassa 356 * palauttaa 'false' 357 * @returns {HTMLElement|Boolean} 358 */ 359 function fetchFrameElement() { 360 if(doesFrameElementExist()) return document.getElementById(loginFrameElementId); 361 return false; 362 } 363 364 /** 365 * Onko iframe elementti generoitu 366 * @returns {Boolean} 367 */ 368 function doesFrameElementExist() { 369 var element = document.getElementById(loginFrameElementId); 370 return (typeof element !== "undefined") && (element != null); 371 } 372 373 /** 374 * Lähetä viesti kirjautumisjärjestelmään 375 * @param {String} message 376 */ 377 function sendLoginRequest(message) { 378 var iFrame = document.getElementById(loginFrameElementId); 379 if(iFrame != null) { 380 iFrame.contentWindow.postMessage( 381 message, 382 loginFrameAddress 383 ); 384 } 385 } 386 387 /** 388 * Kuuntele sivustolla tapahtuvaa toimintaa IE8 389 * yhteensopivasti 390 * @param {HTMLElement|Window} element 391 * @param {String} eventName 392 * @param {Function} eventHandler 393 */ 394 function bindLoginEvent(element, eventName, eventHandler) { 395 if (element.addEventListener){ 396 element.addEventListener(eventName, eventHandler, false); 397 } else if (element.attachEvent) { 398 element.attachEvent('on' + eventName, eventHandler); 399 } 400 } 401 402 var fullStart = 0; 403 404 // Kun "initLoginFrame" käynnistetään, silloin myös 405 // käynnistetään iframe 406 window.addEventListener("initLoginFrame", function(e) { 407 // Käynnistetään iframe VAIN jos sitä ei olla jo käynnistetty 408 fullStart = Date.now(); 409 410 // Jos salasanan resetointitoken annettiin 411 if(e.lgt != null) { 412 413 e.preventDefault(); 414 415 var myNewURL = stripQueryStringAndHashFromPath(location.href) 416 window.history.pushState(null, document.title, myNewURL); 417 function stripQueryStringAndHashFromPath(url) { 418 return url.split("?")[0].split("#")[0]; 419 } 420 var frameElement = generateLoginFrameElement(); 421 if(frameElement != null) { 422 frameElement.setAttribute("lgt", e.lgt); 423 } 424 } else if(e.openNewWindow != null) { // Jos avataan automaattisesti jokin ikkuna 425 e.preventDefault(); 426 427 var myNewURL = stripQueryStringAndHashFromPath(location.href) 428 window.history.pushState(null, document.title, myNewURL); 429 function stripQueryStringAndHashFromPath(url) { 430 return url.split("?")[0].split("#")[0]; 431 } 432 433 var frameElement = generateLoginFrameElement(); 434 frameElement.setAttribute("force", coalesce(e.force, false)); 435 if(frameElement != null) { 436 frameElement.setAttribute("openNewWindow", e.openNewWindow); 437 } 438 439 } else { 440 var frameElement = fetchFrameElement(); 441 if(frameElement === false) frameElement = generateLoginFrameElement(); 442 } 443 if ( e.customValues != null ) 444 { 445 frameElement.setAttribute('customValues', e.customValues); 446 } 447 if ( e.wsdt != null ) 448 { 449 frameElement.setAttribute('wsdt', JSON.stringify(e.wsdt)); 450 } 451 452 // Jos tulee määräys kirjata käyttäjä ulos 453 if(e.logUserOut != null && e.logUserOut == true) { 454 $.post(loginFrameAddress + "/login-system/endpoints/login-authenticate.php", {handle_user_logout: true}); 455 } 456 457 if(e.shouldKeepOpen != null) { 458 shouldKeepOpen = e.shouldKeepOpen; 459 } 460 461 if( e.openUri != null ) { 462 463 console.log("Should open uri:", e.openUri); 464 openUriAfterwards = e.openUri; 465 466 } 467 468 }, false); 469 470 function nativeAppleLogin(callback) { 471 var promise = AppleID.auth.signIn(); 472 var result = { 473 status: false,
474 message: "Jokin meni pieleen.. Yritä myöhemmin uudelleen!", 475 other: {}, 476 } 477 promise.then( 478 function (resp) { 479 var user = resp.user; 480 var appleAuthData = resp.authorization; 481 var firstName = "", lastName = "", email = ""; 482 if(user != null) { 483 if(user.name != null) { 484 firstName = user.name.firstName; 485 lastName = user.name.lastName; 486 } 487 if(user.email != null) { email = user.email; } 488 } 489 490 if(appleAuthData != null) { 491 var code = appleAuthData.code; 492 var state = appleAuthData.state; 493 var id_token = appleAuthData.id_token; 494 result = { 495 status: true, 496 message: "", 497 other: { 498 firstName: firstName, 499 lastName: lastName, 500 email: email, 501 code: code, 502 state: state, 503 id_token: id_token 504 } 505 } 506 callback(result); 507 } else { 508 result.message = "Apple ID -kirjautuminen epäonnistui... Yritä myöhemmin uudelleen"; 509 callback(result); 510 } 511 }, 512 function(error) { 513 result.message = "Apple ID -kirjautuminen epäonnistui... Yritä myöhemmin uudelleen"; 514 callback(result); 515 } 516 ); 517 } 518 519 function empty(e) { 520 521 if(e == null) return true; 522 if(typeof e === "undefined") return true; 523 if(Array.isArray(e) && !e.length) return true; 524 if(typeof(e) === "object" && Object.keys(e).length < 1) return true; 525 526 switch (e) { 527 case "": 528 case 0: 529 case "0": 530 case false: 531 return true; 532 default: 533 return false; 534 } 535 } 536 537 function coalesce(value, replacement) { 538 if(empty(value)) return replacement; 539 return value; 540 } 541 542})();
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.