Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions .github/settings.yml

This file was deleted.

148 changes: 148 additions & 0 deletions creationLetter.js

Large diffs are not rendered by default.

Binary file added fonts/HelveticaNeueCyr-Bold.ttf
Binary file not shown.
Binary file added fonts/HelveticaNeueCyr-Light.otf
Binary file not shown.
Binary file added fonts/HelveticaNeueCyr-Medium.otf
Binary file not shown.
Binary file added fonts/YandexSansDisplay-Regular.woff
Binary file not shown.
Binary file added images/abraham_lincoln.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/albert_einstein.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions images/check.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/closer.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/elon_musk.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/henry_ford.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/nikola_tesla.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/thomas_edison.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/ya-mini-logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions images/yandex-mail-logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/york-img.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
86 changes: 86 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Яндекс Почта</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>

<body class="yandex-mail">

<header class="yandex-mail__header header">
<div class="burger-menu header__burger-menu">
<div class="burger-menu__stripe">
<div class="burger-menu__stripe">
<div class="burger-menu__stripe"></div>
</div>
</div>
</div>
<img class="header__yandex-mail-logo" src="images/yandex-mail-logo.svg" alt="Лого - Яндекс Почта"/>
<form class="mail-search header__mail-search">
<label>
<input class="mail-search__input" type="text" placeholder="Поиск"/>
</label>
<div class="mail-search__clear">×</div>
</form>
</header>

<main class="main-content">
<nav class="nav-menu main-content__nav-menu">
<button class="nav-menu__action-button">Написать</button>
<button class="nav-menu__action-button nav-menu__action-button-indent"
onclick=getNewLetter()>Получить письмо</button>
<ul class="nav-menu__menu-list-tabs menu-list-tabs">
<li class="menu-list-tabs__tab menu-list-tabs__incoming-tab">Входящие</li>
<li class="menu-list-tabs__tab">Отправленные</li>
<li class="menu-list-tabs__tab">Удалённые</li>
<li class="menu-list-tabs__tab">Спам</li>
<li class="menu-list-tabs__tab">Черновики</li>
<li class="menu-list-tabs__tab">Создать папку</li>
</ul>
</nav>
<div class="mail-content__mail-box mail-box">
<div class="mail-box__box-header box-header">
<label class="box-header__check-all-letters-wrapper check-letter">
<input id="check-all-letters" class="check-letter_visually-hidden" type="checkbox"
onclick=checkAll()>
<span class="check-letter__box"></span>
</label>
<label class="box-header__button-wrapper"><input type="button"
class="box-header__button"
value="Переслать">
</label>
<label class="box-header__button-wrapper"><input type="button" class="box-header__button"
value="Удалить" onclick=removeLetters()></label>
<label class="box-header__button-wrapper"><input type="button" class="box-header__button"
value="Это спам!"></label>
<label class="box-header__button-wrapper"><input type="button" class="box-header__button"
value="Прочитано"></label>
</div>
<div class="mail-box__hr-line"></div>


<div class="mail-box__letters-section-wrapper">
<section class="letters-section">
</section>
</div>


<footer class="letters-section__footer">
<div class="mail-box__hr-line"></div>
<div class="letters-section__footer-info">
<a href="#" class="letters-section__footer-link">Помощь и обратная связь</a>
<a href="#" class="letters-section__footer-link">Реклама</a>
<div class="letters-section__footer-item">&copy 2001-2019,</div>
<div class="letters-section__footer-link">Яндекс</div>
</div>
</footer>
</div>
</main>

</body>
<script src="mailController.js" async></script>
<script src="creationLetter.js" async></script>

</html>
113 changes: 113 additions & 0 deletions mailController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
const minTimeFrequencyAppearance = minutesToMillis(5);
const maxTimeWindow = minutesToMillis(10);
const maxLettersOnPage = 30;

let stack = [];
let letterCounterOnPage = 0;

function minutesToMillis(minutes) {
return 1000 * 60 * minutes
}

function getRandomArbitrary(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min
}

let clock = setTimeout(function newLetter() {
getNewLetter();
clock = setTimeout(newLetter, minTimeFrequencyAppearance
+ getRandomArbitrary(0, maxTimeWindow - minTimeFrequencyAppearance));
}, 1000);

let checkAllBox = document.querySelector('#check-all-letters');

function checkAll() {
let checkBoxes = document.body.querySelectorAll('.check-letter_visually-hidden');
checkBoxes.forEach(
checkBox => {
checkBox.checked = checkAllBox.checked;
}
);
}

function uncheckAllChecker(currentCheckBox) {
if (!currentCheckBox.checked) {
checkAllBox.checked = false;
}
}

function getReadLetter(currentReadableLetter) {
currentReadableLetter.classList.remove('covered-letter_not-read');
currentReadableLetter.classList.add('covered-letter');
let needRemoveClassNode = currentReadableLetter.querySelector('.is-read-mark_not-read');
needRemoveClassNode.classList.remove('is-read-mark_not-read');
needRemoveClassNode.classList.add('is-read-mark');
}

function removeLetters() {
let openedLetters = document.body.querySelectorAll('.opened-letter');
for (let i = 0; i < openedLetters.length; i++) {
if (!openedLetters[i].classList.contains('non-displayed')) {
return
}
}
let checkBoxes = document.body.querySelectorAll('.check-letter_visually-hidden');
for (let i = 1; i < checkBoxes.length; i++) {
if (checkBoxes[i].checked) {
let checkedLetter = checkBoxes[i];
while (!checkedLetter.classList.contains('letters-section__letter-wrapper')) {
checkedLetter = checkedLetter.parentNode;
}
checkedLetter.classList.add('letters-section_delete-letter-animation');
checkedLetter.addEventListener('animationend', () => {
checkedLetter.parentNode.removeChild(checkedLetter);
});
letterCounterOnPage--;
}
}
if (checkAllBox.checked) {
checkAllBox.checked = false;
}
setTimeout( function () {
while (letterCounterOnPage < maxLettersOnPage && stack.length > 0) {
let lettersSection = document.querySelector('.letters-section');
let newLetter = stack.pop();
newLetter.classList.add('letters-section_add-letter-animation');
lettersSection.appendChild(newLetter);
newLetter.addEventListener('animationend', () => {
newLetter.classList.remove('letters-section_add-letter-animation');
});
letterCounterOnPage++;

}
}, 550);

}

function hideOtherLetters(currentReadableLetter) {
let letterSection = document.body.querySelectorAll('.letters-section__letter-wrapper');
let wrapperCurLetter = currentReadableLetter.parentNode.parentNode;
for (let i = 0; i < letterSection.length; i++) {
if (letterSection[i] !== wrapperCurLetter) {
letterSection[i].classList.add('non-displayed');
} else {
letterSection[i].querySelector('.opened-letter').classList.remove('non-displayed');
letterSection[i].querySelector('.covered-letter').classList.add('non-displayed');
letterSection[i].querySelector('.mail-box__hr-line').classList.add('non-displayed');
}
}
}

function showOtherLetters(currentClosableLetter) {
let letterSection = document.body.querySelectorAll('.letters-section__letter-wrapper');
let wrapperCurLetter = currentClosableLetter.parentNode.parentNode;
for (let i = 0; i < letterSection.length; i++) {
if (letterSection[i] !== wrapperCurLetter) {
letterSection[i].classList.remove('non-displayed');
} else {
letterSection[i].querySelector('.opened-letter').classList.add('non-displayed');
letterSection[i].querySelector('.covered-letter').classList.remove('non-displayed');
letterSection[i].querySelector('.mail-box__hr-line').classList.remove('non-displayed');
}
}
}
Loading