Web Components: Spotify Embed
On this site, I wanted to embed Spotify playlists. Spotify has code to allow you to embed those playlists.
<spotify-embed embedwidth=“640” embedheight=“480” playlistid=“1GLEmw6QgsqrZPYUBl8QHi”
<iframe
src="https://open.spotify.com/embed/playlist/1GLEmw6QgsqrZPYUBl8QHi"
width="300"
height="380"
frameborder="0"
allowtransparency="true"
allow="encrypted-media"
></iframe>
Web Components
If we want to programatically update or generate the embed we can use JavaScript. Web Components allows us to use templates to render a embed.
<spotify-embed>
Component
<spotify-embed
playlistid="1GLEmw6QgsqrZPYUBl8QHi"
embedwidth="300"
embedheight="380"
></spotify-embed>
Template
<template id="spotify-embed-template">
<iframe></iframe>
</template>
HTML Element
class SpotifyEmbed extends HTMLElement {...}
window.customElements.define('spotify-embed', SpotifyEmbed);
Then you load the template in the new HTML element and inject the new attributes.
You can also create the element directly in JavaScript.
const embed = document.createElement('spotify-embed')
embed.playlistid = "1GLEmw6QgsqrZPYUBl8QHi"
embed.embedwidth = 300
embed.embedheight = 380
document.body.appendChild(embed)
There are libraries out there, as well as more being created, to deal with some of the low level language. I have been using hybrids
to create my Web Components.
hybrids
import { html, define } from 'hybrids'
export const SpotifyEmbed = {
playlistid: '',
embedwidth: 300,
embedheight: 380,
render: ({ playlistid, embedwidth, embedheight }) => html`
<iframe
src="https://open.spotify.com/embed/playlist/${playlistid}"
width="${embedwidth}"
height="${embedheight}"
frameborder="0"
allowtransparency="true"
allow="encrypted-media"
></iframe>
`
}
define('spotify-embed', SpotifyEmbed)
Result
<script type="module" src="SpotifyEmbed.js"></script>
<spotify-embed playlistid="1GLEmw6QgsqrZPYUBl8QHi"></spotify-embed>
Turns into:
<spotify-embed playlistid=“1GLEmw6QgsqrZPYUBl8QHi”