From e7a1c9573d4e200eeb5a387baea06275082ec0dc Mon Sep 17 00:00:00 2001 From: elenap1991 Date: Sat, 1 Jun 2019 19:59:17 +0300 Subject: [PATCH] library done: layout, stars, get books from json, class, books sort, books filters, parallel sort and filters, utils for api and debonse, add book, mvc, history --- .eslintrc | 3 + src/library/css/article.css | 118 ++++++++++++ src/library/css/footer.css | 20 ++ src/library/css/header.css | 34 ++++ src/library/css/library.css | 66 +++++++ src/library/css/modalWindow.css | 67 +++++++ src/library/css/navigation.css | 153 +++++++++++++++ src/library/fonts/12093.ttf | Bin 0 -> 184608 bytes src/library/img/+.png | Bin 0 -> 208 bytes src/library/img/arrowDown.png | Bin 0 -> 242 bytes src/library/img/avatar-01.png | Bin 0 -> 2896 bytes src/library/img/book.svg | 63 +++++++ src/library/img/book_hover.svg | 63 +++++++ src/library/img/clock.svg | 8 + src/library/img/clock_hover.svg | 8 + src/library/img/footer_hint.png | Bin 0 -> 259 bytes src/library/img/footer_settings.png | Bin 0 -> 221 bytes src/library/img/globe.svg | 1 + src/library/img/globe_hover.svg | 1 + src/library/img/list_icon.svg | 61 ++++++ src/library/img/list_icon_hover.svg | 61 ++++++ src/library/img/search.png | Bin 0 -> 215 bytes src/library/img/shoppingtrolley.svg | 41 ++++ src/library/img/shoppingtrolley_hover.svg | 41 ++++ src/library/img/star.svg | 37 ++++ src/library/img/star_hover.svg | 37 ++++ src/library/img/star_rating.svg | 45 +++++ src/library/library.html | 148 +++++++++++++++ src/library/scripts/app.js | 1 + src/library/scripts/app/mainController.js | 13 ++ src/library/scripts/books/bookController.js | 156 +++++++++++++++ src/library/scripts/books/bookModel.js | 10 + src/library/scripts/books/bookView.js | 178 ++++++++++++++++++ .../scripts/history/historyController.js | 21 +++ src/library/scripts/history/historyModel.js | 4 + src/library/scripts/history/historyView.js | 27 +++ src/library/scripts/lib/container.js | 3 + src/library/scripts/lib/controller.js | 18 ++ src/library/scripts/lib/star.js | 1 + src/library/scripts/lib/store.js | 113 +++++++++++ src/library/scripts/lib/view.js | 27 +++ .../modalWindow/modalWindowController.js | 73 +++++++ .../scripts/modalWindow/modalWindowView.js | 51 +++++ src/library/scripts/utils/debounce.js | 10 + src/library/scripts/utils/idGenerator.js | 5 + src/library/scripts/utils/request.js | 12 ++ 46 files changed, 1799 insertions(+) create mode 100644 src/library/css/article.css create mode 100644 src/library/css/footer.css create mode 100644 src/library/css/header.css create mode 100644 src/library/css/library.css create mode 100644 src/library/css/modalWindow.css create mode 100644 src/library/css/navigation.css create mode 100644 src/library/fonts/12093.ttf create mode 100644 src/library/img/+.png create mode 100644 src/library/img/arrowDown.png create mode 100644 src/library/img/avatar-01.png create mode 100644 src/library/img/book.svg create mode 100644 src/library/img/book_hover.svg create mode 100644 src/library/img/clock.svg create mode 100644 src/library/img/clock_hover.svg create mode 100644 src/library/img/footer_hint.png create mode 100644 src/library/img/footer_settings.png create mode 100644 src/library/img/globe.svg create mode 100644 src/library/img/globe_hover.svg create mode 100644 src/library/img/list_icon.svg create mode 100644 src/library/img/list_icon_hover.svg create mode 100644 src/library/img/search.png create mode 100644 src/library/img/shoppingtrolley.svg create mode 100644 src/library/img/shoppingtrolley_hover.svg create mode 100644 src/library/img/star.svg create mode 100644 src/library/img/star_hover.svg create mode 100644 src/library/img/star_rating.svg create mode 100644 src/library/library.html create mode 100644 src/library/scripts/app.js create mode 100644 src/library/scripts/app/mainController.js create mode 100644 src/library/scripts/books/bookController.js create mode 100644 src/library/scripts/books/bookModel.js create mode 100644 src/library/scripts/books/bookView.js create mode 100644 src/library/scripts/history/historyController.js create mode 100644 src/library/scripts/history/historyModel.js create mode 100644 src/library/scripts/history/historyView.js create mode 100644 src/library/scripts/lib/container.js create mode 100644 src/library/scripts/lib/controller.js create mode 100644 src/library/scripts/lib/star.js create mode 100644 src/library/scripts/lib/store.js create mode 100644 src/library/scripts/lib/view.js create mode 100644 src/library/scripts/modalWindow/modalWindowController.js create mode 100644 src/library/scripts/modalWindow/modalWindowView.js create mode 100644 src/library/scripts/utils/debounce.js create mode 100644 src/library/scripts/utils/idGenerator.js create mode 100644 src/library/scripts/utils/request.js diff --git a/.eslintrc b/.eslintrc index d30435505..0002e9777 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,9 @@ "jest": true, "es6": true }, + "parserOptions": { + "ecmaVersion": 2017 + }, "rules": { "complexity": [0, 11], "consistent-return": 2, diff --git a/src/library/css/article.css b/src/library/css/article.css new file mode 100644 index 000000000..fada05a4c --- /dev/null +++ b/src/library/css/article.css @@ -0,0 +1,118 @@ +.article_header, +.article_filter { + color: #444c63; + font-size: 22px; + height: 70px; + background-color: #eef1f7; + border-bottom: 1px solid #dadfea; + border-top: 1px solid #f4f6fa; +} + +.article_header-label { + margin: 23px; +} + +.article_filter { + display: flex; + align-items: center; + justify-content: space-between; +} + +.article_filter ul { + display: flex; + width: 355px; +} + +.article_filter li { + padding: 4px 11px; + margin: 0; + border-radius: 10px; +} + +.article_filter li:hover { + background-color: #97b3ce; +} + +.article_books { + display: flex; + flex-wrap: wrap; +} + +.article_books img { + width: 200px; + height: 275px; +} + +.article_books h3 { + color: #444c63; + font-size: 16px; + font-weight: normal; + margin: 0; +} + +.article_books p { + color: #6f7d95; + font-size: 12px; + margin: 0; +} + +.article_books_book { + margin: 30px 20px; + width: 200px; +} + +.star_selected { + fill: #ffab00; + stroke: #ffab00; + stroke-width: 2px; +} + +.star_unselected { + stroke: #ffab00; + fill: white; + stroke-width: 2px; +} + +.star_tmpselected { + fill: #ffab00; + stroke: #ffab00; +} + +.star_tmpunselected { + fill: white; + stroke: #facc6f; +} + +.article_search { + width: 400px; + height: 32px; + border: 1px solid rgba(140, 151, 178, 0.4); + border-radius: 16px; + padding: 0 17px; + outline: none; +} + +.article_search::-moz-placeholder { + color: #8c97b2; +} + +.article_search::-webkit-input-placeholder { + color: #8c97b2; +} + +.article_search-img { + position: absolute; + top: 9px; + right: 30px; + width: 13px; + height: 13px; +} + +.article_search-label { + position: relative; + height: 32px; +} + +.article_filter .selected-filter { + font-weight: bold; +} \ No newline at end of file diff --git a/src/library/css/footer.css b/src/library/css/footer.css new file mode 100644 index 000000000..6de2576a6 --- /dev/null +++ b/src/library/css/footer.css @@ -0,0 +1,20 @@ +.footer__item { + float: right; + background-color: #1f2637; + width: 55px; + height: 45px; + display: flex; + align-items: center; + justify-content: center; +} + +.footer__item:hover { + background-color: #15a4fa; + ; +} + +.footer__item img { + float: center; + width: 14px; + height: 14px; +} \ No newline at end of file diff --git a/src/library/css/header.css b/src/library/css/header.css new file mode 100644 index 000000000..c3d4e6c5a --- /dev/null +++ b/src/library/css/header.css @@ -0,0 +1,34 @@ +.header__button { + color: #78829d; + font-size: 13px; + margin: 15px; +} + +.header__marker { + border: 2px solid #19202e; + border-radius: 100%; +} + +.header__user { + color: #ffffff; + font-size: 13px; + width: 158px; + background-color: #15a4fa; + height: 100%; + border-top-right-radius: 4px; + display: flex; + justify-content: space-around; + align-items: center; +} + +.header__user-icons { + width: 12px; + height: 12px; +} + +.header__user-photo { + width: 31px; + height: 32px; + border: 2px solid #eef1f7; + border-radius: 100%; +} \ No newline at end of file diff --git a/src/library/css/library.css b/src/library/css/library.css new file mode 100644 index 000000000..feab89dfa --- /dev/null +++ b/src/library/css/library.css @@ -0,0 +1,66 @@ +@font-face { + font-family: "Proxima Nova"; + src: url(../fonts/12093.ttf); +} + +.library { + display: grid; + margin: 0; + font-family: "Proxima Nova"; + grid-template-areas: "header header" "navigation article" "footer footer"; + grid-template-columns: 200px 1fr; +} + +.header { + grid-area: header; + height: 45px; + background-color: #2f364a; + display: flex; + flex-wrap: nowrap; + justify-content: flex-end; + align-items: center; + border-top-right-radius: 4px; + position: fixed; + width: 100%; + z-index: 1; +} + +.navigation { + height: 100%; + grid-area: navigation; + background-color: #181e2c; + margin: 44px 0; +} + +.article { + grid-area: article; + margin: 45px 0; +} + +.footer { + height: 45px; + grid-area: footer; + background-color: #181e2c; + position: fixed; + bottom: 0px; + width: 100%; +} + +.library ul { + padding: 0; +} + +.library li { + color: #78829d; + font-size: 13px; + text-transform: capitalize; + padding: 0 0 0 46px; + list-style-type: none; + position: relative; + cursor: pointer; +} + +.library li:hover { + color: white; + background-color: #15a4fa; +} \ No newline at end of file diff --git a/src/library/css/modalWindow.css b/src/library/css/modalWindow.css new file mode 100644 index 000000000..fec962744 --- /dev/null +++ b/src/library/css/modalWindow.css @@ -0,0 +1,67 @@ +.modal-window { + display: none; + position: absolute; + position: fixed; + z-index: 2; + margin: auto; + width: 100%; + height: 100%; + justify-content: center; + align-items: center; + background-color: rgba(49, 48, 48, 0.5) +} + +.modal-window label { + width: 180px; + display: inline-block; + margin: 5px 10px; +} + +.modal-window form { + background-color: #1f2637; + color: #78829d; + padding: 30px; + border-radius: 10px; + border: 1px solid black; +} + +.modal-window p { + margin: 20px 20px 5px 20px; +} + +.modal-window input { + border-radius: 3px; +} + +.modal-window__buttons { + text-align: center; +} + +.modal-window__button { + border-radius: 3px; + width: 90px; + height: 20px; + background-color: #f2795a; + color: white; + border: none; + font-size: 14px; + margin: 10px; +} + +.modal-window__button:hover { + background-color: #f05a34; +} + +.modal-window i { + color: red; + margin: 5px; +} + +.modal-window__hint { + color: red; + display: none; +} + +.modal-window__container-hint { + height: 20px; +} \ No newline at end of file diff --git a/src/library/css/navigation.css b/src/library/css/navigation.css new file mode 100644 index 000000000..48c51c5a8 --- /dev/null +++ b/src/library/css/navigation.css @@ -0,0 +1,153 @@ +.navigation__module { + background-color: #1f2637; + margin: 4px 0; + border-bottom: 1px solid #141824; + border-top: 1px solid #78829d; +} + +.navigation__item-history p { + font-size: 12px; + color: #6f7d95; +} + +.navigation__item-history strong { + font-size: 12px; + font-weight: normal; + color: #97b3ce; +} + +.navigation__item-history { + margin: 25px 25px 25px 46px; + position: relative; +} + +.navigation__menu li::before { + content: ""; + position: absolute; + width: 14px; + height: 14px; + top: 11px; + left: 21px; +} + +.navigation__menu li:nth-child(1)::before { + background-image: url(../img/book.svg); +} + +.navigation__menu li:nth-child(1):hover::before { + background-image: url(../img/book_hover.svg); +} + +.navigation__menu li:nth-child(2)::before { + background-image: url(../img/globe.svg); +} + +.navigation__menu li:nth-child(2):hover::before { + background-image: url(../img/globe_hover.svg); +} + +.navigation__menu li:nth-child(3)::before { + background-image: url(../img/shoppingtrolley.svg); +} + +.navigation__menu li:nth-child(3):hover::before { + background-image: url(../img/shoppingtrolley_hover.svg); +} + +.navigation__menu li:nth-child(4)::before { + background-image: url(../img/star.svg); +} + +.navigation__menu li:nth-child(4):hover::before { + background-image: url(../img/star_hover.svg); +} + +.navigation__menu li:nth-child(5)::before { + background-image: url(../img/list_icon.svg); +} + +.navigation__menu li:nth-child(5):hover::before { + background-image: url(../img/list_icon_hover.svg); +} + +.navigation__menu li:nth-child(6)::before { + background-image: url(../img/clock.svg); +} + +.navigation__menu li:nth-child(6):hover::before { + background-image: url(../img/clock_hover.svg); +} + +.navigation__menu-filter li::before { + content: ""; + width: 6px; + height: 6px; + position: absolute; + top: 16px; + left: 25px; + border-radius: 100%; +} + +.navigation__menu-filter li:nth-child(1)::before { + background-color: #e64c66; +} + +.navigation__menu-filter li:nth-child(2)::before { + background-color: #ffab00; +} + +.navigation__menu-filter li:nth-child(3)::before { + background-color: #00bfdd; +} + +.navigation__menu-filter li:nth-child(4)::before { + background-color: #7874cf; +} + +.navigation__clock::before { + content: ""; + position: absolute; + width: 14px; + height: 14px; + background-image: url(../img/clock.svg); + top: 10px; + left: -25px; +} + +.navigation__menu-filter li { + height: 38px; + line-height: 38px; + display: inline-block; + width: 154px; +} + +.navigation__menu a { + height: 38px; + line-height: 38px; + display: inline-block; +} + +.navigation__module-button-add { + text-transform: uppercase; + width: 160px; + height: 44px; + background-color: #f2795a; + border-radius: 4px; + color: white; + border: none; + margin: 35px 20px; + font-size: 14px; +} + +.navigation__module-button-add:hover { + background-color: #f05a34; +} + +.navigation__module-button-add img { + margin: 0 10px; +} + +.navigation__menu-filter .selected-filter { + background-color: #37415c; + box-shadow: inset 0 0 5px #181d2b; +} \ No newline at end of file diff --git a/src/library/fonts/12093.ttf b/src/library/fonts/12093.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7d0024750253a8a115a9e7f8081d329eca51a54a GIT binary patch literal 184608 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 literal 0 HcmV?d00001 diff --git a/src/library/img/+.png b/src/library/img/+.png new file mode 100644 index 0000000000000000000000000000000000000000..ae2f106469ea9115589b33c7a9d2b81d825b8446 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4xHBpZ(Y^aoOm#X;^)j5kl})B`zM0X`wFK>9y% zpl$aleV}T-k|4ie2IDh#cMGQdcTwsne>d~`6zgw587og0$B>FS$q5MpMw|%@jbA>o z>3r$wd-~McibeK@{x&b~Ru0Z-f z(O{v+>e)aI{3Stt!3=^f<)LZs{&&pWefNygs?+ayx`9#=o-U3d6?2jk5<<#S7@9VG z`ozY@*7xbtCoeX(QiV{t0~>1mE5Cl@<$2n5{Ck{!iblLbd19rYbCoD_dL`rGFP~T) ujwpo1g~io1HfrwOvxg(2E2ZilD;q;Vs*G5@O4T=@9SokXelF{r5}E+EXKcd& literal 0 HcmV?d00001 diff --git a/src/library/img/avatar-01.png b/src/library/img/avatar-01.png new file mode 100644 index 0000000000000000000000000000000000000000..00fb845db9b959bf99f2abe7dfde62df7312a539 GIT binary patch literal 2896 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/library/img/book_hover.svg b/src/library/img/book_hover.svg new file mode 100644 index 000000000..e7831bd18 --- /dev/null +++ b/src/library/img/book_hover.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/library/img/clock.svg b/src/library/img/clock.svg new file mode 100644 index 000000000..d1a751331 --- /dev/null +++ b/src/library/img/clock.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/library/img/clock_hover.svg b/src/library/img/clock_hover.svg new file mode 100644 index 000000000..ed445aeb6 --- /dev/null +++ b/src/library/img/clock_hover.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/library/img/footer_hint.png b/src/library/img/footer_hint.png new file mode 100644 index 0000000000000000000000000000000000000000..6eff1a81a31cd04e723dad545baff72772654d48 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^d_c_4!VDzUtRA}qDaPU;cPGZ1Cw1z99D@L#5LY1m zpA=y2%VGf3BTy3L7tA0STHf)0_q)5RjFnu{W}XSUqxupkm+I-_7*a7OIUzy7C@h76 zY1)Mg0qksS$3hfj)eamGi&9x2Xw~RwTGFUcp26dswZi{r+ZB(tOBXJ9v|Zz1Td<0| zXyHNyyTjKnaI~#lxKLI>GgQG|WW_vQAOD8g>_+x?7*hmq*fF$7OW)NhlfMtNkipZ{ K&t;ucLK6VLDsTY+ literal 0 HcmV?d00001 diff --git a/src/library/img/footer_settings.png b/src/library/img/footer_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..b87249a5a3553ef627eecbebd4d687c46397fbd2 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^d?3ui3?$#C89V|~jKx9jPK-BC>eK@{iUB?$u0Z-f zUT|LV^-rK8?vfzCV1~5+p&hGcy4)>)SMYkL6i_(W)5S5QVoq{GLPCg80t1t9*ix2q zHny~-YO1_Tnb^cs1!f#LaAC<7FVE)2#95Qn4y!D6VN+eo$`j+|RS?Ca#TU$e@i~L( lafS@N*+EW5Czv+aGOU^)P_@)~)lQ)C44$rjF6*2Ung9bIS9AaX literal 0 HcmV?d00001 diff --git a/src/library/img/globe.svg b/src/library/img/globe.svg new file mode 100644 index 000000000..3cb328b36 --- /dev/null +++ b/src/library/img/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/library/img/globe_hover.svg b/src/library/img/globe_hover.svg new file mode 100644 index 000000000..d21052b54 --- /dev/null +++ b/src/library/img/globe_hover.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/library/img/list_icon.svg b/src/library/img/list_icon.svg new file mode 100644 index 000000000..8fe8f2760 --- /dev/null +++ b/src/library/img/list_icon.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/library/img/list_icon_hover.svg b/src/library/img/list_icon_hover.svg new file mode 100644 index 000000000..3f64295e8 --- /dev/null +++ b/src/library/img/list_icon_hover.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/library/img/search.png b/src/library/img/search.png new file mode 100644 index 0000000000000000000000000000000000000000..0875f22f1159680fe8cacbfe415336ce9379c28f GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4xHBpZ(Y^aoOm#X;^)j5kl})B`zk0X`wFK)P?* zmYx}#d!}y!qV8!Mx~FaG0ii8D(>F&?DhLLu;3^673uaJS_3pn*d7AO=HyICGfuez) zE{-7;bCMGTj0}YmfWWk{(2(`gp>r=!o^xOnb!KxDW@TfW%)-_t!pz1tor$eYh@C}V zjX#Kg67$RQjSNx@ChKqPY-D7y@ZmXN;{2I~;YcQ*O~}?M_ko5pc)I$ztaD0e0s#49 BM7;n2 literal 0 HcmV?d00001 diff --git a/src/library/img/shoppingtrolley.svg b/src/library/img/shoppingtrolley.svg new file mode 100644 index 000000000..a8a6c47b7 --- /dev/null +++ b/src/library/img/shoppingtrolley.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/library/img/shoppingtrolley_hover.svg b/src/library/img/shoppingtrolley_hover.svg new file mode 100644 index 000000000..921cc369a --- /dev/null +++ b/src/library/img/shoppingtrolley_hover.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/library/img/star.svg b/src/library/img/star.svg new file mode 100644 index 000000000..83d5aad61 --- /dev/null +++ b/src/library/img/star.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/library/img/star_hover.svg b/src/library/img/star_hover.svg new file mode 100644 index 000000000..275badae4 --- /dev/null +++ b/src/library/img/star_hover.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/library/img/star_rating.svg b/src/library/img/star_rating.svg new file mode 100644 index 000000000..22909e959 --- /dev/null +++ b/src/library/img/star_rating.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/library/library.html b/src/library/library.html new file mode 100644 index 000000000..f3243bcff --- /dev/null +++ b/src/library/library.html @@ -0,0 +1,148 @@ + + + + + + Library + + + + + + + + + +
+
+

Help Center

+
+
+
+

Our Support

+
+
+ foto +

John Doe

+ +
+
+ +
+
+

Browse Available Books

+
+
+
    +
  • All Books
  • +
  • Most Recent
  • +
  • Most Popular
  • +
  • Free Books
  • +
+ +
+
+
+ +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/library/scripts/app.js b/src/library/scripts/app.js new file mode 100644 index 000000000..4a2aad743 --- /dev/null +++ b/src/library/scripts/app.js @@ -0,0 +1 @@ +new MainController().init(); \ No newline at end of file diff --git a/src/library/scripts/app/mainController.js b/src/library/scripts/app/mainController.js new file mode 100644 index 000000000..a7c88611a --- /dev/null +++ b/src/library/scripts/app/mainController.js @@ -0,0 +1,13 @@ +function MainController() { + return Controller.call(this); +} +MainController.prototype = Object.create(MainController.prototype); +MainController.prototype.constructor = Controller; +MainController.prototype.init = function () { + this.bookController = new BookController(); + this.bookController.init(); + this.historyController = new HistoryController(); + this.bookController.setOnHistoryEventHandler(this.historyController.onNewEvent.bind(this.historyController)); + this.historyController.init(); +}; + diff --git a/src/library/scripts/books/bookController.js b/src/library/scripts/books/bookController.js new file mode 100644 index 000000000..02820d4bb --- /dev/null +++ b/src/library/scripts/books/bookController.js @@ -0,0 +1,156 @@ +var urlBooks = "https://rsu-library-api.herokuapp.com/books"; + +function BookController() { + Controller.call(this); + this.addBookController = new ModalWindowController(); + this.addBookController.init(); + this.addBookController.setonAddBookEventHandler((book) => { + this.addBook(book); + message = `You added a new book ${book.title} by ${book.author.firstName} ${book.author.lastName}`; + this.onHistoryEventHandler(message, new Date()); + }); + this.onHistoryEventHandler = function() {}; + this.lastFilteredCategory = null; + this.view = new BookView(); + return this; +} +BookController.prototype = Object.create(Controller.prototype); +BookController.prototype.constructor = BookController; +BookController.prototype.setOnHistoryEventHandler = function(cb) { + this.onHistoryEventHandler = cb; +}; +BookController.prototype.onBtnAllBooksHandler = function() { + this.view.changeCategorySelection(event.target) + this.store.dropSort(); +}; +BookController.prototype.onBtnMostRecentHandler = function() { + this.view.changeCategorySelection(event.target) + this.store.sort(book => book.updatedAt, true); +}; +BookController.prototype.onBtnMostPopular = function() { + this.view.changeCategorySelection(event.target) + this.store.sort(book => book.rating, true); +}; +BookController.prototype.onBtnFreeBooksHandler = function() { + this.view.changeCategorySelection(event.target) + this.store.sort(book => book.cost, false); +}; +BookController.prototype.onBtnCategoryFilterHandler = function(category, event) { + this.view.changeCategorySelection(event.target) + var store = this.store; + store.beginUpdate(); + var message; + try { + store.removePropFilter("CategoryFilter"); + if (this.lastFilteredCategory === category) { + message = `You have canceled filter by category ${category}`; + this.lastFilteredCategory = null; + } else { + this.lastFilteredCategory = category; + message = `You have applied filter by category ${category}`; + store.addPropFilter(function(item) { return item.categories.includes(category); }, "CategoryFilter"); + } + store.filter(); + } finally { + store.endUpdate(); + this.onHistoryEventHandler(message, new Date()); + } +}; +BookController.prototype.onStarClickHandlerWrapper = function(bookId, rating) { + var store = this.store; + var index = store.findIndex(book => book.id === bookId); + if (index >= 0) { + var book = store.getRealAt(index); + book.rating = rating; + } + store.changed(); +}; +BookController.prototype.onSearchFieldChangeHandler = function() { + var text = this.items.inpSearch.value.toLowerCase(); + const { store } = this; + store.beginUpdate(); + try { + store.removePropFilter("SearchAuthorAndBook"); + if (text && text !== "") { + store.addPropFilter(function(item) { + return item.author.firstName.toLowerCase().includes(text) || + item.author.lastName.toLowerCase().includes(text) || + item.title.toLowerCase().includes(text); + }, "SearchAuthorAndBook"); + } + store.filter(); + } finally { + this.onHistoryEventHandler(`You have applied search by word ${text}`, new Date()); + store.endUpdate(); + } +}; +BookController.prototype.LoadBooks = async function() { + await this.getDataFromServer(); +}; +BookController.prototype.getDataFromServer = async function() { + const response = await request(urlBooks); + const { store } = this; + store.beginUpdate(); + try { + if (response instanceof Array) { + for (const item of response) { + this.addBook(item); + } + } + } finally { + store.endUpdate(); + } +}; +BookController.prototype.addBook = function(bookSource) { + const book = new Book(); + book.id = generateId(); + const { author } = bookSource; + if (author) { + if (author.firstName) book.author.firstName = author.firstName; + if (author.lastName) book.author.lastName = author.lastName; + } + const { categories } = bookSource; + if (categories && (categories instanceof Array)) { + for (const item of categories) { + book.categories.push(item); + } + } + if (bookSource.cost) book.cost = bookSource.cost; + if (bookSource.createdAt) book.createdAt = bookSource.createdAt; + if (bookSource.image_url) book.image_url = bookSource.image_url; + if (bookSource.rating) book.rating = bookSource.rating; + if (bookSource.title) book.title = bookSource.title; + if (bookSource.updatedAt) book.updatedAt = bookSource.updatedAt; + this.store.add(book); +}; +BookController.prototype.onBtnAddBookHandler = function() { + this.addBookController.setActive(); +}; + +BookController.prototype.prepareListeners = function() { + Controller.prototype.prepareListeners.call(this); + var items = this.items; + items.btnAllBooks.addEventListener("click", this.onBtnAllBooksHandler.bind(this)); + items.btnMostRecent.addEventListener("click", this.onBtnMostRecentHandler.bind(this)); + items.btnMostPopular.addEventListener("click", this.onBtnMostPopular.bind(this)); + items.btnFreeBooks.addEventListener("click", this.onBtnFreeBooksHandler.bind(this)); + items.inpSearch.addEventListener("input", debounce(this.onSearchFieldChangeHandler.bind(this), 1000)); + items.btnMustReadTitles.addEventListener("click", (event) => this.onBtnCategoryFilterHandler("must_read", event)); + items.btnBestOfList.addEventListener("click", (event) => this.onBtnCategoryFilterHandler("best", event)); + items.btnClassicNovels.addEventListener("click", (event) => this.onBtnCategoryFilterHandler("classic", event)); + items.btnNonFiction.addEventListener("click", (event) => this.onBtnCategoryFilterHandler("non_fiction", event)); + + items.btnAddBook.addEventListener("click", this.onBtnAddBookHandler.bind(this)); + this.view.setOnStarClickHandler(this.onStarClickHandlerWrapper.bind(this)); +}; +BookController.prototype.prepareStore = async function() { + Controller.prototype.prepareStore.call(this); + await this.LoadBooks(); +}; +BookController.prototype.validation = function() { + var items = this.items; + if (items.title) { + console.log(this.items); + } + return false; +}; \ No newline at end of file diff --git a/src/library/scripts/books/bookModel.js b/src/library/scripts/books/bookModel.js new file mode 100644 index 000000000..a7f74774d --- /dev/null +++ b/src/library/scripts/books/bookModel.js @@ -0,0 +1,10 @@ +function Book() { + this.title = undefined; + this.author = { firstName: undefined, lastName: undefined }; + this.categories = []; + this.cost = undefined; + this.createdAt = new Date(); + this.updatedAt = new Date(); + this.image_url = undefined; + this.rating = undefined; +} diff --git a/src/library/scripts/books/bookView.js b/src/library/scripts/books/bookView.js new file mode 100644 index 000000000..07b984723 --- /dev/null +++ b/src/library/scripts/books/bookView.js @@ -0,0 +1,178 @@ +var bookIdSymb = Symbol("bookID"); +var starParentSymb = Symbol("parentStar"); +var starRatingSymb = Symbol("ratingStar"); +var isSelectedSymb = Symbol("selected"); +var groupSymb = Symbol("group"); + +function BookView() { + View.call(this); + this.onStarClickHandler = null; + this.containerName = "books"; + this.prepareItems(); + return this; +} +BookView.prototype = Object.create(View.prototype); +BookView.prototype.constructor = BookView; +BookView.prototype.setOnStarClickHandler = function(cb) { + this.onStarClickHandler = cb; +}; +BookView.prototype.onStarClickHandlerWrapper = function(event) { + var id = event.target[bookIdSymb]; + var rating = event.target[starRatingSymb]; + if (this.onStarClickHandler) this.onStarClickHandler(id, rating); +}; +BookView.prototype.updateContainer = function() { + View.prototype.updateContainer.call(this); + const { container } = this; + for (const book of this.store) { + container.appendChild(this.createBook(book)); + } + var starCont = container.getElementsByTagName("path"); + for (let i = 0; i < starCont.length; i++) { + starCont[i].addEventListener("mouseover", this.onMouseOverStar.bind(this)); + starCont[i].addEventListener("mouseout", this.onMouseOutOfStar.bind(this)); + starCont[i].addEventListener("click", this.onStarClickHandlerWrapper.bind(this)); + } +}; +BookView.prototype.fillstarsTmp = function(rating, id) { + var tmpsStar = document.getElementById(id).getElementsByTagName("svg"); + for (var i = 0; i < 5; i++) { + var svgClass = (rating > i) ? + " star_tmpselected" : + " star_tmpunselected"; + var tmpClass = tmpsStar[i].getAttribute("class") + svgClass; + tmpsStar[i].setAttribute("class", tmpClass); + } +}; +BookView.prototype.dellfillstarsTmp = function(id) { + var star = document.getElementById(id).getElementsByTagName("svg"); + for (var i = 0; i < 5; i++) { + var clazz = star[i].getAttribute("class").split(" ")[0]; + star[i].setAttribute("class", clazz); + } +}; +BookView.prototype.onMouseOverStar = function(event) { + if (event.target.id !== "") { + var rating = event.target[starRatingSymb]; + var parent = event.target[starParentSymb]; + this.fillstarsTmp(rating, parent); + } +}; +BookView.prototype.onMouseOutOfStar = function(event) { + var parent = event.target[starParentSymb]; + if (parent) this.dellfillstarsTmp(parent); +}; +BookView.prototype.addStars = function(book, bookElement) { + var id = book.id; + var rating = document.createElement("div"); + rating.className = "booksCont_stars"; + rating.id = id.toString(); + rating.innerHTML += star + star + star + star + star; + bookElement.appendChild(rating); + this.setStarsId(bookElement, id); + this.fillstars(book.rating, bookElement); +}; +BookView.prototype.setStarsId = function(book, id) { + var stars = book.getElementsByTagName("path"); + for (var i = 0; i < 5; i++) { + stars[i].setAttribute("id", "book_" + id + "star" + (i + 1)); + stars[i][bookIdSymb] = id; + stars[i][starParentSymb] = "book_" + id; + stars[i][starRatingSymb] = i + 1; + } +}; +BookView.prototype.fillstars = function(rating, bookElement) { + var stars = bookElement.getElementsByTagName("svg"); + for (var i = 0; i < 5; i++) { + var svgClass = (rating > i) ? + "star_selected" : + "star_unselected"; + stars[i].setAttribute("class", svgClass); + } +}; +BookView.prototype.createBook = function(book) { + var bookElement = document.createElement("div"); + var img = document.createElement("img"); + var title = document.createElement("h3"); + var author = document.createElement("p"); + bookElement.className = "article_books_book"; + bookElement.id = "book_" + book.id; + img.src = book.image_url; + title.innerHTML = book.title; + author.innerHTML = "by " + book.author.firstName + " " + book.author.lastName; + bookElement.appendChild(img); + bookElement.appendChild(title); + bookElement.appendChild(author); + this.addStars(book, bookElement); + return bookElement; +}; +BookView.prototype.prepareItems = function() { + var items = this.items; + items.btnAllBooks = document.getElementById("allBooks"); + items.btnMostRecent = document.getElementById("mostRecent"); + items.btnMostPopular = document.getElementById("mostPopular"); + items.btnFreeBooks = document.getElementById("freeBooks"); + items.topFilter = [ + items.btnAllBooks, + items.btnMostRecent, + items.btnMostPopular, + items.btnFreeBooks + ]; + items.topFilter.forEach(btn => { + const item = btn; + item[isSelectedSymb] = false; + item[groupSymb] = "topFilter"; + }); + this.setSelectionItem(items.btnAllBooks); + + items.inpSearch = document.getElementById("searchBox"); + items.btnMustReadTitles = document.getElementById("MustReadTitles"); + items.btnBestOfList = document.getElementById("BestOfList"); + items.btnClassicNovels = document.getElementById("ClassicNovels"); + items.btnNonFiction = document.getElementById("NonFiction"); + items.leftFilter = [ + items.btnMustReadTitles, + items.btnBestOfList, + items.btnClassicNovels, + items.btnNonFiction + ]; + items.leftFilter.forEach(btn => { + const item = btn; + item[isSelectedSymb] = false; + item[groupSymb] = "leftFilter"; + }); + items.btnAddBook = document.getElementById("buttonAdd"); +}; +BookView.prototype.changeCategorySelection = function(target) { + const item = target; + if (item[groupSymb] === "topFilter") { + this.items.topFilter.forEach(btn => { + if (item !== btn) this.removeSelectionItem(btn); + }) + this.setSelectionItem(item); + } + if (item[groupSymb] === "leftFilter") { + this.items.leftFilter.forEach(btn => { + if (item !== btn) this.removeSelectionItem(btn); + }) + if (item[isSelectedSymb]) { + this.removeSelectionItem(item); + } else { + this.setSelectionItem(item); + } + } +}; +BookView.prototype.setSelectionItem = function(elem) { + const item = elem; + if (!item[isSelectedSymb]) { + item[isSelectedSymb] = true + item.className = "selected-filter"; + } +}; +BookView.prototype.removeSelectionItem = function(elem) { + const item = elem; + if (item[isSelectedSymb]) { + item[isSelectedSymb] = false; + item.className = ""; + } +}; \ No newline at end of file diff --git a/src/library/scripts/history/historyController.js b/src/library/scripts/history/historyController.js new file mode 100644 index 000000000..131ae69f5 --- /dev/null +++ b/src/library/scripts/history/historyController.js @@ -0,0 +1,21 @@ +function HistoryController() { + Controller.call(this); + this.view = new HistoryView(); + return this; +} +HistoryController.prototype = Object.create(Controller.prototype); +HistoryController.prototype.constructor = HistoryController; +HistoryController.prototype.onNewEvent = function (event, time) { + var record = new HistoryRecord(); + record.event = event; + record.time = time; + var store = this.store; + store.beginUpdate(); + try { + store.add(record); + store.sort((item) => item.time, true); + } + finally { + store.endUpdate(); + } +}; \ No newline at end of file diff --git a/src/library/scripts/history/historyModel.js b/src/library/scripts/history/historyModel.js new file mode 100644 index 000000000..a607b6d72 --- /dev/null +++ b/src/library/scripts/history/historyModel.js @@ -0,0 +1,4 @@ +function HistoryRecord() { + this.event = ""; + this.cost = new Date(); +} diff --git a/src/library/scripts/history/historyView.js b/src/library/scripts/history/historyView.js new file mode 100644 index 000000000..e9420b736 --- /dev/null +++ b/src/library/scripts/history/historyView.js @@ -0,0 +1,27 @@ +function HistoryView() { + var _this = View.call(this); + _this.containerName = "history"; + return _this; +} +HistoryView.prototype = Object.create(View.prototype); +HistoryView.prototype.constructor = HistoryView; +HistoryView.prototype.updateContainer = function() { + View.prototype.updateContainer.call(this); + const { container } = this; + for (const record of this.store) { + container.appendChild(this.createRecord(record)); + } +}; +HistoryView.prototype.createRecord = function(record) { + var recordElement = document.createElement("div"); + recordElement.className = "navigation__item-history"; + var message = document.createElement("p"); + message.innerHTML = record.event; + var time = document.createElement("p"); + time.className = "navigation__clock"; + var currentTime = new Date(); + time.innerHTML = Math.round((currentTime.getTime() - record.time.getTime()) / 1000 / 60) + " minutes ago"; + recordElement.appendChild(message); + recordElement.appendChild(time); + return recordElement; +}; \ No newline at end of file diff --git a/src/library/scripts/lib/container.js b/src/library/scripts/lib/container.js new file mode 100644 index 000000000..d582b38f9 --- /dev/null +++ b/src/library/scripts/lib/container.js @@ -0,0 +1,3 @@ +function ItemContainer() { + this.items = {}; +} \ No newline at end of file diff --git a/src/library/scripts/lib/controller.js b/src/library/scripts/lib/controller.js new file mode 100644 index 000000000..29dfae6ae --- /dev/null +++ b/src/library/scripts/lib/controller.js @@ -0,0 +1,18 @@ +function Controller() { + return ItemContainer.call(this); +} +Controller.prototype = Object.create(ItemContainer.prototype); +Controller.prototype.constructor = Controller; +Controller.prototype.init = function () { + this.store = new Store(); + this.view.initView(this.store); + this.items = this.view.getItems(); + this.prepareListeners(); + this.prepareStore(); +}; +Controller.prototype.prepareListeners = function () { + var _this = this; + this.store.subscribe(() => _this.view.onUpdate()); +}; +Controller.prototype.prepareStore = function () { +}; diff --git a/src/library/scripts/lib/star.js b/src/library/scripts/lib/star.js new file mode 100644 index 000000000..29442256d --- /dev/null +++ b/src/library/scripts/lib/star.js @@ -0,0 +1 @@ +var star = ''; diff --git a/src/library/scripts/lib/store.js b/src/library/scripts/lib/store.js new file mode 100644 index 000000000..3de7a7251 --- /dev/null +++ b/src/library/scripts/lib/store.js @@ -0,0 +1,113 @@ +function Store() { + this.items = []; + this.sortedIndexes = []; + this.filteredIndexes = []; + this.filterRules = []; + this.delegateList = []; + this.suppressedChanges = 0; +} +Store.prototype.changed = function() { + if (this.suppressedChanges === 0) { + for (const delegate of this.delegateList) { + delegate(); + } + } +}; +Store.prototype.beginUpdate = function() { + this.suppressedChanges++; +}; +Store.prototype.endUpdate = function() { + if (this.suppressedChanges === 0) { + throw new Error("Cant resume unsupressed events"); + } + this.suppressedChanges--; + this.changed(); +}; +Store.prototype.add = function(item) { + this.items.push(item); + this.sortedIndexes.push(this.sortedIndexes.length); + this.filter(); +}; +Store.prototype.resetFilteredIndexes = function() { + this.filteredIndexes = [...this.sortedIndexes]; +}; +Store.prototype.filter = function() { + this.resetFilteredIndexes(); + for (const rule of this.filterRules) { + this.applyFilterRule(rule.prop); + } + this.changed(); +}; +Store.prototype.applyFilterRule = function(rule) { + var result = []; + var filteredIndexes = this.filteredIndexes; + for (const index of filteredIndexes) { + if (rule(this.getRealAt(index))) { + result.push(index); + } + } + this.filteredIndexes = result; +}; +Store.prototype.sort = function(propGetter, desc) { + var items = this.items; + var res = desc ? -1 : 1; + this.sortedIndexes.sort(function(a, b) { + if (propGetter(items[a]) > propGetter(items[b])) { + return res; + } + if (propGetter(items[a]) < propGetter(items[b])) { + return -res; + } + return 0; + }); + this.filter(); +}; +Store.prototype.dropSort = function() { + var sortedIndexes = this.sortedIndexes; + for (var i = 0; i < sortedIndexes.length; i++) { + sortedIndexes[i] = i; + } + this.filter(); +}; +Store.prototype.addPropFilter = function(propFunc, keyValue) { + this.filterRules.push({ key: keyValue, prop: propFunc }); +}; +Store.prototype.removePropFilter = function(key) { + var index = this.filterRules.findIndex(function(obj) { return obj.key === key; }); + if (index >= 0) { + this.filterRules.splice(index, 1); + } +}; +Store.prototype.findIndex = function(cb) { + var items = this.items; + for (var i = 0; i < items.length; i++) { + var value = items[i]; + if (cb(value)) { + return i; + } + } + return -1; +}; +Store.prototype.getRealAt = function(index) { + return this.items[index]; +}; +Store.prototype.getFilteredAt = function(index) { + return this.getRealAt(this.filteredIndexes[index]); +}; +Store.prototype.getAt = function(index) { + return this.getFilteredAt(index); +}; +Store.prototype.subscribe = function(delegate) { + this.delegateList.push(delegate); +}; +Store.prototype.unsubscribe = function(delegate) { + var index = this.delegateList.indexOf(delegate); + if (index >= 0) { + this.delegateList.splice(index, 1); + } +}; +Store.prototype[Symbol.iterator] = function*() { + for (const item of this.filteredIndexes) { + yield this.getRealAt(item); + } +}; \ No newline at end of file diff --git a/src/library/scripts/lib/view.js b/src/library/scripts/lib/view.js new file mode 100644 index 000000000..2cbc2330d --- /dev/null +++ b/src/library/scripts/lib/view.js @@ -0,0 +1,27 @@ + +function View() { + return ItemContainer.call(this) || this; +} +View.prototype = Object.create(ItemContainer.prototype); +View.prototype.constructor = View; +View.prototype.prepareContainer = function (containerName) { + this.container = document.getElementById(containerName); +}; +View.prototype.clearContainer = function () { + this.container.innerHTML = ""; +}; +View.prototype.updateContainer = function () { + this.clearContainer(); +}; + +View.prototype.initView = function (store) { + this.store = store; + this.prepareContainer(this.containerName); + this.updateContainer(); +}; +View.prototype.getItems = function () { + return this.items; +}; +View.prototype.onUpdate = function () { + this.updateContainer(); +}; \ No newline at end of file diff --git a/src/library/scripts/modalWindow/modalWindowController.js b/src/library/scripts/modalWindow/modalWindowController.js new file mode 100644 index 000000000..d13671420 --- /dev/null +++ b/src/library/scripts/modalWindow/modalWindowController.js @@ -0,0 +1,73 @@ +function ModalWindowController() { + Controller.call(this); + this.view = new ModalWindowView(); + this.onAddBookEventHandler = function () { }; + return this; +}; +ModalWindowController.prototype = Object.create(Controller.prototype); +ModalWindowController.prototype.constructor = ModalWindowController; +ModalWindowController.prototype.setonAddBookEventHandler = function (cb) { + this.onAddBookEventHandler = cb; +}; +ModalWindowController.prototype.setActive = function () { + this.view.onShow(); +}; +ModalWindowController.prototype.hide = function () { + this.view.onHide(); +}; + +ModalWindowController.prototype.addBook = function (e) { + if (this.validation()) { + const bookSource = this.createBookSource(); + this.onAddBookEventHandler(bookSource); + this.hide(); + this.view.updateContainer(); + } +}; + +ModalWindowController.prototype.createBookSource = function () { + console.log("click"); + const book = new Book(); + const { items } = this; + book.author = {}; + book.author.firstName = items.AuthorName.value; + book.author.lastName = items.AuthorNameLast.value; + book.categories = []; + if (items.rdbMustRead.checked) { + book.categories.push("must_read"); + } + if (items.rdbBest.checked) { + book.categories.push("best"); + } + if (items.rdbClassic.checked) { + book.categories.push("classic"); + } + if (items.rdbNonFiction.checked) { + book.categories.push("non_fiction"); + } + book.cost = items.Cost.value; + book.image_url = items.ImageUrl.value; + book.rating = 0; + book.title = items.Title.value; + book.createdAt = new Date(); + book.updatedAt = new Date(); + return book; +} +ModalWindowController.prototype.validation = function () { + const itemsModal = this.view.items; + let result; + if (itemsModal.Title.value.length !== 0 && itemsModal.AuthorName.value.length !== 0 && itemsModal.AuthorNameLast.value.length !== 0 && itemsModal.Cost.value.length !== 0 && itemsModal.ImageUrl.value.length !== 0) { + result = true; + } else { + this.view.onShowHint(); + result = false; + } + return result; +}; + +ModalWindowController.prototype.prepareListeners = function () { + Controller.prototype.prepareListeners.call(this); + var items = this.items; + items.btnResetForm.addEventListener("click", this.hide.bind(this)); + items.btnSbmtForm.addEventListener("click", this.addBook.bind(this)); +}; \ No newline at end of file diff --git a/src/library/scripts/modalWindow/modalWindowView.js b/src/library/scripts/modalWindow/modalWindowView.js new file mode 100644 index 000000000..89ff9e0b0 --- /dev/null +++ b/src/library/scripts/modalWindow/modalWindowView.js @@ -0,0 +1,51 @@ +function ModalWindowView() { + View.call(this); + this.containerName = "addBooKModal"; + this.prepareItems(); + return this; +} +ModalWindowView.prototype = Object.create(View.prototype); +ModalWindowView.prototype.constructor = ModalWindowView; +ModalWindowView.prototype.updateContainer = function () { + this.items.AuthorName.value = ""; + this.items.AuthorNameLast.value = ""; + this.items.rdbMustRead.checked= false; + this.items.rdbBest.checked= false; + this.items.rdbClassic.checked= false; + this.items.rdbNonFiction.checked= false; + this.items.Cost.value = ""; + this.items.ImageUrl.value = ""; + this.items.Title.value = ""; + this.onHideHint(); +}; +ModalWindowView.prototype.onShow = function () { + this.container.style.display = "flex"; +} +ModalWindowView.prototype.onHide = function () { + this.container.style.display = "none"; +} +ModalWindowView.prototype.onHideHint = function () { + this.items.Hint.style.display = "none"; +} +ModalWindowView.prototype.onShowHint = function () { + this.items.Hint.style.display = "block"; +} + +ModalWindowView.prototype.prepareItems = function () { + var items = this.items; + items.AuthorName = document.getElementById("nameAuthor"); + items.AuthorNameLast = document.getElementById("lastnameAuthor"); + items.rdbMustRead = document.getElementById("radioMustRead"); + items.rdbBest = document.getElementById("radioBest"); + items.rdbClassic = document.getElementById("radioClassic"); + items.rdbNonFiction = document.getElementById("radioNon"); + items.Cost = document.getElementById("cost"); + items.ImageUrl = document.getElementById("image"); + items.Rating = 1; + items.Title = document.getElementById("title"); + + items.Hint = document.getElementById("formHint"); + + items.btnSbmtForm = document.getElementById("formSubmit"); + items.btnResetForm = document.getElementById("formReset"); +}; \ No newline at end of file diff --git a/src/library/scripts/utils/debounce.js b/src/library/scripts/utils/debounce.js new file mode 100644 index 000000000..87048ae0a --- /dev/null +++ b/src/library/scripts/utils/debounce.js @@ -0,0 +1,10 @@ +function debounce(cb, delay) { + var timer = null; + return function(...args) { + if (timer) clearTimeout(timer); + timer = setTimeout(function() { + cb.apply(this, args); + timer = null; + }, delay); + }; +} \ No newline at end of file diff --git a/src/library/scripts/utils/idGenerator.js b/src/library/scripts/utils/idGenerator.js new file mode 100644 index 000000000..100b2ce49 --- /dev/null +++ b/src/library/scripts/utils/idGenerator.js @@ -0,0 +1,5 @@ +var globalId = 0; + +function generateId() { + return globalId++; +} \ No newline at end of file diff --git a/src/library/scripts/utils/request.js b/src/library/scripts/utils/request.js new file mode 100644 index 000000000..e4cebf8b3 --- /dev/null +++ b/src/library/scripts/utils/request.js @@ -0,0 +1,12 @@ +async function request(url) { + try { + var response = await fetch(url); + if (response.ok) { + return await response.json(); + } + throw new Error(response.statusText); + } catch (err) { + alert("Server request failed: " + err); + } + return undefined; +} \ No newline at end of file