From f8e2dc44cd714efd80a97dbcce775ea2d4a3acc2 Mon Sep 17 00:00:00 2001 From: Shokk357 Date: Sun, 26 May 2019 19:19:38 +0300 Subject: [PATCH 1/2] task5 done --- public/index.html | 2 +- src/app/app.css | 28 +-- src/app/app.jsx | 17 +- src/app/header/burgerMenu/burgerMenu.css | 12 ++ src/app/header/burgerMenu/burgerMenu.jsx | 15 ++ src/app/header/burgerMenu/index.js | 1 + src/app/header/header.css | 14 ++ src/app/header/header.jsx | 18 ++ src/app/header/images/cross.png | Bin 0 -> 2093 bytes src/app/header/images/header-logo.svg | 12 ++ src/app/header/images/logo.jpg | Bin 0 -> 15185 bytes src/app/header/index.js | 1 + src/app/header/search/index.js | 1 + src/app/header/search/search.css | 32 +++ src/app/header/search/search.jsx | 15 ++ src/app/main/content/content.css | 10 + src/app/main/content/content.jsx | 28 +++ .../content/contentFooter/contentFooter.css | 6 + .../content/contentFooter/contentFooter.jsx | 16 ++ .../contentFooterText/contentFooterText.css | 17 ++ .../contentFooterText/contentFooterText.jsx | 11 + .../contentFooter/contentFooterText/index.js | 1 + src/app/main/content/contentFooter/index.js | 1 + .../contentHeaderMenu/contentHeaderMenu.css | 28 +++ .../contentHeaderMenu/contentHeaderMenu.jsx | 23 +++ .../contentHeaderMenuButton.css | 15 ++ .../contentHeaderMenuButton.jsx | 13 ++ .../contentHeaderMenuButton/index.js | 1 + .../main/content/contentHeaderMenu/index.js | 1 + src/app/main/content/index.js | 1 + src/app/main/content/mainContent/index.js | 1 + .../content/mainContent/letterPage/index.js | 1 + .../mainContent/letterPage/letterPage.css | 22 ++ .../mainContent/letterPage/letterPage.jsx | 21 ++ .../main/content/mainContent/letters/index.js | 1 + .../mainContent/letters/letter/index.js | 1 + .../mainContent/letters/letter/letter.css | 126 ++++++++++++ .../mainContent/letters/letter/letter.jsx | 57 ++++++ .../content/mainContent/letters/letters.css | 4 + .../content/mainContent/letters/letters.jsx | 33 +++ .../main/content/mainContent/mainContent.css | 8 + .../main/content/mainContent/mainContent.jsx | 51 +++++ src/app/main/index.js | 1 + src/app/main/left-menu/index.js | 1 + src/app/main/left-menu/left-menu.css | 6 + src/app/main/left-menu/left-menu.jsx | 16 ++ .../left-menu/menuButtons/button/index.js | 1 + .../menuButtons/button/menuButton.css | 29 +++ .../menuButtons/button/menuButton.jsx | 15 ++ src/app/main/left-menu/menuButtons/index.js | 1 + .../left-menu/menuButtons/menuButtons.css | 5 + .../left-menu/menuButtons/menuButtons.jsx | 19 ++ .../main/left-menu/newLetterButton/index.js | 1 + .../newLetterButton/newLetterButton.css | 21 ++ .../newLetterButton/newLetterButton.jsx | 13 ++ src/app/main/main.css | 7 + src/app/main/main.jsx | 189 ++++++++++++++++++ src/app/main/scripts/letterGeneratorUtils.js | 95 +++++++++ src/index.css | 7 +- src/txtStyle/HelveticaNeueCyr-Light.otf | Bin 0 -> 26060 bytes src/txtStyle/HelveticaNeueCyr-Medium.otf | Bin 0 -> 26204 bytes src/txtStyle/YandexSansDisplay-Thin.ttf | Bin 0 -> 177192 bytes 62 files changed, 1052 insertions(+), 41 deletions(-) create mode 100644 src/app/header/burgerMenu/burgerMenu.css create mode 100644 src/app/header/burgerMenu/burgerMenu.jsx create mode 100644 src/app/header/burgerMenu/index.js create mode 100644 src/app/header/header.css create mode 100644 src/app/header/header.jsx create mode 100644 src/app/header/images/cross.png create mode 100644 src/app/header/images/header-logo.svg create mode 100644 src/app/header/images/logo.jpg create mode 100644 src/app/header/index.js create mode 100644 src/app/header/search/index.js create mode 100644 src/app/header/search/search.css create mode 100644 src/app/header/search/search.jsx create mode 100644 src/app/main/content/content.css create mode 100644 src/app/main/content/content.jsx create mode 100644 src/app/main/content/contentFooter/contentFooter.css create mode 100644 src/app/main/content/contentFooter/contentFooter.jsx create mode 100644 src/app/main/content/contentFooter/contentFooterText/contentFooterText.css create mode 100644 src/app/main/content/contentFooter/contentFooterText/contentFooterText.jsx create mode 100644 src/app/main/content/contentFooter/contentFooterText/index.js create mode 100644 src/app/main/content/contentFooter/index.js create mode 100644 src/app/main/content/contentHeaderMenu/contentHeaderMenu.css create mode 100644 src/app/main/content/contentHeaderMenu/contentHeaderMenu.jsx create mode 100644 src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.css create mode 100644 src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.jsx create mode 100644 src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/index.js create mode 100644 src/app/main/content/contentHeaderMenu/index.js create mode 100644 src/app/main/content/index.js create mode 100644 src/app/main/content/mainContent/index.js create mode 100644 src/app/main/content/mainContent/letterPage/index.js create mode 100644 src/app/main/content/mainContent/letterPage/letterPage.css create mode 100644 src/app/main/content/mainContent/letterPage/letterPage.jsx create mode 100644 src/app/main/content/mainContent/letters/index.js create mode 100644 src/app/main/content/mainContent/letters/letter/index.js create mode 100644 src/app/main/content/mainContent/letters/letter/letter.css create mode 100644 src/app/main/content/mainContent/letters/letter/letter.jsx create mode 100644 src/app/main/content/mainContent/letters/letters.css create mode 100644 src/app/main/content/mainContent/letters/letters.jsx create mode 100644 src/app/main/content/mainContent/mainContent.css create mode 100644 src/app/main/content/mainContent/mainContent.jsx create mode 100644 src/app/main/index.js create mode 100644 src/app/main/left-menu/index.js create mode 100644 src/app/main/left-menu/left-menu.css create mode 100644 src/app/main/left-menu/left-menu.jsx create mode 100644 src/app/main/left-menu/menuButtons/button/index.js create mode 100644 src/app/main/left-menu/menuButtons/button/menuButton.css create mode 100644 src/app/main/left-menu/menuButtons/button/menuButton.jsx create mode 100644 src/app/main/left-menu/menuButtons/index.js create mode 100644 src/app/main/left-menu/menuButtons/menuButtons.css create mode 100644 src/app/main/left-menu/menuButtons/menuButtons.jsx create mode 100644 src/app/main/left-menu/newLetterButton/index.js create mode 100644 src/app/main/left-menu/newLetterButton/newLetterButton.css create mode 100644 src/app/main/left-menu/newLetterButton/newLetterButton.jsx create mode 100644 src/app/main/main.css create mode 100644 src/app/main/main.jsx create mode 100644 src/app/main/scripts/letterGeneratorUtils.js create mode 100644 src/txtStyle/HelveticaNeueCyr-Light.otf create mode 100644 src/txtStyle/HelveticaNeueCyr-Medium.otf create mode 100644 src/txtStyle/YandexSansDisplay-Thin.ttf diff --git a/public/index.html b/public/index.html index 9a8ef8f..5d57a79 100644 --- a/public/index.html +++ b/public/index.html @@ -8,7 +8,7 @@ content="width=device-width, initial-scale=1, shrink-to-fit=no" /> - React App + Яндекс.Почта diff --git a/src/app/app.css b/src/app/app.css index 1c4d511..8c8b039 100644 --- a/src/app/app.css +++ b/src/app/app.css @@ -1,27 +1,13 @@ .app { - text-align: center; + padding: 2% 3%; } -.app-header { - display: flex; - min-height: 100vh; - flex-direction: column; - align-items: center; - justify-content: center; - background-color: #282c34; - color: #fff; - font-size: calc(10px + 2vmin); +@font-face { + font-family: HelveticaNeue; + src: url(../txtStyle/HelveticaNeueCyr-Medium.otf); } -.app-link { - color: #61dafb; -} - -@keyframes app-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } +@font-face { + font-family: HelveticaNeueLight; + src: url(../txtStyle/HelveticaNeueCyr-Light.otf); } diff --git a/src/app/app.jsx b/src/app/app.jsx index f759eed..09f690b 100644 --- a/src/app/app.jsx +++ b/src/app/app.jsx @@ -1,24 +1,15 @@ import React, { Component } from 'react'; import './app.css'; +import { Header } from './header'; +import { Main } from './main'; export class App extends Component { render() { return (
-
-

- Edit src/app/app.jsx and save to reload. -

- - Learn React - -
+
+
); } diff --git a/src/app/header/burgerMenu/burgerMenu.css b/src/app/header/burgerMenu/burgerMenu.css new file mode 100644 index 0000000..3e6985a --- /dev/null +++ b/src/app/header/burgerMenu/burgerMenu.css @@ -0,0 +1,12 @@ +.burger-menu { + display: inline-block; + margin-top: 7px; +} + +.burger-menu__line { + width: 20px; + height: 3px; + margin-top: 5px; + margin-bottom: 5px; + background-color: #000000; +} diff --git a/src/app/header/burgerMenu/burgerMenu.jsx b/src/app/header/burgerMenu/burgerMenu.jsx new file mode 100644 index 0000000..b499a50 --- /dev/null +++ b/src/app/header/burgerMenu/burgerMenu.jsx @@ -0,0 +1,15 @@ +import React, { Component } from 'react'; + +import './burgerMenu.css'; + +export class BurgerMenu extends Component { + render() { + return ( +
+
+
+
+
+ ); + } +} diff --git a/src/app/header/burgerMenu/index.js b/src/app/header/burgerMenu/index.js new file mode 100644 index 0000000..42282b5 --- /dev/null +++ b/src/app/header/burgerMenu/index.js @@ -0,0 +1 @@ +export * from './burgerMenu'; diff --git a/src/app/header/header.css b/src/app/header/header.css new file mode 100644 index 0000000..bd78ffb --- /dev/null +++ b/src/app/header/header.css @@ -0,0 +1,14 @@ +.header { + display: inline-block; + width: 100%; + min-width: 800px; + height: 5%; +} + +.header__yp-logo { + display: inline-block; + width: 200px; + margin-left: 11px; + font-size: 170%; + vertical-align: text-bottom; +} diff --git a/src/app/header/header.jsx b/src/app/header/header.jsx new file mode 100644 index 0000000..89d200a --- /dev/null +++ b/src/app/header/header.jsx @@ -0,0 +1,18 @@ +import React, { Component } from 'react'; + +import './header.css'; +import logo from './images/header-logo.svg'; +import { BurgerMenu } from './burgerMenu'; +import { Search } from './search'; + +export class Header extends Component { + render() { + return ( +
+ + logo + +
+ ); + } +} diff --git a/src/app/header/images/cross.png b/src/app/header/images/cross.png new file mode 100644 index 0000000000000000000000000000000000000000..77652684b08ab97c1b2bab9e42fbd62ff0a8e7a4 GIT binary patch literal 2093 zcmV+|2-5e7P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O?T$lESzSh5u_6vxLZRFUQZS*}+}@965#%pdk=0 zsm8%cEc<+tt+=WE@83@U;A2=RGS&wdom=oR(L|MS5|;I|mb{qpJw9e$!tY%@T`wq9 zX_R{X>Ds(Mq26u}`1t_meLeXy+X=IwdEwHa7Rw4J^S&?}(rT^e`J3W=E}5I*%)eY` zon4Fj-^N3XYSErnq?%^E;5&#FjUMQz6G}b4gOVDLbB(JBfAP6?bUnQj?|OEp-I8X# z-b+D?n>V;Sjb=UD=h_X0ZhOR=<=q85(3jiKjds1)(0f})myCl_j^>~)Lm6kdF+)l{ z9&ZeWcQ#x(apyM5!UbJ4swt0BsiO3#3)-uw%79|z z;I2IIRMG(?3aDvRt7~6)*p0(p;Q-5(ai?N5#(3i4pl6le9M^_=7uRK8!c{BuONmdT z8$wRLaTkDapPJgC?>OkjZz(&L_~=v6!2}yz@F9d4 zQdCi63bWBgPcg(8Q-aZirW2k{xFe;kvd$*k?6S`x$D9h>r57rFk7NRP*??OYz0nbAqIk`v9g`7>^5>Qxsf#= zaZ`VhBSH5IawO;`xkqkKsMR!96g>b*6pE&c?wHsbccUt}WcICcZ&5ezW6gM2JFE?{ zd)?44HdYoN>+mZl_FeiA(YEp>66PiEJJ!R}Jh!H+%1#BCg&QT6tJ1a(D=xRvhZWPK z&KXvqoemw3Mcc@AF>*2XeMt`&JZAG?N6!@$(WB?B>+Cu@UW?PZHD4VT0rb?U-iqzn zknagytWVZg>rv>bwO}y|Lw4W0iCt8wwHMA=#{#6COsXMa;a?!g zP#ubi9-?}vs~&<(^oZSw9(gy2DLw7A|6Y39YyZ9U^c$&tr*~4Dtz1>dFlxv{bxiLL zHcEr;1j!NS_~vd!3++=k0oE*Q6WV<=D?&*)aB=0bK7E*^AcU}8#3-^S3yT9cuPHC+p=jiJF9f_CV(3ohvMfS6Xs zrM6pxAC#*O1~cSE_CHjYyq2B#wJ02hUk`n=__fH}bA-G!{5nZiyOkn*9WIWErN~gk z$;Z@!pzkuZ;2RzdpOHa}!US(wM-7q1U+_3L@fW~=zl=fe$MYO2y`g%A3fm7@G3+Z? zdQ0{oR(hN?p9Jm!sB}m1V~Fx9BpB&|;}MKcAkv;9PF9S^A2)X`$4IY3@pvTC z>rgygBCRJ78 z*EcaMUaxDIPQOdjwj^zrqmiU&4-CF2>FEW@gO9xE2+Wzf(#za+B-u~Jd6;(Si_Guo zv_q%zzMGOxu0q#vq7&=TE}ZB#o;ZIu@n1sZ^u#X!==&UPU(yej{UJDgvtm3GoW5Bx z?&hyC2KvRsFCx<~CVoLm-{)w1Ms)Nw>K#Nn`Wp2PAsu~cAPiwS+7qwT@c zxlrAp(ubk?Cqz2>8ubn%9es^@7m0NAHR>HyIv1*2q|&)i-H_6`P~9NXZ#FdQn6rPd zp`ki`x}ot`Nk7T^&_6mCs{hZlMjuSlw%zEPQigVH6_ag8$zA_WU1`l-SLyEd9X~4R za$=kOgThH3EStn(ZdZbsjIBhQr=LDx$H+%wso)I_-;C5e{UcK>*{~<@@(EkBuT+@xE2|WD(0007F zOGiWib&BGqfdBvi32;bRa{vGi!~g&e!~vBn4jTXf00(qQO+^Re0|*WvAq``QMF0Q+ zH%UZ6RA}DSSz8hUF$e=r>e0NZ{_VKh2anK<{d0sQv)e+-s>tId*Lte7uREW9{yZV! zo6mLuz4QYCof1aK<_+wjp9tuXFhjIx0+wDxSAU{T#EL<80loAh>Iv$jzXWti*rRGB z7*Br_fR^Ax(@YYM{zm{xf*(aI$#wdnfU1O8wjw|(nTi6+WH(^~q>m0&PXD1)&1hc@vV4A-NEdOEI|_k=rrZkdQ4I*_4uPIr(BjzM7FQr{wE7c|buP z(U6B! + + + + + + + + + + + \ No newline at end of file diff --git a/src/app/header/images/logo.jpg b/src/app/header/images/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8743b993125b2aca67e8dd5bc65b834a7be530d5 GIT binary patch literal 15185 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�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 + + cross +
+ ); + } +} diff --git a/src/app/main/content/content.css b/src/app/main/content/content.css new file mode 100644 index 0000000..994d1ad --- /dev/null +++ b/src/app/main/content/content.css @@ -0,0 +1,10 @@ +.content { + display: inline-block; + width: 78%; + min-height: 600px; + margin-left: 3%; + background-color: #ffffff; + border-radius: 3px; + box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.34); + vertical-align: top; +} diff --git a/src/app/main/content/content.jsx b/src/app/main/content/content.jsx new file mode 100644 index 0000000..063668c --- /dev/null +++ b/src/app/main/content/content.jsx @@ -0,0 +1,28 @@ +import React, { Component } from 'react'; + +import './content.css'; +import { ContentHeaderMenu } from './contentHeaderMenu'; +import { MainContent } from './mainContent'; +import { ContentFooter } from './contentFooter'; + +export class Content extends Component { + render() { + return ( +
+ + + +
+ ); + } +} diff --git a/src/app/main/content/contentFooter/contentFooter.css b/src/app/main/content/contentFooter/contentFooter.css new file mode 100644 index 0000000..1aa1b10 --- /dev/null +++ b/src/app/main/content/contentFooter/contentFooter.css @@ -0,0 +1,6 @@ +.content-footer { + width: 100%; + height: 37px; + + border-top: solid 1px #e2e2e2; +} diff --git a/src/app/main/content/contentFooter/contentFooter.jsx b/src/app/main/content/contentFooter/contentFooter.jsx new file mode 100644 index 0000000..7871a12 --- /dev/null +++ b/src/app/main/content/contentFooter/contentFooter.jsx @@ -0,0 +1,16 @@ +import React, { Component } from 'react'; + +import './contentFooter.css'; +import { ContentFooterText } from './contentFooterText'; + +export class ContentFooter extends Component { + render() { + return ( +
+ + + +
+ ); + } +} diff --git a/src/app/main/content/contentFooter/contentFooterText/contentFooterText.css b/src/app/main/content/contentFooter/contentFooterText/contentFooterText.css new file mode 100644 index 0000000..8d84b29 --- /dev/null +++ b/src/app/main/content/contentFooter/contentFooterText/contentFooterText.css @@ -0,0 +1,17 @@ +.content-footer-text__text-endline { + height: 12px; + margin-right: 45px; + color: #9b9b9b; + float: right; + font-family: HelveticaNeueLight; + font-size: 11px; + line-height: 40px; +} + +.content-footer-text_unhighlight { + color: inherit; +} + +.content-footer-text__del-line { + text-decoration: none; +} diff --git a/src/app/main/content/contentFooter/contentFooterText/contentFooterText.jsx b/src/app/main/content/contentFooter/contentFooterText/contentFooterText.jsx new file mode 100644 index 0000000..321bd88 --- /dev/null +++ b/src/app/main/content/contentFooter/contentFooterText/contentFooterText.jsx @@ -0,0 +1,11 @@ +import React, { Component } from 'react'; + +import './contentFooterText.css'; + +export class ContentFooterText extends Component { + render() { + return ( + {this.props.text} + ); + } +} diff --git a/src/app/main/content/contentFooter/contentFooterText/index.js b/src/app/main/content/contentFooter/contentFooterText/index.js new file mode 100644 index 0000000..68b83ee --- /dev/null +++ b/src/app/main/content/contentFooter/contentFooterText/index.js @@ -0,0 +1 @@ +export * from './contentFooterText'; diff --git a/src/app/main/content/contentFooter/index.js b/src/app/main/content/contentFooter/index.js new file mode 100644 index 0000000..9c7f280 --- /dev/null +++ b/src/app/main/content/contentFooter/index.js @@ -0,0 +1 @@ +export * from './contentFooter'; diff --git a/src/app/main/content/contentHeaderMenu/contentHeaderMenu.css b/src/app/main/content/contentHeaderMenu/contentHeaderMenu.css new file mode 100644 index 0000000..7c6baab --- /dev/null +++ b/src/app/main/content/contentHeaderMenu/contentHeaderMenu.css @@ -0,0 +1,28 @@ +.content-header-menu { + width: 100%; + height: 37px; + + border-bottom: solid 1px #e2e2e2; +} + +.content-header-menu__checkbox { + display: inline-block; + width: 16px; + height: 16px; + padding: 2px; + margin-top: 11px; + margin-left: 20px; + + border: solid 1px rgba(0, 0, 0, 0.15); + -webkit-appearance: none; + background-color: #ffffff; + border-radius: 3px; + outline: none; + vertical-align: top; +} + +.content-header-menu__checkbox:checked { + display: inline-block; + background: #e2e2e2; + background-clip: content-box; +} diff --git a/src/app/main/content/contentHeaderMenu/contentHeaderMenu.jsx b/src/app/main/content/contentHeaderMenu/contentHeaderMenu.jsx new file mode 100644 index 0000000..1cb658f --- /dev/null +++ b/src/app/main/content/contentHeaderMenu/contentHeaderMenu.jsx @@ -0,0 +1,23 @@ +import React, { Component } from 'react'; + +import './contentHeaderMenu.css'; +import { ContentHeaderMenuButton } from './contentHeaderMenuButton'; + +export class ContentHeaderMenu extends Component { + render() { + return ( +
+ + + this.props.deleteLetters()} /> + + +
+ ); + } +} diff --git a/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.css b/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.css new file mode 100644 index 0000000..56b2128 --- /dev/null +++ b/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.css @@ -0,0 +1,15 @@ +.content-header-menu-button__text-title { + display: inline-block; + height: 16px; + margin-top: 11px; + margin-left: 25px; + color: #cccccc; + font-family: HelveticaNeue; + font-size: 13px; + line-height: 20px; + vertical-align: top; +} + +.content-header-menu-button__del-line { + text-decoration: none; +} diff --git a/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.jsx b/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.jsx new file mode 100644 index 0000000..0e4a790 --- /dev/null +++ b/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.jsx @@ -0,0 +1,13 @@ +import React, { Component } from 'react'; + +import './contentHeaderMenuButton.css'; + +export class ContentHeaderMenuButton extends Component { + render() { + return ( + + {this.props.name} + + ); + } +} diff --git a/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/index.js b/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/index.js new file mode 100644 index 0000000..7b241ab --- /dev/null +++ b/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/index.js @@ -0,0 +1 @@ +export * from './contentHeaderMenuButton'; diff --git a/src/app/main/content/contentHeaderMenu/index.js b/src/app/main/content/contentHeaderMenu/index.js new file mode 100644 index 0000000..8eabdad --- /dev/null +++ b/src/app/main/content/contentHeaderMenu/index.js @@ -0,0 +1 @@ +export * from './contentHeaderMenu'; diff --git a/src/app/main/content/index.js b/src/app/main/content/index.js new file mode 100644 index 0000000..7b367d1 --- /dev/null +++ b/src/app/main/content/index.js @@ -0,0 +1 @@ +export * from './content'; diff --git a/src/app/main/content/mainContent/index.js b/src/app/main/content/mainContent/index.js new file mode 100644 index 0000000..ff15f8a --- /dev/null +++ b/src/app/main/content/mainContent/index.js @@ -0,0 +1 @@ +export * from './mainContent'; diff --git a/src/app/main/content/mainContent/letterPage/index.js b/src/app/main/content/mainContent/letterPage/index.js new file mode 100644 index 0000000..2789729 --- /dev/null +++ b/src/app/main/content/mainContent/letterPage/index.js @@ -0,0 +1 @@ +export * from './letterPage'; diff --git a/src/app/main/content/mainContent/letterPage/letterPage.css b/src/app/main/content/mainContent/letterPage/letterPage.css new file mode 100644 index 0000000..6ff17e6 --- /dev/null +++ b/src/app/main/content/mainContent/letterPage/letterPage.css @@ -0,0 +1,22 @@ +.letter-page__close { + margin-top: 10px; + margin-right: 10px; + float: right; +} + +.letter-page__del-line { + text-decoration: none; +} + +.letter-page__cross { + width: 15px; + height: 15px; + margin-top: -8px; + margin-right: 10px; + float: right; + opacity: 0.15; +} + +.letter-page__text-letter { + margin: 30px; +} diff --git a/src/app/main/content/mainContent/letterPage/letterPage.jsx b/src/app/main/content/mainContent/letterPage/letterPage.jsx new file mode 100644 index 0000000..1c4f3f4 --- /dev/null +++ b/src/app/main/content/mainContent/letterPage/letterPage.jsx @@ -0,0 +1,21 @@ +import React, { Component } from 'react'; + +import './letterPage.css'; +import cross from '../../../../header/images/cross.png'; + +export class LetterPage extends Component { + render() { + return ( +
+ + + +
+ {this.props.text.map((paragraph, index) => { + return

{paragraph}

; + })} +
+
+ ); + } +} diff --git a/src/app/main/content/mainContent/letters/index.js b/src/app/main/content/mainContent/letters/index.js new file mode 100644 index 0000000..de36da6 --- /dev/null +++ b/src/app/main/content/mainContent/letters/index.js @@ -0,0 +1 @@ +export * from './letters'; diff --git a/src/app/main/content/mainContent/letters/letter/index.js b/src/app/main/content/mainContent/letters/letter/index.js new file mode 100644 index 0000000..c37f80d --- /dev/null +++ b/src/app/main/content/mainContent/letters/letter/index.js @@ -0,0 +1 @@ +export * from './letter'; diff --git a/src/app/main/content/mainContent/letters/letter/letter.css b/src/app/main/content/mainContent/letters/letter/letter.css new file mode 100644 index 0000000..966c314 --- /dev/null +++ b/src/app/main/content/mainContent/letters/letter/letter.css @@ -0,0 +1,126 @@ +.letter { + width: 100%; + height: 37px; + + border-bottom: solid 1px #e2e2e2; +} + +.letter__animated-add-letter { + animation-duration: 2s; + animation-name: add-new-letter; +} + +.letter__animated-delete-letter { + animation-duration: 1s; + animation-name: delete-letter; +} + +.letter__checkbox { + display: inline-block; + width: 16px; + height: 16px; + padding: 2px; + margin-top: 11px; + margin-left: 20px; + + border: solid 1px rgba(0, 0, 0, 0.15); + -webkit-appearance: none; + background-color: #ffffff; + border-radius: 3px; + outline: none; + vertical-align: top; +} + +.letter__checkbox:checked { + display: inline-block; + background: #e2e2e2; + background-clip: content-box; +} + +.letter__del-line { + text-decoration: none; +} + +.letter__y-logo { + display: inline-block; + width: 37px; + margin-left: 10px; + border-radius: 50%; +} + +.letter_is-bold { + font-weight: bold; +} + +.letter__text-sender-letter { + display: inline-block; + overflow: hidden; + width: 20%; + height: 15px; + margin-top: 12px; + margin-left: 10px; + color: #000000; + font-family: HelveticaNeue; + font-size: 13px; + text-overflow: ellipsis; + vertical-align: top; + white-space: nowrap; +} + +.letter__text-letter { + display: inline-block; + overflow: hidden; + width: 40%; + height: 15px; + margin-top: 12px; + margin-left: 10px; + color: #000000; + font-family: HelveticaNeue; + font-size: 13px; + text-overflow: ellipsis; + vertical-align: top; + white-space: nowrap; +} + +.letter__mark-new-letter { + display: inline-block; + width: 10px; + height: 10px; + margin-top: 14px; + margin-left: 20px; + background-color: #6287bd; + border-radius: 50%; + vertical-align: top; +} + +.letter__data { + width: 8%; + height: 15px; + margin-top: 11px; + margin-right: 20px; + color: #9b9b9b; + float: right; + font-family: HelveticaNeue; + font-size: 13px; + text-align: right; +} + +@keyframes delete-letter { + from { + opacity: 100%; + } + + to { + opacity: 0; + } +} + +@keyframes add-new-letter { + from { + opacity: 0; + } + + to { + opacity: 100%; + } +} diff --git a/src/app/main/content/mainContent/letters/letter/letter.jsx b/src/app/main/content/mainContent/letters/letter/letter.jsx new file mode 100644 index 0000000..02ba360 --- /dev/null +++ b/src/app/main/content/mainContent/letters/letter/letter.jsx @@ -0,0 +1,57 @@ +import React, { Component } from 'react'; + +import './letter.css'; +import logo from '../../../../../header/images/logo.jpg'; + +export class Letter extends Component { + constructor(props) { + super(props); + + this.makeClassName = this.makeClassName.bind(this); + this.deleteAnimation = this.deleteAnimation.bind(this); + } + + makeClassName() { + const className = ['letter']; + if (this.props.addAnimation) { + className.push('letter__animated-add-letter'); + } + if (this.props.deleteAnimation) { + className.push('letter__animated-delete-letter'); + } + return className.join(' '); + } + + deleteAnimation() { + if (this.props.addAnimation) { + this.props.removeAnimation(this.props.id); + } + if (this.props.deleteAnimation) { + this.props.deleteLetter(this.props.id); + } + } + + render() { + return ( +
+ this.props.changeCheckbox(this.props.id)} + /> + this.props.openLetter(this.props.text)} + > + + {this.props.author} +
+ {this.props.subject} + {this.props.date} + +
+ ); + } +} diff --git a/src/app/main/content/mainContent/letters/letters.css b/src/app/main/content/mainContent/letters/letters.css new file mode 100644 index 0000000..b187427 --- /dev/null +++ b/src/app/main/content/mainContent/letters/letters.css @@ -0,0 +1,4 @@ +.letters { + display: inline-block; + width: 100%; +} diff --git a/src/app/main/content/mainContent/letters/letters.jsx b/src/app/main/content/mainContent/letters/letters.jsx new file mode 100644 index 0000000..b07e5e2 --- /dev/null +++ b/src/app/main/content/mainContent/letters/letters.jsx @@ -0,0 +1,33 @@ +import React, { Component } from 'react'; + +import './letters.css'; +import { Letter } from './letter'; + +export class Letters extends Component { + render() { + return ( +
+ {this.props.letters.map(letter => { + if (letter.isVisible) + return ( + + ); + })} +
+ ); + } +} diff --git a/src/app/main/content/mainContent/mainContent.css b/src/app/main/content/mainContent/mainContent.css new file mode 100644 index 0000000..9cea465 --- /dev/null +++ b/src/app/main/content/mainContent/mainContent.css @@ -0,0 +1,8 @@ +.main-content { + width: 100%; + min-height: 524px; +} + +.main-content_show:target { + display: inline-block; +} diff --git a/src/app/main/content/mainContent/mainContent.jsx b/src/app/main/content/mainContent/mainContent.jsx new file mode 100644 index 0000000..f6b26da --- /dev/null +++ b/src/app/main/content/mainContent/mainContent.jsx @@ -0,0 +1,51 @@ +import React, { Component } from 'react'; + +import './mainContent.css'; +import { LetterPage } from './letterPage'; +import { Letters } from './letters'; + +export class MainContent extends Component { + constructor(props) { + super(props); + + this.state = { + isLetterOpened: false, + openedLetterText: null + }; + this.closeLetter = this.closeLetter.bind(this); + this.openLetter = this.openLetter.bind(this); + } + + openLetter(text) { + this.setState({ + isLetterOpened: true, + openedLetterText: text + }); + } + + closeLetter() { + this.setState({ + isLetterOpened: false, + openedLetterText: null + }); + } + + render() { + return this.state.isLetterOpened ? ( +
+ +
+ ) : ( +
+ +
+ ); + } +} diff --git a/src/app/main/index.js b/src/app/main/index.js new file mode 100644 index 0000000..aad1ca8 --- /dev/null +++ b/src/app/main/index.js @@ -0,0 +1 @@ +export * from './main'; diff --git a/src/app/main/left-menu/index.js b/src/app/main/left-menu/index.js new file mode 100644 index 0000000..4eed47b --- /dev/null +++ b/src/app/main/left-menu/index.js @@ -0,0 +1 @@ +export * from './left-menu'; diff --git a/src/app/main/left-menu/left-menu.css b/src/app/main/left-menu/left-menu.css new file mode 100644 index 0000000..3b2e504 --- /dev/null +++ b/src/app/main/left-menu/left-menu.css @@ -0,0 +1,6 @@ +.left-menu { + display: inline-block; + width: 147px; + height: 100%; + vertical-align: top; +} diff --git a/src/app/main/left-menu/left-menu.jsx b/src/app/main/left-menu/left-menu.jsx new file mode 100644 index 0000000..ed07c86 --- /dev/null +++ b/src/app/main/left-menu/left-menu.jsx @@ -0,0 +1,16 @@ +import React, { Component } from 'react'; + +import './left-menu.css'; +import { MenuButtons } from './menuButtons'; +import { NewLetterButton } from './newLetterButton'; + +export class Menu extends Component { + render() { + return ( +
+ + +
+ ); + } +} diff --git a/src/app/main/left-menu/menuButtons/button/index.js b/src/app/main/left-menu/menuButtons/button/index.js new file mode 100644 index 0000000..3da80bb --- /dev/null +++ b/src/app/main/left-menu/menuButtons/button/index.js @@ -0,0 +1 @@ +export * from './menuButton'; diff --git a/src/app/main/left-menu/menuButtons/button/menuButton.css b/src/app/main/left-menu/menuButtons/button/menuButton.css new file mode 100644 index 0000000..5103207 --- /dev/null +++ b/src/app/main/left-menu/menuButtons/button/menuButton.css @@ -0,0 +1,29 @@ +.left-menu__text-menu { + width: 137px; + height: 13px; + padding-top: 4px; + padding-bottom: 4px; + padding-left: 10px; + margin-bottom: 8px; + margin-left: -10px; + color: #707070; + font-family: HelveticaNeue; + font-size: 11px; + line-height: 16px; + list-style-type: none; +} + +.left-menu__text-menu:hover { + background-color: #cdd6e4; + border-radius: 3px; + color: #555555; + font-weight: bold; +} + +.main-part_unhighlight { + color: inherit; +} + +.main-part__del-line { + text-decoration: none; +} diff --git a/src/app/main/left-menu/menuButtons/button/menuButton.jsx b/src/app/main/left-menu/menuButtons/button/menuButton.jsx new file mode 100644 index 0000000..4a6bb55 --- /dev/null +++ b/src/app/main/left-menu/menuButtons/button/menuButton.jsx @@ -0,0 +1,15 @@ +import React, { Component } from 'react'; + +import './menuButton.css'; + +export class MenuButton extends Component { + render() { + return ( +
  • + + {this.props.name} + +
  • + ); + } +} diff --git a/src/app/main/left-menu/menuButtons/index.js b/src/app/main/left-menu/menuButtons/index.js new file mode 100644 index 0000000..1afa0fb --- /dev/null +++ b/src/app/main/left-menu/menuButtons/index.js @@ -0,0 +1 @@ +export * from './menuButtons'; diff --git a/src/app/main/left-menu/menuButtons/menuButtons.css b/src/app/main/left-menu/menuButtons/menuButtons.css new file mode 100644 index 0000000..076e07b --- /dev/null +++ b/src/app/main/left-menu/menuButtons/menuButtons.css @@ -0,0 +1,5 @@ +.left-menu__actions-block { + width: 100%; + margin-top: 0; + margin-left: -30px; +} diff --git a/src/app/main/left-menu/menuButtons/menuButtons.jsx b/src/app/main/left-menu/menuButtons/menuButtons.jsx new file mode 100644 index 0000000..d175cf9 --- /dev/null +++ b/src/app/main/left-menu/menuButtons/menuButtons.jsx @@ -0,0 +1,19 @@ +import React, { Component } from 'react'; + +import './menuButtons.css'; +import { MenuButton } from './button/menuButton'; + +export class MenuButtons extends Component { + render() { + return ( +
      + + + + + + +
    + ); + } +} diff --git a/src/app/main/left-menu/newLetterButton/index.js b/src/app/main/left-menu/newLetterButton/index.js new file mode 100644 index 0000000..75f2a5a --- /dev/null +++ b/src/app/main/left-menu/newLetterButton/index.js @@ -0,0 +1 @@ +export * from './newLetterButton'; diff --git a/src/app/main/left-menu/newLetterButton/newLetterButton.css b/src/app/main/left-menu/newLetterButton/newLetterButton.css new file mode 100644 index 0000000..3e8f8e5 --- /dev/null +++ b/src/app/main/left-menu/newLetterButton/newLetterButton.css @@ -0,0 +1,21 @@ +.left-menu__button { + width: 147px; + height: 32px; + margin-bottom: 8px; + + border: #6287bd; + background-color: #6287bd; + border-radius: 3px; +} + +.left-menu__text-write { + display: inline-block; + width: 56px; + height: 15px; + margin-top: 7px; + margin-bottom: 10px; + color: #ffffff; + font-family: HelveticaNeue; + font-size: 12px; + vertical-align: center; +} diff --git a/src/app/main/left-menu/newLetterButton/newLetterButton.jsx b/src/app/main/left-menu/newLetterButton/newLetterButton.jsx new file mode 100644 index 0000000..5b05a09 --- /dev/null +++ b/src/app/main/left-menu/newLetterButton/newLetterButton.jsx @@ -0,0 +1,13 @@ +import React, { Component } from 'react'; + +import './newLetterButton.css'; + +export class NewLetterButton extends Component { + render() { + return ( + + ); + } +} diff --git a/src/app/main/main.css b/src/app/main/main.css new file mode 100644 index 0000000..afd9b99 --- /dev/null +++ b/src/app/main/main.css @@ -0,0 +1,7 @@ +.main { + display: inline-block; + width: 100%; + min-width: 800px; + height: 90%; + padding-top: 13px; +} diff --git a/src/app/main/main.jsx b/src/app/main/main.jsx new file mode 100644 index 0000000..5434c3e --- /dev/null +++ b/src/app/main/main.jsx @@ -0,0 +1,189 @@ +import React, { Component } from 'react'; + +import './main.css'; +import { Menu } from './left-menu'; +import { Content } from './content'; +import { + generateDate, + generateAuthor, + generateText, + generateRandomInt +} from './scripts/letterGeneratorUtils'; + +const MAX_LETTERS = 30; + +export class Main extends Component { + last = 300000; + + constructor(props) { + super(props); + + this.state = { + letters: [], + counter: 0, + isAllChecked: false, + checkedLetterIds: {} + }; + this.deleteLetters = this.deleteLetters.bind(this); + this.deleteLetter = this.deleteLetter.bind(this); + this.removeAnimation = this.removeAnimation.bind(this); + this.selectAll = this.selectAll.bind(this); + this.changeCheckbox = this.changeCheckbox.bind(this); + this.newMail = this.newMail.bind(this); + this.GenerateLetters(); + } + + removeLetterById = (letters, id) => { + let newLetters = letters; + newLetters = newLetters.filter(letter => letter.id !== id); + let count = 0; + for (let i = 0; i < newLetters.length; i++) { + if (count < MAX_LETTERS) { + newLetters[i].isVisible = true; + count++; + } else { + newLetters[i].isVisible = false; + } + } + return newLetters; + }; + + setChecked = (id, checked) => { + const newChecked = checked; + newChecked[id] = !newChecked[id]; + return newChecked; + }; + + changeCheckbox(id) { + this.setState(state => { + return { checkedLetterIds: this.setChecked(id, state.checkedLetterIds) }; + }); + } + + selectAll() { + const newCheckedLetterIds = this.state.checkedLetterIds; + this.state.letters.forEach(letter => { + if (letter.isVisible) { + newCheckedLetterIds[letter.id] = !this.state.isAllChecked; + } + }); + this.setState(state => { + return { + isAllChecked: !state.isAllChecked, + checkedLetterIds: newCheckedLetterIds + }; + }); + } + + deleteLetters() { + const oldLetters = this.state.letters; + const newLetters = oldLetters.map(letter => { + const newLetter = letter; + if (this.state.checkedLetterIds[newLetter.id]) { + newLetter.deleteAnimation = true; + } + return newLetter; + }); + + this.setState({ + letters: newLetters, + isAllChecked: false + }); + } + + async newMail() { + const id = `${this.state.counter}`; + this.setState(state => { + return { counter: state.counter + 1 }; + }); + + const author = generateAuthor(); + const text = await generateText(); + const subject = text[0].split('.')[0].substr(3); + const date = generateDate(); + + const newCheckedLetterIds = this.state.checkedLetterIds; + newCheckedLetterIds[id] = false; + const newLetters = this.state.letters; + + for (let i = 0; i < newLetters.length; i++) { + newLetters[i].isVisible = i < MAX_LETTERS - 1; + } + + this.setState(state => { + return { + letters: [ + { + id, + text, + author, + subject, + date, + isChecked: false, + isVisible: true, + addAnimation: true, + deleteAnimation: false + }, + ...state.letters + ], + checkedLetterIds: newCheckedLetterIds + }; + }); + } + + deleteLetter(id) { + this.setState(state => { + return { letters: this.removeLetterById(state.letters, id) }; + }); + } + + removeAnimation(id) { + const letters1 = this.state.letters; + const newLetters = letters1.map(value => { + const tmp = value; + if (tmp.id === id) { + tmp.addAnimation = false; + } + return tmp; + }); + this.setState({ + letters: newLetters + }); + } + + sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } + + async GenerateLetters() { + await this.sleep(100); + await this.newMail(); + + const fiveMinute = 300000; + const maxTime = 600000; + const minTime = 10; + const time = Math.max(fiveMinute - this.last, generateRandomInt(minTime, maxTime)); + this.last = time; + + await this.sleep(time); + this.GenerateLetters(); + } + + render() { + return ( +
    + + +
    + ); + } +} diff --git a/src/app/main/scripts/letterGeneratorUtils.js b/src/app/main/scripts/letterGeneratorUtils.js new file mode 100644 index 0000000..0458ee4 --- /dev/null +++ b/src/app/main/scripts/letterGeneratorUtils.js @@ -0,0 +1,95 @@ +const names = [ + 'Фотин', + 'Евтихий', + 'Азарий', + 'Фетис', + 'Полиевкт', + 'Борислав', + 'Кассиан', + 'Юст', + 'Мартьян', + 'Капитон', + 'Никандр', + 'Эрнест', + 'Петроний', + 'Иезекииль', + 'Харитон', + 'Севастиан', + 'Орест', + 'Вит', + 'Василий', + 'Гордей', + 'Максим', + 'Павлин', + 'Захар', + 'Владилен', + 'Наум', + 'Алипий', + 'Меркурий', + 'Феоктист', + 'Овдоким', + 'Феофил' +]; + +const surnames = [ + 'Чашников', + 'Березников', + 'Руликовский', + 'Ляпишев', + 'Оффенберг', + 'Шипов', + 'Арнаутов', + 'Машковцев', + 'Столыпин', + 'Шереметьев', + 'Яворский', + 'Рындин', + 'Лонгинов', + 'Ададуров', + 'Нечаев', + 'Габаев', + 'Маткевич', + 'Маковский', + 'Юрасовский', + 'Ващенко', + 'Кобылин', + 'Карандеев', + 'Золотарёв', + 'Голицын', + 'Игнатьев', + 'Байчуров', + 'Бурдуков', + 'Болтенков', + 'Михеев', + 'Храпов' +]; + +const months = ['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек']; + +export const generateRandomInt = (from, to) => { + return Math.floor(Math.random() * (to - from) + from); +}; + +const getRandomElement = (array) => { + return array[generateRandomInt(0, array.length)]; +}; + +export const generateDate = () => { + const date = new Date(); + return `${date.getDate()} ${months[date.getMonth()]}`; +}; + +export const generateAuthor = () => { + const name = getRandomElement(names); + const surname = getRandomElement(surnames); + return `${name} ${surname}`; +}; + +export const generateText = async () => { + const paragraphsCount = generateRandomInt(3, 5); + + const text = await fetch( + `https://baconipsum.com/api/?type=meat&formaat=json¶s=${paragraphsCount}` + ); + return text.json(); +}; diff --git a/src/index.css b/src/index.css index 2b6e525..74897da 100644 --- a/src/index.css +++ b/src/index.css @@ -1,10 +1,5 @@ body { - padding: 0; - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', - 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; + background-color: #e5eaf0; } code { diff --git a/src/txtStyle/HelveticaNeueCyr-Light.otf b/src/txtStyle/HelveticaNeueCyr-Light.otf new file mode 100644 index 0000000000000000000000000000000000000000..7ced49a4d5434af4bcc9d18d8e34497a34118ade GIT binary patch literal 26060 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 E2Xd`Qwg3PC literal 0 HcmV?d00001 diff --git a/src/txtStyle/HelveticaNeueCyr-Medium.otf b/src/txtStyle/HelveticaNeueCyr-Medium.otf new file mode 100644 index 0000000000000000000000000000000000000000..a2cde1622fbb8f19b2879babdb2b053a2089d28a GIT binary patch literal 26204 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 literal 0 HcmV?d00001 diff --git a/src/txtStyle/YandexSansDisplay-Thin.ttf b/src/txtStyle/YandexSansDisplay-Thin.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3b8e196d6637bac78fca86f9a4f04c4c475295d7 GIT binary patch literal 177192 zcmce<31C~roj*SFBwMz8%C;;YlB`>nd|Q@$%lGXhPV6Lh?wgR15W<~=5K0o#aD}r# zSxPAd+ESpD4Z-Cq+odgZTS{q5DHK9eN@;i71zK1j^6&GVdD4^Pq}$#9@Ba&o-_v{Z z=FNQPd(Zbfk8#FW9{%W=qrZP*-tNyo^c+(j%fwadKyP2a;g3cSQ+mhnyL(`4!T4_9 z%=JuJevGlniGlIO-G`sGp1}Q^8MC++jMvn!ncDtOjPVChf6e-BYj+I&D0Gss%yPzb zvGo^S;9$SW_#0mM3hoCt?Ko>&>g{(nGM0<`{QR@lp1*?`@SoD#i~E^popb4?AAQ?q zXRN4z@rt`QZ(O?}t>wkrQMVHJBb#x-kd<-`es92U&*p6xT%x>k;3meDG{%gMbIx7A z_ODAHc$u+$+)l~cw)T=8`g@d1Q2!7vIJU3dwsDW=Cwmz0d5p0?y}9Gu^Do%*E!R?} z)M7mO5AWEyamPEmP3ssl-HB%+j9|rCH(&kK`qepYe`RI5cX5TiTs!j`9e?)NRd2>l z%(UvGy1n?B#uU1We|S!JbS9P6>sRCcUHYhKN!}BGl|ys|f45`wt67SA--v6Be~szz zTc@P34YKzAL1h>7DOTp!Da@gKft9mqHpqQ!6eY;7W0ib{Rk9~p zh)=O5_8r#B7thQnm$61Z!77vj7E}~wQz9rjR-=Sit)gdjN(HONd64R}r||5{tP-HA zq$B?cYt+5Ls+4&wPibb8%6Y6_xgW@{@o~ z8!KbKW9t+L^P+E?b?31Fe;VyR2{?IJrTG06+sc2(x&<6JGCyC-%24-irH2Io<2Ib% z&faHE{s-ox=X9%CSobi>7XkmD07eAw(-hr7W)^cm@J}j$e;UeS_RET8?`eu|9{Tt8++dJo7ie`E`u*RUALUxbtxQ0KeY{>~ry(=3*YfLn*`izsmZFHrR_Z z9}#^Jj)F#(;QlXX4dE9-do^5BRGzMmp+Oka0{@UB>pCzeS}%4E!_&1k2XTei?~OHp4r08 zx)#hE;RDgoy*Luh5MLy|hBkF6tU>U!r*Zv4Hea^`ZSBMPy(~xh6vsxCZ7ig_56AhS zf5Pi_R>yw{+`kcXRl+g^&fdg4{6X-cCR{_|Kf+N#->zaKN&x3H?+zSC1kKd*XIYVe z@$H}y@HC|X*WY2yz>P)9XDBv2y9w96&lcic<;q`h{&VmkqONgSI z#0w7thvMZW!2Bo72i{(-?1ao4gu1mFQulk{?@Lh3tV)zG%-qFZfDC?^mGdiD315f# zxB@(XC1~dYv_a=|jSA`rejexbXR5yiZJiC+Z-mV2$1z*TW1qf+E!X*3q3(GW))%u@ z-IqbXZvaPL!&okb94DUHk3w?!XKMLJ-}w*LQ&vKT&B#J<zYuIL4Sp1Z?j!HT+h_$J=)^T@k4gnfBT6lFA3vRwj)s11 z!}RFXVr9@(F`5sBUJ5&b=|P2z?PQ(MPwUxU_8@zVH}XNgm*1$ADvipM%J-EwbX=dQ zU!Y&1U#-7M|3&>*^xx8dNB=ARAM6M0A2>1`1&$Jj-QjZh9JP*+qs7tdSnb&1*zLI5 z@u1@|$1%rK&O)clIpJL8%5x36*0?sF$T(58JIt>fg2Rv%l|Pj(kUv!|HJ0oi&bnN3;6Q3mp4qy>r~T zTz%(;6UvFgPZ_;)=C?D?&3t#}*_mf%o}T%}jBh3*c2#U|Y_t~ePz4_Tsf7|-@Pmce~@h6Wzas1fv$B#dD{K4bjIDX&pe>#5U@$--GIDXFY z(c^u`yN^fTdgrZQzx9o`zWV0-Z$9pY=n(MUz*Pruram}TI4vJfG)d)Ers-+V#~nUSFn|A6>PCJ zY%RvOpB-RVvCp#`*sbhN_GMt(J?vig74}tjKl>VcfPI~PgMAZt{}6kaeT#jYJ<1+~ zg!pGjgC{^iPeS^g2kUJkJDdNCUBte`&V^QSl3mEQD5>lqyA5yHsTg3jo;3@W=dfM) zeIGl@v;I6SoBu%q9xdF_Tr^j>kqjg5z=Y8;QS@yWCCcVg1{ zNas{(;&kKGR14bCQ#*JB)eldhg)M3eIEqU(Cs8S-a>Vh7&Nnu>aPpCTy`_(I_D+>L zosPaoo*kQfaL>IFaoZ2%H|$N0W6G=_uQSxOh&PPY^Noa)89(SMqPM*QZEx?S`!07;HF0JAj(AIVA0^n^IC`4XK1-@Mg^n8bUJXbx6>$oqj<9In;N4pEaBB=iL>hUM)aYj9! zOGngySR65s0&tEfpyLHJ2tvl0K4|3s%nbY^SZR;LTKzf7UofuZf8C(@6Z|e^Qg?~& zPTh}mZ|fua&HB6b$MkQdu#{CPM^cTcw;J?@&lzHA^=YrCuSnmVenI*J=`S1g#)BE3 z%XmNYqRd}pxw5uoJ((TMz9#$8>_6pn=4{DbVM;S?Fg=+U%{!VO$={s+Sb^P~Yrd~A zwXnZ%N8ype`wCwv{F9}?a(9uvXm8QS#hZ)2SF)z$SjoqwgQa(rK5HGd-e*&6d+p3V zXnRkp9}$Byle?>VcT+ns-N6}W<~efaONJJ)^0Q{=hR^BeEIzC7P!{)qpe|AF#F zfhAdQS)HUvo$Z*yi@aW?O5$EYTvE> zq%O10URPh&U+<`Yx&B1`-$H32Yp6EV9lA60al<_gk2O5s@M^<*4WET`!;bLt;a9`& zg+GhrMqH7*B9BJC7x_ix-N+}6`b2zNY!E z=0}>JYksBqo#u~Q^euO^JlOJd%gZe%T0U+yw%S{3TiaUax2|iwp!MChb!`{49c;U; z?WMN2+dgb>YQLlX!S8U0`CM0JS7+Cvu1#H+bY0hVPj_zjpSoi`xjojN@}8ES(VkU3J9<9Xb93*O zzV5z>zD<2Q`}X!7>ASP<-To#0oBMb5U(T!r_UOXM!sixkAD5=HDhb;UGv`B zmbKTc{cv69x~JDqte;;0;|=RJ?AoYoG;Yk>xP9YA8{gYBx#`tSe>v-#vtHSpwz+Nd z9h=`eyYuY3wq$O(V9U`hf7#l*_13KqZhh<=*EyBv9NpHtZF1X|ZF{%fxb1;$Pj371 zwztms-zVD(wlCU#Wc%~y2G70j+;?`^ckI}4>yG<&+;`q%=e>H~iJjRyn|7|kf17vi z+_`7x!JS8T-m&xEoe%9iw)5GYKiK)w&R2K7we#Jbf7$u*`Rx3(^P}f4xghO=moCh^ z@bE=N7ahFlwu`=g(UTYb_@cKidjDeM#m6p5yJX2F_g)gawD!`^?aJJ>X4j8*ckjMn zPuiYK_FT8;o;^qRys+o3Js)0Xyv%-C(`EB7d;PL^FZ=Ma5BH|+weGFm+qCzby$|kv z_wt)BfBN#*FaKI~o_&@38uo42w`ild)9^0}u! z_sNxcS9V_cxhs!e`SJde{j2sLJHQSU94J4~c3}R2H3tqIIC|g*2VOhyr-S7O+Ya^~ zoIJSY;2!+9|KK$TZ##JJ!B-BxcU8ev!K)s<>IaAPhaUO-#OGIh{=vhWug<-??dr#_ z@m+KCHP2sLaBa)A+pm4{+E=bCyza*9-oC!z`X3*8=?3M7(Hr*N@X3w4Zqnbh@8-dq z58tBPvi+80w|wuGm%tJs7G`4X4&@sVI6173BoEXyQ(iOVa4sbKOC*~5CLz;mN}r%Q z(JA$Uo-XK_Av*O0v^?F1Pz7E>sj02Y*SU51E?>AI5~?pW7o=WmC^eX~^YXHD^752# zocvfxJ2{@8m7SlTokiYyX!V0iKKnp@SKvlb{N0>h#pS#8FV)tGe*4h* z32=BFgwdnZkOxp7MZZn6`khP9<|g$!l`cR%O$@|N7wmLl8ft1TOBJnT*F1sOa11LO z?a86hcSN#OmYIP!ymLi?O8Oo!NLd9SagO8lZ6pk{}bM3sE_v5XTs(<0Wb) zz#O8PKrR7}u1C?38TXv{Z5H>O;uX`-=A$ftE7Q>211zdOcZ^k{c5UKHDr$#bk{xQm zoeuRW;7);Ev6!+sZ>U!Mrl`&kuGaY*?K+F8S_gz`42R5iZZTAIzsasM7i232^Rkkv zcGvt#zP+fj!{=(RDg8msV8oqnFnSyMg1(_<_m;I~-Q&e6rQ@yc;Wod!d9+-~a@RNu z)44BYIJVkT?HYk>CS8kCK`)Rr* z*d40xuPRiw0y2)7zbVI+X90Z+G>~T49bY2~g7F~+E-6UPxeddm-!U2Ioo5eNYC4rKS^Qy}J>s`m{1Lk??6(}L?d+_r?(Q}!FPw}hS(SY?MV6}G z%Bo%*t9z=)Mn=ZUTYY&Wu}zhI)#8?@Qr)|KWZ{C5kp*L;(a4L@PnV%l@GR64uiHFs9z3nm&5ohhoWB2;FyCFUk-DuoTcxa2C~d! z<)W2R^=+aR%${teRG7sENEhxKC4x>;jVIW|sXk{pIwkXlRN%bAam>0cY zE~Z=%R}^$a^P8>Y*GC$wc@577Az|)aK7TfkV?!g6n?wphWfo9fRM%+9)*0*^ID#{N zgQ>)s8|bVm$|A z+E)-X-=1kNZ*Y}028*mAe;{P5>-PHFYFwFlzRG%=qqVA}xU#v-*IMn#xu&4PZ0qUk zwP#rShK3yOniR#V!%{I9vSz1{8^9d})S3bq#w86SOkjj7bPv8;+*5@bxbDr@R5d<08Wijt$w4sYVr$Y1CF4GexIBY}K5=*%%^N7g~Nhe<;t_Fk-&J0{xhifcxg?Nk( zcSzWA9J3+B@(un*f1|}8GBjEY7Q+t~+Ls^7*q`c2-Jfx2xmD3!R(O%mRd?NWbuRD4 zh15@YXn8 z^W1Zu=Xl%euiNlH-VvJl3VbEqn3q}_LSkO#a#A$Q(5w#h0oMkx#3%V6Wj5#)Kt(G@B2B-t>n* z@CGNN5q*mtU<>lt)=PTxH(w?%-Xb=9$Yxol2 zp-$pq;{Ccf9;)I*;GqFbpYw<__QMNw3qO09^uI>%(|*BE{cK4gPb}WE(C1sYXYs`Dh2;YF75GbW z4XLb$U0@;{q(*E9m>^L`;VL)qWKEq z&+CAXo!veS0KiR|^o~4&N?sCFG-dJ$_%%sna2)M;gcO53aRx;Zkb(mRceBxMp1510 z-i0Xm6#QR^f(#)DN+9Y>;O8uXFB5AyC|gl>qg;)Wz7stU$GLi{!5;;Gwkv{bJI%qJ zw@i7=HNy>|Wo2o$Rc&ocnoE6?N4D_Gtt+qEx~#_CQERoAI18L*k>QHa+Hu--r7 z$EVaNiTn(ll%fzmx1x-o(2C<$l-(#-qmanw>hs{h;4Y+#PeZ~0mqjOtD`$YI5ueNg zpG@aY3s|Ky%tIz{%0sayd9T+SyM^y?oUQDQjoBZ0#LE8|vmojUZPZ}S-@w>{>@rg9 z;dW1&^AZ|WNz$m2=iG@qa*mxfBu69$fO!bUN}Pe_H(&I&IDrqv;7=vEE~&(h>&18> z%{Dau#B@uZVQ`zAW~WKR?BAA#Ys$0IZ4;5Eh2i4T`rd%8%3YjR#&^aZH4U^>EogN* zJ60ME*?Aduv&|kJ3fA^jn2lLEDSX@>`(viPI6M}qn`n2TvzX0V@W6D8-3A-w9GWI9 zGzgH|6Z86a_#ZJ%vRere3Zz&qfLJXMV%3DByhY$3_J~S2^Wm(vF3u<$LuP1J+V~{H z^g#1|tmVN-2%`(%5D>~8l7feIqt$63q&y>g{0S@`5!4C( zO-WEE<#(2jEBS}+6j_yj%5Pp+zc}h%HNSJbtZB5WVzkjw=nt29qgBQ3=;B(kKTE2j z9#2PgiM2ZF3J!#j`#NS_&&VgRV%RG&R*;)$RwE zF6GzcdBSc_qc=a_+vstJJ$bPkimST(zV={YVX)oj@2VpIJ#ZFsNzntQHn{kA5SPZn zn1E;=psC^Q90_G5QnpHCCk>BT#Y1U?w>e-YWhkT$rr=0|NeU~8w`qVNOda5DBWwZ9 zSV+hlcRtJtLRYd7A`K++|EcqwMd5UyYwf~Tm#1?{sA@@fd1UF1mfA~$Lt(qMu0IIW z<@U%>YT1I7XEjB7>@DMwh9&LJGGOx9VPLZImD12?ZOw3fNmpN5PFnk9vlTugp-1tf zd49+VtO?|%(h=8%{>P8Pmz0AkH^{rd^-8RZ-LDjaKXpNiR!E-&>ZO8XFDjBWMJ%y(Ytcn`P zGN^!~o-myFHo6ORByOF89;Dz3xs|9@r#S_sl0OieZMK)}V9v>XZ$}%X*~z}k zwy2NL)x`*CmRUu=4d`fXf;!!VKJFw*P)--hrPruh_yNg6$P|(wletA-^6*5aXv_^5N{(Nq zUV}bQZk%kLjk|@7G)I-uC8@ytMw88JF0S^N9TsnWDVFuKbG_}=wZjDl^ZZEdP+ieq zb4;cjcpH^sPdMnx&3F52$_g!>aFySjWA{|sEw$yvwp@2kNpV&C$?qolApwJ`nPs|1 z0E78h3&zwh#)9xV(e1^6flt67u2s*H2N+bZm{d}MTW~gwLH4p1@vIe(kVmipAo1aD zuej>NuVU2l;ny_a=TiwWfSQ4tt_&>V1=vqe-bDE`$_z@%%C2IdbpTWvfG!n)_aJ~Z zvjEho02Z19SVs$B?JR(0=K$8o0-}-3^Q6S775y4Y$RjKIIw5-P!`TX)Y4Rve(c}(D z@(P6NE$~sM5`E8B=;=2(2Xun=g`P$p2L8#~2QC{J*!$2~lV3c)rzA97=cp;m(^-}@ zIohg9t>KZHi;Id&T>2DCh0E1eSsdMZ{h~ErzObw7f;(6E`&%lqQnG8>24088R^)FB z6!b@e9YOPb4V&-SxbbV3_J-D6yR3Qra4_EyENW>rR}X~hr+WN*H=HPKtgyPGQ%w{5 zm)CXfyld5(BkStYGII=8Lr$iF-&)b;%kxI(2j)%qqYDJ?=Yas)gkEQ4-z0KC(1MsH zLjvzLD;ko79O5a2_bJi`CoZU(pYS7-Ekb^UF7gh6f~8-Fk)lM58(6^L*J1GMF!*(t zSo}YXWBN|aJlW+i?cmB`P`&XsloYUJGTy0C$wi1efp&CGi__rF59PbL`v`Yt#9kQp zeBAU&K>1?q9Qz-X$6>_i5b3~_RE*Dvc75!~G!6)_5KWnZ**f4H9leRs7SiAflc+q| zMaFSQy2#)}AXOfU0O|BK@ssPt$uU+4yfO+5BOg?zIO8}o zxpn|=6In79{PIgH21C|m%dWbidNg8Nz2Uiswr!u+y?n~kwLEf6xjpu}$54ra z`+lB3S~-7^uNj*hUXYctaACu6bs<2A*VRMMi-NwLY$-`h1e*W`ai7X8il!M();qHC zyiov*NE}9ts!))}bsB1&yqiowh2*6sB8baFc+B`Y{pXKYS5I6tIJD88=GoZXwRzC* z8`#*zT-f(3<@S>Yg5!H9Ce9zQ+gx6o*6b{zVu?y(Ek<>NM8c+% z*^YWoNp((Yj?dB*#H)T>*5E75Fxt~HqG1IzDS1UB-kAb)L`02Vr2@GMm73rcDy+4) z&v9UAs0Wrvd{GsJLeP=MOxRXTLa7Lizl1Y=O;K%~Go6Rh6@WrXiQUbYRDb|B#0LF* zC0`c%dhAOocqFato2UwrfA+(Vh59cJ`p>BM$aPJLS~clD%#BA z_mL$dy)1EJC?hD#QMRJ&MoC+V{(TQ8 zub`Yj`4C0)4^{zQn}XLOmjI;~Wddab$^|I!L5zch;bS*P9w%?jE~cZ9vIOB zBYI#&4~*!65j`-X2S)g;jHJ%cIE{Fr5id02g+{#4h!-01LL**iL{~vFI;b$E99m2U zH@I(bxjdnN|BtZ8@A^|gzH;c~C79UP6%PpN(8;%9j>UNlt$C#L3Jtse@6YiIc-db zDQGtZ?WUmJ6ttUycGX$^SDgGD<##B5MG-wh*c#NT6zGg8Vqvfk$HgccQ7%L|fI^;P z;!Pn=tZ$bq%pY~vDMwE30CX<_WQp%7LPwfbXnoZ$z3PeefCSI@JDQSQDE%L;1zgmB z(bBrQr5E-0U%Ui*#>M^Zn@5Ae(ar7Av*>u1v2NwTiN*Vu)zmECKQVD|Wt}~^X!qFI zuJK@SeAn36?nN{UlHa8PAJPDaO~kPgVhmc5kr&!(a3*ov%p`7`EL%A4NF78hk74x} zmKH6Kk%lET5Hj4Q21~#co@gJ`RzQ_vU9uJT<+rcex_-r1{4Z>~6gEgBRMUqRt{z_y zI}-b)^7zVijq~e^M1R9Ghm>alXFL2iAh(=^|0V~zT$zA%+}50<4HVNLib+6%%IP1R zVi5lf?n_`OdaH*-Pa2N#IfI}C-rLx9#BvY@F6PV#7~~}IEt`f5CZ3Rx>Ldz{O)zLp!6g}zty*tl z5<75VftW<$;nHR_8?cbp3C$?15h#5YRJ5T7a&Dy^n>4wGe77#u<-Yu`%F)KMO;g|W zzp`~tadn6PyOmGFtBR>UmS5ggvv4$aN9^B}$Ct0J>aDe<#=g%RRG#IBAN0?d^DsMW z8V)H0vEyBFo@Jv^+LA_@Y=4kfojNAhjgB!Jy6h2MHj@Cs9dg=ZeL|d7;*3;YX^&9+ zOx$1>b53zt(mFvz2jXp{fEn&FG|1_OiPGF!t?r62J#m+t6YSfaNrZeF#~ zTGQ$AEbOiHcP%ky})+}9Fob5Cf4G(+j5MpC24E8oQ z3|5h#qm?i$SYo~nteq%SddA}8SM>~SmXpOW>9=I@Li?Zy&B+~LJ>p6%uu%A!Zw$uyl-`+d38S!Io8~?C{kJ)8E@wQ8f%NL>U5SxS9QpK!8@r`qF<@xVSsWw zYprrlzvd_@nifV+L#|+YAzY34QGyagX+arAS%$I&WfzLj1O62!KS%i;%3o1biJ^c~ zDv%fo@KJ%6L4m|jATbn33RV^bG9*Ehxh%%TTtU>_Rz=qN*F@;W1)PjhIs-=G2HeHDXSUm{V2N zqWKh4n!(+H!2M5DKXIS?;l`s!VJw{7uG|Q904v|h!IPxO5IY3kHe-%6*k8%``fqHx zIc~CKA{MMVS>96n6k-D@_CvhvS15l#`7acKqa@slQGjQNu471GU`SeE>}-@vQ9h4C zx+)C5cstMI$1hOcLHQesXeSjXz<8)FZ~{t0~`KcWw?N@F*ZPKxxWBzl-* zY0Y7H8v4`ISck#W(q7{)0Yoq04X>fRhw=%E7#gYRB`86Z7L;L>Whh%vcA*?bN#7~i zrqd(`V&dr^RlW6=|E~!CIuyHuZ;D+K`zg%@8IC&iKb?&ez0LNU%(2@whi81XpFEW6 zVh8xO^y^@4Ma&IFDaZvvr@5NnA6w5~h)wYatjc9}>&YwS8uS{(RCOSh#lY%mG7|D3 zHLeM%d=jxNvUxZG@FI2j1YtH<=XS4o^E=;pQ+dPs*(*ZaoGCtrR)7RTYHilm=|bGi z9lX)0yg|`1w4S6S;;^E~c4yDdio;T|Tg27?enI{uzXkA1Wi8WqdNz;O*xxj&VtGi+ zE{9!5OQdS(l?bYGH-;?kw{ExHUHK)ua@X6R!nWirW#%@1@ytJ?>g+fpT2Yd#I~Lf% zDOdr&ZiHN`cPc%+M0pYQ8)z=|!b}Hm7I8sjr8BbEDWXfpS_$n)fu5*9--Xokhb*72 zu34b;96E#!3cG-RQy~qxn%zJiD$=%G zw^%i5#S*VrMi*f*g=Q0Ozu|546&u!^wYKliDXHnD<&EBXQx~7VzIPxzYR$1sb&N05 zr{ouT0;VgXT`kf4+-gUj*PcIbV033cpu zq9sB}u@ZBFubTTe7NwMVi#PPwENXYV+sEqz{UMtz)E`if#-Z*jl%L1$?HX|PtnKJn z*X_32TPK^FCtK|H7CN@7x)%KD{Au8X@TaGr-k+|GSS2(e%(KBrXGP--$M5Aka-KKn(CEwAuv@x=@%~6nFY%0do zsW|;9<}M#|cNx)PeC{j>+rvrN>P*6CFJ16bSf@H~7P??bLU5G?#6((D1eY-|MuF-D zz*;B9J`K%Xp4HZ!YIx0BT`#nd!Oks#0h*?PfO`Bx(S|`egNte~rCvu~S?ki~=B2H6 zyF8Yi*FECyUf0pFw#U`i#h0C|P{;f$%$X6>1(C-X5^lvr6eh;3uKs8H;ZKRftoph!~uaY9*iI2aqHpgNzMM5nJBK zbKM$yY zY+KkQAsIcYT30q6GT-j)?HwH~C`(ICEi*-$zQkXP`S@$L_W3JPbaurs*w;?MWyD{5 zloZTMKJqvZQ_qpoEPyN5oyqaqNSM}`gp0Lwp*HD)YQ3bBzU;%D0@*?$=%5xeB9X8J z_vKxRMk3}h4NSl@cw!p9h+45SJr^<6@GKaVk#?RO0#az9{ESd4SZpe{gOgaT;3&bN zh#j#VMZVT5XGUgbSuo;0YqMqjK;1+KVq_-j1~*#tiZf+*t+i=kB(kv4YHeH?2`_50 z{(DAlp23-xZ^~G*YpQT~}ai z(mT*w-d^L(00({8QspjOv;h9^)jeGne|-t&xgTv_seBdsw8*z2-;K<-($?=(e~;E{ z)k+ogNA4ktl4h7x=vHK)CdEfs(4~#pCR28HZm!;|oRy!MnNMX$EFBrKz_Xc;X4=>x z@qPy&u?Kqb(l=7TcoL4D6+1^i{q56icbwjs(Pi(Y%<{rMNiXL z$-aZe4@4;@<^??{jWnV(TDKrN<~oEqkC^p?R^_p;wId$`)VyXqwSc+3M?^ z@9m0s8p~~&UQ=0Ri8q2X{?YkF5?x)THJ$=N7%K;&MgE4;*n@nHyS^;j;tL@%QKM@v z={n~Wx>jQZwNb04lXgMH4{g+%V@C!B;vHalM&JPjjjMtQ1Bwq;5;t!YwCr{2lmvP6 z-x4Xu?pFsBr*A1+l`O%-|2yBg)=_P~{ujRUvf8DcK40h3+B$ixD<5ifI2wn_%Lf~s z&c;EbyJsCVpdPooXKggPuE%Y)wM@3QE^V>dT9&r9PPRzdvuLIdIxNYaQ}iG$Td<5o zO<9ttQA2{Yfg}T1;F;=_6O?Su%jkb4fWr(h|0b~;nk#^QFSlP9<6xdg~uDb?O#oIBFC$v@4gH&zR8f}ifsyupbbEivHXbHzi=Jvtb zAsnkD-MyGL8WAK=3|=GR^~69_kuYbd+67HjSEYzHb~5(#Lex?;ygVbLo*ejbCCM$g zXA1Hj5@nO-w^5NojOOE;|Pl$s;FyPm&cGDHMU!xW3nzl8oYl8>CxCNF3w-XGORt^r=79vON5kNe206FzcHrIA5x zr})Ta1dr+@e>>PwQKC;zwN^H{?Tr;BmSBsgtgXhjesOdlCoQM9sjM+jRN$$zJ9?Wu z&Ty|WJ3mifmXe>BZ7c~oY`)?gLu!t##@pLdl5S5g$td#MN?ew#)YKe%Lq(v`NnDsS z#0&5`Wi9Y>9kJ-yI*lsEG#IGbfp$R^g@X5`V@}AAO>>JZCxP8LP#-AJh0=CFa#9h8 zLtUm+xnUzy{H}%9rB@Yqw)XXT@3_NXZ*gU$rKM(eHSlw7TejF@UkKJ4Q{Z8t{?12# zUxt2BN;;SxtENpqE5SZVUCWZIT%$ypVq(r zKk0pvr<@-9`#}j;j9B$f_`JKFO3vR z_v`ogkA5?F*RB4q9}E8Rk6i!3uYUDG>@!J2c{6R;wdo@e5^|L_>4DM|1eF zim4E`ae9Y?MRgfv0RUpzvoZZz^&=$@gbbvpDg3QlKsgp1OfhvFF_z+t(iY>HOE?rF>%&2b3UI`ehasR zh_RFVA%HLOxbIg@*MqK34n~9y3I3QXlOb}U@8k-11_A+~x!A#foPw3s;JTVdi)-zI zC#9syJbFJgV!xV?N8SyK*(W84$jFmRt+eV2VK^Bct+QlgXYjP53XiAKl4i`#u+)u) ztD`=XG0T`<=r1etV+}RSX!1p?ugEmIBF^IKs@hVM%T}O6Q#N;AX?0~~k*m>d%q&hb zlvG%YDuPv|W}mYpEv>}i&9~N6R1}w1lo-;WZLn1{*C3`%%@s}Z2`Av88Bx+yxm-BH zbqnDK4+55*%5Ra6yo!I0o#F@A;E3HhXffg={wenFw6pnS!6kAgQvi1}gpZj3OhL}M zDCFXmvB9)I1<9ryR3m0zBEU|5RN6hkhOI>!eZpO&hkWvf3K4CA_;fgZE$&Js!&>9C zR=Ud^9!s!7Dbrf6yTaW_>#`Wv)XXCGMLv_8 z13vTtKlv<0v@M<4&Hr85g#HKE)#ORRHgp0re4>YO$)@hypkc5kcu5TEL`t~K)u3G( za*=#z09+FlrLczYYY zw32Vi*70|Wk#mGRT8FD`QLVLh0Xar%D?3YL_mtN41p|HcrDeGmW%nMPuX|N%%c>r~ zZqr7dXM%?`R>ceQo(qk)xpn-fdUvac<%~iGr66V@$o7+lJUdQxPVAzlkI6t25{d!A ze2C>^4P1cHC<%T*NYKS zianV>g%)Jl%fVR;x*O2oXx@F z;$X8A$D*QO^E9fNI}5w$F{*~gEb4DhM{#E%KfkD=)$MMrD2g93Hqdq%fMUZMS0Q_D z8iE4bIAX@)6rswg)5UO*a}GJrVtUgtaGCogAchDy;D8M8(DYS=z6$w;Dj(oQB8NhU zlYA66N(iL~WgKNa%K0c)qR?t*1|Up3-lXH0iz7jtcIP1uL%BHQv@IlpQnwNSGD#5! z^r2k^>b#FV_SiR0RQ~c6|8KwX*kkwKf4_CF6@jbA_+acloB}V_ftOw>c&UM{AT*EX zdC^Wkse~8A?S%cPaaF3PQ^T_rLYEF)K-4nj-o@A6h;<;+Qvga&+bO|(qH?9v32q$Q z!}rHR^cN3!XGZvcfHrfmo8=d2IRRT*iswA&gSPe*Cfhxn6j`LYPlTJ;3nnZRy}YWM z82kRCHf&4Bt~?l9IA9HF{QqlTy_*5MJuRZZ2C_kFD^w45W%}e$ueb53+w-s;wnR@pW`J zI9D!e@1xKqS3|&_Ww4I62^_9$^Ed|E%2zFD>vK2tAIY{>IXb#q+kJJm%-DCb%?M>O z7MXLh?e!i+13jt+05{M~A?dKAZaRZ*6F00=RA zg9yrZ!^Vx``Eqzrt0C^>T0}L0s0J4}OoVzIDM^WNml$L@8fq1o6-5K&s7cPZky{>| z>MUuD4?Pj@CT&~f;ygZi)7dR8XWukAdDE7bmMu3;E;_U}9A0~9(ZZ|NL?UahTDg4l zrWIAqrqqIF_xwfU^WCilskv<{Tese{bm$jP69Hzn*OP8!FEU@Pm5q{M2I(~%$TMnawugR8JKeqvT+WNVNXw}2= zNh8g}33-FTy9h4$miCR#6VoU>RC5ep2laV(a*ec^u%G`n-wE?Lm=14EIo!PPx))2fY4-Ss1ug3+d- zF-2FF#z$S16=@Sq4WY=O$!*Q=Z}061w6@ty)||4Qz7v+JY&#O!kYCA`^6UB6z}_<0 zxg<+vG?C=T2Erf_m4QA|(gkT^#6OBjVNc2}kO(I;U~vnhGLZM)Ky`@u()Mg=z(ivD zM!I7pzdodB$Y2SHzt7!ri|?kJuDJD9{9XDr^&j3>$QvPq}{o3|1!j@*yN-a3ySEwayPAsN?WDikGP(9ZDkEkY` zpp&qq6VL_lfl{(*$u3S(A;2zx-;%2b(D!;lKW%tv2rrM~7zKRV2{!EnoA@>a@%*n- zsVLtJg_{B?3~q|C5zND2asRg@q+3?qSW}%oK1pjsHX8MQp(XZ#8rHmnrt|~1ce}-_kCS8B_%aoJ{(ICxZ>*^8|&;^ zuz;_oAO23d+3Ba7C5!rc7cJ`T!}1pCluX?RDTj0ipoFUTW(s_uwO(}%5H2tZeJ1wD zF>Pe1N%SUl3W8Z+6>a@SU;rJV4(U9SIKcT;{YGq+M5rpaOA_hjZ9n`WZJ8ANp3O#f zke|2msPa*sL4mV?w+h>+jE8xnxRxoeVJ_}QTv1s(u80tx(tkj?GOmayS7HAO71VIQqO*RFObFH%?$U=f(<^RrgD3=5Ss^8im;!BAl>*#FG`E<~NGtZz{)^LjPj%z+F3)8-mGH7UW z2>}_F)EVnU8ADlvLjK2nC`V9?02IaZNLOtxrd(P|a7EBUv2;a{+o1zx0ZIx8UnYko z+%#fy956XyBD`8+OG`~FwuBtc%#zalN@w+V4EmCkv_N6r;&#Pb>~vs!PR#QI%70?c z;Vhy#2iSa&Q~v@vMfo2?gqvr~{}3{YXorL}0YJzoG=#2cLk$?|3E8Rd%}M4|_e#1`8kG7+e$BiX?SNfS|V>GUg|uBXyjYFxU+4Ld!Migw${ zAZZE*pTX@Ff1ka{2kF9_Zxja>7cK&yAOv-Y0nhdGC~o419r0YtI{RPt_{4_OxXiv7IW~3Zbpd%2U)g zULyOZAg&gD%beY}8q!c|lB|i-_su`k%CF=n;a73-C-|q&Vy7}_C&;tct;zF2Ct;>k zr5z}jfj-jiZW*tmC#R{?xml}|b%r`!;HvR7q(Ln}ci}y#y z^=N(Cm8jQux_ZDS(7SFNyiCDJzd$L(_}GD<4N^rkdu&dSwCY9?3pQf@lUEfej+DG2 zq!7t7k^^yj*#M?N`Np)q6Th1wwF6k&DwB{g8sx}>ejtawOjzC{2Mg*ag&6P!^3 z6s6zDyE0}{Y&azusPwLpyJcN~%z#JJnwIY# zIenr(*8PY%OZuJ!z+V^iQZDJGMdC2QI*#Y3)``;#)yYo%=U z3e^FB#v&N|iLMu@ZGp!DKKv4OZBe>J6|i4&jcQt5De$w7k_}~ws`{2{Bi|-$=G@$2zs``KLD5wi`SIhJNcmRKU#8p)K9Gy` z0$9tLYGf?g<>YrFs1lb~gAX-IaZvXi6iO=X4e1_)#SeVV26u4?638a;m)8lSqoMm09nK&ZSEZZBMsmU9Ka``c||&xdu5Pk$PFW81cO z#KsRxFYJ2_xz#Vw#t)0n@3+TZwb^*Tw)+F|$4QKLosM`drVSFKAL~eRHc2ZqirJ)k zwExDmnDcs3uN~{4vYrw3%FkG@lOQHIJk<-Hv0fLuC#hcGlzP-Z`QCo_t-1N!O71B+>;b zbqFoX1kYlI6552^RaI=M`q5GI(W8a`{J8n?#|wEFKmNJ!DE)w>L7S18*OaG~*MViV z;Dg_$SI77KcD*FgJCwk-zvHVXmm?-bV3+jElJJsO$SrTeDXDn0wK{ETUI^`}C~=ka zR+r$e zeW=6>Ert0a*pfp03oYEoclEd0iW@wgS(z0wfw;BQQtyf8WaDQ%kJy)PjNMaYZFsmr z<`er22ENK-EXp)3T%VCuBQuMOj5+gGXJ%K;$}bKW(@y@*lwnpbHOoZfK$<}*%^^G% zIfep{n*bT`zzrJjDj}?!Q^%lm;)_CBEo%ZdPi?Dfw^plkR$GLZ@_o_sG~QhDI&DoQ z-_Bu=hPhC&`=(wMftRyY&{U6SgCe9Sknx;+j z$y-eLOfm67^9P3!z5|^|&k@c8EZpt8ZRI%|mVKqX{3~Z)=I)q^C`#2!61Nsw>brDN-$>@AqUeiMG$-@rC zzJL^aKkksBBE7YBr0~~~wdyTMg&dIEQPRHXdcsk;lPw~%5dDZ$TFE})*w*uRm-Yw3 z#fH2lUsG3EZKSrWDqNLiuXgqhdzViITYaXg#wtf`W3A(|zV6HnM`m^?@g#mls&N`o zsJKEo8Oe1n?9uAf&8qX=cssn;snw~SRp)_3onassam=~zx;I{jZLvtaly#1=RuwO0 zpWcesqUmN_kxf(TM2o<(dW@nQz&Rxw!av6oE7F$4>K}3i)EtQv%60O^y|>C5PglsL z=gaklmF>5bjz<@4D=}EBIxFT+U3kvcL{ihOxz9H%etzFT5@@Exo0kb}R zo(Vxmn<9@9_Uunoi1zZvUjZMG9bgE!ckS9@2@qqw6#G$ zBuNK*K;!^5l09HfqEFzYpujodUez>5A_44w?I5A00V$H|r9Ds&{k|T$P(9>eJtT5{ zl08rjV3R#i0%wg3@1%(!?>Lq%aOM}&6hxC0a+4JIqS^zhU^=Zm5afPo4}6qt4oseX z#+;BQEQG9?`53c*vFOu(qE80I+N{78>J?cG!V(ZX zYZ0!#oT!(|F8sDuOV|R)Nti*M7nScqM>3LEjVj3f_tF!TJ}2-!IhKur1mf;dbtNAA z+=HQ%q12%0u$)8+lk}I8vK9A8LLnn=FOmT0dfaoG52XZIm=wFZamcpFKW=OED)+75 zyLVJ%Qt0sgTG%G)df)%VHqoL*{_oo+Usc!h7RU^XSu1%m14Qn1oQ2#4Ki1OjC8*%@ ziGsscof+1uJ4zF?T9^kdI>{s%@`f74o-4#NaV}alK~+vPuvpC0G&vOkSLz%uX2<;SY!KK?(|o5Fdfjww;6;NiIchtzSwBMoa5k zR@#c!wB44z-#z5%D{irEOJC+6X?AD>`6Gw0+Dn+tImbnv^v7-Nz@@47VYrf5v`7}coKD} zKeEoS>Ss$>JBd0(=dwRrx+I;?vUE_d5?`}_Maj?gV^Z&8WAeyU9(QM*v46fl`ym@!d__n0)viA(wT4k=)r90p)5q zV}9bSAaS<{yxlEcO8H4L(1s9CUY$lHf?IHR@JrnH0r6-9)^hbKRtI5INb7=DM#7vUC|sEia36N^tQ5~`*>AzSA*YKTNUzjF0Jnjc^y^NVVr)} zz1qgFE4H;RjlGUkgqGgbw%B>4R$JeMbNdKoWt4V}IkwNEybOR6uoiLD0!Jn#j+o@! zQoM|?7*12?!qr+GyNYYF9l{aO4)2AmCS0R-Y_san{L6Q3X^`_T-vvb{Zc|WPs^}B= zJMi{G;0d*rfwnBv7EB14KXRHpTFo?nvyu&VHAcKZ3asF}n)E zP{L*lwz(l$Nw6`)E_23V2q3lTYEaKZFjP7q#tDYx_m2DDq>g-jTt{X*pd(Wq(xu~i zd!A@#MWUUaq;}#yZQ0I)@pgEBQai#%z zh4@4{$_UDGl&vVcQLaXz4a|_>PI;z&a$$#%Tw*Q|xeAEq&^eWXs_H7|^4PbQd3a_M z&kk0!W#^}*8j51S{vvOBrpoPZF})}D#4T*LH5*b&QVhCfv2#FsfJyyK7yLQ2Cw`RO zPhU8Vui2LYCen)%hshjVP6mO1iH~@kPg

    lQc+4iK?_DO<%o%Lyi_oYakLkP-vl) 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�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'>`8&+rSHUZnxdt)={vJ6a)o4DG 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 Date: Sat, 15 Jun 2019 18:15:07 +0300 Subject: [PATCH 2/2] fix task5 --- .../letters.css => allLetters/allLetters.css} | 2 +- src/app/allLetters/allLetters.jsx | 30 +++ src/app/allLetters/index.js | 1 + src/app/app.css | 6 +- src/app/app.jsx | 4 +- .../menuButton.css => button/button.css} | 8 +- src/app/button/button.jsx | 15 ++ src/app/button/index.js | 1 + src/app/{main => }/content/content.css | 0 src/app/content/content.jsx | 27 +++ src/app/{main => }/content/index.js | 0 .../footer.css} | 13 +- src/app/footer/footer.jsx | 15 ++ src/app/footer/index.js | 1 + src/app/header/burgerMenu/burgerMenu.css | 12 -- src/app/header/burgerMenu/burgerMenu.jsx | 15 -- src/app/header/burgerMenu/index.js | 1 - src/app/header/header.css | 15 +- src/app/header/header.jsx | 13 +- src/app/{header => }/images/cross.png | Bin src/app/{header => }/images/header-logo.svg | 0 src/app/{header => }/images/logo.jpg | Bin src/app/leftMenu/index.js | 1 + .../leftMenu.css} | 11 +- src/app/leftMenu/leftMenu.jsx | 17 ++ .../mainContent/letters => }/letter/index.js | 0 .../letters => }/letter/letter.css | 16 +- src/app/letter/letter.jsx | 49 +++++ src/app/lettersMenu/index.js | 1 + src/app/lettersMenu/lettersMenu.css | 55 +++++ src/app/lettersMenu/lettersMenu.jsx | 46 +++++ src/app/lettersState/index.js | 1 + .../letterState.css} | 4 +- src/app/lettersState/letterState.jsx | 49 +++++ src/app/mailInnerContent/index.js | 1 + .../mailInnerContent.css} | 2 +- src/app/mailInnerContent/mailInnerContent.jsx | 164 +++++++++++++++ .../scripts/letterGeneratorUtils.js | 30 +-- src/app/mailMenu/index.js | 1 + .../menuButtons.css => mailMenu/mailMenu.css} | 2 +- src/app/mailMenu/mailMenu.jsx | 19 ++ src/app/main/content/content.jsx | 28 --- .../content/contentFooter/contentFooter.css | 6 - .../content/contentFooter/contentFooter.jsx | 16 -- .../contentFooterText/contentFooterText.jsx | 11 - .../contentFooter/contentFooterText/index.js | 1 - src/app/main/content/contentFooter/index.js | 1 - .../contentHeaderMenu/contentHeaderMenu.css | 28 --- .../contentHeaderMenu/contentHeaderMenu.jsx | 23 --- .../contentHeaderMenuButton.css | 15 -- .../contentHeaderMenuButton.jsx | 13 -- .../contentHeaderMenuButton/index.js | 1 - .../main/content/contentHeaderMenu/index.js | 1 - src/app/main/content/mainContent/index.js | 1 - .../content/mainContent/letterPage/index.js | 1 - .../mainContent/letterPage/letterPage.jsx | 21 -- .../main/content/mainContent/letters/index.js | 1 - .../mainContent/letters/letter/letter.jsx | 57 ------ .../content/mainContent/letters/letters.jsx | 33 --- .../main/content/mainContent/mainContent.jsx | 51 ----- src/app/main/index.js | 1 - src/app/main/left-menu/index.js | 1 - src/app/main/left-menu/left-menu.css | 6 - src/app/main/left-menu/left-menu.jsx | 16 -- .../left-menu/menuButtons/button/index.js | 1 - .../menuButtons/button/menuButton.jsx | 15 -- src/app/main/left-menu/menuButtons/index.js | 1 - .../left-menu/menuButtons/menuButtons.jsx | 19 -- .../main/left-menu/newLetterButton/index.js | 1 - .../newLetterButton/newLetterButton.jsx | 13 -- src/app/main/main.jsx | 189 ------------------ src/app/openLetter/index.js | 1 + .../openLetter.css} | 8 +- src/app/openLetter/openLetter.jsx | 19 ++ src/app/{header => }/search/index.js | 0 src/app/{header => }/search/search.css | 2 +- src/app/{header => }/search/search.jsx | 2 +- .../txtStyle/HelveticaNeueCyr-Light.otf | Bin .../txtStyle/HelveticaNeueCyr-Medium.otf | Bin .../txtStyle/YandexSansDisplay-Thin.ttf | Bin 80 files changed, 598 insertions(+), 654 deletions(-) rename src/app/{main/content/mainContent/letters/letters.css => allLetters/allLetters.css} (75%) create mode 100644 src/app/allLetters/allLetters.jsx create mode 100644 src/app/allLetters/index.js rename src/app/{main/left-menu/menuButtons/button/menuButton.css => button/button.css} (79%) create mode 100644 src/app/button/button.jsx create mode 100644 src/app/button/index.js rename src/app/{main => }/content/content.css (100%) create mode 100644 src/app/content/content.jsx rename src/app/{main => }/content/index.js (100%) rename src/app/{main/content/contentFooter/contentFooterText/contentFooterText.css => footer/footer.css} (56%) create mode 100644 src/app/footer/footer.jsx create mode 100644 src/app/footer/index.js delete mode 100644 src/app/header/burgerMenu/burgerMenu.css delete mode 100644 src/app/header/burgerMenu/burgerMenu.jsx delete mode 100644 src/app/header/burgerMenu/index.js rename src/app/{header => }/images/cross.png (100%) rename src/app/{header => }/images/header-logo.svg (100%) rename src/app/{header => }/images/logo.jpg (100%) create mode 100644 src/app/leftMenu/index.js rename src/app/{main/left-menu/newLetterButton/newLetterButton.css => leftMenu/leftMenu.css} (69%) create mode 100644 src/app/leftMenu/leftMenu.jsx rename src/app/{main/content/mainContent/letters => }/letter/index.js (100%) rename src/app/{main/content/mainContent/letters => }/letter/letter.css (90%) create mode 100644 src/app/letter/letter.jsx create mode 100644 src/app/lettersMenu/index.js create mode 100644 src/app/lettersMenu/lettersMenu.css create mode 100644 src/app/lettersMenu/lettersMenu.jsx create mode 100644 src/app/lettersState/index.js rename src/app/{main/content/mainContent/mainContent.css => lettersState/letterState.css} (60%) create mode 100644 src/app/lettersState/letterState.jsx create mode 100644 src/app/mailInnerContent/index.js rename src/app/{main/main.css => mailInnerContent/mailInnerContent.css} (83%) create mode 100644 src/app/mailInnerContent/mailInnerContent.jsx rename src/app/{main => mailInnerContent}/scripts/letterGeneratorUtils.js (83%) create mode 100644 src/app/mailMenu/index.js rename src/app/{main/left-menu/menuButtons/menuButtons.css => mailMenu/mailMenu.css} (66%) create mode 100644 src/app/mailMenu/mailMenu.jsx delete mode 100644 src/app/main/content/content.jsx delete mode 100644 src/app/main/content/contentFooter/contentFooter.css delete mode 100644 src/app/main/content/contentFooter/contentFooter.jsx delete mode 100644 src/app/main/content/contentFooter/contentFooterText/contentFooterText.jsx delete mode 100644 src/app/main/content/contentFooter/contentFooterText/index.js delete mode 100644 src/app/main/content/contentFooter/index.js delete mode 100644 src/app/main/content/contentHeaderMenu/contentHeaderMenu.css delete mode 100644 src/app/main/content/contentHeaderMenu/contentHeaderMenu.jsx delete mode 100644 src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.css delete mode 100644 src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.jsx delete mode 100644 src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/index.js delete mode 100644 src/app/main/content/contentHeaderMenu/index.js delete mode 100644 src/app/main/content/mainContent/index.js delete mode 100644 src/app/main/content/mainContent/letterPage/index.js delete mode 100644 src/app/main/content/mainContent/letterPage/letterPage.jsx delete mode 100644 src/app/main/content/mainContent/letters/index.js delete mode 100644 src/app/main/content/mainContent/letters/letter/letter.jsx delete mode 100644 src/app/main/content/mainContent/letters/letters.jsx delete mode 100644 src/app/main/content/mainContent/mainContent.jsx delete mode 100644 src/app/main/index.js delete mode 100644 src/app/main/left-menu/index.js delete mode 100644 src/app/main/left-menu/left-menu.css delete mode 100644 src/app/main/left-menu/left-menu.jsx delete mode 100644 src/app/main/left-menu/menuButtons/button/index.js delete mode 100644 src/app/main/left-menu/menuButtons/button/menuButton.jsx delete mode 100644 src/app/main/left-menu/menuButtons/index.js delete mode 100644 src/app/main/left-menu/menuButtons/menuButtons.jsx delete mode 100644 src/app/main/left-menu/newLetterButton/index.js delete mode 100644 src/app/main/left-menu/newLetterButton/newLetterButton.jsx delete mode 100644 src/app/main/main.jsx create mode 100644 src/app/openLetter/index.js rename src/app/{main/content/mainContent/letterPage/letterPage.css => openLetter/openLetter.css} (69%) create mode 100644 src/app/openLetter/openLetter.jsx rename src/app/{header => }/search/index.js (100%) rename src/app/{header => }/search/search.css (95%) rename src/app/{header => }/search/search.jsx (76%) rename src/{ => app}/txtStyle/HelveticaNeueCyr-Light.otf (100%) rename src/{ => app}/txtStyle/HelveticaNeueCyr-Medium.otf (100%) rename src/{ => app}/txtStyle/YandexSansDisplay-Thin.ttf (100%) diff --git a/src/app/main/content/mainContent/letters/letters.css b/src/app/allLetters/allLetters.css similarity index 75% rename from src/app/main/content/mainContent/letters/letters.css rename to src/app/allLetters/allLetters.css index b187427..b1edb05 100644 --- a/src/app/main/content/mainContent/letters/letters.css +++ b/src/app/allLetters/allLetters.css @@ -1,4 +1,4 @@ -.letters { +.allLetters { display: inline-block; width: 100%; } diff --git a/src/app/allLetters/allLetters.jsx b/src/app/allLetters/allLetters.jsx new file mode 100644 index 0000000..915e733 --- /dev/null +++ b/src/app/allLetters/allLetters.jsx @@ -0,0 +1,30 @@ +import React, { Component } from 'react'; + +import './allLetters.css'; +import { Letter } from '../letter'; + +export class AllLetters extends Component { + render() { + return ( +

    + {this.props.visibleLetters.map(letter => { + return ( + + ); + })} +
    + ); + } +} diff --git a/src/app/allLetters/index.js b/src/app/allLetters/index.js new file mode 100644 index 0000000..7e2dfac --- /dev/null +++ b/src/app/allLetters/index.js @@ -0,0 +1 @@ +export * from './allLetters'; diff --git a/src/app/app.css b/src/app/app.css index 8c8b039..54d20b1 100644 --- a/src/app/app.css +++ b/src/app/app.css @@ -1,13 +1,13 @@ .app { - padding: 2% 3%; + padding: 25px 3% 2%; } @font-face { font-family: HelveticaNeue; - src: url(../txtStyle/HelveticaNeueCyr-Medium.otf); + src: url(txtStyle/HelveticaNeueCyr-Medium.otf); } @font-face { font-family: HelveticaNeueLight; - src: url(../txtStyle/HelveticaNeueCyr-Light.otf); + src: url(txtStyle/HelveticaNeueCyr-Light.otf); } diff --git a/src/app/app.jsx b/src/app/app.jsx index 09f690b..5e592bc 100644 --- a/src/app/app.jsx +++ b/src/app/app.jsx @@ -2,14 +2,14 @@ import React, { Component } from 'react'; import './app.css'; import { Header } from './header'; -import { Main } from './main'; +import { MailInnerContent } from './mailInnerContent'; export class App extends Component { render() { return (
    -
    +
    ); } diff --git a/src/app/main/left-menu/menuButtons/button/menuButton.css b/src/app/button/button.css similarity index 79% rename from src/app/main/left-menu/menuButtons/button/menuButton.css rename to src/app/button/button.css index 5103207..59c9060 100644 --- a/src/app/main/left-menu/menuButtons/button/menuButton.css +++ b/src/app/button/button.css @@ -1,4 +1,4 @@ -.left-menu__text-menu { +.button__textMenu { width: 137px; height: 13px; padding-top: 4px; @@ -13,17 +13,17 @@ list-style-type: none; } -.left-menu__text-menu:hover { +.button__textMenu:hover { background-color: #cdd6e4; border-radius: 3px; color: #555555; font-weight: bold; } -.main-part_unhighlight { +.button_unhighlight { color: inherit; } -.main-part__del-line { +.button__delLine { text-decoration: none; } diff --git a/src/app/button/button.jsx b/src/app/button/button.jsx new file mode 100644 index 0000000..d773261 --- /dev/null +++ b/src/app/button/button.jsx @@ -0,0 +1,15 @@ +import React, { Component } from 'react'; + +import './button.css'; + +export class Button extends Component { + render() { + return ( +
  • + + {this.props.name} + +
  • + ); + } +} diff --git a/src/app/button/index.js b/src/app/button/index.js new file mode 100644 index 0000000..eaf5eea --- /dev/null +++ b/src/app/button/index.js @@ -0,0 +1 @@ +export * from './button'; diff --git a/src/app/main/content/content.css b/src/app/content/content.css similarity index 100% rename from src/app/main/content/content.css rename to src/app/content/content.css diff --git a/src/app/content/content.jsx b/src/app/content/content.jsx new file mode 100644 index 0000000..4cc0bc9 --- /dev/null +++ b/src/app/content/content.jsx @@ -0,0 +1,27 @@ +import React, { Component } from 'react'; + +import './content.css'; +import { LettersMenu } from '../lettersMenu'; +import { LetterState } from '../lettersState'; +import { Footer } from '../footer'; + +export class Content extends Component { + render() { + return ( +
    + + +
    +
    + ); + } +} diff --git a/src/app/main/content/index.js b/src/app/content/index.js similarity index 100% rename from src/app/main/content/index.js rename to src/app/content/index.js diff --git a/src/app/main/content/contentFooter/contentFooterText/contentFooterText.css b/src/app/footer/footer.css similarity index 56% rename from src/app/main/content/contentFooter/contentFooterText/contentFooterText.css rename to src/app/footer/footer.css index 8d84b29..0484ee2 100644 --- a/src/app/main/content/contentFooter/contentFooterText/contentFooterText.css +++ b/src/app/footer/footer.css @@ -1,4 +1,11 @@ -.content-footer-text__text-endline { +.footer { + width: 100%; + height: 37px; + + border-top: solid 1px #e2e2e2; +} + +.footerText__textEndline { height: 12px; margin-right: 45px; color: #9b9b9b; @@ -8,10 +15,10 @@ line-height: 40px; } -.content-footer-text_unhighlight { +.footerText_unhighlight { color: inherit; } -.content-footer-text__del-line { +.footerText__delLine { text-decoration: none; } diff --git a/src/app/footer/footer.jsx b/src/app/footer/footer.jsx new file mode 100644 index 0000000..fd7800f --- /dev/null +++ b/src/app/footer/footer.jsx @@ -0,0 +1,15 @@ +import React, { Component } from 'react'; + +import './footer.css'; + +export class Footer extends Component { + render() { + return ( + + ); + } +} diff --git a/src/app/footer/index.js b/src/app/footer/index.js new file mode 100644 index 0000000..a058eae --- /dev/null +++ b/src/app/footer/index.js @@ -0,0 +1 @@ +export * from './footer'; diff --git a/src/app/header/burgerMenu/burgerMenu.css b/src/app/header/burgerMenu/burgerMenu.css deleted file mode 100644 index 3e6985a..0000000 --- a/src/app/header/burgerMenu/burgerMenu.css +++ /dev/null @@ -1,12 +0,0 @@ -.burger-menu { - display: inline-block; - margin-top: 7px; -} - -.burger-menu__line { - width: 20px; - height: 3px; - margin-top: 5px; - margin-bottom: 5px; - background-color: #000000; -} diff --git a/src/app/header/burgerMenu/burgerMenu.jsx b/src/app/header/burgerMenu/burgerMenu.jsx deleted file mode 100644 index b499a50..0000000 --- a/src/app/header/burgerMenu/burgerMenu.jsx +++ /dev/null @@ -1,15 +0,0 @@ -import React, { Component } from 'react'; - -import './burgerMenu.css'; - -export class BurgerMenu extends Component { - render() { - return ( -
    -
    -
    -
    -
    - ); - } -} diff --git a/src/app/header/burgerMenu/index.js b/src/app/header/burgerMenu/index.js deleted file mode 100644 index 42282b5..0000000 --- a/src/app/header/burgerMenu/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './burgerMenu'; diff --git a/src/app/header/header.css b/src/app/header/header.css index bd78ffb..f0eb6e3 100644 --- a/src/app/header/header.css +++ b/src/app/header/header.css @@ -5,10 +5,23 @@ height: 5%; } -.header__yp-logo { +.header__ypLogo { display: inline-block; width: 200px; margin-left: 11px; font-size: 170%; vertical-align: text-bottom; } + +.header__burgerMenu { + display: inline-block; + margin-top: 7px; +} + +.header__line { + width: 20px; + height: 3px; + margin-top: 5px; + margin-bottom: 5px; + background-color: #000000; +} diff --git a/src/app/header/header.jsx b/src/app/header/header.jsx index 89d200a..4affdef 100644 --- a/src/app/header/header.jsx +++ b/src/app/header/header.jsx @@ -1,16 +1,19 @@ import React, { Component } from 'react'; import './header.css'; -import logo from './images/header-logo.svg'; -import { BurgerMenu } from './burgerMenu'; -import { Search } from './search'; +import { Search } from '../search'; +import logo from '../images/header-logo.svg'; export class Header extends Component { render() { return (
    - - logo +
    +
    +
    +
    +
    + logo
    ); diff --git a/src/app/header/images/cross.png b/src/app/images/cross.png similarity index 100% rename from src/app/header/images/cross.png rename to src/app/images/cross.png diff --git a/src/app/header/images/header-logo.svg b/src/app/images/header-logo.svg similarity index 100% rename from src/app/header/images/header-logo.svg rename to src/app/images/header-logo.svg diff --git a/src/app/header/images/logo.jpg b/src/app/images/logo.jpg similarity index 100% rename from src/app/header/images/logo.jpg rename to src/app/images/logo.jpg diff --git a/src/app/leftMenu/index.js b/src/app/leftMenu/index.js new file mode 100644 index 0000000..45e2691 --- /dev/null +++ b/src/app/leftMenu/index.js @@ -0,0 +1 @@ +export * from './leftMenu'; diff --git a/src/app/main/left-menu/newLetterButton/newLetterButton.css b/src/app/leftMenu/leftMenu.css similarity index 69% rename from src/app/main/left-menu/newLetterButton/newLetterButton.css rename to src/app/leftMenu/leftMenu.css index 3e8f8e5..d8f6caa 100644 --- a/src/app/main/left-menu/newLetterButton/newLetterButton.css +++ b/src/app/leftMenu/leftMenu.css @@ -1,4 +1,11 @@ -.left-menu__button { +.leftMenu { + display: inline-block; + width: 147px; + height: 100%; + vertical-align: top; +} + +.leftMenu__button { width: 147px; height: 32px; margin-bottom: 8px; @@ -8,7 +15,7 @@ border-radius: 3px; } -.left-menu__text-write { +.leftMenu__textWrite { display: inline-block; width: 56px; height: 15px; diff --git a/src/app/leftMenu/leftMenu.jsx b/src/app/leftMenu/leftMenu.jsx new file mode 100644 index 0000000..f91a36e --- /dev/null +++ b/src/app/leftMenu/leftMenu.jsx @@ -0,0 +1,17 @@ +import React, { Component } from 'react'; + +import './leftMenu.css'; +import { MailMenu } from '../mailMenu'; + +export class LeftMenu extends Component { + render() { + return ( +
    + + +
    + ); + } +} diff --git a/src/app/main/content/mainContent/letters/letter/index.js b/src/app/letter/index.js similarity index 100% rename from src/app/main/content/mainContent/letters/letter/index.js rename to src/app/letter/index.js diff --git a/src/app/main/content/mainContent/letters/letter/letter.css b/src/app/letter/letter.css similarity index 90% rename from src/app/main/content/mainContent/letters/letter/letter.css rename to src/app/letter/letter.css index 966c314..1be3627 100644 --- a/src/app/main/content/mainContent/letters/letter/letter.css +++ b/src/app/letter/letter.css @@ -5,12 +5,12 @@ border-bottom: solid 1px #e2e2e2; } -.letter__animated-add-letter { +.letter__animatedAddLetter { animation-duration: 2s; animation-name: add-new-letter; } -.letter__animated-delete-letter { +.letter__animatedDeleteLetter { animation-duration: 1s; animation-name: delete-letter; } @@ -37,22 +37,22 @@ background-clip: content-box; } -.letter__del-line { +.letter__delLine { text-decoration: none; } -.letter__y-logo { +.letter__yLogo { display: inline-block; width: 37px; margin-left: 10px; border-radius: 50%; } -.letter_is-bold { +.letter_isBold { font-weight: bold; } -.letter__text-sender-letter { +.letter__textSenderLetter { display: inline-block; overflow: hidden; width: 20%; @@ -67,7 +67,7 @@ white-space: nowrap; } -.letter__text-letter { +.letter__textLetter { display: inline-block; overflow: hidden; width: 40%; @@ -82,7 +82,7 @@ white-space: nowrap; } -.letter__mark-new-letter { +.letter__markNewLetter { display: inline-block; width: 10px; height: 10px; diff --git a/src/app/letter/letter.jsx b/src/app/letter/letter.jsx new file mode 100644 index 0000000..968b50a --- /dev/null +++ b/src/app/letter/letter.jsx @@ -0,0 +1,49 @@ +import React, { Component } from 'react'; + +import './letter.css'; +import logo from '../images/logo.jpg'; + +export class Letter extends Component { + constructor(props) { + super(props); + + this.changeAnimation = this.changeAnimation.bind(this); + } + + changeAnimation() { + if (this.props.changeAnimation) { + this.props.deleteChosenLetter(this.props.id); + } + } + + render() { + return ( +
    + this.props.switchLetterCheckbox(this.props.id)} + /> + this.props.openLetter(this.props.text)} + > + + {this.props.author} + + ); + } +} diff --git a/src/app/lettersMenu/index.js b/src/app/lettersMenu/index.js new file mode 100644 index 0000000..9dd0de6 --- /dev/null +++ b/src/app/lettersMenu/index.js @@ -0,0 +1 @@ +export * from './lettersMenu'; diff --git a/src/app/lettersMenu/lettersMenu.css b/src/app/lettersMenu/lettersMenu.css new file mode 100644 index 0000000..a2f84f4 --- /dev/null +++ b/src/app/lettersMenu/lettersMenu.css @@ -0,0 +1,55 @@ +.lettersMenu { + width: 100%; + height: 37px; + padding: 0; + margin: 0; + + border-bottom: solid 1px #e2e2e2; +} + +.lettersMenu__checkbox { + display: inline-block; + width: 16px; + height: 16px; + padding: 2px; + margin-top: 11px; + margin-left: 20px; + + border: solid 1px rgba(0, 0, 0, 0.15); + -webkit-appearance: none; + background-color: #ffffff; + border-radius: 3px; + outline: none; + vertical-align: top; +} + +.lettersMenu__checkbox:checked { + display: inline-block; + background: #e2e2e2; + background-clip: content-box; +} + +.lettersMenu__horizontalPosition { + display: inline; + list-style-type: none; +} + +.lettersMenu__button__textTitle { + display: inline-block; + height: 16px; + margin-top: 11px; + margin-left: 25px; + + border: none; + background: none; + color: #cccccc; + font-family: HelveticaNeue; + font-size: 13px; + line-height: 20px; + outline: none; + vertical-align: top; +} + +.lettersMenu__button__delLine { + text-decoration: none; +} diff --git a/src/app/lettersMenu/lettersMenu.jsx b/src/app/lettersMenu/lettersMenu.jsx new file mode 100644 index 0000000..8803d89 --- /dev/null +++ b/src/app/lettersMenu/lettersMenu.jsx @@ -0,0 +1,46 @@ +import React, { Component } from 'react'; + +import './lettersMenu.css'; + +export class LettersMenu extends Component { + render() { + return ( +
      +
    • + +
    • +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • + +
    • +
    + ); + } +} diff --git a/src/app/lettersState/index.js b/src/app/lettersState/index.js new file mode 100644 index 0000000..32f343b --- /dev/null +++ b/src/app/lettersState/index.js @@ -0,0 +1 @@ +export * from './letterState'; diff --git a/src/app/main/content/mainContent/mainContent.css b/src/app/lettersState/letterState.css similarity index 60% rename from src/app/main/content/mainContent/mainContent.css rename to src/app/lettersState/letterState.css index 9cea465..9591015 100644 --- a/src/app/main/content/mainContent/mainContent.css +++ b/src/app/lettersState/letterState.css @@ -1,8 +1,8 @@ -.main-content { +.letterState { width: 100%; min-height: 524px; } -.main-content_show:target { +.letterState_show:target { display: inline-block; } diff --git a/src/app/lettersState/letterState.jsx b/src/app/lettersState/letterState.jsx new file mode 100644 index 0000000..bba3f68 --- /dev/null +++ b/src/app/lettersState/letterState.jsx @@ -0,0 +1,49 @@ +import React, { Component } from 'react'; + +import './letterState.css'; +import { OpenLetter } from '../openLetter'; +import { AllLetters } from '../allLetters'; + +export class LetterState extends Component { + constructor(props) { + super(props); + + this.state = { + openLetter: false, + contentLetter: '' + }; + this.closeLetter = this.closeLetter.bind(this); + this.openLetter = this.openLetter.bind(this); + } + + openLetter(text) { + this.setState({ + openLetter: true, + contentLetter: text + }); + } + + closeLetter() { + this.setState({ + openLetter: false + }); + } + + render() { + return this.state.openLetter ? ( +
    + +
    + ) : ( +
    + +
    + ); + } +} diff --git a/src/app/mailInnerContent/index.js b/src/app/mailInnerContent/index.js new file mode 100644 index 0000000..1babe3c --- /dev/null +++ b/src/app/mailInnerContent/index.js @@ -0,0 +1 @@ +export * from './mailInnerContent'; diff --git a/src/app/main/main.css b/src/app/mailInnerContent/mailInnerContent.css similarity index 83% rename from src/app/main/main.css rename to src/app/mailInnerContent/mailInnerContent.css index afd9b99..156ad4a 100644 --- a/src/app/main/main.css +++ b/src/app/mailInnerContent/mailInnerContent.css @@ -1,4 +1,4 @@ -.main { +.mailInnerContent { display: inline-block; width: 100%; min-width: 800px; diff --git a/src/app/mailInnerContent/mailInnerContent.jsx b/src/app/mailInnerContent/mailInnerContent.jsx new file mode 100644 index 0000000..4e819c8 --- /dev/null +++ b/src/app/mailInnerContent/mailInnerContent.jsx @@ -0,0 +1,164 @@ +import React, { Component } from 'react'; + +import './mailInnerContent.css'; +import { LeftMenu } from '../leftMenu'; +import { Content } from '../content'; +import { + generateDate, + generateName, + generateContent, + generateRandomCount +} from './scripts/letterGeneratorUtils'; + +const MAX_COUNT = 30; + +export class MailInnerContent extends Component { + static async generateLetter() { + const author = generateName(); + const text = await generateContent(); + const subject = text[0].substr(0, 45); + const date = generateDate(); + return { author, text, subject, date }; + } + + constructor(props) { + super(props); + + this.state = { + counter: 0, + letters: [], + visibleLetters: [], + selectAll: false, + markedLetters: {} + }; + this.deleteChosenLetter = this.deleteChosenLetter.bind(this); + this.markLettersToDelete = this.markLettersToDelete.bind(this); + this.switchLetterCheckbox = this.switchLetterCheckbox.bind(this); + this.chooseAllLetters = this.chooseAllLetters.bind(this); + this.newMail = this.newMail.bind(this); + this.GenerateNewLetter(); + } + + deleteChosenLetter(id) { + let count = 0; + const tmpVisibleLetters = []; + const tmpLetters = this.state.letters.filter(letter => letter.id !== id); + tmpLetters.forEach(letter => { + const tmp = letter; + if (MAX_COUNT > count) { + tmpVisibleLetters.push(tmp); + count++; + } + }); + this.setState(() => { + return { letters: tmpLetters, visibleLetters: tmpVisibleLetters }; + }); + } + + chooseAllLetters() { + const tmpVisibleLetters = this.state.visibleLetters; + const newMarkedLetters = this.state.markedLetters; + for (let i = 0; i < tmpVisibleLetters.length; i++) { + newMarkedLetters[tmpVisibleLetters[i].id] = !this.state.selectAll; + } + this.setState(state => { + return { + visibleLetters: tmpVisibleLetters, + selectAll: !state.selectAll, + markedLetters: newMarkedLetters + }; + }); + } + + async newMail() { + const { author, text, subject, date } = await MailInnerContent.generateLetter(); + const newMarkedLetters = this.state.markedLetters; + const id = `${this.state.counter}`; + this.setState(state => { + return { counter: state.counter + 1 }; + }); + newMarkedLetters[id] = false; + const tmpLetters = this.state.letters; + const tmpVisibleLetters = []; + const letter = { + id, + author, + subject, + text, + date, + changeAnimation: false, + isSelected: false + }; + tmpVisibleLetters.push(letter); + for (let i = 0; i < tmpLetters.length; i++) { + if (i < MAX_COUNT - 1) { + tmpVisibleLetters.push(tmpLetters[i]); + } + } + this.setState(state => { + return { + visibleLetters: tmpVisibleLetters, + letters: [letter].concat(state.letters), + markedLetters: newMarkedLetters + }; + }); + } + + sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } + + async GenerateNewLetter() { + const fiveMinute = 300000; + const minTime = 10; + const maxTime = 600000; + let previous = 300000; + await this.newMail(); + previous = Math.max(fiveMinute - previous, generateRandomCount(minTime, maxTime)); + await this.sleep(previous); + this.GenerateNewLetter(); + } + + markLettersToDelete() { + const tmpLetters = this.state.letters; + const tmpVisibleLetters = this.state.visibleLetters; + for (let i = 0; i < tmpLetters.length; i++) { + if (this.state.markedLetters[tmpLetters[i].id]) { + tmpVisibleLetters[i].changeAnimation = true; + tmpLetters[i].changeAnimation = true; + } + } + this.setState(() => { + return { + visibleLetters: tmpVisibleLetters, + letters: tmpLetters, + selectAll: false + }; + }); + } + + switchLetterCheckbox(id) { + const newMarkedLetters = this.state.markedLetters; + newMarkedLetters[id] = !newMarkedLetters[id]; + this.setState(() => { + return { markedLetters: newMarkedLetters }; + }); + } + + render() { + return ( +
    + + +
    + ); + } +} diff --git a/src/app/main/scripts/letterGeneratorUtils.js b/src/app/mailInnerContent/scripts/letterGeneratorUtils.js similarity index 83% rename from src/app/main/scripts/letterGeneratorUtils.js rename to src/app/mailInnerContent/scripts/letterGeneratorUtils.js index 0458ee4..87a1ff5 100644 --- a/src/app/main/scripts/letterGeneratorUtils.js +++ b/src/app/mailInnerContent/scripts/letterGeneratorUtils.js @@ -1,3 +1,5 @@ +const months = ['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек']; + const names = [ 'Фотин', 'Евтихий', @@ -64,32 +66,30 @@ const surnames = [ 'Храпов' ]; -const months = ['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек']; - -export const generateRandomInt = (from, to) => { +export const generateRandomCount = (from, to) => { return Math.floor(Math.random() * (to - from) + from); }; -const getRandomElement = (array) => { - return array[generateRandomInt(0, array.length)]; -}; - -export const generateDate = () => { - const date = new Date(); - return `${date.getDate()} ${months[date.getMonth()]}`; +const getRandomObj = (array) => { + return array[generateRandomCount(0, array.length)]; }; -export const generateAuthor = () => { - const name = getRandomElement(names); - const surname = getRandomElement(surnames); +export const generateName = () => { + const name = getRandomObj(names); + const surname = getRandomObj(surnames); return `${name} ${surname}`; }; -export const generateText = async () => { - const paragraphsCount = generateRandomInt(3, 5); +export const generateContent = async () => { + const paragraphsCount = generateRandomCount(3, 10); const text = await fetch( `https://baconipsum.com/api/?type=meat&formaat=json¶s=${paragraphsCount}` ); return text.json(); }; + +export const generateDate = () => { + const date = new Date(); + return `${date.getDate()} ${months[date.getMonth()]}`; +}; diff --git a/src/app/mailMenu/index.js b/src/app/mailMenu/index.js new file mode 100644 index 0000000..7451256 --- /dev/null +++ b/src/app/mailMenu/index.js @@ -0,0 +1 @@ +export * from './mailMenu'; diff --git a/src/app/main/left-menu/menuButtons/menuButtons.css b/src/app/mailMenu/mailMenu.css similarity index 66% rename from src/app/main/left-menu/menuButtons/menuButtons.css rename to src/app/mailMenu/mailMenu.css index 076e07b..0a08017 100644 --- a/src/app/main/left-menu/menuButtons/menuButtons.css +++ b/src/app/mailMenu/mailMenu.css @@ -1,4 +1,4 @@ -.left-menu__actions-block { +.mailMenu__actionsBlock { width: 100%; margin-top: 0; margin-left: -30px; diff --git a/src/app/mailMenu/mailMenu.jsx b/src/app/mailMenu/mailMenu.jsx new file mode 100644 index 0000000..48c3cfe --- /dev/null +++ b/src/app/mailMenu/mailMenu.jsx @@ -0,0 +1,19 @@ +import React, { Component } from 'react'; + +import './mailMenu.css'; +import { Button } from '../button'; + +export class MailMenu extends Component { + render() { + return ( +
      +
    + ); + } +} diff --git a/src/app/main/content/content.jsx b/src/app/main/content/content.jsx deleted file mode 100644 index 063668c..0000000 --- a/src/app/main/content/content.jsx +++ /dev/null @@ -1,28 +0,0 @@ -import React, { Component } from 'react'; - -import './content.css'; -import { ContentHeaderMenu } from './contentHeaderMenu'; -import { MainContent } from './mainContent'; -import { ContentFooter } from './contentFooter'; - -export class Content extends Component { - render() { - return ( -
    - - - -
    - ); - } -} diff --git a/src/app/main/content/contentFooter/contentFooter.css b/src/app/main/content/contentFooter/contentFooter.css deleted file mode 100644 index 1aa1b10..0000000 --- a/src/app/main/content/contentFooter/contentFooter.css +++ /dev/null @@ -1,6 +0,0 @@ -.content-footer { - width: 100%; - height: 37px; - - border-top: solid 1px #e2e2e2; -} diff --git a/src/app/main/content/contentFooter/contentFooter.jsx b/src/app/main/content/contentFooter/contentFooter.jsx deleted file mode 100644 index 7871a12..0000000 --- a/src/app/main/content/contentFooter/contentFooter.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import React, { Component } from 'react'; - -import './contentFooter.css'; -import { ContentFooterText } from './contentFooterText'; - -export class ContentFooter extends Component { - render() { - return ( -
    - - - -
    - ); - } -} diff --git a/src/app/main/content/contentFooter/contentFooterText/contentFooterText.jsx b/src/app/main/content/contentFooter/contentFooterText/contentFooterText.jsx deleted file mode 100644 index 321bd88..0000000 --- a/src/app/main/content/contentFooter/contentFooterText/contentFooterText.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import React, { Component } from 'react'; - -import './contentFooterText.css'; - -export class ContentFooterText extends Component { - render() { - return ( - {this.props.text} - ); - } -} diff --git a/src/app/main/content/contentFooter/contentFooterText/index.js b/src/app/main/content/contentFooter/contentFooterText/index.js deleted file mode 100644 index 68b83ee..0000000 --- a/src/app/main/content/contentFooter/contentFooterText/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './contentFooterText'; diff --git a/src/app/main/content/contentFooter/index.js b/src/app/main/content/contentFooter/index.js deleted file mode 100644 index 9c7f280..0000000 --- a/src/app/main/content/contentFooter/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './contentFooter'; diff --git a/src/app/main/content/contentHeaderMenu/contentHeaderMenu.css b/src/app/main/content/contentHeaderMenu/contentHeaderMenu.css deleted file mode 100644 index 7c6baab..0000000 --- a/src/app/main/content/contentHeaderMenu/contentHeaderMenu.css +++ /dev/null @@ -1,28 +0,0 @@ -.content-header-menu { - width: 100%; - height: 37px; - - border-bottom: solid 1px #e2e2e2; -} - -.content-header-menu__checkbox { - display: inline-block; - width: 16px; - height: 16px; - padding: 2px; - margin-top: 11px; - margin-left: 20px; - - border: solid 1px rgba(0, 0, 0, 0.15); - -webkit-appearance: none; - background-color: #ffffff; - border-radius: 3px; - outline: none; - vertical-align: top; -} - -.content-header-menu__checkbox:checked { - display: inline-block; - background: #e2e2e2; - background-clip: content-box; -} diff --git a/src/app/main/content/contentHeaderMenu/contentHeaderMenu.jsx b/src/app/main/content/contentHeaderMenu/contentHeaderMenu.jsx deleted file mode 100644 index 1cb658f..0000000 --- a/src/app/main/content/contentHeaderMenu/contentHeaderMenu.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React, { Component } from 'react'; - -import './contentHeaderMenu.css'; -import { ContentHeaderMenuButton } from './contentHeaderMenuButton'; - -export class ContentHeaderMenu extends Component { - render() { - return ( -
    - - - this.props.deleteLetters()} /> - - -
    - ); - } -} diff --git a/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.css b/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.css deleted file mode 100644 index 56b2128..0000000 --- a/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.css +++ /dev/null @@ -1,15 +0,0 @@ -.content-header-menu-button__text-title { - display: inline-block; - height: 16px; - margin-top: 11px; - margin-left: 25px; - color: #cccccc; - font-family: HelveticaNeue; - font-size: 13px; - line-height: 20px; - vertical-align: top; -} - -.content-header-menu-button__del-line { - text-decoration: none; -} diff --git a/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.jsx b/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.jsx deleted file mode 100644 index 0e4a790..0000000 --- a/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/contentHeaderMenuButton.jsx +++ /dev/null @@ -1,13 +0,0 @@ -import React, { Component } from 'react'; - -import './contentHeaderMenuButton.css'; - -export class ContentHeaderMenuButton extends Component { - render() { - return ( - - {this.props.name} - - ); - } -} diff --git a/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/index.js b/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/index.js deleted file mode 100644 index 7b241ab..0000000 --- a/src/app/main/content/contentHeaderMenu/contentHeaderMenuButton/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './contentHeaderMenuButton'; diff --git a/src/app/main/content/contentHeaderMenu/index.js b/src/app/main/content/contentHeaderMenu/index.js deleted file mode 100644 index 8eabdad..0000000 --- a/src/app/main/content/contentHeaderMenu/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './contentHeaderMenu'; diff --git a/src/app/main/content/mainContent/index.js b/src/app/main/content/mainContent/index.js deleted file mode 100644 index ff15f8a..0000000 --- a/src/app/main/content/mainContent/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './mainContent'; diff --git a/src/app/main/content/mainContent/letterPage/index.js b/src/app/main/content/mainContent/letterPage/index.js deleted file mode 100644 index 2789729..0000000 --- a/src/app/main/content/mainContent/letterPage/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './letterPage'; diff --git a/src/app/main/content/mainContent/letterPage/letterPage.jsx b/src/app/main/content/mainContent/letterPage/letterPage.jsx deleted file mode 100644 index 1c4f3f4..0000000 --- a/src/app/main/content/mainContent/letterPage/letterPage.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import React, { Component } from 'react'; - -import './letterPage.css'; -import cross from '../../../../header/images/cross.png'; - -export class LetterPage extends Component { - render() { - return ( -
    - - - -
    - {this.props.text.map((paragraph, index) => { - return

    {paragraph}

    ; - })} -
    -
    - ); - } -} diff --git a/src/app/main/content/mainContent/letters/index.js b/src/app/main/content/mainContent/letters/index.js deleted file mode 100644 index de36da6..0000000 --- a/src/app/main/content/mainContent/letters/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './letters'; diff --git a/src/app/main/content/mainContent/letters/letter/letter.jsx b/src/app/main/content/mainContent/letters/letter/letter.jsx deleted file mode 100644 index 02ba360..0000000 --- a/src/app/main/content/mainContent/letters/letter/letter.jsx +++ /dev/null @@ -1,57 +0,0 @@ -import React, { Component } from 'react'; - -import './letter.css'; -import logo from '../../../../../header/images/logo.jpg'; - -export class Letter extends Component { - constructor(props) { - super(props); - - this.makeClassName = this.makeClassName.bind(this); - this.deleteAnimation = this.deleteAnimation.bind(this); - } - - makeClassName() { - const className = ['letter']; - if (this.props.addAnimation) { - className.push('letter__animated-add-letter'); - } - if (this.props.deleteAnimation) { - className.push('letter__animated-delete-letter'); - } - return className.join(' '); - } - - deleteAnimation() { - if (this.props.addAnimation) { - this.props.removeAnimation(this.props.id); - } - if (this.props.deleteAnimation) { - this.props.deleteLetter(this.props.id); - } - } - - render() { - return ( -
    - this.props.changeCheckbox(this.props.id)} - /> - this.props.openLetter(this.props.text)} - > - - {this.props.author} - - ); - } -} diff --git a/src/app/main/content/mainContent/letters/letters.jsx b/src/app/main/content/mainContent/letters/letters.jsx deleted file mode 100644 index b07e5e2..0000000 --- a/src/app/main/content/mainContent/letters/letters.jsx +++ /dev/null @@ -1,33 +0,0 @@ -import React, { Component } from 'react'; - -import './letters.css'; -import { Letter } from './letter'; - -export class Letters extends Component { - render() { - return ( -
    - {this.props.letters.map(letter => { - if (letter.isVisible) - return ( - - ); - })} -
    - ); - } -} diff --git a/src/app/main/content/mainContent/mainContent.jsx b/src/app/main/content/mainContent/mainContent.jsx deleted file mode 100644 index f6b26da..0000000 --- a/src/app/main/content/mainContent/mainContent.jsx +++ /dev/null @@ -1,51 +0,0 @@ -import React, { Component } from 'react'; - -import './mainContent.css'; -import { LetterPage } from './letterPage'; -import { Letters } from './letters'; - -export class MainContent extends Component { - constructor(props) { - super(props); - - this.state = { - isLetterOpened: false, - openedLetterText: null - }; - this.closeLetter = this.closeLetter.bind(this); - this.openLetter = this.openLetter.bind(this); - } - - openLetter(text) { - this.setState({ - isLetterOpened: true, - openedLetterText: text - }); - } - - closeLetter() { - this.setState({ - isLetterOpened: false, - openedLetterText: null - }); - } - - render() { - return this.state.isLetterOpened ? ( -
    - -
    - ) : ( -
    - -
    - ); - } -} diff --git a/src/app/main/index.js b/src/app/main/index.js deleted file mode 100644 index aad1ca8..0000000 --- a/src/app/main/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './main'; diff --git a/src/app/main/left-menu/index.js b/src/app/main/left-menu/index.js deleted file mode 100644 index 4eed47b..0000000 --- a/src/app/main/left-menu/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './left-menu'; diff --git a/src/app/main/left-menu/left-menu.css b/src/app/main/left-menu/left-menu.css deleted file mode 100644 index 3b2e504..0000000 --- a/src/app/main/left-menu/left-menu.css +++ /dev/null @@ -1,6 +0,0 @@ -.left-menu { - display: inline-block; - width: 147px; - height: 100%; - vertical-align: top; -} diff --git a/src/app/main/left-menu/left-menu.jsx b/src/app/main/left-menu/left-menu.jsx deleted file mode 100644 index ed07c86..0000000 --- a/src/app/main/left-menu/left-menu.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import React, { Component } from 'react'; - -import './left-menu.css'; -import { MenuButtons } from './menuButtons'; -import { NewLetterButton } from './newLetterButton'; - -export class Menu extends Component { - render() { - return ( -
    - - -
    - ); - } -} diff --git a/src/app/main/left-menu/menuButtons/button/index.js b/src/app/main/left-menu/menuButtons/button/index.js deleted file mode 100644 index 3da80bb..0000000 --- a/src/app/main/left-menu/menuButtons/button/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './menuButton'; diff --git a/src/app/main/left-menu/menuButtons/button/menuButton.jsx b/src/app/main/left-menu/menuButtons/button/menuButton.jsx deleted file mode 100644 index 4a6bb55..0000000 --- a/src/app/main/left-menu/menuButtons/button/menuButton.jsx +++ /dev/null @@ -1,15 +0,0 @@ -import React, { Component } from 'react'; - -import './menuButton.css'; - -export class MenuButton extends Component { - render() { - return ( -
  • - - {this.props.name} - -
  • - ); - } -} diff --git a/src/app/main/left-menu/menuButtons/index.js b/src/app/main/left-menu/menuButtons/index.js deleted file mode 100644 index 1afa0fb..0000000 --- a/src/app/main/left-menu/menuButtons/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './menuButtons'; diff --git a/src/app/main/left-menu/menuButtons/menuButtons.jsx b/src/app/main/left-menu/menuButtons/menuButtons.jsx deleted file mode 100644 index d175cf9..0000000 --- a/src/app/main/left-menu/menuButtons/menuButtons.jsx +++ /dev/null @@ -1,19 +0,0 @@ -import React, { Component } from 'react'; - -import './menuButtons.css'; -import { MenuButton } from './button/menuButton'; - -export class MenuButtons extends Component { - render() { - return ( -
      - - - - - - -
    - ); - } -} diff --git a/src/app/main/left-menu/newLetterButton/index.js b/src/app/main/left-menu/newLetterButton/index.js deleted file mode 100644 index 75f2a5a..0000000 --- a/src/app/main/left-menu/newLetterButton/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './newLetterButton'; diff --git a/src/app/main/left-menu/newLetterButton/newLetterButton.jsx b/src/app/main/left-menu/newLetterButton/newLetterButton.jsx deleted file mode 100644 index 5b05a09..0000000 --- a/src/app/main/left-menu/newLetterButton/newLetterButton.jsx +++ /dev/null @@ -1,13 +0,0 @@ -import React, { Component } from 'react'; - -import './newLetterButton.css'; - -export class NewLetterButton extends Component { - render() { - return ( - - ); - } -} diff --git a/src/app/main/main.jsx b/src/app/main/main.jsx deleted file mode 100644 index 5434c3e..0000000 --- a/src/app/main/main.jsx +++ /dev/null @@ -1,189 +0,0 @@ -import React, { Component } from 'react'; - -import './main.css'; -import { Menu } from './left-menu'; -import { Content } from './content'; -import { - generateDate, - generateAuthor, - generateText, - generateRandomInt -} from './scripts/letterGeneratorUtils'; - -const MAX_LETTERS = 30; - -export class Main extends Component { - last = 300000; - - constructor(props) { - super(props); - - this.state = { - letters: [], - counter: 0, - isAllChecked: false, - checkedLetterIds: {} - }; - this.deleteLetters = this.deleteLetters.bind(this); - this.deleteLetter = this.deleteLetter.bind(this); - this.removeAnimation = this.removeAnimation.bind(this); - this.selectAll = this.selectAll.bind(this); - this.changeCheckbox = this.changeCheckbox.bind(this); - this.newMail = this.newMail.bind(this); - this.GenerateLetters(); - } - - removeLetterById = (letters, id) => { - let newLetters = letters; - newLetters = newLetters.filter(letter => letter.id !== id); - let count = 0; - for (let i = 0; i < newLetters.length; i++) { - if (count < MAX_LETTERS) { - newLetters[i].isVisible = true; - count++; - } else { - newLetters[i].isVisible = false; - } - } - return newLetters; - }; - - setChecked = (id, checked) => { - const newChecked = checked; - newChecked[id] = !newChecked[id]; - return newChecked; - }; - - changeCheckbox(id) { - this.setState(state => { - return { checkedLetterIds: this.setChecked(id, state.checkedLetterIds) }; - }); - } - - selectAll() { - const newCheckedLetterIds = this.state.checkedLetterIds; - this.state.letters.forEach(letter => { - if (letter.isVisible) { - newCheckedLetterIds[letter.id] = !this.state.isAllChecked; - } - }); - this.setState(state => { - return { - isAllChecked: !state.isAllChecked, - checkedLetterIds: newCheckedLetterIds - }; - }); - } - - deleteLetters() { - const oldLetters = this.state.letters; - const newLetters = oldLetters.map(letter => { - const newLetter = letter; - if (this.state.checkedLetterIds[newLetter.id]) { - newLetter.deleteAnimation = true; - } - return newLetter; - }); - - this.setState({ - letters: newLetters, - isAllChecked: false - }); - } - - async newMail() { - const id = `${this.state.counter}`; - this.setState(state => { - return { counter: state.counter + 1 }; - }); - - const author = generateAuthor(); - const text = await generateText(); - const subject = text[0].split('.')[0].substr(3); - const date = generateDate(); - - const newCheckedLetterIds = this.state.checkedLetterIds; - newCheckedLetterIds[id] = false; - const newLetters = this.state.letters; - - for (let i = 0; i < newLetters.length; i++) { - newLetters[i].isVisible = i < MAX_LETTERS - 1; - } - - this.setState(state => { - return { - letters: [ - { - id, - text, - author, - subject, - date, - isChecked: false, - isVisible: true, - addAnimation: true, - deleteAnimation: false - }, - ...state.letters - ], - checkedLetterIds: newCheckedLetterIds - }; - }); - } - - deleteLetter(id) { - this.setState(state => { - return { letters: this.removeLetterById(state.letters, id) }; - }); - } - - removeAnimation(id) { - const letters1 = this.state.letters; - const newLetters = letters1.map(value => { - const tmp = value; - if (tmp.id === id) { - tmp.addAnimation = false; - } - return tmp; - }); - this.setState({ - letters: newLetters - }); - } - - sleep(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); - } - - async GenerateLetters() { - await this.sleep(100); - await this.newMail(); - - const fiveMinute = 300000; - const maxTime = 600000; - const minTime = 10; - const time = Math.max(fiveMinute - this.last, generateRandomInt(minTime, maxTime)); - this.last = time; - - await this.sleep(time); - this.GenerateLetters(); - } - - render() { - return ( -
    - - -
    - ); - } -} diff --git a/src/app/openLetter/index.js b/src/app/openLetter/index.js new file mode 100644 index 0000000..3406e12 --- /dev/null +++ b/src/app/openLetter/index.js @@ -0,0 +1 @@ +export * from './openLetter'; diff --git a/src/app/main/content/mainContent/letterPage/letterPage.css b/src/app/openLetter/openLetter.css similarity index 69% rename from src/app/main/content/mainContent/letterPage/letterPage.css rename to src/app/openLetter/openLetter.css index 6ff17e6..a150fe3 100644 --- a/src/app/main/content/mainContent/letterPage/letterPage.css +++ b/src/app/openLetter/openLetter.css @@ -1,14 +1,14 @@ -.letter-page__close { +.openLetter__close { margin-top: 10px; margin-right: 10px; float: right; } -.letter-page__del-line { +.openLetter__delLine { text-decoration: none; } -.letter-page__cross { +.openLetter__cross { width: 15px; height: 15px; margin-top: -8px; @@ -17,6 +17,6 @@ opacity: 0.15; } -.letter-page__text-letter { +.openLetter__textLetter { margin: 30px; } diff --git a/src/app/openLetter/openLetter.jsx b/src/app/openLetter/openLetter.jsx new file mode 100644 index 0000000..088ea3c --- /dev/null +++ b/src/app/openLetter/openLetter.jsx @@ -0,0 +1,19 @@ +import React, { Component } from 'react'; + +import './openLetter.css'; +import cross from '../images/cross.png'; + +export class OpenLetter extends Component { + render() { + return ( +
    + + + +
    {this.props.contentLetter.map((paragraph) => { + return

    {paragraph}

    ; + })}
    +
    + ); + } +} diff --git a/src/app/header/search/index.js b/src/app/search/index.js similarity index 100% rename from src/app/header/search/index.js rename to src/app/search/index.js diff --git a/src/app/header/search/search.css b/src/app/search/search.css similarity index 95% rename from src/app/header/search/search.css rename to src/app/search/search.css index e40e77d..7d55b6a 100644 --- a/src/app/header/search/search.css +++ b/src/app/search/search.css @@ -9,7 +9,7 @@ vertical-align: text-bottom; } -.search__text-search { +.search__textSearch { width: 90%; height: 100%; padding-left: 10px; diff --git a/src/app/header/search/search.jsx b/src/app/search/search.jsx similarity index 76% rename from src/app/header/search/search.jsx rename to src/app/search/search.jsx index 27b6ff2..9271796 100644 --- a/src/app/header/search/search.jsx +++ b/src/app/search/search.jsx @@ -7,7 +7,7 @@ export class Search extends Component { render() { return (
    - + cross
    ); diff --git a/src/txtStyle/HelveticaNeueCyr-Light.otf b/src/app/txtStyle/HelveticaNeueCyr-Light.otf similarity index 100% rename from src/txtStyle/HelveticaNeueCyr-Light.otf rename to src/app/txtStyle/HelveticaNeueCyr-Light.otf diff --git a/src/txtStyle/HelveticaNeueCyr-Medium.otf b/src/app/txtStyle/HelveticaNeueCyr-Medium.otf similarity index 100% rename from src/txtStyle/HelveticaNeueCyr-Medium.otf rename to src/app/txtStyle/HelveticaNeueCyr-Medium.otf diff --git a/src/txtStyle/YandexSansDisplay-Thin.ttf b/src/app/txtStyle/YandexSansDisplay-Thin.ttf similarity index 100% rename from src/txtStyle/YandexSansDisplay-Thin.ttf rename to src/app/txtStyle/YandexSansDisplay-Thin.ttf