All language subtitles for 12. PROJECT 2 Modal Window

af Afrikaans
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bn Bengali
bs Bosnian
bg Bulgarian
ca Catalan
ceb Cebuano
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
tl Filipino
fi Finnish
fr French
fy Frisian
gl Galician
ka Georgian
de German
el Greek
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
km Khmer
ko Korean
ku Kurdish (Kurmanji)
ky Kyrgyz
lo Lao
la Latin
lv Latvian
lt Lithuanian
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mn Mongolian
my Myanmar (Burmese)
ne Nepali
no Norwegian
ps Pashto
fa Persian Download
pl Polish
pt Portuguese
pa Punjabi
ro Romanian
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
st Sesotho
sn Shona
sd Sindhi
si Sinhala
sk Slovak
sl Slovenian
so Somali
es Spanish
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
te Telugu
th Thai
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
or Odia (Oriya)
rw Kinyarwanda
tk Turkmen
tt Tatar
ug Uyghur
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 1 00:00:00,567 --> 00:00:02,780 Welcome back. 2 2 00:00:02,780 --> 00:00:05,050 Let's now start working on project 3 3 00:00:05,050 --> 00:00:07,303 number two of this section. 4 4 00:00:08,760 --> 00:00:10,380 And in this small project, 5 5 00:00:10,380 --> 00:00:13,870 we're gonna build our first UI component. 6 6 00:00:13,870 --> 00:00:16,300 And that is this modal window 7 7 00:00:16,300 --> 00:00:17,940 that we can see here, 8 8 00:00:17,940 --> 00:00:21,040 by opening, or by clicking actually, 9 9 00:00:21,040 --> 00:00:23,000 on one of these buttons. 10 10 00:00:23,000 --> 00:00:24,480 So I'm sure you've seen this kind 11 11 00:00:24,480 --> 00:00:28,680 of component all over the place when visiting webpages. 12 12 00:00:28,680 --> 00:00:32,220 And so it's simply this window here, basically, 13 13 00:00:32,220 --> 00:00:35,300 and this overlay, which gets overlaid 14 14 00:00:35,300 --> 00:00:38,550 over the rest of the page, right. 15 15 00:00:38,550 --> 00:00:41,650 So no matter which of these three buttons we click, 16 16 00:00:41,650 --> 00:00:45,070 it will always open this modal window. 17 17 00:00:45,070 --> 00:00:47,860 And to close this window, as you already saw, 18 18 00:00:47,860 --> 00:00:50,519 we can either click this button here, 19 19 00:00:50,519 --> 00:00:53,209 or we can click outside of the window. 20 20 00:00:53,209 --> 00:00:55,780 So basically, on this overlay, 21 21 00:00:55,780 --> 00:00:58,700 and again, I'm sure that you have seen this functionality 22 22 00:00:58,700 --> 00:01:00,603 when visiting other webpages. 23 23 00:01:01,780 --> 00:01:03,268 So that worked as well. 24 24 00:01:03,268 --> 00:01:06,148 And finally, we can also close this window 25 25 00:01:06,148 --> 00:01:10,553 by hitting the Esc key on our keyboard, like this. 26 26 00:01:11,620 --> 00:01:14,770 Now okay and this is actually very simple 27 27 00:01:14,770 --> 00:01:16,710 and very easy to build, 28 28 00:01:16,710 --> 00:01:19,490 probably way easier than it looks like. 29 29 00:01:19,490 --> 00:01:21,860 But it will still be very useful 30 30 00:01:21,860 --> 00:01:24,214 to learn how to work with classes. 31 31 00:01:24,214 --> 00:01:28,348 And that's super important, because manipulating classes 32 32 00:01:28,348 --> 00:01:32,860 is actually the main way in which we manipulate webpages. 33 33 00:01:32,860 --> 00:01:36,700 Okay, now, here on the left side, I still have to code 34 34 00:01:36,700 --> 00:01:38,820 from the previous project open. 35 35 00:01:38,820 --> 00:01:41,340 And that's because I wanted to show you 36 36 00:01:41,340 --> 00:01:44,140 how to close the live Server. 37 37 00:01:44,140 --> 00:01:46,693 So let's go back to the terminal. 38 38 00:01:48,160 --> 00:01:50,190 And so as we hit new terminal, 39 39 00:01:50,190 --> 00:01:52,363 it actually creates a new terminal. 40 40 00:01:53,430 --> 00:01:55,460 So if we want to go to the first one 41 41 00:01:55,460 --> 00:01:57,300 that was already running, we need 42 42 00:01:57,300 --> 00:02:00,356 to go here to this menu here. 43 43 00:02:00,356 --> 00:02:04,200 And then number one, which is this node. 44 44 00:02:04,200 --> 00:02:07,225 So to change this, now we hit Ctrl C, 45 45 00:02:07,225 --> 00:02:09,710 and that's even control on a Mac. 46 46 00:02:09,710 --> 00:02:13,210 So it's not Command C, it is Ctrl C. 47 47 00:02:13,210 --> 00:02:16,590 And I guess on Windows, it's gonna be the same. 48 48 00:02:16,590 --> 00:02:20,130 But if it's not, you can just click this trash can here. 49 49 00:02:20,130 --> 00:02:22,747 And that will also then kill the terminal. 50 50 00:02:22,747 --> 00:02:27,050 So as I hit Ctrl, C, the process has finished. 51 51 00:02:27,050 --> 00:02:30,020 And so the live Server is no longer running. 52 52 00:02:30,020 --> 00:02:32,763 So if I come here, to this URL, 53 53 00:02:33,900 --> 00:02:35,723 so this local host URL, 54 54 00:02:35,723 --> 00:02:39,014 plus the current port, which is 8080. 55 55 00:02:39,014 --> 00:02:42,890 So if I now reload this page, it will be gone. 56 56 00:02:42,890 --> 00:02:45,150 So there's no connection possible anymore, 57 57 00:02:45,150 --> 00:02:49,110 because I just killed the live Server okay, 58 58 00:02:49,110 --> 00:02:51,683 just wanted to let you know about that. 59 59 00:02:51,683 --> 00:02:56,683 Okay, anyway, let's now close up this folder here 60 60 00:02:57,120 --> 00:02:58,763 and open a new one. 61 61 00:03:00,340 --> 00:03:03,690 And, as always, I already have here the starter files 62 62 00:03:03,690 --> 00:03:06,210 for this modal project. 63 63 00:03:06,210 --> 00:03:09,283 So let's open up a new VS code window. 64 64 00:03:13,140 --> 00:03:15,383 And let's open up this one. 65 65 00:03:16,570 --> 00:03:19,810 And once again, I have the prettier configuration here. 66 66 00:03:19,810 --> 00:03:24,810 And then the index, the JavaScript and the CSS styles. 67 67 00:03:26,320 --> 00:03:28,513 Okay, open up script. 68 68 00:03:29,380 --> 00:03:31,350 And actually, we can open all of them, 69 69 00:03:31,350 --> 00:03:35,223 because we will want to take a look at the three files. 70 70 00:03:36,650 --> 00:03:40,333 Okay. And as before, we still are using strict mode. 71 71 00:03:40,333 --> 00:03:42,050 And so I already included 72 72 00:03:42,050 --> 00:03:44,573 that here at the top of the file. 73 73 00:03:44,573 --> 00:03:48,420 Okay, and now let's get to work actually. 74 74 00:03:48,420 --> 00:03:50,490 Now this time, we will actually start 75 75 00:03:50,490 --> 00:03:52,970 by selecting everything that we're gonna need 76 76 00:03:52,970 --> 00:03:55,360 for this project so that's usually 77 77 00:03:55,360 --> 00:03:58,260 what we do when we build a project like this. 78 78 00:03:58,260 --> 00:04:00,369 So we select the elements that we need, 79 79 00:04:00,369 --> 00:04:04,140 and then we store the selections into variables. 80 80 00:04:04,140 --> 00:04:07,580 Okay, and then we can use them over and over again. 81 81 00:04:07,580 --> 00:04:10,550 So that's way better than selecting the same elements 82 82 00:04:10,550 --> 00:04:14,490 over and over again, like we did in the last project. 83 83 00:04:14,490 --> 00:04:16,500 Alright, but in our last project, 84 84 00:04:16,500 --> 00:04:18,610 I didn't want to overcomplicate stuff 85 85 00:04:18,610 --> 00:04:21,105 and do too many things at the same time. 86 86 00:04:21,105 --> 00:04:24,716 And so I just selected all the stuff multiple times. 87 87 00:04:24,716 --> 00:04:26,830 But again, this time, we will have 88 88 00:04:26,830 --> 00:04:28,355 all the necessary selections. 89 89 00:04:28,355 --> 00:04:31,360 So all the necessary elements that we're gonna need, 90 90 00:04:31,360 --> 00:04:34,210 nicely organized here at the top of the file, 91 91 00:04:34,210 --> 00:04:36,840 each in its own variable. 92 92 00:04:36,840 --> 00:04:40,060 So let's take a look at the HTML. 93 93 00:04:40,060 --> 00:04:43,365 And so here we see the three buttons. 94 94 00:04:43,365 --> 00:04:45,994 So that these three buttons, 95 95 00:04:45,994 --> 00:04:49,504 and then we actually already have the modal window, 96 96 00:04:49,504 --> 00:04:50,993 here in the code. 97 97 00:04:52,120 --> 00:04:54,224 So this div element here. 98 98 00:04:54,224 --> 00:04:57,340 So it's already in the code it's simply hidden. 99 99 00:04:57,340 --> 00:04:59,561 That's why it has this hidden class. 100 100 00:04:59,561 --> 00:05:03,150 And now in the CSS, let's come here 101 101 00:05:03,150 --> 00:05:05,700 to the bottom of the file. 102 102 00:05:05,700 --> 00:05:07,360 And so the hidden class, 103 103 00:05:07,360 --> 00:05:10,460 simply set the display to none. 104 104 00:05:10,460 --> 00:05:13,640 And so that's why the window is currently hidden. 105 105 00:05:13,640 --> 00:05:17,040 All right so again, as I said in the beginning, 106 106 00:05:17,040 --> 00:05:19,710 in this project, we will work with Classes. 107 107 00:05:19,710 --> 00:05:22,864 And so, this hidden class is the main class 108 108 00:05:22,864 --> 00:05:24,903 that we will be concerned with. 109 109 00:05:26,610 --> 00:05:29,300 So, anyway, this means that we will not 110 110 00:05:29,300 --> 00:05:31,150 basically create the HTML 111 111 00:05:31,150 --> 00:05:34,060 for the modal window using JavaScript, 112 112 00:05:34,060 --> 00:05:37,220 it is already there, all we will do is to show it 113 113 00:05:37,220 --> 00:05:38,950 and to hide it, according 114 114 00:05:38,950 --> 00:05:40,963 to the clicks on the buttons. 115 115 00:05:42,010 --> 00:05:43,430 So that's the modal. 116 116 00:05:43,430 --> 00:05:46,890 And that is the overlay. 117 117 00:05:46,890 --> 00:05:48,960 So that's basically this dark part here, 118 118 00:05:48,960 --> 00:05:51,081 which hides the background. 119 119 00:05:51,081 --> 00:05:54,180 And then here, we have this button 120 120 00:05:54,180 --> 00:05:56,450 to close the modal window. 121 121 00:05:56,450 --> 00:05:58,450 And so that's all that we need. 122 122 00:05:58,450 --> 00:06:00,846 So again, we need to select the modal, 123 123 00:06:00,846 --> 00:06:04,650 the overlay, the close modal button, 124 124 00:06:04,650 --> 00:06:07,383 and then of course, the show modal buttons. 125 125 00:06:08,710 --> 00:06:11,570 Okay, so let's do that 126 126 00:06:15,170 --> 00:06:20,170 So const, modal, is document dot query selector. 127 127 00:06:22,330 --> 00:06:24,630 And then just like before, we are looking 128 128 00:06:24,630 --> 00:06:28,760 for the element with the class of modal. 129 129 00:06:28,760 --> 00:06:32,750 Okay so, just like we did in the first project, 130 130 00:06:32,750 --> 00:06:35,470 we select an element using the selector, 131 131 00:06:35,470 --> 00:06:38,140 but then this time, we actually store the results 132 132 00:06:38,140 --> 00:06:41,210 of the selection so the selected element 133 133 00:06:41,210 --> 00:06:44,903 in this variable okay. 134 134 00:06:45,860 --> 00:06:48,500 So that's the element with the class model. 135 135 00:06:48,500 --> 00:06:51,673 Now we want overlay, and then close modal. 136 136 00:06:54,710 --> 00:06:57,750 So overlay, and of course, 137 137 00:06:57,750 --> 00:06:59,348 we could give these any names 138 138 00:06:59,348 --> 00:07:00,460 that we want it. 139 139 00:07:00,460 --> 00:07:03,580 But these names make it easy 140 140 00:07:03,580 --> 00:07:05,403 to understand what they are. 141 141 00:07:06,440 --> 00:07:08,410 So I'm giving them the same names 142 142 00:07:08,410 --> 00:07:10,293 as the class names, basically. 143 143 00:07:11,145 --> 00:07:13,290 So that's the overlay. 144 144 00:07:13,290 --> 00:07:15,513 And now the close modal button. 145 145 00:07:17,030 --> 00:07:19,247 Let's call this one actually a button. 146 146 00:07:19,247 --> 00:07:21,920 So btn, which stands for button, 147 147 00:07:21,920 --> 00:07:26,920 and then close modal document, dot query selector. 148 148 00:07:30,280 --> 00:07:35,173 And then this class is close dash modal. 149 149 00:07:36,660 --> 00:07:41,660 Okay and now finally, we also want the show modal buttons. 150 150 00:07:41,875 --> 00:07:46,150 Now, there are actually three elements with this class name. 151 151 00:07:46,150 --> 00:07:47,500 So let me show you what happens 152 152 00:07:47,500 --> 00:07:49,650 when we simply select in the same way 153 153 00:07:49,650 --> 00:07:50,773 that we did before. 154 154 00:07:53,470 --> 00:07:56,915 So let's say button, or buttons, actually, 155 155 00:07:56,915 --> 00:07:59,690 because we want multiple, openmodal, 156 156 00:08:02,502 --> 00:08:07,502 and then document dot query selector dot openmodal okay. 157 157 00:08:12,840 --> 00:08:14,270 And so what will happens 158 158 00:08:14,270 --> 00:08:15,920 when we lock this to the console. 159 159 00:08:17,560 --> 00:08:21,938 So buttons, openmodel, that's the one. 160 160 00:08:21,938 --> 00:08:24,300 And now to actually see this, we need 161 161 00:08:24,300 --> 00:08:26,403 to again, start the live Server. 162 162 00:08:27,290 --> 00:08:31,272 So new terminal, clear this console. 163 163 00:08:31,272 --> 00:08:33,460 And then all they have to do is 164 164 00:08:33,460 --> 00:08:38,270 to type live-Server hit enter. 165 165 00:08:38,270 --> 00:08:40,590 And here we go. 166 166 00:08:40,590 --> 00:08:43,270 So this is our modal window now. 167 167 00:08:43,270 --> 00:08:45,370 And this one, we can now close. 168 168 00:08:45,370 --> 00:08:47,780 And actually, it has the exact same URL. 169 169 00:08:47,780 --> 00:08:52,450 So it's always this 127 001, which stands 170 170 00:08:52,450 --> 00:08:55,430 for localhost at Port 8080. 171 171 00:08:55,430 --> 00:08:57,300 So if we reloaded this one, 172 172 00:08:57,300 --> 00:08:59,145 it would show us the same thing. 173 173 00:08:59,145 --> 00:09:02,600 Okay, so we can just close one of them. 174 174 00:09:02,600 --> 00:09:06,260 And so it looks exactly the same as the demo. 175 175 00:09:06,260 --> 00:09:08,800 But of course, nothing is gonna happen yet. 176 176 00:09:08,800 --> 00:09:12,730 'Cause as you know, we have no event handlers on any 177 177 00:09:12,730 --> 00:09:14,590 of these buttons yet. 178 178 00:09:14,590 --> 00:09:16,993 But now, I wanted to take a look at the console. 179 179 00:09:19,540 --> 00:09:24,080 And Yep, and now 180 180 00:09:24,080 --> 00:09:27,580 here we get no for some reason. 181 181 00:09:27,580 --> 00:09:30,190 So it means that it could not select anything 182 182 00:09:30,190 --> 00:09:32,431 here for this selector. 183 183 00:09:32,431 --> 00:09:36,560 And so let's take a look yeah, 184 184 00:09:36,560 --> 00:09:39,293 actually it is show modal and not open. 185 185 00:09:40,920 --> 00:09:43,300 Okay, so let's fix that. 186 186 00:09:43,300 --> 00:09:46,110 So it's not open it is show 187 187 00:09:46,110 --> 00:09:47,410 and maybe you have spotted 188 188 00:09:47,410 --> 00:09:49,840 that if you took a more careful look 189 189 00:09:49,840 --> 00:09:51,463 at the HTML than I did. 190 190 00:09:52,590 --> 00:09:56,060 Now Anyway, now we see this button here selected. 191 191 00:09:56,060 --> 00:09:57,930 However, as you can see, 192 192 00:09:57,930 --> 00:10:01,060 it is only the first one okay. 193 193 00:10:01,060 --> 00:10:02,930 And so now we see the limitation 194 194 00:10:02,930 --> 00:10:05,560 of or query selector method here 195 195 00:10:05,560 --> 00:10:07,100 for the first time, 196 196 00:10:07,100 --> 00:10:09,360 so whenever we use query selector 197 197 00:10:09,360 --> 00:10:13,580 with a selector, which actually matches multiple elements, 198 198 00:10:13,580 --> 00:10:16,390 only the first one will get selected. 199 199 00:10:16,390 --> 00:10:18,730 And so here, we need another one. 200 200 00:10:18,730 --> 00:10:20,200 But it's pretty similar. 201 201 00:10:20,200 --> 00:10:22,313 It's called query selectorAll. 202 202 00:10:23,550 --> 00:10:25,900 So that's a pretty obvious name, 203 203 00:10:25,900 --> 00:10:27,810 but it's gonna do the job. 204 204 00:10:27,810 --> 00:10:29,576 So as I save now, now, you see 205 205 00:10:29,576 --> 00:10:33,742 that we get something called a Nodelist here. 206 206 00:10:33,742 --> 00:10:35,540 So let me open that. 207 207 00:10:35,540 --> 00:10:37,550 And now as I hover, you see 208 208 00:10:37,550 --> 00:10:41,210 that these are actually all of our three buttons. 209 209 00:10:41,210 --> 00:10:46,100 Okay, so this NodeList here is a little bit like an array. 210 210 00:10:46,100 --> 00:10:48,620 It's not exactly like an array. 211 211 00:10:48,620 --> 00:10:50,530 But here for now, it works 212 212 00:10:50,530 --> 00:10:52,560 as though it was an array. 213 213 00:10:52,560 --> 00:10:55,520 Okay, and so now, if we want to do something, 214 214 00:10:55,520 --> 00:10:57,693 for example, to all of these buttons, 215 215 00:10:57,693 --> 00:11:00,850 then we can simply loop through this NodeList 216 216 00:11:00,850 --> 00:11:02,323 and do something with them. 217 217 00:11:03,530 --> 00:11:05,313 So let's actually quickly do that. 218 218 00:11:07,540 --> 00:11:10,080 So we will now again, use the for loop. 219 219 00:11:12,410 --> 00:11:14,410 And now, I hope there is no need 220 220 00:11:14,410 --> 00:11:17,827 to explain any more how this one works. 221 221 00:11:17,827 --> 00:11:20,570 So I should stay below the length 222 222 00:11:20,570 --> 00:11:22,900 of this NodeList, which again, 223 223 00:11:22,900 --> 00:11:24,590 for our purposes here works 224 224 00:11:24,590 --> 00:11:27,690 just like an array buttons, 225 225 00:11:27,690 --> 00:11:31,870 open modal dot length, and then at the end 226 226 00:11:31,870 --> 00:11:34,890 of iteration, increase the counter. 227 227 00:11:34,890 --> 00:11:36,070 And so in each iteration, 228 228 00:11:36,070 --> 00:11:38,000 what we want to do is simply 229 229 00:11:38,000 --> 00:11:40,820 to log to the console, the text content 230 230 00:11:40,820 --> 00:11:42,933 of each of them all right, 231 231 00:11:42,933 --> 00:11:47,933 so what we want to do is buttons, open modal. 232 232 00:11:49,860 --> 00:11:51,820 And then we take the current one. 233 233 00:11:51,820 --> 00:11:54,970 And so this here is now an element okay, 234 234 00:11:54,970 --> 00:11:57,370 it's one of these elements. 235 235 00:11:57,370 --> 00:11:59,610 And, well, now it already logged 236 236 00:11:59,610 --> 00:12:01,630 because it saved the file. 237 237 00:12:01,630 --> 00:12:03,880 But yeah, anyway, each 238 238 00:12:03,880 --> 00:12:05,630 of these here is one element. 239 239 00:12:05,630 --> 00:12:07,730 And to now on each of them, 240 240 00:12:07,730 --> 00:12:11,040 we can simply use the text content property, 241 241 00:12:11,040 --> 00:12:14,392 just like we did in the last project all right. 242 242 00:12:14,392 --> 00:12:16,360 So let's save it again. 243 243 00:12:16,360 --> 00:12:19,970 And indeed, now we get to three text contents 244 244 00:12:19,970 --> 00:12:22,235 for all the three buttons. 245 245 00:12:22,235 --> 00:12:24,290 And here, you might have noticed 246 246 00:12:24,290 --> 00:12:28,890 that I didn't even use the curly braces to define a block. 247 247 00:12:28,890 --> 00:12:32,060 And that's because just like an if else statement, 248 248 00:12:32,060 --> 00:12:34,000 if there is only one line of code 249 249 00:12:34,000 --> 00:12:36,690 that I want to execute, I actually don't have 250 250 00:12:36,690 --> 00:12:39,530 to create this block okay, I can 251 251 00:12:39,530 --> 00:12:41,992 just write one line after the for loop. 252 252 00:12:41,992 --> 00:12:43,370 And then that's the one 253 253 00:12:43,370 --> 00:12:46,997 that will be iterated over and over again okay. 254 254 00:12:46,997 --> 00:12:48,975 So again, this works just fine. 255 255 00:12:48,975 --> 00:12:52,560 And now I have a way of selecting multiple elements 256 256 00:12:52,560 --> 00:12:54,530 with the same class and then 257 257 00:12:54,530 --> 00:12:56,780 with the for loop, I can do something 258 258 00:12:56,780 --> 00:12:57,822 for each of them. 259 259 00:12:57,822 --> 00:13:02,090 In this case, all we did was to log their text content 260 260 00:13:02,090 --> 00:13:04,020 through console, but in the future, 261 261 00:13:04,020 --> 00:13:04,853 we will then be able 262 262 00:13:04,853 --> 00:13:07,510 to do real stuff using this technique. 263 263 00:13:07,510 --> 00:13:10,210 Okay, and that's it for this video. 264 264 00:13:10,210 --> 00:13:11,660 In the next one, we will actually 265 265 00:13:11,660 --> 00:13:13,940 already make this model window work. 266 266 00:13:13,940 --> 00:13:16,790 So don't wait and let's move on 267 267 00:13:16,790 --> 00:13:18,653 to the next video right away. 22447

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.