<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000802//EN" "http://www.w3.org/TR/2000/CR-SVG-20000802/DTD/svg-20000802.dtd" >
<!--

   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

--><!--      ======================================================================      -->
<!--      Modification of a x attributes                                        -->
<!--                                                                                  -->
<!--      @author nicolas.socheleau@bitflash.com                                      -->
<!--      @version $Id$      -->
<!--      ======================================================================      -->
<?xml-stylesheet type="text/css" href="../../resources/style/test.css"      ?>

<svg width="450" viewBox="0 0 450 500" height="500" id="body">
   <title>&lt;text&gt; dy attribute &apos;onload&apos;</title>
  <style type="text/css"><![CDATA[
        .test { fill:orange; font-size:16 }
        .testshadow { fill:#bbb; font-size:16  }
  ]]></style>
  <defs>
     <text id="myText">SVGLengthList</text>
  </defs>
  <text x="50%" y="45" class="title">&lt;text&gt; getDy() in &apos;onload&apos;
  </text>
  <script type="text/ecmascript"><![CDATA[    
        function getNumberOfItems(evt) 
        {        
           var elt = evt.target;        
           nb = elt.getDy().getBaseVal().getNumberOfItems();        
           var text = elt.getOwnerDocument().getElementById('test1_text');        
           text.getFirstChild().appendData(" "+nb+" dy");    
        }
        function clear(evt) 
        {        
           var elt = evt.target;
           elt.getDy().getBaseVal().clear()
           nb = elt.getDy().getBaseVal().getNumberOfItems();                
           var text = elt.getOwnerDocument().getElementById('test2_text');        
           text.getFirstChild().appendData(" "+nb+" dy");    
        }
        function getItem(evt) 
        {        
           var elt = evt.target;        
           nb = elt.getDy().getBaseVal().getItem(0);        
           var text = elt.getOwnerDocument().getElementById('test3_text');        
           text.getFirstChild().appendData(" ("+nb.getValueAsString()+")");    
        }
        function insertItemBefore(evt,index,y) 
        {        
           var elt = evt.target;        
           l = elt.getOwnerDocument().getDocumentElement().createSVGLength();
           l.setValue(y);
           nb = elt.getDy().getBaseVal().insertItemBefore(l,index);        
           var text = elt.getOwnerDocument().getElementById('test4_text');        
           text.getFirstChild().appendData(" ("+nb.getValueAsString()+")");    
        }
        function replaceItem(evt,index,unit,y) 
        {        
           var elt = evt.target;        
           l = elt.getOwnerDocument().getDocumentElement().createSVGLength();
           l.newValueSpecifiedUnits(unit,y);

           nb = elt.getDy().getBaseVal().replaceItem(l,index);        
           var text = elt.getOwnerDocument().getElementById('test5_text');        
           text.getFirstChild().appendData(" ("+nb.getValueAsString()+")");    
        }
        function removeItem(evt,index) 
        {        
           var elt = evt.target;        
           nb = elt.getDy().getBaseVal().removeItem(index);        
           var text = elt.getOwnerDocument().getElementById('test6_text');        
           text.getFirstChild().appendData(" ("+nb.getValueAsString()+")");    
        }
        function initializeAppendItem(evt,y1,y2) 
        {        
           var elt = evt.target;        
           l = elt.getOwnerDocument().getDocumentElement().createSVGLength();
           l.setValue(y1);

           nb = elt.getDy().getBaseVal().initialize(l);        
           var text = elt.getOwnerDocument().getElementById('test71_text');        
           text.getFirstChild().appendData(" ("+nb.getValueAsString()+")");
           l.setValue(y2);

           nb = elt.getDy().getBaseVal().appendItem(l);        
           text = elt.getOwnerDocument().getElementById('test72_text');        
           text.getFirstChild().appendData(" ("+nb.getValueAsString()+")");
        }
        function setAttribute(evt,dyList) 
        {        
           var elt = evt.target;
           var points = elt.getDy().getBaseVal();
           nb = points.getNumberOfItems();        
           var text = elt.getOwnerDocument().getElementById('test81_text');        
           text.getFirstChild().appendData(" "+nb+" dy");

           elt.setAttributeNS(null,"dy",dyList);

           nb = points.getNumberOfItems();        
           text = elt.getOwnerDocument().getElementById('test82_text');        
           text.getFirstChild().appendData(" "+nb+" dy");
        
        }

        function setAttribute2(evt,dyList) 
        {        
           var elt = evt.target;
           var points = elt.getDy().getBaseVal();
           nb = points.getItem(0);        
           var text = elt.getOwnerDocument().getElementById('test91_text');        
           text.getFirstChild().appendData(" ("+nb.getValueAsString()+")");

           elt.setAttributeNS(null,"dy",dyList);

           text = elt.getOwnerDocument().getElementById('test92_text');        
           text.getFirstChild().appendData(" ("+nb.getValueAsString()+")");
        
        }
   ]]></script>
   <g id="test-content" transform="matrix(1.0 0.0 0.0 1.0 -148.27586 -91.37931)">
     <g>
       <!-- onload="getNumberOfItems(evt)" -->
       <text x="180" y="160" font-size="11">getNumberOfItems</text>
       <g transform="translate(0,30)">
         <text class="testshadow"><tspan x="160" y="220" dy="10 -4 2 8">SVGLengthList</tspan></text>
       </g>
       <text class="test"><tspan x="160" y="220" dy="10 -4 2 8"
             onload="getNumberOfItems(evt)"
        >SVGLengthList</tspan></text>
       <text x="160" font-size="9" y="290" id="test1_text">
          text with
       </text>
     </g>
     <g transform="translate(150,0)">
        <!-- onload="clear(evt)" -->
       <text x="180" y="160" font-size="11">clear</text>
       <g transform="translate(0,30)">
         <text class="testshadow"><tspan x="160" y="220" dy="10 -4 2 8">SVGLengthList</tspan></text>
       </g>

       <text class="test" ><tspan x="160" y="220" dy="10 -4 2 8"
             onload="clear(evt)"
        >SVGLengthList</tspan></text>        


       <text x="160" font-size="9" y="290" id="test2_text">
          text with
       </text>
     </g>

     <g transform="translate(300,0)">
        <!-- onload="getItem(evt)" -->
        <text x="180" y="160" font-size="11" >getItem</text>

       <g transform="translate(0,30)">
         <text class="testshadow"><tspan x="160" y="220" dy="10 -4 2 8">SVGLengthList</tspan></text>
       </g>
       <text class="test"><tspan x="160" y="220" dy="10 -4 2 8"
             onload="getItem(evt)"
        >SVGLengthList</tspan></text>        

     <text x="160" font-size="9" y="290" id="test3_text">
        first point
     </text>
     </g>
     <g transform="translate(0,150)" >
        <!-- onload="insertItemBefore(evt)" -->
        <text x="180" y="160" font-size="11"  >insertItemBefore</text>

       <g transform="translate(0,30)">
         <text class="testshadow"><tspan x="160" y="220" dy="10 -4 2 8">SVGLengthList</tspan></text>
       </g>
       <text class="test"><tspan x="160" y="220" dy="10 -4 2 8"
             onload="insertItemBefore(evt,1,5)"
        >SVGLengthList</tspan></text>        

     <text x="160" font-size="9" y="290"  id="test4_text">
        inserted point
     </text>
    </g>

     <g transform="translate(150,150)" >
        <!-- onload="replaceItem(evt)" -->
        <text x="180" y="160" font-size="11"  >replaceItem</text>

       <g transform="translate(0,30)">
         <text class="testshadow"><tspan x="160" y="220" dy="10 -4 2 8">SVGLengthList</tspan></text>
       </g>
       <text class="test"><tspan x="160" y="220" dy="10 -4 2 8"
             onload="replaceItem(evt,2,4,2)"
        >SVGLengthList</tspan></text>        

     <text x="160" font-size="9" y="290"  id="test5_text">
        replaced point
     </text>
    </g>

     <g transform="translate(300,150)" >
        <!-- onload="removeItem(evt)" -->
        <text x="180" y="160" font-size="11"  >removeItem</text>

       <g transform="translate(0,30)">
         <text class="testshadow"><tspan x="160" y="220" dy="10 -4 2 8">SVGLengthList</tspan></text>
       </g>
       <text class="test"><tspan x="160" y="220" dy="10 -4 2 8"
             onload="removeItem(evt,0)"
        >SVGLengthList</tspan></text>        

     <text x="160" font-size="9" y="290"  id="test6_text">
        removed point
     </text>
    </g>

     <g transform="translate(0,300)" >
        <!-- onload="initialize/appendItem(evt)" -->
        <text x="180" y="160" font-size="11"  >initialize/appendItem</text>

       <g transform="translate(0,30)">
         <text class="testshadow"><tspan x="160" y="220" dy="10 -4 2 8">SVGLengthList</tspan></text>
       </g>
       <text class="test"><tspan x="160" y="220" dy="10 -4 2 8"
             onload="initializeAppendItem(evt,-5,10)"
        >SVGLengthList</tspan></text>        

     <text x="160" font-size="9" y="275"  id="test71_text">
        intialized point 
     </text>
     <text x="160" font-size="9" y="285"  id="test72_text">
        appended point
     </text>
    </g>

     <g transform="translate(150,300)" >
        <!-- onload="setAttribute(evt)" -->
        <text x="180" y="160" font-size="11"  >setAttribute</text>

       <g transform="translate(0,30)">
         <text class="testshadow"><tspan x="160" y="220" dy="10 -4 2 8">SVGLengthList</tspan></text>
       </g>
       <text class="test"><tspan x="160" y="220" dy="10 -4 2 8"
             onload="setAttribute(evt,'-5 10 -10 10 -10 10')"
        >SVGLengthList</tspan></text>        

     <text x="160" font-size="9" y="275"  id="test81_text">
        before
     </text>
     <text x="160" font-size="9" y="285"  id="test82_text">
        after
     </text>
    </g>

     <g transform="translate(300,300)" >
        <!-- onload="setAttribute2(evt)" -->
        <text x="180" y="160" font-size="11"  >setAttribute2</text>

       <g transform="translate(0,30)">
         <text class="testshadow"><tspan x="160" y="220" dy="10 -4 2 8">SVGLengthList</tspan></text>
       </g>
       <text class="test"><tspan x="160" y="220" dy="10 -4 2 8"
             onload="setAttribute2(evt,'-5 10 -10 10 -10 10')"
        >SVGLengthList</tspan></text>        

     <text x="160" font-size="9" y="275"  id="test91_text">
        point 0 before
     </text>
     <text x="160" font-size="9" y="285"  id="test92_text">
        point 0 after
     </text>
    </g>

</g>
</svg>
