<!DOCTYPE html>
<html lang='en'>
<head>
 <title>types-dom-04-b-manual.svg</title>
 <meta charset='utf-8'>
</head>
<body>
 <h1>Source SVG: types-dom-04-b-manual.svg</h1>
<svg id="svg-root" width="100%" height="100%"
  viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg"
  xmlns:xlink="http://www.w3.org/1999/xlink">
  <!--======================================================================-->
  <!--=  Copyright 2008 World Wide Web Consortium, (Massachusetts          =-->
  <!--=  Institute of Technology, European Research Consortium for         =-->
  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
  <!--=  All Rights Reserved.                                              =-->
  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
  <!--======================================================================-->
  
  <title id="test-title">$RCSfile: types-dom-04-b.svg,v $</title>
  <defs>
    <font-face
      font-family="SVGFreeSansASCII"
      unicode-range="U+0-7F">
      <font-face-src>
        <font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
      </font-face-src>
    </font-face>
  </defs>
  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">

    <text x='10' y='30'>Testing liveness of SVG DOM objects</text>

    <g font-size='14' transform='translate(500)rotate(90)'>
      <rect id='r1' x='40' y='60' width='20' height='20'/>
      <text x='70' y='75'>SVGAnimatedNumberList</text>
      <rect id='r2' x='40' y='90' width='20' height='20'/>
      <text x='70' y='105'>SVGAnimatedLength</text>
      <rect id='r3' x='40' y='120' width='20' height='20'/>
      <text x='70' y='135'>SVGAnimatedLengthList</text>
      <rect id='r4' x='40' y='150' width='20' height='20'/>
      <text x='70' y='165'>SVGAnimatedAngle</text>
      <rect id='r5' x='40' y='180' width='20' height='20'/>
      <text x='70' y='195'>SVGAnimatedRect</text>
      <rect id='r6' x='40' y='210' width='20' height='20'/>
      <text x='70' y='225'>SVGAnimatedTransformList</text>
      <rect id='r7' x='40' y='240' width='20' height='20'/>
      <text x='70' y='255'>SVGAnimatedPreserveAspectRatio</text>
      <rect id='r8' x='40' y='270' width='20' height='20'/>
      <text x='70' y='285'>SVGAnimatedBoolean</text>
      <rect id='r9' x='40' y='300' width='20' height='20'/>
      <text x='70' y='315'>SVGAnimatedString</text>
      <rect id='r10' x='40' y='330' width='20' height='20'/>
      <text x='70' y='345'>SVGAnimatedEnumeration</text>
      <rect id='r11' x='40' y='360' width='20' height='20'/>
      <text x='70' y='375'>SVGAnimatedInteger</text>
      <rect id='r12' x='40' y='390' width='20' height='20'/>
      <text x='70' y='405'>SVGAnimatedNumber</text>
    </g>

    <g display='none'>
      <text id='text' rotate='0 20 40' x='10 20' lengthAdjust='spacing'>abc</text>
      <circle id='circle' r='50' transform='scale(1) scale(2)' class='one'/>
      <marker id='marker' orient='30'/>
      <svg id='svg' viewBox='10 20 30 40' preserveAspectRatio='none' externalResourcesRequired='false'/>
      <filter>
        <feTurbulence id='feTurbulence' baseFrequency='2 3' numOctaves='2'/>
      </filter>
    </g>

    <script><![CDATA[
      function $(id) { return document.getElementById(id); }

      var text = $('text'),
          circle = $('circle'),
          marker = $('marker'),
          svg = $('svg'),
          feTurbulence = $('feTurbulence');

      function expect_exception(id, fn, code) {
        try {
          fn();
        } catch (e) {
          if (e.code == code) {
            $(id).setAttribute('fill', 'green');
            return;
          }
        }
        $(id).setAttribute('fill', 'red');
      }

      function expect_value(id, fn, value) {
        try {
          if (fn() === value) {
            $(id).setAttribute('fill', 'green');
            return;
          }
        } catch (e) {
        }
        $(id).setAttribute('fill', 'red');
      }

      // SVGAnimatedNumberList: rotate on text
      expect_value
        ('r1',
         function() {
           return text.rotate.baseVal.numberOfItems == 3
               && (text.setAttribute('rotate', '0 20'), text.rotate.baseVal.numberOfItems == 2);
         },
         true);

      // SVGAnimatedLength: r on circle
      expect_value
        ('r2',
         function() {
           return circle.r.baseVal.value == 50
               && (circle.setAttribute('r', '100'), circle.r.baseVal.value == 100);
         },
         true);

      // SVGAnimatedLengthList: x on text
      expect_value
        ('r3',
         function() {
           return text.x.baseVal.numberOfItems == 2
               && (text.setAttribute('x', '10'), text.x.baseVal.numberOfItems == 1);
         },
         true);

      // SVGAnimatedAngle: orient on marker
      expect_value
        ('r4',
         function() {
           return marker.orientAngle.baseVal.value == 30
               && (marker.setAttribute('orient', '60'), marker.orientAngle.baseVal.value == 60);
         },
         true);

      // SVGAnimatedRect: viewBox on svg
      expect_value
        ('r5',
         function() {
           return svg.viewBox.baseVal.x == 10
               && (svg.setAttribute('viewBox', '20 30 40 50'), svg.viewBox.baseVal.x == 20);
         },
         true);

      // SVGAnimatedTransformList: transform on circle
      expect_value
        ('r6',
         function() {
           return circle.transform.baseVal.numberOfItems == 2
               && (circle.setAttribute('transform', 'scale(1)'), circle.transform.baseVal.numberOfItems == 1);
         },
         true);

      // SVGAnimatedPreserveAspectRatio: preserveAspectRatio on svg
      expect_value
        ('r7',
         function() {
           return svg.preserveAspectRatio.baseVal.align == 1 /* none */
               && (svg.setAttribute('preserveAspectRatio', 'xMidYMid'), svg.preserveAspectRatio.baseVal.align == 6);
         },
         true);

      // SVGAnimatedBoolean: externalResourcesRequired on svg
      expect_value
        ('r8',
         function() {
           return !svg.externalResourcesRequired.baseVal
               && (svg.setAttribute('externalResourcesRequired', 'true'), svg.externalResourcesRequired.baseVal);
         },
         true);

      // SVGAnimatedString: class on circle
      expect_value
        ('r9',
         function() {
           return circle.className.baseVal == 'one'
               && (circle.setAttribute('class', 'two'), circle.className.baseVal == 'two');
         },
         true);

      // SVGAnimatedEnumeration: lengthAdjust on text
      expect_value
        ('r10',
         function() {
           return text.lengthAdjust.baseVal == 1 /* spacing*/
               && (text.setAttribute('lengthAdjust', 'spacingAndGlyphs'), text.lengthAdjust.baseVal == 2);
         },
         true);

      // SVGAnimatedInteger: numOctaves on feTurbulence
      expect_value
        ('r11',
         function() {
           return feTurbulence.numOctaves.baseVal == 2
               && (feTurbulence.setAttribute('numOctaves', '1'), feTurbulence.numOctaves.baseVal == 1);
         },
         true);

      // SVGAnimatedNumber: baseFrequency on feTurbulence
      expect_value
        ('r12',
         function() {
           return feTurbulence.baseFrequencyY.baseVal == 3
               && (feTurbulence.setAttribute('baseFrequency', '4 5'), feTurbulence.baseFrequencyY.baseVal == 5);
         },
         true);
    ]]></script>

  </g>
  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
    <text id="revision" x="10" y="340" stroke="none"
      fill="black">$Revision: 1.7 $</text>
  </g>
  <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
  <!-- comment out this watermark once the test is approved --><!--
  <g id="draft-watermark">
    <rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
    <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
      text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
  </g>-->
</svg>
</body>
</html>
