<?xml version="1.0" standalone="no"?>
<!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 rect's attributes                                    -->
<!--                                                                        -->
<!-- @author tkormann@ilog.fr                                               -->
<!-- @version $Id$ -->
<!-- ====================================================================== -->

<?xml-stylesheet type="text/css" href="../../resources/style/test.css" ?>  

<svg id="body" width="450" height="500" viewBox="0 0 450 500">
    <title>&lt;rect&gt; attributes 'onload'</title>

    <text x="50%" y="45" class="title">&lt;rect&gt; attributes in 'onload'</text>

    <script type="text/ecmascript">

    function initRect(evt, x, y, w, h, rx, ry) {
        var elt = evt.target;
        elt.setAttribute("x", x)
        elt.setAttribute("y", y)
        elt.setAttribute("width", w)
        elt.setAttribute("height", h)
        if (rx != null) {
                elt.setAttribute("rx", rx)
        }
        if (ry != null) {
                elt.setAttribute("ry", ry)
        }
    }

    </script>

    <g id="test-content">

        <rect width="1" height="1" style="fill:orange" 
              onload="initRect(evt, 50, 80, 150, 100)" />

        <rect width="1" height="1" style="fill:crimson" 
              onload="initRect(evt, 250, 80, 150, 100, 20)" />

        <rect width="1" height="1" style="fill:gold" 
              onload="initRect(evt, 50, 230, '33%', 150, 20, 40)" />

        <rect width="1" height="1" style="fill:#eee" 
              onload="initRect(evt, 250, 230, '33%', '150px', '16.5%', 75)" />


        <g style="stroke:black; fill:none; stroke-width:2">
          <rect x="50"  y="80"   width="150" height="100"  />
          <rect x="250" y="80"   width="150" height="100" rx="20" />
          <rect x="50"  y="230"  width="33%" height="150" rx="20" ry="40" />
          <rect x="250"  y="230" width="33%" height="150px" rx="16.5%" ry="75" />
        </g>

        <g style="fill:black; stroke:none; text-anchor:middle">
                <text x="125" y="200" >x, y, width, height</text>
                <text x="325" y="200" >x, y, width, height, rx</text>
                <text x="125" y="400" >x, y, width, height, rx, ry</text>
                <text x="325" y="400" >x, y, width, height, rx, ry (units and %)</text>
        </g>
    </g>
</svg>
