password_prompt = false; selected_user = null; time_remaining = 0; function show_element(id) { document.getElementById(id).classList.add("shown"); } function hide_element(id) { document.getElementById(id).classList.remove("shown"); } function show_prompt(text, type) { password_prompt = true; label = document.getElementById('password-label'); label.innerHTML = text; users = document.getElementById('users'); for (i in users.children) { user = users.children[i]; if (user.id != ('user-' + selected_user) && user.style != null) user.style.opacity = 0.1; } entry = document.getElementById('password-entry'); entry.value = ''; var selected = document.getElementById("user-" + selected_user); rect = selected.getBoundingClientRect(); cont = document.getElementById('password-container'); cont.style.top = rect.top; if (cont.style.left != rect.right) cont.style.left = rect.right; cont.classList.add('shown'); entry.focus(); } function show_message(text, type) { cont = document.getElementById('message-container'); document.getElementById('message-label').innerHTML = text; if (text.length > 0) { var selected = document.getElementById("user-" + selected_user); rect = selected.getBoundingClientRect(); cont.style.top = rect.top; if (cont.style.left != rect.right) cont.style.left = rect.right; cont.style.top = rect.top; cont.classList.add("shown"); } else { cont.classList.remove("shown"); } } function reset() { users = document.getElementById('users'); for (i in users.children) { child = users.children[i]; if (child.style != null) child.style.opacity = 1; } document.getElementById('password-container').classList.remove("shown"); password_prompt = false; } function authentication_complete() { sel = document.getElementById('session-list'); session = sel.options[sel.selectedIndex].getAttribute('data-sid'); if (lightdm.is_authenticated) lightdm.start_session_sync(lightdm.authentication_user, session); else show_message(' Authentication Failed'); reset(); } function start_authentication(username) { document.getElementById('message-container').classList.remove("shown"); if (!password_prompt) { selected_user = username; lightdm.authenticate(username); } } function provide_secret() { entry = document.getElementById('password-entry'); lightdm.respond(entry.value); } function autologin_timer_expired(username) { lightdm.authenticate(lightdm.autologin_user); } function countdown() { label = document.getElementById('countdown-label'); label.innerHTML = ' in ' + time_remaining + ' seconds'; time_remaining--; if (time_remaining >= 0) setTimeout(countdown, 1000); } function build_session_list() { slist = document.getElementById('session-list'); slist.innerHTML = ""; for (session of lightdm.sessions) { slist.innerHTML += ""; } } function update_time() { var days = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]; var months = ["January","February","March","April","May","June","July","August","September","October","November","December"]; var d = new Date(); niceHours = d.getHours(); niceMinutes = d.getMinutes(); // I'm yearning for strftime if (niceHours < 10) niceHours = "0"+niceHours; if (niceMinutes < 10) niceMinutes = "0"+niceMinutes; document.getElementById('date').innerHTML = days[d.getDay()] + ", " + d.getDate() + " " + months[d.getMonth()]; document.getElementById('time').innerHTML = niceHours + ":" + niceMinutes; setTimeout(update_time, 1000); } function start() { var html = ""; for (i in lightdm.users) { user = lightdm.users[i]; if (user.image == null || user.image.match(/\.face$/)) image = '/usr/share/icons/Adwaita/256x256/emotes/face-laugh.png'; else image = user.image; html += ''; html += ''+user.display_name+''; if (user.name == lightdm.autologin_user && lightdm.autologin_timeout > 0) html += ''; html += ''; } document.getElementById('users').innerHTML = html; time_remaining = lightdm.autologin_timeout; if (time_remaining > 0) countdown(); } function load() { update_time(); build_session_list(); start(); } /* Temporary hack until webkit greeter 3. * The fact this is needed frankly makes me shudder. */ function try_load() { if (typeof lightdm !== 'undefined') { load(); } else { setTimeout(try_load, 500); } } window.onload = try_load;