<?xml version="1.0"?>
<?xml-stylesheet href="behaviour-with-xbl.css" type="text/css"?>
<doc xmlns:html="http://www.w3.org/1999/xhtml"
     xmlns:svg="http://www.w3.org/2000/svg" >
  <html:html>
  <html:head>
    <html:title>Adding behaviour with
	  XBL</html:title>
  </html:head>

  <html:body>
    <html:h1>Adding behaviour with
	  XBL</html:h1>
  <html:ul>
    <html:li>Apart from aggregating content, XBL can also attach behaviour (methods, events) to tags in an object-oriented way</html:li>
    <html:li>Support for inheritance</html:li>
  </html:ul>
  <html:p>
    <html:strong>bindings.css</html:strong> 
  <html:pre style="background-color:#DDDDFF;">
  face
  {
    -moz-binding: url("bindings.xbl#face");  
  }
  </html:pre>
  </html:p>

  <html:p>
    <html:strong>bindings.xbl</html:strong>    
  <html:pre style="background-color:#DDDDFF;">
  &lt;bindings xmlns="http://www.mozilla.org/xbl"
            xmlns:xbl="http://www.mozilla.org/xbl"
	    xmlns:svg="http://www.w3.org/2000/svg"&gt;
    &lt;binding id="face" extends="svg:generic"&gt;
      &lt;content&gt;
        &lt;svg:g xbl:inherits="style, transform" &gt;
          &lt;svg:circle cx="100" cy="100" r="120"/&gt;
          &lt;svg:circle cx="50" cy="50" r="10" style="fill:black;" /&gt;
          &lt;svg:circle cx="150" cy="50" r="10" style="fill:black;" /&gt;
          &lt;svg:path d="M50,150 Q100,200 150,150"
                    style="fill:none; stroke:black; stroke-width:10;" /&gt;  
        &lt;/svg:g&gt;
      &lt;/content&gt;
      <html:strong>
      &lt;implementation&gt;
        &lt;method name="makeSad"&gt;
          &lt;body&gt;
            // move controlpoint of quadratic bezier element: 
            var quad = this.inner.lastChild.pathSegList.getItem(1);
            quad.y1 -= 10;
          &lt;/body&gt;
        &lt;/method&gt;
        &lt;property name="inner" readonly="true"&gt;
          &lt;getter&gt;
            return document.getAnonymousNodes(this)[0];
          &lt;/getter&gt;
        &lt;/property&gt;
      &lt;/implementation&gt;
      &lt;handlers&gt;
        &lt;handler event="mousedown"&gt;
          this.makeSad();
        &lt;/handler&gt;
      &lt;/handlers&gt;		
  </html:strong>
    &lt;/binding&gt;
  &lt;/bindings&gt;  
  </html:pre>
  </html:p>

  <html:p>
    <html:strong>faces.xml</html:strong> 
  <html:pre style="background-color:#DDDDFF;">
  &lt;?xml-stylesheet href="bindings.css" type="text/css"?&gt;
  &lt;svg  xmlns="http://www.w3.org/2000/svg"&gt;
    &lt;face transform="translate(100,100) scale(.5)" style="fill:blue;"/&gt;
    &lt;face transform="translate(200,300) scale(.3)" style="fill:yellow;"/&gt;
    &lt;face transform="translate(70,250) scale(.4) rotate(30,100,100) " style="fill:red;"/&gt;  
    &lt;face transform="translate(250,110) scale(.4) skewX(30) " style="fill:green;"/&gt;
  &lt;/svg&gt;
  </html:pre>
  </html:p>
  
  <svg:svg  xmlns="http://www.w3.org/2000/svg" width="12cm" height="12cm">
      <svg:rect x="0" y="0" width="12cm" height="12cm"
                style="fill:none; stroke:black; stroke-width:1;"/>
      <face transform="translate(100,100) scale(.5)" style="fill:blue;"/>
      <face transform="translate(200,300) scale(.3)" style="fill:yellow;"/>
      <face transform="translate(70,250) scale(.4) rotate(30,100,100) " style="fill:red;"/>
      <face transform="translate(250,110) scale(.4) skewX(30) " style="fill:green;"/>
  </svg:svg> 
</html:body>
</html:html>
</doc>