After Width: | Height: | Size: 574 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 259 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
@ -0,0 +1,61 @@
|
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8"> |
||||
<link rel="stylesheet" href="style.css" class="style"> |
||||
<script type="text/javascript" src="main.js"></script> |
||||
<title>Example Theme</title> |
||||
</head> |
||||
<body> |
||||
<div class="wrapper"> |
||||
<table class="main"> |
||||
<tr> |
||||
<td id="buttons" > |
||||
<table id="menu"> |
||||
<tr><td colspan="3"><img src="images/logo.png" width="174" height="150"><td></tr> |
||||
<tr><td style="width: 16px;"><img style="margin-left:1em;" src="images/shutdown.png" width="16" height="16" /></td><td colspan="2"><button id="menu_btn" onClick="lightdm.shutdown()">Выключить</button></td></tr> |
||||
<tr><td style="width: 16px;"><img style="margin-left:1em;" src="images/restart.png" width="16" height="16" /></td><td colspan="2"><button id="menu_btn" onClick="lightdm.restart()">Перегрузить</button></td></tr> |
||||
<tr><td style="width: 16px;"><img style="margin-left:1em;" src="images/hibernate.png" width="16" height="16" /></td><td colspan="2"><button id="menu_btn" onClick="lightdm.hibernate()">Гибернация</button></td></tr> |
||||
<tr><td style="width: 16px;"><img style="margin-left:1em;" src="images/sleep.png" width="16" height="16" /></td><td colspan="2"><button id="menu_btn" onClick="lightdm.suspend()">Сон</button></td></tr> |
||||
<tr id="bottom_info"> |
||||
<td colspan="2" valign="bottom"> |
||||
<br /><br /><br /><br /><br /> |
||||
<select name="wallpappers" id="wallpappers" class="wallpappers"> |
||||
<option value="Rosatomflot.jpg">Росатомфлот</option> |
||||
<option value="Arctic.webp">Арктика</option> |
||||
<option value="MCST.webp">МЦСТ-Эльбрус</option> |
||||
<option value="Space_Launch.jpg">Ракета</option> |
||||
<option value="Satelite.jpg">Спутник</option> |
||||
<option value="Baikal1.png">Байкал - 1</option> |
||||
<option value="Baikal2.jpg">Байкал - 2</option> |
||||
<option value="Baikal3.jpg">Байкал - 3</option> |
||||
<option value="Elbrus1.jpg">Эльбрус - 1</option> |
||||
<option value="Elbrus2.jpg">Эльбрус - 2</option> |
||||
<option value="Elbrus3.jpg">Эльбрус - 3</option> |
||||
</select> |
||||
</dev> |
||||
</td> |
||||
<td align="right" valign="bottom"><span id="time" /></td> |
||||
</tr> |
||||
</table> |
||||
</td> |
||||
<td id="user_form"> |
||||
<center> |
||||
<br /><br /><br /> |
||||
<img src="images/default_face.png" id="user-image" width="88" height="88"/><br /> |
||||
<p id="user" /> |
||||
<table> |
||||
<tr><td colspan="2"><div id="underline"><input type="password" name="password" id="password" class="input" autocomplete="off" placeholder="Введите пароль" /></div></td></tr> |
||||
<tr><td><select name="sessions" id="sessions" /></td><td align="right"><button type="button" id="submit" class='input_submit' onClick="doLogin()">Поехали!</button></td></tr> |
||||
</table> |
||||
</center> |
||||
<br /><br /><br /> |
||||
<div style="margin-bottom:5px" class="user-dropdown"><button>Изменить польлзователя</button> |
||||
<div class="user-dropdown-content" id="user-dropdown-content" /></div> |
||||
</td> |
||||
</tr> |
||||
<tr><td colspan="2" align="right"><span id="date" /></td></tr> |
||||
</table> |
||||
</div> |
||||
</body> |
||||
</html> |
@ -0,0 +1,127 @@
|
||||
const DEFAULT_USER = "defaultUser"; |
||||
const DEFAULT_SESSION = "defaultSession"; |
||||
const DEFAULT_WALLPAPPER = "defaultWallpapper"; |
||||
|
||||
function updateDefaults(user, session) { |
||||
|
||||
localStorage.setItem(DEFAULT_USER, user) |
||||
localStorage.setItem(DEFAULT_SESSION, session) |
||||
|
||||
var wallpapper = document.getElementById("wallpappers").value |
||||
if(wallpapper) { |
||||
localStorage.setItem(DEFAULT_WALLPAPPER, wallpapper) |
||||
} |
||||
} |
||||
|
||||
function dateFormat(date) { |
||||
var parts=date.split('.'); |
||||
var options = { weekday: 'long', month: 'long', day: 'numeric' }; |
||||
var today = new Date('20' + parts[2], parts[1] - 1, parts[0]); |
||||
|
||||
return today.toLocaleDateString("ru-RU", options); // Saturday, September 17
|
||||
//return `${parts[2]}, ${parts[1]} - 1, ${parts[0]}`
|
||||
} |
||||
|
||||
function selectItemByValue(elmnt, value){ |
||||
|
||||
for(var i=0; i < elmnt.options.length; i++) |
||||
{ |
||||
if(elmnt.options[i].value === value) { |
||||
elmnt.selectedIndex = i; |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
function doLogin() { |
||||
var user = document.getElementById("user").textContent |
||||
var password = document.getElementById("password").value |
||||
var session = document.getElementById("sessions").value |
||||
if (!user || !password || !session) { |
||||
return false; |
||||
} |
||||
|
||||
lightdm.cancel_authentication() |
||||
|
||||
lightdm.show_prompt.connect((text, type) => { |
||||
lightdm.respond(password); |
||||
}) |
||||
lightdm.authentication_complete.connect(() => { |
||||
lightdm.start_session(session); |
||||
}) |
||||
|
||||
updateDefaults(user, session); |
||||
lightdm.authenticate(user) |
||||
return false; |
||||
} |
||||
|
||||
function updateUser(username) { |
||||
document.getElementById("user-image").src = 'images/default_face.png' |
||||
document.getElementById("user").textContent = username |
||||
theme_utils.dirlist(`/var/lib/lightdm-data/${username}`, true, (images) => { |
||||
if(images) { |
||||
for (let i = 0; i < images.length; i++) { |
||||
let image = images[i] |
||||
if(image.indexOf("/face.png") == image.length - 9) { |
||||
document.getElementById("user-image").src = image |
||||
return; |
||||
} |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
function updateWallpapper(wallpapper) { |
||||
var body = document.getElementsByTagName('body')[0]; |
||||
body.style.backgroundImage = `url(wallpappers/${wallpapper})`; |
||||
} |
||||
|
||||
function initGreeter() { |
||||
|
||||
let users = lightdm.users |
||||
let defaultUser = localStorage.getItem(DEFAULT_USER) || users[0].username; |
||||
updateUser(defaultUser); |
||||
|
||||
let select = document.getElementById('user-dropdown-content') |
||||
for (let i = 0; i < users.length; i++) { |
||||
var btn = document.createElement('button') |
||||
btn.innerHTML = users[i].username |
||||
btn.addEventListener("click", () => { |
||||
updateUser(users[i].username) |
||||
}) |
||||
|
||||
select.appendChild(btn) |
||||
} |
||||
|
||||
const wallpappers = document.getElementById('wallpappers'); |
||||
|
||||
wallpappers.addEventListener('change', (event) => { |
||||
updateWallpapper(event.target.value); |
||||
}); |
||||
|
||||
let defaultWallpapper = localStorage.getItem(DEFAULT_WALLPAPPER); |
||||
if(defaultWallpapper) { |
||||
selectItemByValue(wallpappers, defaultWallpapper); |
||||
updateWallpapper(defaultWallpapper); |
||||
} |
||||
|
||||
let sessions = lightdm.sessions |
||||
let defaultSession = localStorage.getItem(DEFAULT_SESSION) || sessions[0].key; |
||||
let sessionsSelect = document.getElementById('sessions') |
||||
for (let i = 0; i < sessions.length; i++) { |
||||
var opt = document.createElement('option') |
||||
opt.innerHTML = sessions[i].key |
||||
opt.value = sessions[i].key |
||||
if(defaultSession == sessions[i].key) { |
||||
opt.selected = true |
||||
} |
||||
|
||||
sessionsSelect.appendChild(opt) |
||||
} |
||||
sessionsSelect.value = defaultSession; |
||||
|
||||
document.getElementById("date").textContent=dateFormat(theme_utils.get_current_localized_date()); |
||||
document.getElementById("time").textContent=theme_utils.get_current_localized_time(); |
||||
} |
||||
|
||||
window.addEventListener("GreeterReady", initGreeter) |
@ -0,0 +1,224 @@
|
||||
|
||||
* { |
||||
--bg: rgb(255,165,0); |
||||
--btbg: gray; |
||||
--opacity: 0.9; |
||||
--color: white; |
||||
} |
||||
|
||||
html, body { |
||||
width: 99.71%; |
||||
height: 99.51%; |
||||
} |
||||
|
||||
body { |
||||
background-image: url("wallpappers/Rosatomflot.jpg"); |
||||
background-repeat: no-repeat; |
||||
background-size: 100% 100%; |
||||
} |
||||
|
||||
#submit { |
||||
background-color: rgba(255, 140, 0, 1); |
||||
border: 0; |
||||
color: var(--color); |
||||
font-weight:bold; |
||||
margin-left: 5px; |
||||
box-shadow: 1px 1px 1px black; |
||||
border-radius: 5px |
||||
} |
||||
|
||||
#password::placeholder { |
||||
font-weight: bold; |
||||
opacity: .5; |
||||
color: var(--color); |
||||
} |
||||
|
||||
#menu { |
||||
margin-top: 5px; |
||||
margin-left: 5px; |
||||
margin-right: 5px; |
||||
margin-bottom: 5px; |
||||
height: 100%; |
||||
} |
||||
|
||||
div.wrapper { |
||||
height: 100%; |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: center |
||||
} |
||||
|
||||
div.wrapper table.main { |
||||
margin: 0; |
||||
} |
||||
|
||||
input:focus, |
||||
select:focus, |
||||
option:focus, |
||||
textarea:focus, |
||||
button:focus { |
||||
outline: none; |
||||
} |
||||
|
||||
#date { |
||||
color: var(--color); |
||||
font-size:10px; |
||||
font-weight:bold; |
||||
font-style: italic; |
||||
text-shadow: 1px 1px 1px #000,0 1px 1px #000, -1px 0 1px #000, 0 -1px 1px #000; |
||||
} |
||||
|
||||
#password, #user, #user option { |
||||
background-color: var(--bg); |
||||
opacity: var(--opacity); |
||||
border: 0; |
||||
width: 200px; |
||||
margin: 0; |
||||
padding: 0; |
||||
color: var(--color); |
||||
} |
||||
|
||||
#user, #user option { |
||||
font-size:35px; |
||||
white-space:nowrap; |
||||
} |
||||
|
||||
#wallpappers, #wallpappers option { |
||||
background-color: var(--btbg); |
||||
opacity: var(--opacity); |
||||
border: 0; |
||||
margin: 0; |
||||
padding: 0; |
||||
font-size:10px; |
||||
font-weight:bold; |
||||
color: var(--color); |
||||
} |
||||
|
||||
#wallpappers:hover { |
||||
color: var(--bg); |
||||
} |
||||
|
||||
select.wallpappers { |
||||
/* for Firefox */ |
||||
-moz-appearance: none; |
||||
/* for Chrome */ |
||||
-webkit-appearance: none; |
||||
} |
||||
|
||||
select.wallpappers::-ms-expand { |
||||
display: none; |
||||
} |
||||
|
||||
table, tr, td { |
||||
border: 0; |
||||
border-spacing: 0; |
||||
border-collapse: collapse; |
||||
margin: 0; |
||||
padding: 0; |
||||
} |
||||
|
||||
#buttons { |
||||
background-color: gray; |
||||
opacity: var(--opacity); |
||||
width: 150px; |
||||
margin: 0; |
||||
padding: 0; |
||||
} |
||||
|
||||
#user_form { |
||||
background-color: var(--bg); |
||||
opacity: var(--opacity); |
||||
width: 400px; |
||||
height: 15em; |
||||
margin: 0; |
||||
padding: 0; |
||||
color: var(--color); |
||||
} |
||||
|
||||
#bottom_info { |
||||
font-size:10px; |
||||
font-weight:bold; |
||||
height: 100%; |
||||
color: var(--color); |
||||
height: 100%; |
||||
border: 1; |
||||
border-spacing: 1; |
||||
} |
||||
|
||||
#sessions, #sessions option { |
||||
background-color: rgba(255, 140, 0, 1); |
||||
opacity: 1; |
||||
border: 0; |
||||
width: 150px; |
||||
margin: 0; |
||||
padding: 0; |
||||
color: var(--color); |
||||
} |
||||
|
||||
#sessions { |
||||
box-shadow: 1px 1px 1px black; |
||||
border-radius: 5px |
||||
} |
||||
|
||||
#underline { |
||||
border-bottom: 2px solid var(--color); |
||||
margin-bottom: 5px; |
||||
} |
||||
|
||||
#menu_btn { |
||||
border: 0; |
||||
background-color: var(--btbg); |
||||
opacity: var(--opacity); |
||||
color: var(--color); |
||||
font: small-caps 15px/1 caption; |
||||
} |
||||
|
||||
#menu_btn:hover { |
||||
border: 0; |
||||
background-color: var(--btbg); |
||||
opacity: var(--opacity); |
||||
color: var(--bg); |
||||
font: small-caps 15px/1 caption; |
||||
} |
||||
|
||||
.user-dropdown { |
||||
display: inline-block; |
||||
position: relative; |
||||
background-color: var(--bg); |
||||
opacity: var(--opacity); |
||||
} |
||||
.user-dropdown button { |
||||
border: 0; |
||||
background-color: var(--bg); |
||||
opacity: var(--opacity); |
||||
color: var(--color); |
||||
font-weight:bold; |
||||
} |
||||
.user-dropdown-content { |
||||
display: none; |
||||
position: absolute; |
||||
width: 100%; |
||||
overflow: auto; |
||||
box-shadow: 0px 10px 10px 0px rgba(0,0,0,0.4); |
||||
background-color: var(--bg); |
||||
opacity: var(--opacity); |
||||
} |
||||
.user-dropdown:hover .user-dropdown-content { |
||||
display: block; |
||||
} |
||||
.user-dropdown-content button { |
||||
border: 0; |
||||
width:100%; |
||||
display: block; |
||||
padding: 5px; |
||||
text-decoration: none; |
||||
text-align: start; |
||||
background-color: var(--bg); |
||||
opacity: var(--opacity); |
||||
color: var(--color); |
||||
} |
||||
.user-dropdown-content button:hover { |
||||
color: #FFFFFF; |
||||
background-color: #00A4BD; |
||||
} |
||||
|
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 919 KiB |
After Width: | Height: | Size: 222 KiB |
After Width: | Height: | Size: 235 KiB |
After Width: | Height: | Size: 249 KiB |
After Width: | Height: | Size: 419 KiB |
After Width: | Height: | Size: 1.2 MiB |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 1.0 MiB |
After Width: | Height: | Size: 209 KiB |
After Width: | Height: | Size: 275 KiB |