How To Create A Search Bar In JavaScript

แชร์
ฝัง
  • เผยแพร่เมื่อ 25 ธ.ค. 2024

ความคิดเห็น • 363

  • @user5214
    @user5214 2 ปีที่แล้ว +146

    I'm new to JS, but watching your videos, while not really making me understand everything, always seems to give me a lot more clarity on peripheral ideas to the video, plus giving me an idea of how to think about problems that are beyond my abilities for the time being

    • @cedricmendoza8316
      @cedricmendoza8316 2 ปีที่แล้ว +19

      Just stick to it. You'll go back to these eventually and things you've learned here, will suddenly make sense later.

    • @orzeszekyt4915
      @orzeszekyt4915 2 ปีที่แล้ว

      same

    • @ДианаДиана-с1г
      @ДианаДиана-с1г 2 ปีที่แล้ว

      how are you doing now?

    • @alessiacampana2320
      @alessiacampana2320 ปีที่แล้ว

      me too but i'm not english and this is complicated

    • @UFO_808
      @UFO_808 ปีที่แล้ว

      ey bro how da fuck is it going?

  • @Dsworddance22
    @Dsworddance22 2 ปีที่แล้ว +96

    I'm literally creating a project that needs a search bar right now, so this video was perfect timing

    • @anagnose
      @anagnose 2 ปีที่แล้ว +1

      Me too ;)

    • @user-vd5im2mx5g
      @user-vd5im2mx5g 2 ปีที่แล้ว +3

      I think that just means google is stalking you lol

    • @observer-0_0
      @observer-0_0 2 ปีที่แล้ว

      mee too 🤗

    • @001你好
      @001你好 2 ปีที่แล้ว

      so now u could able to create search with ur own 😄

  • @JasonKoolz
    @JasonKoolz 2 ปีที่แล้ว +13

    As part of my college assignment, I was tasked with creating a review website, so this really helped in making it more fledged out and professional-looking. Thank you for the video, it's simple and really well done!

  • @bobdinitto
    @bobdinitto 2 ปีที่แล้ว +20

    I absorbed this video like a sponge in serendipity today because I happen to be working on an HTML search bar for my feathersjs client application right now. It's mostly working and I'm in the middle of chasing down some bugs but you've given me some great ideas to improve it. Thanks Kyle!

  • @e.v.f595
    @e.v.f595 2 ปีที่แล้ว +1

    2 years and you still manage to keep helping me. Thanks a lot!

  • @Falzer
    @Falzer 2 ปีที่แล้ว

    This just made my life easier
    Before I always make two objects, 1 for the full list of information and the other 1 is for filtering,
    every input event a loop occurs to check if the letter typed by the user matches to any information thats in the full list object
    Its brilliant that appending everything on the webpage and then hide those who doesnt match from the input

  • @AraliciaMoran
    @AraliciaMoran 2 ปีที่แล้ว +58

    Very nice video, and well made explanations. Just a small caveat : such a search shouldn't be used on a huge amount of data. When needing to filter through many entries, or through very large entries, it can be better to use a server-side filter.
    This will often result in a faster result due to the server being able to filter faster than most devices, less data being transmited, and the ability to cache common search results to deliver the same response to multiple users.
    This does go behond the scope of an easy tutorial, but I believe it's important to mention it, since I've seen people fall into the pitfall of using a full-javascript search for multi-thousand entries search; and it doesn't always goes well for them.

    • @Retrohertz
      @Retrohertz 2 ปีที่แล้ว +5

      Yes, agreed but I think he was just demonstrating how it can be done client-side.

    • @tomblitz22
      @tomblitz22 2 ปีที่แล้ว

      Agreed. I'll add that search can be implemented more efficiently than a one-by-one-filter by using a data structure meant for that use case (even if done in browser-side js), and that on the server you have ElasticSearch at your disposal to do just that.

    • @macd7743
      @macd7743 ปีที่แล้ว +2

      Thanks for drawing attention to this extremely important point.

  • @JoeMcKenna-pu7kr
    @JoeMcKenna-pu7kr 2 ปีที่แล้ว +4

    Yours are the best tutorials I've found on the web.

  • @Himanshu86400
    @Himanshu86400 7 หลายเดือนก่อน +5

    After spending an hour tryna figure out how the does the toggle hide functionality works so well, I finally understand.
    It's basically has to do with the fact that classList.toggle("className", force) works differently with two arguments. One might assume that if force boolean is true, toggle will be performed, else ignored. But that isn't the case.
    In case of two arguments:
    - toggle will add the class if the second argument (force) is true.
    - and remove the class if the second argument (force) is false.
    That's why elements don't keep toggling when search is invalid consecutively.

  • @sayeghjoe
    @sayeghjoe 2 ปีที่แล้ว +12

    Kyle you’re awesome. I can’t tell you how much I love your tutorials. It’s straight to the point, comprehensive, and consistently good.

  • @stevemcardle2013
    @stevemcardle2013 2 ปีที่แล้ว +71

    Kyle. This is a filter not a search. Nobody building apps to search for a user would load ALL of the users first, especially if there are 1000's of them, to then filter them down. It would have been a much more realistic use case to create a search with typeahead functionality connected to a DB. This is a valid filter usage for other use cases but for users is just not realistic.

    • @richardIambert
      @richardIambert 2 ปีที่แล้ว +1

      What is typhead functionality?

    • @stevemcardle2013
      @stevemcardle2013 2 ปีที่แล้ว +12

      @@richardIambert Hi Richard. As you type new searches are performed. This needs to take into account debounce so that not EVERY keystroke performs a new search, rather only do this after a user stops typing for X number of seconds

    • @mariahkitsune3625
      @mariahkitsune3625 ปีที่แล้ว +1

      Yeah I was wondering how this would be able to handle so much data. I'm actually trying to find a way to deal with 1000+ data for a project.

    • @brandonampang2199
      @brandonampang2199 6 หลายเดือนก่อน +1

      How about don’t show the todos, and then show it when you type in the search bar

    • @zalos5555
      @zalos5555 4 หลายเดือนก่อน

      ​@@brandonampang2199 Bro it's a huge problem because first you will have to pull up 1000s of users...
      And then filter it, that's gonna take up a lot of time

  • @GashyDev
    @GashyDev 2 ปีที่แล้ว +4

    A good thing that might of been an idea to mention, is to set a stagger/delay to the fetch request itself if it's ever setup to trigger upon user input - IE set a 250/500ms timer, if the user hasnt made any additional inputs, fire the fetch request.
    Because having a fetch request (to what would usually be a db or an API which has its own set of throttles) fire rapidly for each individual character could come with it own caveats overtime

    • @mykalimba
      @mykalimba 2 ปีที่แล้ว +2

      In this project, there's only one fetch request that's made the entire time. It runs once when the page is loaded, not every time the input changes.

    • @raphaelwirnsberger6813
      @raphaelwirnsberger6813 2 ปีที่แล้ว +1

      @@mykalimba Thanks. Thats literally what I was just going to write right now.

    • @GashyDev
      @GashyDev 2 ปีที่แล้ว +1

      @@mykalimba I know its only applied to the initial load in this example, but i was more on about other use cases as not all the data is going to be loaded in straight away in every production scenario.

  • @davidjamesmclean6325
    @davidjamesmclean6325 ปีที่แล้ว

    you have the best channel for web dev on youtube. Great explanations of the solutions.

  • @colindante5164
    @colindante5164 2 ปีที่แล้ว

    With this tutorial I won't have to refactor anything. Thankyou for your clear explanation and throwing in new concepts that I wasn't aware of. So grateful)))

  • @jamesclark2020
    @jamesclark2020 ปีที่แล้ว

    My gosh that is awesome. I can definitely foresee myself watching this about 10 more times before I actually try to do it myself.

  • @HandledToaster2
    @HandledToaster2 2 ปีที่แล้ว +2

    I love your channel. I love how you always take the time to explain how each new piece of code works, and why it's there.
    You're an amazing teacher. I recommend your channel to everyone.

  • @hiyozumi
    @hiyozumi 2 ปีที่แล้ว

    your channel is so underrated. Thank you so much, it helps me a lot with my college projects!

  • @jamesabbott1517
    @jamesabbott1517 2 ปีที่แล้ว

    Just finished a coding bootcamp and your video is amazing at building on from what we learned. Your explanations are what make this video so great, thankyou! I think I wrote more comments than code!

    • @HayWhy_Pappy
      @HayWhy_Pappy ปีที่แล้ว

      How's the job search coming off after your bootcamp?

    • @jamesabbott1517
      @jamesabbott1517 ปีที่แล้ว

      Going very well thank you! was lucky and managed to find a job very soon after the boot camp! Been at my new company coming on for a year now and loving it. Bootcamps are an expensive way into the industry and maybe not the right move for everyone. But if you research the right one for you, then they can be a fantastic path forward.

    • @HayWhy_Pappy
      @HayWhy_Pappy ปีที่แล้ว +1

      @@jamesabbott1517 Thanks for sharing man. Do appreciate the response.

  • @vigormilo168
    @vigormilo168 2 ปีที่แล้ว +7

    I replaced all data- selectors with class and id selectors and it works fine. i even added h1.header on top of the body and it still works as expected.

  • @michaelparkernorton4841
    @michaelparkernorton4841 ปีที่แล้ว

    Mann way to go this is pro! I didn't even know about the html template tag. Very clear and smooth tutorial. Very well structured. Liked and subscribed.

  • @appuser
    @appuser 2 ปีที่แล้ว +1

    I love you, a quick tutorial to start the day. Bravo, my friend!😀

  • @ifailu1
    @ifailu1 2 ปีที่แล้ว

    You are a very gifted presenter. Please continue.

  • @devop1646
    @devop1646 ปีที่แล้ว

    Very well explained. Even I don't know advanced JS still I understood what is done here, how and why. That's is what I expect from you. Thanks a lot!! @WebDevSimplified

  • @codingwale8
    @codingwale8 ปีที่แล้ว

    thanx bro i was making website for helping ayurvedic student and your video really helped me
    😘

  • @threeone6012
    @threeone6012 2 ปีที่แล้ว +3

    Thanks Kyle for not doing this with React.
    I love straight JS!

  • @Pareshbpatel
    @Pareshbpatel 2 ปีที่แล้ว +10

    So much knowledge imparted in so short a time! - So fluently delivered. Thank you, Kyle.
    {2022-01-29}

  • @JeremiKress
    @JeremiKress 2 ปีที่แล้ว +3

    Wow, as a JS newbie I've found that Javascript is very functional 😲

  • @vimwizard
    @vimwizard 2 ปีที่แล้ว +2

    I just started learning js , i learn today arrays methods.. , i don't understand how he made that search bar yet but i will come back later to see it again.

  • @bailiojaycee233
    @bailiojaycee233 2 ปีที่แล้ว +4

    Alternatively, if you want to use a hyperlink or images from your data instead of just text, do:
    const hyperlink = card.querySelector("[data-link]");
    const imgSource = card.querySelector("[data-src]");
    hyperlink.href = user.link;
    imgSource.src =user.img;

    • @matitos
      @matitos 2 ปีที่แล้ว +2

      omg thx!!!

    • @bailiojaycee233
      @bailiojaycee233 2 ปีที่แล้ว +2

      @@matitos Happy to help

  • @jodufan8754
    @jodufan8754 2 ปีที่แล้ว +3

    Basically only to know theres an search input type made the Video worth watching

  • @kwanelekhumalo
    @kwanelekhumalo 2 ปีที่แล้ว +3

    Dude!! How are you always able to no just solve my problems, but show me how I can simplify my code??? Every time!! 😂👏🏾👏🏾💪🏾💪🏾💪🏾

  • @TheMetalMag
    @TheMetalMag 2 ปีที่แล้ว

    u're amazing! u said can't know everything but u do and I'm always stunted by all the knowledge u got. I wish one day I get this ability with JS

  • @andreiradovici8184
    @andreiradovici8184 2 ปีที่แล้ว +2

    Very useful and educative video. I want to thank you for your time and dedication. Good luck in everything man!

  • @frankdrolet9439
    @frankdrolet9439 2 ปีที่แล้ว

    Really good tutorial, quick and right to the point, that's what we need in 2022! Thanks

  • @PandaciteYT
    @PandaciteYT 2 ปีที่แล้ว

    Thanks So Much, All The Other People Just Showed Only CSS, and front end

  • @mrdbourke
    @mrdbourke 2 ปีที่แล้ว

    Excellent video! Thank you so much!

  • @UmairSadaqat
    @UmairSadaqat 2 ปีที่แล้ว

    The one thing you need to work on and what is it your playlist please organize your playlist when someone looking for a beginner to advanced JavaScript course your playlist is mashed up we all love your content and your design so consider this bro Love from Pakistan 🚀

  • @yanalashivaprasadreddy3010
    @yanalashivaprasadreddy3010 2 ปีที่แล้ว

    This is the video I have looking for. Thank you.

  • @RobertMcGovernTarasis
    @RobertMcGovernTarasis 2 ปีที่แล้ว +2

    One change I would make is to simply store a lowercase version of the name and email address when you store the user object. Rather than calling toLowerCase on name or email for all users on each and every single key pressed in the search bar.

  • @CasualUploader-ey4rw
    @CasualUploader-ey4rw 10 หลายเดือนก่อน

    We need more developers like u.

  • @vigormilo168
    @vigormilo168 2 ปีที่แล้ว +14

    Hello Kyle, why are you using data attributes to select elements with querySelector and not the ids or classes that already exist on those elements?

    • @kevinzunigacuellar
      @kevinzunigacuellar 2 ปีที่แล้ว +2

      It gives him more flexibility to add and repeat classes. I am not sure about ids but I don't think it's good practice to repeat ids since you usually create an ID to reference one element.

    • @vigormilo168
      @vigormilo168 2 ปีที่แล้ว +2

      Ok but in this particular example he does card.querySelector(...) and not document.querySelector(...) so i don't think classes would be a problem if they are repeated elsewhere.

    • @kevinzunigacuellar
      @kevinzunigacuellar 2 ปีที่แล้ว +1

      @@vigormilo168 card query selector is using document.query selector under the hood to reference the card template element. In this case he has a second query selector nested inside the card called data-header and data-body.

    • @vigormilo168
      @vigormilo168 2 ปีที่แล้ว

      I will test this case and get back to you when I find some time. Thanks!

    • @mykalimba
      @mykalimba 2 ปีที่แล้ว +3

      I believe he uses data attributes as a personal choice. My personal choice is to use an id, as it is implicit that there should be at most one element that matches the id. IMO, using data attributes or class names in an instance like this is not the best choice, because you're looking for exactly one element in the document (or card), but it is technically possible for the data attribute or class name to be assigned the multiple elements.

  • @zurdency4005
    @zurdency4005 ปีที่แล้ว

    Love it. Very very simple and easy to understand. Thanks bro.

  • @BenjaminAster
    @BenjaminAster 2 ปีที่แล้ว +2

    6:00 If you make the script a type=module, you can use top-level-await, so you don't have to use .then().

    • @IAmLesleh
      @IAmLesleh 2 ปีที่แล้ว

      Depending on browser support you require. Safari for example only added it with the very latest version, v15.

  • @chaitanyahazarika9562
    @chaitanyahazarika9562 ปีที่แล้ว

    U R LIKE THE BEST GUY IN THE WORLDDD DUDEEEEE AND WITH THE BESTTT HAIIRRRRR LOVE FROM INDIA

  • @wheat4482
    @wheat4482 2 ปีที่แล้ว

    Thank you so much man!! i really appreciate your content, gold as always.

  • @tahazia6340
    @tahazia6340 2 ปีที่แล้ว

    i love u and your Mind Blowing Programming Skills...!

  • @singInTheDarkness
    @singInTheDarkness 2 ปีที่แล้ว +1

    You're the best. one day I would like to program with the ease with which you do it 🤩

  • @imuentinyannosarumen9789
    @imuentinyannosarumen9789 2 ปีที่แล้ว

    Love your contents man

  • @r0wdybandit015
    @r0wdybandit015 2 ปีที่แล้ว

    Damn dude... I did not know VS code had HTML shortcuts like that.... good stuff

  • @martinn1071
    @martinn1071 ปีที่แล้ว +1

    Legend!!!
    you always have ways of coding that blow my mind !! thanks so much for sharing this !!
    Quick questions tho, why don't you ever use query selectors like id's or classes? You're always creating html data attributes.
    There must be a reason behind it, and I'd love to know it.
    Again, you're awesome. Thanks so much for your content !!

  • @mervinmarba7720
    @mervinmarba7720 ปีที่แล้ว

    man thanks for this clip... more power!

  • @unjoined
    @unjoined 2 ปีที่แล้ว +1

    Loved it! Thank you very much!

  • @BAAAAAAAAAAA
    @BAAAAAAAAAAA 2 ปีที่แล้ว

    Love the first search 💜💜 Time to become a purple monster 😈

  • @sonicalstudios
    @sonicalstudios 2 ปีที่แล้ว

    Amazing tutorial I will be adding this feature to my site

  • @eldenPango
    @eldenPango 2 ปีที่แล้ว

    this is awesome contet!! earned a suscriber here!

  •  2 ปีที่แล้ว +1

    You are the best, like always

  • @SocksWithSandals
    @SocksWithSandals 2 ปีที่แล้ว +1

    That was a very well explained and very understandable example.

  • @environmentNow
    @environmentNow 2 ปีที่แล้ว

    I love tour videos. (The only thing that ennoys me a little is that you never use a semi-colon)

  • @clnguye
    @clnguye 2 ปีที่แล้ว

    Kyle, you’re so good

  • @abdirahmanfarah4886
    @abdirahmanfarah4886 2 ปีที่แล้ว

    Following you from somalia ,Thank you

  • @arvsnacs422
    @arvsnacs422 2 ปีที่แล้ว

    This is short but as a self learner I need to understand how to connect/call the data from different nest or function. I hope i can recall this after a week and after i finish another project tutorial.

  • @mznunaya
    @mznunaya 2 ปีที่แล้ว

    You're a wizard.

  • @thuyatun3575
    @thuyatun3575 2 ปีที่แล้ว

    i have never been more motivated to code. i just wished you would go abit slower because watching your videos are like a speedrun for me xD

  • @martez_da_real
    @martez_da_real ปีที่แล้ว

    I just spent 3 days trying to do this in react, this is so much simpler.

  • @voldemortvi4264
    @voldemortvi4264 2 ปีที่แล้ว

    i love your videos man , thank you so much

  • @RandellMonaghan
    @RandellMonaghan 2 ปีที่แล้ว

    Your tuts actually work and are easy as to follow. Do you have a course or something. where is the best place to learn code by you?

    • @WebDevSimplified
      @WebDevSimplified  2 ปีที่แล้ว

      I have multiple courses at courses.webdevsimplified.com

  • @jessiemoura9632
    @jessiemoura9632 2 ปีที่แล้ว

    Hi, Kyle! I can't tell enough how much this video saved my school project haha. Thanks a lot. You're awesome 😁

  • @fosimuboolubo8891
    @fosimuboolubo8891 2 ปีที่แล้ว

    All I can say is thanks man.

  • @kyleoliver8142
    @kyleoliver8142 2 ปีที่แล้ว

    Thanks Kyle, you're awesome 👌

  • @manakupadhyay
    @manakupadhyay 2 ปีที่แล้ว

    Hi Kyle, thanks for the video.
    Please make another video like this and show us how to use debouncing and throttling.

  • @jayashreejayashree9768
    @jayashreejayashree9768 2 ปีที่แล้ว

    great tutor, excellent presentation.

  • @xenialxerous2441
    @xenialxerous2441 2 ปีที่แล้ว

    Hi! Thanks for this amazing video. Even though it was simple, uncomplicated but informative.

  • @tomasvn09
    @tomasvn09 2 ปีที่แล้ว

    Also with searching, I would add debounce. As this solution Kyle is proposing you would make an API call after every keypress. Debounce adds a delay, when you stop writing fire the event, and make API call.

    • @richardIambert
      @richardIambert 2 ปีที่แล้ว +2

      This solution doesn't make an API call on every key press. The data is fetched once and mapped over into an array. It is the array which is then iterated over on every key press 👍

    • @tomasvn09
      @tomasvn09 2 ปีที่แล้ว

      @@richardIambert Oh I see, good point

  • @thinhvo3904
    @thinhvo3904 2 ปีที่แล้ว +1

    awesome content 👍

  • @gamerbrothers1926
    @gamerbrothers1926 2 ปีที่แล้ว +1

    Very good❤

  • @rajpatel9406
    @rajpatel9406 2 ปีที่แล้ว +1

    Hey Web Dev Simplified i am confused here , what are you writing after class and template
    like " " and "
    thanks and your videos are by far the best among coding channels

    • @fgsaldanha
      @fgsaldanha 2 ปีที่แล้ว +2

      These are called data attributes. You can use them to store any information related to a particular element. Kyle put them there so he could select the elements later using querySelector (although I think using classes and IDs would have the same result).

    • @rajpatel9406
      @rajpatel9406 2 ปีที่แล้ว +2

      @@fgsaldanha thanks it helped a lot 👍👍

  • @kevinzunigacuellar
    @kevinzunigacuellar 2 ปีที่แล้ว +1

    Brilliant!

  • @guli670
    @guli670 2 ปีที่แล้ว

    Thank you very much for these Videos there are very helpful

  • @tseku210
    @tseku210 2 ปีที่แล้ว

    Been meaning to learn this

  •  2 ปีที่แล้ว

    Very good work!! thanks!!

  • @MarshallSC1
    @MarshallSC1 2 ปีที่แล้ว +2

    Any comparison between what way is better to use to populate elements on website?
    With html template element VS entirely through JS, with template literals ?
    From a performance standpoint, optimal performance standpoint, etc...
    Thanks!

  • @triviagame_forever
    @triviagame_forever 2 ปีที่แล้ว

    You are the best!

  • @adeyemiblessing
    @adeyemiblessing 2 ปีที่แล้ว

    I just spent 14minutes and 27 seconds examining the alignment of his hair 😂😂
    By the way great tutorial

  • @top10movies25
    @top10movies25 2 ปีที่แล้ว +1

    I was a thinker when we were looking for something that shows the data programmed in PHP

  • @ouvie
    @ouvie 2 ปีที่แล้ว

    omg tysm i was curious!

  • @Thebiggestgordon
    @Thebiggestgordon 2 ปีที่แล้ว

    I literally just submitted my cs assignment like an hour before watching this video, this would have been so helpful lol.
    Also what vscode add ons do you use? That autocomplete and auto format looks nice.

  • @suhaimiannuar6008
    @suhaimiannuar6008 2 ปีที่แล้ว

    Nice la wei.

  • @CuongNguyen-yh9dh
    @CuongNguyen-yh9dh 2 ปีที่แล้ว +1

    It would be great if you made a video about typescript. Thanks.

  • @lepen_macron
    @lepen_macron ปีที่แล้ว

    if you have only like 5 or 10 thing to serach throw an easy way to do it is to get the input from the bar check with .includes(//the contents of the bar) and check for every title of the element you are searhing if it is, now if one element has the contents in it , then do a main.innerHTML = main.innerHTML + `

    • @lepen_macron
      @lepen_macron ปีที่แล้ว

      + use to lowercase and make sure your sorting method has all lowercase identifiers + unfortunantly if instead of typing fortnite you type fortnute it wont show (just like the tutorial but keep in mind small mistake in speling make a difference)

  • @ICT_Pro_Trader
    @ICT_Pro_Trader 2 ปีที่แล้ว

    Man I appreciate you

  • @Chetanoo
    @Chetanoo 2 ปีที่แล้ว

    Thank you! That video is really helpfull

  • @senthil3816
    @senthil3816 2 ปีที่แล้ว

    The best 👍💯

  • @beyaryoussefalhaji569
    @beyaryoussefalhaji569 2 ปีที่แล้ว +2

    Can you please do a filter buttons as well, thank you

  • @jamesclark2020
    @jamesclark2020 ปีที่แล้ว

    Dang. ❤ I’m going to try this.

  • @peppenas7103
    @peppenas7103 2 ปีที่แล้ว +2

    Great video - one question tho - instead of "textContent" I need to append a image url to img src="". How do I do that?

    • @jayde1992
      @jayde1992 2 ปีที่แล้ว

      Did u figure that out?

    • @akebengtsson1223
      @akebengtsson1223 2 ปีที่แล้ว

      setAttribute( 'src' , '*img url*')

  • @recap0074
    @recap0074 2 ปีที่แล้ว

    Thank you🖤

  • @Dr.UdaraSenarathne
    @Dr.UdaraSenarathne 2 ปีที่แล้ว

    Thank you very much!

  • @tszhong0411
    @tszhong0411 2 ปีที่แล้ว

    I love this!

  • @somdatatechnology233
    @somdatatechnology233 2 ปีที่แล้ว

    Fantastic content

  • @amandalaura1746
    @amandalaura1746 2 ปีที่แล้ว

    omg this helped me so much, thank you!! a really well explained straight foreward video