Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Transclusions Brainstorming</title>
</head>
<body>
  <template id="my-card-shadow">
    <style>
      :host { 
        display: block;
        border: 1px solid red;
      }
    </style>
    <yield id="name"><content select=".name"></content></yield>
    <yield id="email"><content select=".email"></content></yield>
  </template>
  
  <my-card>
    <span class="name">Ryosuke Niwa</span>
    <span class="email">rniwa@apple.com</span>
  </my-card>
  <template id="my-webkitten-name-template">
    <span>WebKitten</span> <content select=".name"></content>
  </template>
  <template id="my-webkitten-email-template">
    <span>kitten@webkit.org</span> <content select=".email"></content>
  </template>
  
  <my-webkitten-card>
    <span class="name">Ryosuke Niwa</span>
    <span class="email">rniwa@apple.com</span>
  </my-webkitten-card>
</body>
</html>
 
// Transclusion initializer
function Transclucid(root) {
  this.transclude = function(id, template) {
    var y = root.querySelector('yield#' + id);
    y.createShadowRoot().appendChild(template.content.cloneNode(true));
  }
}
// MyCard
function MyCard() {}
MyCard.prototype = Object.create(HTMLElement.prototype);
MyCard.prototype.createdCallback = function() {
  var template = document.querySelector("#my-card-shadow");
  var root = this.createShadowRoot();
  root.appendChild(template.content.cloneNode(true));
  Transclucid.call(this, root);
}
// MyWebKittenCard
function MyWebKittenCard() {}
MyWebKittenCard.prototype = Object.create(MyCard.prototype);
MyWebKittenCard.prototype.createdCallback = function() {
  MyCard.prototype.createdCallback.call(this); // super();
  this.transclude('name', document.querySelector('#my-webkitten-name-template'));
  this.transclude('email', document.querySelector('#my-webkitten-email-template'));  
}
// Element registrations
  
document.registerElement('my-card', MyCard);
  
document.registerElement('my-webkitten-card', MyWebKittenCard);
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
dglazkovpro
0viewers