
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
@justinribeiro/lite-youtube
Advanced tools
A web component that loads YouTube embed iframes faster. ShadowDom based version of Paul Irish' concept.
A web component that renders YouTube embeds faster. The ShadowDom web component version of Paul's lite-youtube-embed.
videotitle
attributevideoplay
to have a properly locale based labelstart
attribute to start at a particular place in a videoautoload
to use Intersection Observer to load the iframe when scrolled into view.nocookie
attr for use with use youtube-nocookie.com as iframe embed uriplaylistid
for playlist loading interface supportloading=lazy
to image placeholder for more perf with posterloading
attr if you'd like to use eagershort
attr for enabling experimental YouTube Shorts mobile interaction support. See (example video)[https://www.youtube.com/watch?v=aw7CRQTuRfo] for details.window.liteYouTubeNonce
for CSP 2/3 support.autoPause
for pausing videos scrolled off screen; adds --lite-youtube-aspect-ratio
CSS custom property create custom aspect ratio videos; adds --lite-youtube-frame-shadow-visible
CSS custom property to disable frame shadow (flat look); adds a named slot image
that allows for setting custom poster image; adds credentialless
for COEPdisablenoscript
attribute in v1.7.1).::part
(thank you @Lukinoh!).This web component is built with ES modules in mind and is available on NPM:
To install, use your package manager of choice:
npm i @justinribeiro/lite-youtube
# or
yarn add @justinribeiro/lite-youtube
After install, import into your project:
import '@justinribeiro/lite-youtube';
If you want the paste-and-go version, you can simply load it via CDN:
<script type="module" src="https://cdn.jsdelivr.net/npm/@justinribeiro/lite-youtube@1/lite-youtube.min.js"></script>
<lite-youtube videoid="guJLfqTFfIw"></lite-youtube>
A fallback appears in any of the following circumstances:
<noscript>
)<lite-youtube videoid="guJLfqTFfIw">
<a class="lite-youtube-fallback" href="https://www.youtube.com/watch?v=guJLfqTFfIw">Watch on YouTube: "Sample output of devtools-to-video cli tool"</a>
</lite-youtube>
Example CSS:
.lite-youtube-fallback {
aspect-ratio: 16 / 9; /* matches YouTube player */
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
gap: 1em;
padding: 1em;
background-color: #000;
color: #fff;
text-decoration: none;
}
/* right-facing triangle "Play" icon */
.lite-youtube-fallback::before {
display: block;
content: '';
border: solid transparent;
border-width: 2em 0 2em 3em;
border-left-color: red;
}
.lite-youtube-fallback:hover::before {
border-left-color: #fff;
}
.lite-youtube-fallback:focus {
outline: 2px solid red;
}
Setting the YouTube playlistid allows the playlist interface to load on interaction. Note, this still requires a videoid for to load a placeholder thumbnail as YouTube does not return a thumbnail for playlists in the API.
<lite-youtube
videoid="VLrYOji75Vc"
playlistid="PL-G5r6j4GptH5JTveoLTVqpp7w2oc27Q9"
></lite-youtube>
<lite-youtube
videotitle="This is a video title"
videoid="guJLfqTFfIw"
></lite-youtube>
<lite-youtube
videoplay="Mirar"
videotitle="Mis hijos se burlan de mi español"
videoid="guJLfqTFfIw"
>
</lite-youtube>
Height and Width are responsive in the component.
<style>
.styleIt {
width: 400px;
margin: auto;
}
</style>
<div class="styleIt">
<lite-youtube videoid="guJLfqTFfIw"></lite-youtube>
</div>
See the example video of how this feature works for additional details.
<lite-youtube videoid="vMImN9gghao" short></lite-youtube>
Uses Intersection Observer if available to automatically load the YouTube iframe when scrolled into view.
<lite-youtube videoid="guJLfqTFfIw" autoload> </lite-youtube>
<!-- Start at 5 seconds -->
<lite-youtube videoid="guJLfqTFfIw" videoStartAt="5"></lite-youtube>
<lite-youtube
videoid="guJLfqTFfIw"
posterquality="maxresdefault"
></lite-youtube>
<lite-youtube videoid="guJLfqTFfIw">
<img slot="image" src="my-poster-override.jpg">
</lite-youtube>
<style>
lite-youtube {
--lite-youtube-aspect-ratio: 2 / 3;
}
</style>
<lite-youtube videoid="guJLfqTFfIw"></lite-youtube>
<style>
lite-youtube {
/* No Shadow */
--lite-youtube-frame-shadow-visible: no;
}
</style>
<lite-youtube videoid="guJLfqTFfIw"></lite-youtube>
<style>
lite-youtube::part(playButton) {
/* You custom style */
}
</style>
<lite-youtube videoid="guJLfqTFfIw"></lite-youtube>
Note: the custom poster image will load with this set, but will then disappear without any user interaction because of the intersection observer starting.
<lite-youtube videoid="VLrYOji75Vc" autopause></lite-youtube>
As of v1.7.0, we inject into the lightdom a noscript for SEO help. This can conflict with server side rendered noscript injects. To disable, simply pass disablenoscript
to the component:
<lite-youtube videoid="VLrYOji75Vc" disablenoscript></lite-youtube>
Use any YouTube Embedded Players and Player Parameters you like.
Note: the exception to this rule is the autoplay param; because of the nature of the performance loading and the inconsistency of usage, that parameter generally does not work. See this comment for details.
<lite-youtube videoid="guJLfqTFfIw" params="controls=0&enablejsapi=1">
</lite-youtube>
The web component allows certain attributes to be give a little additional flexibility.
Name | Description | Default |
---|---|---|
videoid | The YouTube videoid | `` |
playlistid | The YouTube playlistid; requires a videoid for thumbnail | `` |
videotitle | The title of the video | Video |
videoplay | The title of the play button (for translation) | Play |
videoStartAt | Set the point at which the video should start, in seconds | 0 |
posterquality | Set thumbnail poster quality (maxresdefault, sddefault, mqdefault, hqdefault) | hqdefault |
posterloading | Set img lazy load attr loading for poster image | lazy |
nocookie | Use youtube-nocookie.com as iframe embed uri | false |
autoload | Use Intersection Observer to load iframe when scrolled into view | false |
short | Show 9:16 YouTube Shorts-style interaction on mobile devices | false |
params | Set YouTube query parameters | `` |
The web component fires events to give the ability understand important lifecycle.
Event Name | Description | Returns |
---|---|---|
liteYoutubeIframeLoaded | When the iframe is loaded, allowing us of JS API | detail: { videoId: this.videoId } |
FAQs
A web component that loads YouTube embed iframes faster. ShadowDom based version of Paul Irish' concept.
We found that @justinribeiro/lite-youtube demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.