SVG Tiny 1.2 - 20050413

A The SVG Micro DOM (uDOM)

Contents

During the later stages of the SVG Mobile 1.1 specification it became obvious that there was a requirement to subset the SVG and XML DOM in order to reduce the burden on implementations. SVGT 1.2 adds new features to the uDOM, allowing for as much necessary functionality as possible, still being suitable for SVG Tiny implementations.

Furthermore, it should be possible to implement the uDOM on devices that support SVG Tiny 1.1 although, in this case, the scripting would be external to the SVG document (since SVG Tiny 1.1 does not support inline scripting).

The goal of the uDOM definition is to provide an API that allows access to initial and computed attribute and property values, to reduce the number of interfaces, to reduce run-time memory footprint using necessary features of the core XML DOM, as well as the most useful SVG features (such as transformation matrices).

The IDL definition for the uDOM is provided.

A.1 Introduction

This appendix consists of the following parts:

A.2 Overview of the SVG uDOM

The following sections describe the SVG uDOM key features and constraints.

Note. Like other W3C DOM definitions, the SVG uDOM is programming-language independent. Although this appendix only contain ECMAScript and Javatm language examples, the SVG uDOM is compatible with other programming languages.

A.2.1 Document Access

The SVG uDOM offers access to Document object which is the root for accessing other features. The way the Document object becomes available depends on the usage context. One way to gain access to the Document object is to implement the EventListenerInitializer2 interface. The SVG Tiny user agent will invoke the implementation's initializeEventListeners (dom::Document doc) method once the programming logic has been loaded and is ready to bind to the document. The Document object is sometimes accessible through other means, for example as the global 'document' variable in ECMAScript.

A.2.2 Tree Navigation

SVG uDOM only allows navigation of the element nodes in the DOM tree. Two options are available for navigating the hierarchy of elements:

The ElementTraversal interface provides firstElementChild, lastElementChild, previousElementSibling and nextElementSibling, which are particularly suitable for constrained devices. These traversal mechanisms skip over intervening nodes between element nodes, such as text nodes which might only contain spaces, tabs and newlines.

A.2.3 Element Creation

SVG uDOM allows the creation of new Elements:

Example: Element creation
Element myRect = document.createElementNS(svgNS, "rect");

A.2.4 Element Addition

Node Addition is the ability to add new elements to a document tree.



SVG uDOM allows addition and insertion of a Node:

Example: Element addition
String svgNS = "http://www.w3.org/2000/svg";

// Create a new <rect> element

Element myRect = document.createElementNS(svgNS, "rect");

// Set the various <rect> properties before appending

...



// Add element to the root of the document

Element svgRoot = document.getDocumentElement();

svgRoot.appendChild(myRect);



// Create a new <ellipse> element

Element myEllipse = document.createElementNS(svgNS, "ellipse");



// Set the various <ellipse> properties before insertion

...



// Insert the ellipse before the rectangle

svgRoot.insertBefore(myEllipse, myRect);

A.2.5 Element Removal

Node removal is the ability to remove an element from a document tree. SVG uDOM allows the removal of element Nodes.

Example: Element removal
Element myRect = ...; // See Element creation

Element myGroup =document.getElementById("myGroup");

myGroup.appendChild(myRect);

....

myGroup.removeChild(myRect);

A.2.6 Attribute and Property Access

SVG 1.2 adds a new ability to access XML attribute andCSS property values through the SVG uDOM through the concept of Traits. A trait is a potentially animatable parameter associated with an element. Trait is the typed value (e.g., a number, not just a string) that gets assigned through an XML attribute or a CSSproperty. Traits can be thought of as a unification and generalization of some of the notions of XML attributes and CSS properties.

The trait facilities in the SVG uDOM allow for strongly-typed access to certain attribute and property values. For example, there is a getFloatTrait(...) method for getting an attribute or property value directly as a float. This contrasts the DOM Core getAttributeNS(...) method which always returns a string.

The trait facilities in the SVG uDOM are available on the TraitAccess interface.

Example: Trait Access
float width = myRect.getFloatTrait('width');

width += 10;

myRect.setFloatTrait('width', width);

SVG uDOM provides restricted access to attributes via getAttributeNS and setAttributeNS on the Element interface. The restrictions are described in getAttributeNS.

A.2.7 Text Node Access

In the SVG uDOM, text node access is available via trait getters and setters and via the textContent attribute on the Node interface. To access or set the text string value for an element via traits you invoke getTrait() or setTrait() on that element and pass #text as the name of the trait you want to get or set. For example, MyTextElement.setTrait("#text", "Hello");

Text access via the #text mechanism is supported on Text Content, 'desc', 'title' and 'metadata' elements. Text access to other elements defined within this specification (see list of elements) is not supported and an implementation is free to ignore any text on these elements.

The result of getting and setting text content via the #text mechanism is exactly the same as when using the textContent attribute. Therefore the user should be aware of the fact that styling by 'tspan' elements will be lost if she gets a text string from the model and sets it back again.

A.2.8 Event Listener Registration and Removal

Event Listener Registration and Removal is the ability to add and remove new event listeners from a Document. SVG uDOM allows adding and removing EventListeners:

Example: Event Listeners
class MyEventListener implements EventListener {

public void handleEvent(Event evt) {

// Do whatever is needed here

}

}

...

EventListener l = new MyEventListener();



SVGElement myRect = (SVGElement)document.getElementById("myRect");

//Listen to click events, during the bubbling phase

myRect.addEventListener("click", l, false);

....



// Remove the click listener

myRect.removeEventListener("click", l, false);

The SVG uDOM only supports the bubble phase. Any attempt to specify event operations on the capture phase will raise a DOMException of type NOT_SUPPORTED_ERR.

Refer to the DOM Events Level 3 specification or the XML Events specification introduction for an explanation of the SVG event flow and the meaning of event targets, event current target, bubble and capture.

A.2.9 Animation

SVG uDOM allows code to start or end animation elements.

Example: animation
AnimationElement animateColor = (AnimationElement) document.getElementById("myAnimation");



// Start the animation 2.5 seconds from now.

animateColor.beginElementAt(2.5);

A.2.10 Package naming

The SVG uDOM will use the same package names as the SVG 1.2 Full DOM (e.g., org.w3c.dom,org.w3c.dom.events, org.w3c.dom.svg). This allows applications which restrict themselves to the features in the SVG uDOM to also run in implementations that support the SVG 1.2 Full DOM.

A.3 Module: dom

A.3.1 DOMException

IDL Definition
exception DOMException
{
	unsigned short code;
};

// ExceptionCode
const unsigned short WRONG_DOCUMENT_ERR = 4;
const unsigned short INDEX_SIZE_ERR = 1;
const unsigned short HIERARCHY_REQUEST_ERR = 3;
const unsigned short NO_MODIFICATION_ALLOWED_ERR = 7;
const unsigned short NOT_FOUND_ERR = 8;
const unsigned short NOT_SUPPORTED_ERR = 9;
const unsigned short INVALID_STATE_ERR = 11;
const unsigned short INVALID_MODIFICATION_ERR = 13;
const unsigned short INVALID_ACCESS_ERR = 15;
const unsigned short TYPE_MISMATCH_ERR = 17;
Constants
WRONG_DOCUMENT_ERR
If a node is used in a different document than the one that created it (that doesn't support it).
INDEX_SIZE_ERR
If index or size is negative, or greater than the allowed value.
HIERARCHY_REQUEST_ERR
If any Node is inserted somewhere it doesn't belong.
NO_MODIFICATION_ALLOWED_ERR
If an attempt is made to modify an object where modifications are not allowed.
NOT_FOUND_ERR
If an attempt is made to reference a Node in a context where it does not exist. See Node#insertBefore for example.
NOT_SUPPORTED_ERR
If the implementation does not support the requested type of object or operation.
INVALID_STATE_ERR
If an attempt is made to use an object that is not, or is no longer, usable.
INVALID_MODIFICATION_ERR
If an attempt is made to modify the type of the underlying object.
INVALID_ACCESS_ERR
If a parameter or an operation is not supported by the underlying object.
TYPE_MISMATCH_ERR
If the type of an object is incompatible with the expected type of the parameter associated to the object.
No defined attributes
No defined methods

A.3.2 Node

The Node interface describes generic nodes in an SVG document tree.

This interface is a subset of the Node interface defined in the DOM Level 3 Core. The only node types that are required to be supported in the uDOM are Element nodes and Document nodes.

IDL Definition
interface Node
{
	readonly attribute DOMString namespaceURI;
	readonly attribute DOMString localName;
	readonly attribute Node parentNode;
	readonly attribute Document ownerDocument;
	attribute DOMString textContent;
	Node appendChild(in Node newChild) raises(DOMException);
	Node insertBefore(in Node newChild, in Node refChild) raises(DOMException);
	Node removeChild(in Node oldChild) raises(DOMException);
};
No defined constants
Attributes
namespaceURI
Returns the namespace URI of the Node.
localName
Returns the local part of the qualified name of this node. If the node is of type SVGElement, this returns the tag name without a prefix. But, if the node is of type Document then null is returned.
parentNode
Returns the parent Node of this Node.
ownerDocument
The Document object associated with this node.
textContent

This attribute returns the text content of this node and its descendants. When it is defined to be null, setting it has no effect. On setting, any possible children this node may have are removed and, if it the new string is not empty or null, replaced by a single Text node containing the string this attribute is set to. On getting, no serialization is performed, the returned string does not contain any markup. No whitespace normalization is performed and the returned string does not contain the white spaces in element content. Similarly, on setting, no parsing is performed either, the input string is taken as pure textual content.

textContent is supported on all non-svg elements. For elements defined within this specification (see list of elements) textContent is supported on the Text Content, 'desc', 'title' and 'metadata' elements. textContent on a non-supported element is null. Setting textContent on a non-supported element has no effect.

textContent on the document node is always null.

An alternate way of accessing text content on elements defined within the svg specification is via the getTrait("#text") syntax.

For further details see DOM3 textNode.

Methods
appendChild
Appends a child to this Node.

Parameters:

  • newChild The Node to be appended to this Node. This is equivalent to insertBefore(newChild,null)

Raises:

  • DOMException with error code HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not allow children of the type of the newChild node, or if the node to append is one of this node's ancestors or this node itself, or if this node is of type Document and the DOM application attempts to append a second Element node.
  • DOMException with error code WRONG_DOCUMENT_ERR: Raised if newChild was created from a different document than the one that created this node.
  • DOMException with error code NOT_SUPPORTED_ERR: if the newChild node is a child of the Document node or if the child is of a type that cannot be created with createElementNS.
  • DOMException with error code INVALID_STATE_ERR: if the newChild node would cause the document to go into error.
insertBefore
Inserts newChild before refChild in the child list for this node. If refChild is null, newChild is inserted at the end of the list. If the newChild is already part of the tree, it is first removed.

Parameters:

  • newChild The child to add.
  • refChild The child before which the new child should be added.

Raises:

  • DOMException with error code HIERARCHY_REQUEST_ERR: if this node is of a type that does not allow children of the type of the newChild node, or if the node to append is one of this node's ancestors or this node itself, or if this node is of type Document and the DOM application attempts to append a second Element node.
  • DOMException with error code WRONG_DOCUMENT_ERR: Raised if newChild was created from a different document than the one that created this node.
  • DOMException with error code NOT_FOUND_ERR: raised if refChild is not a child of this node.
  • DOMException with error code NOT_SUPPORTED_ERR: if the newChild node is a child of the Document node or if the child is of a type that cannot be created with createElementNS.
  • DOMException with error code INVALID_STATE_ERR: if the newChild node would cause the document to go into error.
removeChild
Removes the specified child associated with this Node.

Parameters:

  • oldChild The Node that is to be removed.

    The SVG WG has considered to not allow removal of elements that are referenced by other elements. The WG has resolved to not add this constraint but are willing to reconcider if implementation feedback shows that such a constraint would decrease implementation cost. With such a constraint, calling removeChild on a referenced element would not remove the element and the method would raise a DOMException (INVALID_ACCESS_ERR).

Raises:

  • DOMException with error code NOT_FOUND_ERR: Raised if oldChild is not a child of this node.
  • DOMException with error code NOT_SUPPORTED_ERR: if this node is of type Document or if the child, or any of its descendants, is of a type that cannot be created with Document.createElementNS.

A.3.3 Element

Represents an element in the document. A user agent is allowed to store normalized attribute values internally as described in DOM 3.
IDL Definition
interface Element : Node
{
	DOMString getAttributeNS(in DOMString namespaceURI, in DOMString localName) raises(DOMException);
	void setAttributeNS(in DOMString namespaceURI, in DOMString localName, in DOMString value);
};
No defined constants
No defined attributes
Methods
getAttributeNS

Retrieves an attribute value by local name and namespace URI. Per [XML Namespaces], applications must use the value null as the namespaceURI parameter for methods if they wish to have no namespace.

A uDOM implementation must support getAttributeNS for all attributes on elements that does not belong to SVGT1.2 [List of SVGT1.2 Elements]. For attributes belonging to SVGT1.2 [List of SVGT1.2 Attributes] the implementation must support attributes accessible by the getTrait method on SVGElement (see table for list of attributes supporting getTrait).

An important difference between getTraitNS and getAttributeNS is that getTraitNS returns the computed attribute value but getAttributeNS returns the specified attribute value (witch might not exactly match the original specified value due to the possibility of user agent value normalization as described below).

Example
<g fill="red">

<rect id="r1" x="1" y="1" width="5" height="5"/>

<rect id="r2" fill="inherit" x="1" y="1" width="5" height="5"/>

</g>

r1.getTraitNS(svgNS, "fill") return "red". (or equivalent normalized form, see below)

r2.getTraitNS(svgNS, "fill") return "red". (or equivalent normalized form, see below)

r1.getAttributeNS(svgNS, "fill") return "".

r2.getAttributeNS(svgNS, "fill") return "inherit".

A viewer implementing the UDOM is allowed to return normalized values in getAttributeNS as defined in DOM 3.

E.g. fill="red" may be returned as "rgb(255,0,0)", "#ff0000", or other semantically identical form. stroke-width="3" might be returned as e.g. "3.00".

Parameters:

  • namespaceURI The namespace URI of the attribute to retrieve.
  • localName The local name of the attribute to retrieve.

Raises:

  • DOMException NOT_SUPPORTED_ERR if getAttributeNS tries to get an unsupported attribute.
setAttributeNS

Adds a new attribute. The value to set is a simple string; it is not parsed as it is being set. So any markup is treated as literal text, and needs to be appropriately escaped by the implementation when it is written out. Per [XML Namespaces], applications must use the value null as the namespaceURI parameter for methods if they wish to have no namespace.

A uDOM implementation must support setAttributeNS for all attributes.

Parameters:

  • namespaceURI The namespace URI of the attribute to create or alter.
  • localName The local name of the attribute to create or alter.
  • value The value to set in string form.

A.3.4 Document

The Document interface represents an XML Document.

This interface is a subset of the Document interface defined in the DOM Level 3 Core.

Note the behavior of the following attributes and methods from the Node interface when called on a Document object:

IDL Definition
interface Document : Node
{
	Element createElementNS(in DOMString namespaceURI, in DOMString qualifiedName) raises(DOMException);
	readonly attribute Element documentElement;
	Element getElementById(in DOMString id);
};
No defined constants
Attributes
documentElement
Return a child element of this document Node which corresponds to the top-most tag in XML file. For SVG files it must be SVGSVGElement, but return type is Element for DOM Core compatibility and to allow for future extensions.
Methods
createElementNS
Create a new Element based on the specified (qualified) tag name.

Parameters:

  • namespaceURI The namespace uri for the newly created element.
  • qualifiedName The qualified name for the newly created element (For example: "rect", to create a <rect> element).

Raises:

  • DOMException NOT_SUPPORTED_ERR if the type of element is not supported by the implementation.
getElementById
Return the Element in the current document with the given unique ID. If no such element exists, this returns null. If more than one element has an ID attribute with that value, this method returns the first element, in document order, which has the requested ID.

Parameters:

  • id The ID of the object to be retrieved.

A.4 Module: events

A.4.1 EventTarget

This interface represents an event target, and is a subset of the EventTarget interface defined in the DOM Level 2 Event model.

This interface is implemented by an object (SVGElement, SVGDocument, SVGElementInstance) that can notify listeners about events and allows registration and removal of EventListener objects.
IDL Definition
interface EventTarget
{
	void addEventListenerNS(in DOMString namespaceURI, in DOMString type, in EventListener listener, in boolean useCapture);
	void removeEventListenerNS(in DOMString namespaceURI, in DOMString type, in EventListener listener, in boolean useCapture);
};
No defined constants
No defined attributes
Methods
addEventListenerNS
This method registers the specified listener with the event target. If an EventListener is added to an EventTarget while it is processing an event, it will not be triggered by the current actions. If multiple identical EventListeners are registered on the same EventTarget with the same parameters the duplicate instances are discarded. They do not cause the EventListener to be called twice and since they are discarded they do not need to be removed with the removeEventListenerNS method.

Parameters:

  • namespaceURI The namespace URI of the event.
  • type The type of event to listen to.
  • listener Will be notified when an event of the desired type happens on this target or one of its descendant.
  • useCapture This can only be 'false' since capture phase is not supported.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if useCapture is true since capture phase is not supported in SVG Tiny.
removeEventListenerNS
This method removes the specified listener from the event target. If an EventListener is removed from an EventTarget while it is processing an event, it will not be triggered by the current actions. Calling removeEventListenerNS with arguments which do not identify any currently registered EventListener on the EventTarget has no effect.

Parameters:

  • namespaceURI The namespace URI of the event.
  • type The type of event that was listened to.
  • listener The listener that was previously registered.
  • useCapture This can only be 'false' since capture phase is not supported.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if useCapture is true since capture phase is not supported in SVG Tiny.

A.4.2 EventListener

This interface represents an event listener, and is a subset of the EventListener interface defined in the DOM Level 2 Event model.

This interface must be implemented and registered on an EventTarget using the EventTarget#addEventListenerNS method to be notified about events that occur on or bubble through the event target.

IDL Definition
interface EventListener
{
	void handleEvent(in Event evt);
};
No defined constants
No defined attributes
Methods
handleEvent
This method is called whenever an event occurs of the type for which the EventListener interface was registered.. The Event object contains the necessary information pertaining to the event, such as its target and type.

Parameters:

  • evt The event object containing necessary event information.

A.4.3 Event

The Event interface is used to provide contextual information about an event to the handler processing the event. An object which implements the Event interface is passed as the first parameter to the EventListener#handleEvent call. If an event target is an element instance (see SVGElementInstance), the currentTarget is an implementation of EventTarget that does not implement the Node interface. In profiles of SVG that support the SVGElementInstance interface, the currentTarget is an SVGElementInstance.
IDL Definition
interface Event
{
	readonly attribute EventTarget target;
	readonly attribute EventTarget currentTarget;
	readonly attribute DOMString type;
};
No defined constants
Attributes
target
Used to indicate the event target. This attribute contains the target node when used with the DOM event flow.
currentTarget
Used to indicate the EventTarget whose EventListeners are currently being processed. In SVG Tiny, this is always an object to which event listener was attached.
type
This method returns the event type information. The name of the event is case-sensitive. For a list of supported event types see the Supported Events chapter.
No defined methods

A.4.4 OriginalEvent

OriginalEvent is supported on events going through the following element types: 'animation' and 'foreignObject' (when 'foreignObject' has an 'xlink:href' attribute).
IDL Definition
interface OriginalEvent
{
	readonly attribute Event originalEvent;
};
No defined constants
Attributes
originalEvent
For the supported element ('animation' and 'foreignObject'), events can be dispatched to the SVGElementInstance objects corresponding to the content referenced by the supported element. UI events that are dispatched to these SVGElementInstance objects can bubble up to the supported element. Upon bubbling to the supported element, the User Agent must manufacture new Event and OriginalEvent objects. The new Event object must be of the same type and carry the same information as the original event object but which has the supported element as the "target". The new OriginalEvent object must set the "originalEvent" attribute to the original event object.
No defined methods

A.4.5 MouseEvent

Event that provides specific contextual information associated with pointing device events.
IDL Definition
interface MouseEvent : Event
{
	readonly attribute long screenX;
	readonly attribute long screenY;
	readonly attribute long clientX;
	readonly attribute long clientY;
	readonly attribute unsigned short button;
};
No defined constants
Attributes
screenX
The horizontal coordinate at which the event occurred relative to the origin of the screen coordinate system.
screenY
The vertical coordinate at which the event occurred relative to the origin of the screen coordinate system.
clientX
The horizontal coordinate at which the event occurred relative to the DOM implementation's client area.
clientY
The vertical coordinate at which the event occurred relative to the DOM implementation's client area.
button
During mouse events caused by the depression or release of a mouse button, this is used to indicate which mouse button changed state. The values for button range from zero to indicate the left button of the mouse, one to indicate the middle button if present, and two to indicate the right button. For mice configured for left handed use in which the button actions are reversed the values are instead read from right to left.
No defined methods

A.4.6 TextEvent

One or more characters have been entered.

Event type that is a Text Event: textInput.

IDL Definition
interface TextEvent : Event
{
	readonly attribute DOMString data;
};
No defined constants
Attributes
data
Holds the value of the characters generated by the character device. This may be a single Unicode character or a non-empty sequence of Unicode characters. This attribute cannot be null or contain the empty string.
No defined methods

A.4.7 KeyboardEvent

Provides specific contextual information associated with keyboard devices. Each keyboard event references a key using an identifier.

Event types that are Keyboard Events: keyDown, keyUp.

IDL Definition
interface KeyboardEvent : Event
{
	readonly attribute DOMString keyIdentifier;
};
No defined constants
Attributes
keyIdentifier
Holds the identifier of the key.
No defined methods

A.4.8 ConnectionEvent

Provides information about the data that arrives through a connection.

Event type that is a Connection Event: connectionData.

IDL Definition
interface ConnectionEvent : Event
{
	readonly attribute DOMString data;
};
No defined constants
Attributes
data
The data that has arrived.
No defined methods

A.4.9 TimeEvent

Event that is fired by a SMIL animation element.

Event types that are TimeEvents: beginEvent, endEvent, repeatEvent.

IDL Definition
interface TimeEvent : Event
{
	readonly attribute long detail;
};
No defined constants
Attributes
detail
Specifies some detail information about the Timing Event, the information depends on the type of event. For beginEvent and endEvent the detail field is not used. For repeatEvent the detail field contains the current repeat iteration.
No defined methods

A.4.10 WheelEvent

Many devices today have a rotational input method, such as the wheel on a mouse or the "jog dial" of a phone or PDA.

The "wheel" event is triggered when the user rotates the rotational input device. This event may only be registered on the root-most svg element.

Event type that is a WheelEvent: wheel.

IDL Definition
interface WheelEvent : Event
{
	readonly attribute int wheelDelta;
};
No defined constants
Attributes
wheelDelta
Indicates the number of "clicks" the wheel has been rotated. A positive value indicates that the wheel has been rotated away from the user (or in a right-hand manner on horizontally aligned devices) and a negative value indicates that the wheel has been rotated towards the user (or in a left-hand manner on horizontally aligned devices).

A "click" is defined to be a unit of rotation. On some devices this is a finite physical step. On devices with smooth rotation, a "click" becomes the smallest measurable amount of rotation.

No defined methods

A.4.11 ProgressEvent

Many resources, such as raster images, movies and complex SVG content can take a substantial amount of time to download. In some use cases the author would prefer to delay the display of content or the beginning of an animation until the entire contents of a file have been downloaded. In other cases, the author may wish to give the viewer some feedback that a download is in progress (e.g. a loading progress screen).

The ProgressEvent occurs when the user agent makes progress loading a resource (local or external) referenced by an xlink:href attribute.

The user agent must dispatch a ProgressEvent at the beginning of a load operation (i.e., just before starting to access the resource). This event is of type 'preload'. The value of the 'preload' event's progress property is 0.

The user agent must dispatch a ProgressEvent at the end of a load operation (i.e. after load is complete and the user agent is ready to render the corresponding resource). This event is of type 'postload' event. The value of the 'postload' event's progress property is 1.

The user agent may dispatch a loadProgress event between the 'preload' event and the 'postload' events. Such events are of type 'loadprogress'.

All 'loadprogress' events must follow to the following constraints:

In the case where the size of the downloading resource is known, such as from HTTP headers, then the progress property reflects the proportion of the current download that has been completed.

In the case where the size of the downloading resource is not known, then the progress property will only ever have the value 0 or 1.

The ProgressEvent has three corresponding event attributes on elements: onpreload, onpostload and onloadprogress.

Example: ProgressEvent
<svg xmlns="http://www.w3.org/2000/svg" version="1.2" baseProfile="tiny"

xmlns:xlink="http://www.w3.org/1999/xlink">



<script type="application/ecmascript"><![CDATA[

function showImage(imageHref) {

var image = document.getElementById('myImage');

image.setTraitNS("http://www.w3.org/1999/xlink", "href", imageHref);

}



function imageLoadStart(evt) {

var progressBar = document.getElementById('progressBar');

progressBar.setFloatTrait("width", 0);

var loadAnimation = document.getElementById('loadAnimation');

loadAnimation.beginElement();

}



function imageLoadProgress(evt) {

var progressBar = document.getElementById('progressBar');

progressBar.setFloatTrait("width", 100*evt.progress);

}



function imageLoadComplete(evt) {

var progressBar = document.getElementById('progressBar');

progressBar.setFloatTrait("width", 100);

var loadAnimation = document.getElementById('loadAnimation');

loadAnimation.endElement();

}

]]></script>



<image id="myImage" xlink:href="imageA.png" width="300" height="400">

<handler type="application/ecmascript" ev:event="preload">

imageLoadStart(evt);

</handler>



<handler type="application/ecmascript" ev:event="loadprogress">

imageLoadProgress(evt);

</handler>



<handler type="application/ecmascript" ev:event="postload">

imageLoadComplete(evt);

</handler>

</image>



<rect width="120" height="30" y="400">

<handler type="application/ecmascript" ev:event="click">

showImage('imageB.png');

</handler>

</rect>



<animate id="loadAnimation" ... />



<rect id="progressBar" ... />

</svg>

Event types that are ProgressEvents: loadprogress, preload, postload.

IDL Definition
interface ProgressEvent : Event
{
	readonly attribute boolean lengthComputable;
	readonly attribute DOMString typeArg;
	readonly attribute unsigned long loaded;
	readonly attribute unsigned long total;
};
No defined constants
Attributes
lengthComputable
If false the total number of bytes (total) cannot be computed and the value of total should be ignored. This might occur if the size of the downloaded resource is unknown or if the data has already arrived.
typeArg
Specifies the event type. One of 'preload', 'loadprogress' or 'postload'.
loaded
Specifies the number of bytes downloaded since the beginning of the download. This value is ignored for a 'preload' or 'postload' event.
total
Specifies the expected total number of bytes expected in a load operation. For a 'loadprogress' event, it should specify the total number of bytes expected.
No defined methods

A.5 Module: smil

A.5.1 ElementTimeControl

This interface defines common methods for elements which define animation behaviors compatible with SMIL Animation (animation elements, media elements and time containers).
IDL Definition
interface ElementTimeControl
{
	void beginElementAt(in float offset);
	void beginElement();
	void endElementAt(in float offset);
	void endElement();
	void pauseElement();
	void resumeElement();
	readonly attribute boolean isPaused;
};
No defined constants
Attributes
isPaused
true if the animation is paused. false otherwise. See Paused element and the active duration. Note that an element that is stopped (has reached the end of its active duration) is not paused.
Methods
beginElementAt
Creates a begin instance time for the current time plus or minus the passed offset. The new instance time is added to the begin instance times list.

Parameters:

  • offset The offset in seconds at which to begin the element.
beginElement
Creates a begin instance time for the current time. The new instance time is added to the begin instance times list. This is equivalent to beginElementAt(0).
endElementAt
Creates an end instance time for the current time plus or minus the passed offset. The new instance time is added to the end instance times list.

Parameters:

  • offset The offset in seconds at which to end the element.
endElement
Creates an end instance time for the current time. The new instance time is added to the end instance times list. This is equivalent to endElementAt(0).
pauseElement
Pauses the timed element. See Paused element and the active duration.
resumeElement
Resumes the timed element. See Paused element and the active duration.

A.6 Module: global

A.6.1 Global

The Global interface is designed to be the parent interface for language specific window objects. It is currently defined to be empty.
IDL Definition
interface Global
{
};
No defined constants
No defined attributes
No defined methods

A.6.2 Connection

The Connection interface provides an API for socket-level communication. A connection object is created using the SVGGlobal interface.
IDL Definition
interface Connection : events::EventTarget
{
	typedef dom::DOMString DOMString;
	typedef dom::DOMException DOMException;
	void connect(in DOMString uri) raises(DOMException);
	void send(in DOMString data);
	void close();
	readonly attribute boolean connected;
};
No defined constants
Attributes
connected
True if a connection is established, false otherwise.
Methods
connect
Connect with the provided URL.

Raises:

send
Send the data over the connection.
close
Close the connection.

A.7 Module: svg

A.7.1 SVGException

An exception thrown for SVG-specific errors, such as noninvertable matrix in SVGMatrix#inverse .
IDL Definition
exception SVGException
{
	unsigned short code;
};

// ExceptionCode
const unsigned short SVG_INVALID_VALUE_ERR = 1;
const unsigned short SVG_MATRIX_NOT_INVERTABLE = 2;
Constants
SVG_INVALID_VALUE_ERR
Value passed to an SVG-specific method is invalid, such as out of range color component in SVGSVGElement#createSVGRGBColor .
SVG_MATRIX_NOT_INVERTABLE
Matrix that has a determinant equal to zero, and therefore not invertable.
No defined attributes
No defined methods

A.7.2 SVGDocument

IDL Definition
interface SVGDocument : Document, events::EventTarget
{
	readonly attribute SVGGlobal global;
};
No defined constants
Attributes
global
Access to the SVGGlobal object.
No defined methods

A.7.3 SVGElementInstance

For each 'use' element, the UDOM represents the referenced content with a shadow tree of SVGElementInstance objects (the "instance tree") of type SVGElementInstance. An SVGElementInstance represents a single node in the instance tree.

If the 'use' element references a simple graphics element such as a 'rect', then there is only a single SVGElementInstance object, and the correspondingElement attribute on this SVGElementInstance object is the SVGElement that corresponds to the referenced 'rect' element.

If the 'use' element references a 'g' which contains two 'rect' elements, then the instance tree contains three SVGElementInstance objects, a root SVGElementInstance object whose correspondingElement is the SVGElement object for the 'g', and then two child SVGElementInstance objects, each of which has its correspondingElement that is an SVGElement object representing the 'rect'. Note however that the uDOM does not provide methods to navigate between a SVGElementInstance and its children SVGElementInstances.

IDL Definition
interface SVGElementInstance : events::EventTarget
{
	readonly attribute SVGElement correspondingElement;
	readonly attribute SVGElement correspondingUseElement;
};
No defined constants
Attributes
correspondingElement
The corresponding element to which this object is an instance. For example, if a 'use' element references a 'rect' element, then an SVGElementInstance is created, with its correspondingElement being the SVGElement object for the 'rect' element.
correspondingUseElement
The corresponding 'use' element to which this SVGElementInstance object belongs. When 'use' elements are nested (e.g., a 'use' references another 'use' which references a graphics element such as a 'rect'), then the correspondingUseElement is the outermost 'use' (i.e., the one which indirectly references the 'rect', not the one with the direct reference).
No defined methods

A.7.4 SVGSVGElement

This interface represents <svg> element in (SVG) document tree.

User Agent Transforms

The DOM attributes currentScale, currentRotate and currentTranslate are combined to form user agent transformation which is applied at the outermost level on the SVG document (i.e., outside the outermost 'svg' element) if "magnification" is enabled (i.e., zoomAndPan attribute is set to "magnify"). Their values can potentialy be modified through user-agent specific UI. User agent transformation can be obtained by multiplying matrix

[currentScale      0       currentTranslate.x]     [cos(currentRotate) -sin(currentRotate 0]
[     0      currentScale  currentTranslate.y]  by     [sin(currentRotate) cos(currentRotate) 0]
[     0            0               1         ]     [         0                  0         1]

i.e. (translate, then scale, then rotate the coordinate system). The reference point for scale and rotate operations is the origin (0, 0).

IDL Definition
interface SVGSVGElement : SVGLocatableElement : SVGAnimationElement
{
	const unsigned short FOCUS_AUTO     = 1;
	const unsigned short FOCUS_NEXT     = 2;
	const unsigned short FOCUS_PREV     = 3;
	const unsigned short FOCUS_NORTH        = 4;
	const unsigned short FOCUS_NORTH_EAST   = 5;
	const unsigned short FOCUS_EAST     = 6;
	const unsigned short FOCUS_SOUTH_EAST   = 7;
	const unsigned short FOCUS_SOUTH    = 8;
	const unsigned short FOCUS_SOUTH_WEST   = 9;
	const unsigned short FOCUS_WEST     = 10;
	const unsigned short FOCUS_NORTH_WEST   = 11;
	attribute float currentScale;
	attribute float currentRotate;
	readonly attribute SVGPoint currentTranslate;
	readonly attribute SVGRect viewport;
	attribute float currentTime;
	SVGMatrix createSVGMatrixComponents(in float a, in float b, in float c, in float d, in float e, in float f);
	SVGRect createSVGRect();
	SVGPath createSVGPath();
	SVGRGBColor createSVGRGBColor(in long red, in long green, in long blue) raises(SVGException);
	void moveFocus(in unsigned short motionType) raises(DOMException);
	void setFocus(in DOMObject object) raises(DOMException);
	DOMObject getCurrentFocusedObject();
};
Constants
FOCUS_AUTO
Indicates that focus should move to the next focusable object according to the User Agent own algorithm.
FOCUS_NEXT
Indicates that focus should move to the next focusable object according to current nav-index value.
FOCUS_PREV
Indicates that focus should move to the previous focusable object according to current nav-index value.
FOCUS_NORTH
Indicates a request that focus should move in the given direction.
FOCUS_NORTH_EAST
Indicates a request that focus should move in the given direction.
FOCUS_EAST
Indicates a request that focus should move in the given direction.
FOCUS_SOUTH_EAST
Indicates a request that focus should move in the given direction.
FOCUS_SOUTH
Indicates a request that focus should move in the given direction.
FOCUS_SOUTH_WEST
Indicates a request that focus should move in the given direction.
FOCUS_WEST
Indicates a request that focus should move in the given direction.
FOCUS_NORTH_WEST
Indicates a request that focus should move in the given direction.
Attributes
currentScale
On read : Returns current user agent scale (zoom) coefficient. The initial value for currentScale is 1. On write : Sets current user agent scale (zoom) coefficient.

Raises:

  • DOMException with error code INVALID_ACCESS_ERR if the scale value is set to zero.
currentRotate
On read : Returns current user agent rotation angle in degrees. The initial value for currentRotate is 0. On write : Sets current user agent rotate coefficient in degrees.
currentTranslate
Current user agent translation used for scrolling or panning (The returned SVGPoint object is "live" and setting its x and y components will change user agent's translation). The initial values for currentTranslate is SVGPoint(0,0).
viewport

The position and size of the viewport (implicit or explicit) that corresponds to this 'svg' element. When the user agent is actually rendering the content, then the position and size values represent the actual values when rendering. If this SVG document is embedded as part of another document (e.g., via the HTML 'object' element), then the position and size are unitless values in the coordinate system of the parent document. (If the parent uses CSS or XSL layout, then unitless values represent pixel units for the current CSS or XSL viewport, as described in the CSS2 specification.) If the parent element does not have a coordinate system, then the user agent should provide reasonable default values for this attribute.

The object itself and its contents are both readonly. DOMException with error code NO_MODIFICATION_ALLOWED_ERR is raised if attempt is made to modify it. The returned SVGRect object is "live", i.e. its x, y, width, height is automatically updated if viewport size or position changes.

currentTime
On read : Returns current animation timeline time in seconds. On write : Sets current animation timeline time (in seconds). This API is required to support moving forwards in timeline. The underlying implementations are normally designed to seek forward in time and setting the time backwards is not meant to play the animation backwards. Note: Moving backwards in time is a costly feature for the implementations to support.
Methods
createSVGMatrixComponents
Creates new SVGMatrix object. This object can be used to modify value of traits which are compatible with SVGMatrix type using TraitAccess#setMatrixTrait method. The internal representation of the matrix is as follows:
[  a  c  e  ]
[  b  d  f  ]
[  0  0  1  ]

Parameters:

  • a The 'a' component of the matrix to be set.
  • b The 'b' component of the matrix to be set.
  • c The 'c' component of the matrix to be set.
  • d The 'd' component of the matrix to be set.
  • e The 'e' component of the matrix to be set.
  • f The 'f' component of the matrix to be set.
createSVGRect
Creates new SVGRect object. This object can be used to modify value of traits which are compatible with SVGRect type using TraitAccess#setRectTrait method. The intial values for x, y, width, height of this new SVGRect are zero.
createSVGPath
Creates new SVGPath object. This object can be used to modify value of traits which are compatible with SVGPath type using TraitAccess#setPathTrait method.
createSVGRGBColor
Creates new SVGRGBColor object. This object can be used to modify value of traits which are compatible with SVGRGBColor type using TraitAccess#setRGBColorTrait method.

Parameters:

  • red The red component of SVGRGBColor object.
  • green The green component of SVGRGBColor object.
  • blue The blue component of SVGRGBColor object.

Raises:

  • SVGException with error code SVG_INVALID_VALUE_ERR: if any of the parameters is not in the 0..255 range.
moveFocus
Moves current focus to a different object based on the value of motionType. User Agent must take into account the currently focused object in the document in order to find the new focused object.

If this method succeeds :
  • A DOMFocusOut event MUST be created which has the previously focused object as the event target.
  • After that, a DOMFocusIn event MUST be created which has the the new focused object as the event target.
A reference to the new focused object can be obtained using the EventTarget interface of the generated DOMFocusIn Event.

Refer to the focus section to see how navigation is managed. The behavior for this method MUST be the same as if an equivalent move was done by the end user (using joystick or TAB keys) and not by scripting.

Whenever the method fails (i.e. an Exception is raised), focus MUST stay on the currently focused object and no DOMFocusOut/DOMFocusIn event is sent.

NOTE: For stand-alone SVG documents, the User Agent MUST always have a currently focused object. At the beginning, the outermost SVGSVGElement object has focus.

Parameters:

  • motionType The type of motion.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERROR if the requested motion type is not supported (i.e. not one of the interface constants).
  • DOMException with error code INVALID_ACCESS_ERR if the currently focused object doesn't have a nav-* value corresponding to the requested motion type. For instance, if a moveFocus(FOCUS_UP) is called on an element which has no nav-up property.
  • DOMException with error code INVALID_STATE_ERR if the currently focused object has a nav-* value corresponding to the requested motion type but the target indicated in this attribute can not be found or is not a focusable object. For instance, if a moveFocus(FOCUS_UP) is called on an object which has a nav-up property but the value of this property references an element which is not focusable.
setFocus
A request to put the focus on the given object.

If this method succeeds:
  • A DOMFocusOut event MUST be created which has the previously focused object as the event target.
  • After that, a DOMFocusIn event MUST be created which has the the new focused object as the event target.
A reference to the new focused object can be obtained using the EventTarget interface of the generated DOMFocusIn Event.

Whenever the method fails (i.e. an Exception is raised), focus MUST stay on the currently focused object and no DOMFocusOut/DOMFocusIn event is sent.

NOTE: For stand-alone SVG documents, the User Agent MUST always have a currently focused object. At the beginning, the SVGDocument has focus.

Parameters

  • object The object which should receive focus.

Raises

  • DOMException with error code NOT_SUPPORTED_ERROR if the requested element is not focusable (i.e. its 'focusable' property does not evaluate to 'true')
getCurrentFocusedObject
Returns a reference to the object which has the focus. In the case of standalone SVG documents, this method should never return 'null' because for standalone SVG files a User Agent MUST always have a currently focused object.

A.7.5 SVGRGBColor

This interface represents an "SVGRGBColor" datatype made up of red, green, and blue components. It can be used to read properties that store color values (TraitAccess#getRGBColorTrait ) such as fill, stroke, and color.
IDL Definition
interface SVGRGBColor
{
	readonly attribute unsigned long red;
	readonly attribute unsigned long green;
	readonly attribute unsigned long blue;
};
No defined constants
Attributes
red
Returns the red component of the SVGRGBColor.
green
Returns the green component of the SVGRGBColor.
blue
Returns the blue component of the SVGRGBColor.
No defined methods

A.7.6 SVGRect

This interface represents an "SVGRect" datatype, consisting of a minimum X, minimum Y, width and height values.
IDL Definition
interface SVGRect
{
	attribute float x;
	attribute float y;
	attribute float width;
	attribute float height;
};
No defined constants
Attributes
x
On read : Returns the minimum X value for this SVGRect. On write : Sets the minimum X value of this SVGRect to the specified value.
y
On read : Returns the minimum Y value for this SVGRect. On write : Sets the minimum Y value of this SVGRect to the specified value.
width
On read : Returns the width for this SVGRect. On write : Sets the width of this SVGRect to the specified value.
height
On read : Returns the height for this SVGRect. On write : Sets the height of this SVGRect to the specified value.
No defined methods

A.7.7 SVGPoint

This interface represents an "SVGPoint" datatype, identifiend by its x and y components.
IDL Definition
interface SVGPoint
{
	attribute float x;
	attribute float y;
};
No defined constants
Attributes
x
On read : Returns the x component of the point. On write : Sets the x component of the point to the specified float value.
y
On read : Returns the y component of the point. On write : Sets the y component of the point to the specified float value.
No defined methods

A.7.8 SVGPath

This interface represents an "SVGPath" datatype used to define the path geometry. Corresponds to SVG path specification or the "d" attribute.

The native implementations must support the following simplifications or canonicalization of path segments. Any simplifications should be lossless.

IDL Definition
interface SVGPath
{
	const unsigned short MOVE_TO = 77;
	const unsigned short LINE_TO = 76;
	const unsigned short CURVE_TO = 67;
	const unsigned short QUAD_TO = 81;
	const unsigned short CLOSE = 90;
	readonly attribute unsigned long numberOfSegments;
	unsigned short getSegment(in unsigned long cmdIndex) raises(DOMException);
	float getSegmentParam(in unsigned long cmdIndex, in unsigned long paramIndex) raises(DOMException);
	void moveTo(in float x, in float y);
	void lineTo(in float x, in float y);
	void quadTo(in float x1, in float y1, in float x2, in float y2);
	void curveTo(in float x1, in float y1, in float x2, in float y2, in float x3, in float y3);
	void close();
};
Constants
MOVE_TO
Numeric value is ASCII code of the letter 'M'.
LINE_TO
Numeric value is ASCII code of the letter 'L'.
CURVE_TO
Numeric value is ASCII code of the letter 'C'.
QUAD_TO
Numeric value is ASCII code of the letter 'Q'.
CLOSE
Numeric value is ASCII code of the letter 'Z'.
Attributes
numberOfSegments
Return number of segments in this path.
Methods
getSegment
Returns segment command by zero-based command index. Returns one of MOVE_TO, LINE_TO, CURVE_TO, QUAD_TO or CLOSE.

Parameters:

  • cmdIndex The command index for the segment command to retrieve.

Raises:

  • DOMException with error code INDEX_SIZE_ERR if segment index out of bounds.
getSegmentParam
Returns segment parameter by zero-based command index and zero-based parametr index.

Parameters:

  • cmdIndex The command index for the segment command to retrieve.

Raises:

  • DOMException with error code INDEX_SIZE_ERR if segment index out of bounds or param index out of bounds for this segment's type.
moveTo
Appends 'M' (absolute move) segment to the path with the specified coordinates.

Parameters:

  • x The x-axis coordinate for the specified point.
  • y The y-axis coordinate for the specified point.
lineTo
Appends 'L' (absolute line) segment to the path with the specified coordinates.

Parameters:

  • x The x-axis coordinate for the specified point.
  • y The y-axis coordinate for the specified point.
quadTo
Appends 'Q' (absolute quadratic curve) segment to the path.

Parameters:

  • x1 The x-axis coordinate of the first control point.
  • y1 The y-axis coordinate of the first control point.
  • x2 The x-axis coordinate of the final end point.
  • y2 The y-axis coordinate of the final end point.
curveTo
Appends 'C' (absolute cubic curve) segment to the path.

Parameters:

  • x1 The x-axis coordinate of the first control point.
  • y1 The y-axis coordinate of the first control point.
  • x2 The x-axis coordinate of the second end point.
  • y2 The y-axis coordinate of the second end point.
  • x3 The x-axis coordinate of the final end point.
  • y3 The y-axis coordinate of the final end point.
close
Numeric value is ASCII code of the letter 'Z'.

A.7.9 SVGMatrix

This interface represents an "SVGMatrix" datatype, identified by an affine transform. It can be used to read and modify the values of transform attribute as per SVG specification. Note that the mTranslate, inverse, mMultiply, mScale and mRotate methods in this interface mutate the SVGMatrix object and return a reference to the SVGMatrix instance itself, after performing the necessary matrix operation.

This matrix transforms source coordinates (x, y) into destination coordinates (x', y') by considering them to be a column vector and multiplying the coordinate vector by the matrix according to the following process:

[ x' ]    [  a  c  e  ]   [ x ]    [ a.x + c.y + e ]
[ y' ] =  [  b  d  f  ]   [ y ] =  [ b.x + d.y + f ]
[ 1  ]    [  0  0  1  ]   [ 1 ]    [        1      ]
IDL Definition
interface SVGMatrix
{
	float getComponent(in unsigned long index) raises(DOMException);
	SVGMatrix mMultiply(in SVGMatrix secondMatrix);
	SVGMatrix inverse() raises(SVGException);
	SVGMatrix mTranslate(in float x, in float y);
	SVGMatrix mScale(in float scaleFactor);
	SVGMatrix mRotate(in float angle);
};
No defined constants
No defined attributes
Methods
getComponent
Returns a component of the matrix by component's zero-based index. getComponent(0) is a, getComponent(1) is b, etc.

Parameters:

  • index The index of the matrix component to retrieve.

Raises:

mMultiply
Performs matrix multiplication. This matrix is post-multiplied by another matrix, returning the resulting current matrix.

Parameters:

  • secondMatrix The matrix to post-multiply with.
inverse
Returns a new instance of SVGMatrix containing the inverse of the current matrix.

Parameters:

Raises:

  • SVGException - SVG_MATRIX_NOT_INVERTABLE when determinant of this matrix is zero.
mTranslate
Post-multiplies a translation transformation on the current matrix and returns the resulting current matrix. This is equivalent to calling multiply(T), where T is an SVGMatrix object represented by the following matrix:
[   1    0    x  ]
[   0    1    y  ]
[   0    0    1  ]

Parameters:

  • x The distance by which coordinates are translated in the X axis direction.
  • y The distance by which coordinates are translated in the Y axis direction.
mScale
Post-multiplies a uniform scale transformation on the current matrix and returns the resulting current matrix. This is equivalent to calling multiply(S), where S is an SVGMatrix object represented by the following matrix:
[   scaleFactor      0          0   ]
[   0          scaleFactor      0   ]
[   0                0          1   ]

Parameters:

  • scaleFactor The factor by which coordinates are scaled along the X and Y axis.
mRotate
Post-multiplies a rotation transformation on the current matrix and returns the resulting current matrix. This is equivalent to calling multiply(R), where R is an SVGMatrix object represented by the following matrix:
[ cos(angle) -sin(angle) 0 ]
[ sin(angle)  cos(angle) 0 ]
[ 0           0          1 ]

Parameters:

  • angle The angle of rotation in degrees.

A.7.10 SVGLocatable

Interface for getting information about the location of elements. Note: Animations will have an effect on the values of bounding box.





The following example further clarify the behavior of the getBBox() method. The example have a short explanation, an SVG fragment and are followed by a set of bounding box values which have the following format:



[elementId] : {x, y, width, height} | {null}




where x, y, width and height define the values of the SVGRect object's returned from a getBBox call on the element with the specified id. There are a few cases where the bounding box may be null (see example 6).



Example #1: Simple groups and bounds

This first example shows the values returned by the getBBox method for various simple basic shapes and groups. In particular, it shows that the transform, on an element, does not change the value of its user space bounding box.
<g id="group1" transform="translate(10, 20)" fill="red">

<rect id="rect1" transform="scale(2)" x="10" y="10" width="50" height="50"/>

<rect id="rect2" x="10" y="10" width="100" height="100"/>

<g id="group2" transform="translate(10, 20)">

<rect id="rect3" x="0" y="10" width="150" height="50"/>

<circle id="circle1" cx="20" cy="20" r="100" />

</g>

</g>

Result:

[group1] : {-70.0, -60.0, 230.0, 200.0}

[rect1] : {10.0, 10.0, 50.0, 50.0}

[rect2] : {10.0, 10.0, 100.0, 100.0}

[group2] : {-80.0, -80.0, 230.0, 200.0}

[rect3] : {0.0, 10.0, 150.0, 50.0}

[circle1] : {-80.0, -80.0, 200.0, 200.0}



Example #2: Bounding box on zero width or height rectangle

This example illustrates that the bounding box on elements is based on the element's geometry coordinates. For example, the bounding box on a zero-width rectangle is defined (see below), even though the rectangle is not rendered.
<g id="group1" transform="translate(10, 20)" fill="red">

<rect id="rect2" x="10" y="10" width="400" height="0"/>

<g id="group2" transform="translate(10, 20)">

<rect id="rect3" x="0" y="10" width="150" height="50"/>

</g>

</g>

Result:

[group1] : {10.0, 10.0, 400.0, 70.0}

[rect2] : {10.0, 10.0, 400.0, 0.0}

[group2] : {0.0, 10.0, 150.0, 50.0}

[rect3] : {0.0, 10.0, 150.0, 50.0}



Example #3: Bounding Box on zero radius ellipses.

This is another example of how bounding boxes are based on the element's geometry. Here, the bounding box of an ellipse with a zero x-axis radius is still defined, even though the ellipse is not rendered.
<svg id="mySVG" width="10" height="20">

<g id="group1" transform="translate(10, 20)" fill="red">

<rect id="rect1" x="10" y="10" width="100" height="100"/>

<ellipse id="ellipse1" cx="20" cy="20" rx="0" ry="70" />

</g>

</svg>

Result:

[mySVG] : {20.0, -30.0, 100.0, 160.0}

[group1] : {10.0, -50.0, 100.0, 160.0}

[rect1] : {10.0, 10.0, 100.0, 100.0}

[ellipse1] : {20.0, -50.0, 0.0, 140.0}



Example #4: Viewports do not clip bounding boxes

This example shows that no matter what the viewport is on the root SVG element, the bounding boxes, based on the geometry, are still defined. Here, even though the root svg has a zero width, the bounding boxes for the root itself and its children is precisely defined.
<svg id="mySVG" width="0" height="50">

<g id="group1" transform="translate(10, 20)" fill="red" >

<rect id="rect1" x="10" y="10" width="50" height="50"/>

<g id="group2" transform="translate(10, 20)">

<rect id="rect2" x="0" y="10" width="150" height="0"/>

<circle id="circle1" cx="20" cy="20" r="500"/>

</g>

</g>

</svg>

Result:

[mySVG] : {-460.0, -440.0, 1000.0, 1000.0}

[group1] : {-470.0, -460.0, 1000.0, 1000.0}

[rect1] : {10.0, 10.0, 50.0, 50.0}

[group2] : {-480.0, -480.0, 1000.0, 1000.0}

[rect2] : {0.0, 10.0, 150.0, 0.0}

[circle1] : {-480.0, -480.0, 1000.0, 1000.0}



Example #5: getBBox on <use>

This example shows that the bounding box for a <use> element accounts for the x and y attributes defined on the element, just like the x and y attributes impact the bounding box computation on a <rect> or on an <image> element.
<svg>

<defs>

<rect id="myRect" x="0" y="0" width="60" height="40"/>

</defs>

<use id="myUse" xlink:href="#myRect" x="-30" y="-20"/>

</svg>

Result:

[myRect] : {0.0, 0.0, 60.0, 40.0}

[myUse] : {-30.0, -20.0, 60.0, 40.0}



Example #6: Empty group

This example shows that the bounding box for an empty group is null. By the same token, the bounding box of a <path> with an empty SVGPath (i.e., one with no path commands, which may happen after creating a new <path> element with a Document.createElementNS call) is also null.
<g id="emptyG"/>

Result:

[emptyG] : {null}



Example #7: Impact of display='none' and visibility='hidden'

This example shows how the bounding box of children with display='none' are not accounted for in the computation of their parent's bounding box. This reflects the definition of the display property and its impact on rendering and bounding box computation. The example also shows that elements with a 'hidden' visibility still contribute to their parent's bounding box computation.
<g id="g1">

<g id="g1.1.display.none" display="none">

<rect id="rect1" x="10" y="10" width="40" height="40"/>

<g/>

<rect id="rect2.visibility.hidden" visibility="hidden" x="30" y="60" width="10" height="20"/>

</g>

Result:

[g1] : {30.0, 60.0, 10.0, 20.0}

[g1.1.display.none] : {10.0, 10.0, 40.0, 40.0}

[rect1] : {10.0, 10.0, 40.0, 40.0}

[rec2.visibility.hidden] : {30.0, 60.0, 10.0, 20.0}



Example #8: Concatenating bounding boxes in the container's user space

This example shows how the concatenation and computation of bounding boxes for container element happens in the container's user space.
<g id="g1">

<line id="line1" x2="100" y2="100" transform="rotate(-45)"/>

</g>

Result:

[g1] : {0.0, 0.0, 141.42136, 0}

[line1] : {0.0, 0.0, 100.0, 100.0}



Example #9: No influence of stroke-width

This example illustrates that stroking has no impact on the computation of bounding boxes.
<g>

<line id="thickLine" stroke-width="10" x2="100" y2="0"/>

</g>

Result:

[thickLine] : {0.0, 0.0, 100.0, 0.0}



Example #10: No influence of viewBox

This example illustrates that viewBox has no impact on the computation of bounding boxes.
<svg id="rootSvg" width="500" height="300" viewBox="0 0 200 100">

<rect x="-100" y="-200" width="500" height="100"/>

</svg>

Result:

[rootSVG] : {-100, -200, 500, 100}

IDL Definition
interface SVGLocatable
{
	SVGRect   getBBox();
	SVGMatrix getScreenCTM();
	SVGRect   getScreenBBox();
};
No defined constants
No defined attributes
Methods
getBBox

Returns the tight bounding box in current user coordinate space (i.e., after application of the transform attribute or the viewbox). Tight bounding box is the smallest possible rectangle that includes the geometry of all contained graphics elements excluding stroke. The calculation is done in the user coordinate space of the element. When bounding box is calculated elements with display property (trait) set to none are ignored. Exact rules for the bounding box calculation are given in the SVG spec.

getScreenCTM
Returns the transformation matrix from current user units (i.e., after application of the transform attribute or the viewbox) to the parent user agent's notion of a "pixel". For display devices, ideally this represents a physical screen pixel. For other devices or environments where physical pixel sizes are not known, then an algorithm similar to the CSS2 definition of a "pixel" can be used instead. Note that null is returned if this element is not hooked into the document tree.
getScreenBBox
Returns the tight bounding box in screen coordinate space. Tight bounding box is the smallest possible rectangle that includes the geometry of all contained graphics elements excluding stroke. The box coordinates are in the screen coordinate space, which is connected to the current user coordinate space by the matrix returned by SVGLocatable#getScreenCTM method. Note that null is returned if this element is not hooked into the document tree.

A.7.11 SVGLocatableElement

This interface represents an enlement that has a physical location on the screen.

This interface is implemented by: <rect>, <circle>, <ellipse>, <line>, <path> <use> <image> <text>, <svg>, <a>, <video>, <animation>, <switch>, <foreignObject>, <polygon>, <polyline> and <g>.
IDL Definition
interface SVGLocatableElement : SVGElement, SVGLocatable
{
};
No defined constants
No defined attributes
No defined methods

A.7.12 TraitAccess

Trait manipulation interface. This interface is implemented by all svg elements. Each trait corresponds to an attribute which is parsed and understood by the element and in most cases animatable. Unlike attributes, each element has a well-defined set of traits and attempting to access an undefined trait is an error. Also unlike attributes traits can be typed. When getting and setting trait values, accessor of the correct type must be used or an exception will be thrown.

Initial trait values come from parsing corresponding attributes. In the environments where styling is supported, trait values also come from the stylesheets or styling attributes. If value is not specified, but corresponding attribute (or property for environments where styling is supported) is inherited, inherited value is returned as a result of the trait query method. If it is not inherited, default value is returned. The value which is returned is always a base value, before SMIL animation is applied.

The different getPresentationTrait methods return either the current animated value if the given trait is currently being animated (per the SMIL specification) or the base value if the given trait is not currently being animated.

Note about invalid/unsupported trait values: There are two situations where the various trait setter methods(such as setTrait, setFloatTrait or setPathTrait methods) consider a value invalid and throw a DOMException with the INVALID_ACCESS_ERR code. The trait methods will consider the value to be invalid if its 'in error' [link to definitions section 1.5].

The second situation is when the trait value is invalid with regards to animations currently applied to the trait. The value is considered invalid because it would put the animation, and therefore the document, in an error state. For example, if a <path> element has animations on its "d" attribute, trying to change the "d" attribute to a value incompatible with the animations will cause the exception to happen.

The trait setter methods will consider a value unsupported when it complies with the definition for an unsupported value [link to definitions section 1.5]. This will result in a DOMException thrown with the NOT_SUPPORTED_ERR code. For example, trying to set the "stroke-linejoin" trait to "foo" would cause this exception.

IDL Definition
interface TraitAccess
{
	DOMString getTrait(in DOMString name) raises(DOMException);
	DOMString getTraitNS(in DOMString namespaceURI, in DOMString name) raises(DOMException);
	float getFloatTrait(in DOMString name) raises(DOMException);
	SVGMatrix getMatrixTrait(in DOMString name) raises(DOMException);
	SVGRect getRectTrait(in DOMString name) raises(DOMException);
	SVGPath getPathTrait(in DOMString name) raises(DOMException);
	SVGRGBColor getRGBColorTrait(in DOMString name) raises(DOMException);
	DOMString getPresentationTrait(in DOMString name) raises(DOMException);
	DOMString getPresentationTraitNS(in DOMString namespaceURI, in DOMString name) raises(DOMException);
	float getFloatPresentationTrait(in DOMString name) raises(DOMException);
	SVGMatrix getMatrixPresentationTrait(in DOMString name) raises(DOMException);
	SVGRect getRectPresentationTrait(in DOMString name) raises(DOMException);
	SVGPath getPathPresentationTrait(in DOMString name) raises(DOMException);
	SVGRGBColor getRGBColorPresentationTrait(in DOMString name) raises(DOMException);
	void setTrait(in DOMString name, in DOMString value) raises(DOMException);
	void setTraitNS(in DOMString namespaceURI, in DOMString name, in DOMString value) raises(DOMException);
	void setFloatTrait(in DOMString name, in float value) raises(DOMException);
	void setMatrixTrait(in DOMString name, in SVGMatrix matrix) raises(DOMException);
	void setRectTrait(in DOMString name, in SVGRect rect) raises(DOMException);
	void setPathTrait(in DOMString name, in SVGPath path) raises(DOMException);
	void setRGBColorTrait(in DOMString name, in SVGRGBColor color) raises(DOMException);
};
No defined constants
No defined attributes
Methods
getTrait
Returns the trait value as String. In SVG Tiny only certain traits can be obtained as a String value. Syntax of the returned String matches the syntax of the corresponding attribute. This element is exactly equivalent to TraitAccess#getTraitNS with namespaceURI set to null.

Parameters:

  • name The name of the trait to retrieve.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element or null.
  • DOMException with error code TYPE_MISMATCH_ERR if requested trait's computed value cannot be converted to a String (SVG Tiny only).
getTraitNS
Same as TraitAccess#getTrait , but for namespaced traits. Parameter name must be a non-qualified trait name, i.e. without prefix.

Parameters:

  • namespaceURI The namespaceURI of the trait to retrieve.
  • name The name of the trait to retrieve.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element or null.
  • DOMException with error code TYPE_MISMATCH_ERR if requested trait's computed value cannot be converted to a String (SVG Tiny only).
getFloatTrait
Get the trait value as float.

Parameters:

  • name The name of the trait to retrieve.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element or null.
  • DOMException with error code TYPE_MISMATCH_ERR if requested trait's computed value cannot be converted to a float
getMatrixTrait
Returns the trait value as SVGMatrix . The returned object is a copy of the actual trait value and will not change if the corresponding trait changes.

Parameters:

  • name The name of the trait to retrieve.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element or null.
  • DOMException with error code TYPE_MISMATCH_ERR if requested trait's computed value cannot be converted to SVGMatrix
getRectTrait
Returns the trait value as SVGRect . The returned object is a copy of the actual trait value and will not change if the corresponding trait changes.

Parameters:

  • name The name of the trait to retrieve.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element or null.
  • DOMException with error code TYPE_MISMATCH_ERR if requested trait's computed value cannot be converted to SVGRect
getPathTrait
Returns the trait value as SVGPath . The returned object is a copy of the actual trait value and will not change if the corresponding trait changes.

Parameters:

  • name The name of the trait to retrieve.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element or null.
  • DOMException with error code TYPE_MISMATCH_ERR if requested trait's computed value cannot be converted to SVGPath
getRGBColorTrait
Returns the trait value as SVGRGBColor . The returned object is a copy of the trait value and will not change if the corresponding trait changes. If the actual trait value is not an RGBColor (i.e. "none"), this method will return null.

Parameters:

  • name The name of the trait to retrieve.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element or null.
  • DOMException with error code TYPE_MISMATCH_ERR if requested trait's computed value cannot be converted to SVGRGBColor
getPresentationTrait
Returns the trait presentation value as String. In SVG Tiny only certain traits can be obtained as a String value. Syntax of the returned String matches the syntax of the corresponding attribute. This element is exactly equivalent to TraitAccess#getPresentationTraitNS with namespaceURI set to null.

Parameters:

  • name The name of the trait to retrieve.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element or null.
  • DOMException with error code TYPE_MISMATCH_ERR if requested trait's computed value cannot be converted to a String (SVG Tiny only).
getPresentationTraitNS
Same as TraitAccess#getPresentationTrait , but for namespaced traits. Parameter name must be a non-qualified trait name, i.e. without prefix.

Parameters:

  • namespaceURI The namespaceURI of the trait to retrieve.
  • name The name of the trait to retrieve.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element or null.
  • DOMException with error code TYPE_MISMATCH_ERR if requested trait's computed value cannot be converted to a String (SVG Tiny only).
getFloatPresentationTrait
Get the trait presentation value as float.

Parameters:

  • name The name of the trait to retrieve.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element or null.
  • DOMException with error code TYPE_MISMATCH_ERR if requested trait's computed value cannot be converted to a float
getMatrixPresentationTrait
Returns the trait presentation value as SVGMatrix . The returned object is a copy of the actual trait value and will not change if the corresponding trait changes or as animation continue to affect the trait presentation value.

Parameters:

  • name The name of the trait to retrieve.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element or null.
  • DOMException with error code TYPE_MISMATCH_ERR if requested trait's computed value cannot be converted to SVGMatrix
getRectPresentationTrait
Returns the trait presentation value as SVGRect . The returned object is a copy of the actual trait value and will not change if the corresponding trait changes or as animation continue to affect the trait presentation value.

Parameters:

  • name The name of the trait to retrieve.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element or null.
  • DOMException with error code TYPE_MISMATCH_ERR if requested trait's computed value cannot be converted to SVGRect
getPathPresentationTrait
Returns the trait presentation value as SVGPath . The returned object is a copy of the actual trait value and will not change if the corresponding trait changes or as animation continue to affect the trait presentation value.

Parameters:

  • name The name of the trait to retrieve.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element or null.
  • DOMException with error code TYPE_MISMATCH_ERR if requested trait's computed value cannot be converted to SVGPath
getRGBColorPresentationTrait
Returns the trait presentation value as SVGRGBColor . The returned object is a copy of the trait value and will not change if the corresponding trait changes or as animation continue to affect the trait presentation value. If the actual trait presentation value is not an RGBColor (i.e. "none"), this method will return null.

Parameters:

  • name The name of the trait to retrieve.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element or null.
  • DOMException with error code TYPE_MISMATCH_ERR if requested trait's computed value cannot be converted to SVGRGBColor
setTrait
Set the trait value as String. In SVG Tiny only certain traits can be set through a String value. The syntax of the String that should be given as a value must be the same as syntax of the corresponding XML attribute value. Exactly equivalent to TraitAccess#setTraitNS with namespaceURI attribute set to null.

Parameters:

  • name The name of the trait to be set.
  • value the value of the trait to be set as String.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element, an attempt has been made to set an unsupported value.
  • DOMException with error code TYPE_MISMATCH_ERR if the requested trait's value cannot be specified as a String
  • DOMException with error code INVALID_ACCESS_ERR if the input value is an invalid value for the given trait or null is specified.
  • DOMException with error code NO_MODIFICATION_ALLOWED_ERR: if attempt is made to change readonly trait.
setTraitNS
Same as TraitAccess#setTrait , but for namespaced traits. Parameter name must be a non-qualified trait name, i.e. without prefix.

Parameters:

  • namespaceURI The namespaceURI of the trait to be set.
  • name The name of the trait to be set.
  • value The value of the trait to be set as a string.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element, an attempt has been made to set an unsupported value.
  • DOMException with error code TYPE_MISMATCH_ERR if the requested trait's value cannot be specified as a String
  • DOMException with error code INVALID_ACCESS_ERR if the input value is an invalid value for the given trait or null is specified. This error is also thrown when the <use> element is hooked into the document tree and the the value of xlink:href is set invalid.
  • DOMException with error code NO_MODIFICATION_ALLOWED_ERR: if attempt is made to change readonly trait.
setFloatTrait
Set the trait value as float.

Parameters:

  • name The name of the trait to be set.
  • value The value of the trait to be set as float.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element.
  • DOMException with error code TYPE_MISMATCH_ERR if the requested trait's value cannot be specified as a float
  • DOMException with error code INVALID_ACCESS_ERR if the input value is an invalid value for the given trait or null is specified.
setMatrixTrait
Set the trait value as SVGMatrix . Values in SVGMatrix are copied in the trait so subsequent changes to the given SVGMatrix have no effect on the value of the trait.

Parameters:

  • name The name of the trait to be set.
  • value The value of the trait to be set as SVGMatrix.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element.
  • DOMException with error code TYPE_MISMATCH_ERR if the requested trait's value cannot be specified as an SVGMatrix
  • DOMException with error code INVALID_ACCESS_ERR if the input matrix value is null.
setRectTrait
Set the trait value as SVGRect . Values in SVGRect are copied in the trait so subsequent changes to the given SVGRect have no effect on the value of the trait.

Parameters:

  • name The name of the trait to be set.
  • value The value of the trait to be set as SVGRect.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element.
  • DOMException with error code TYPE_MISMATCH_ERR if the requested trait's value cannot be specified as an SVGRect
  • DOMException with error code INVALID_ACCESS_ERR if the input value is an invalid value for the given trait or null is specified. SVGRect is invalid if the width or height values are set to negative.
setPathTrait
Set the trait value as SVGPath . Values in SVGPath are copied in the trait so subsequent changes to the given SVGPath have no effect on the value of the trait.

Parameters:

  • name The name of the trait to be set.
  • value The value of the trait to be set as SVGPath.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element.
  • DOMException with error code TYPE_MISMATCH_ERR if the requested trait's value cannot be specified as an SVGPath
  • DOMException with error code INVALID_ACCESS_ERR if the input value is an invalid value for the given trait or null is specified. SVGPath is invalid if it begins with any segment other than MOVE_TO segment. Note that an empty SVGPath is still a valid value.
setRGBColorTrait
Set the trait value as SVGRGBColor . Values in SVGRGBColor are copied in the trait so subsequent changes to the given SVGRGBColor have no effect on the value of the trait.

Parameters:

  • name The name of the trait to be set.
  • value The value of the trait to be set as SVGRGBColor.

Raises:

  • DOMException with error code NOT_SUPPORTED_ERR if the requested trait is not supported on this element.
  • DOMException with error code TYPE_MISMATCH_ERR if the requested trait's value cannot be specified as an SVGRGBColor
  • DOMException with error code INVALID_ACCESS_ERR if the input value is null.

A.7.13 ElementTraversal

This interface provides a way to traverse elements in the DOM tree. It is needed mainly because SVG Tiny DOM does not expose character data Nodes. Each element in SVG Tiny document tree implements this interface. This applies to elements in the foreign namespaces as well.
IDL Definition
interface ElementTraversal
{
	readonly attribute Element firstElementChild;
	readonly attribute Element lastElementChild;
	readonly attribute Element nextElementSibling;
	readonly attribute Element previousElementSibling;
};
No defined constants
Attributes
firstElementChild
Returns the first child element node of this element. null if this element has no child elements.
lastElementChild
last child element node of this element. null if this element has no child elements.
nextElementSibling
Returns the next sibling element node of this element. null if this element has no element sibling nodes that come after this one in the document tree.
previousElementSibling
previous sibling element node of this element. null if this element has no element sibling nodes that come before this one in the document tree.
No defined methods

A.7.14 SVGElement

This interface represents an SVG element in the document tree. For implementations of the SVGTiny 1.2 profile an element's id can be set only if it does not already have an id. A DOMException with error code NO_MODIFICATION_ALLOWED_ERR is raised if an attempt is made to change an existing id. Other, future, profiles might allow changing the ID of an element. This interface also provides methods to traverse elements in the DOM tree.

This interface can also be used read and manipulate the value of "traits" associated with this SVGElement. Each trait corresponds to an attribute or property,which is parsed and understood by the element and in most cases animatable. Unlike attributes, each element has a well-defined set of traits and attempting to access undefined trait is an error. Also unlike attributes traits are typed and their values are normalized; for instance SVG path specification is parsed and all path commands are converted to their absolute variants, it is not possible to say through the value of the trait if a path command was absolute or relative. When getting and setting trait values, accessor of the correct type must be used or exception will be thrown.

Initial trait values come from parsing corresponding attributes. If value is not specified, but corresponding attribute (or property for environments where styling is supported) is inherited, inherited value is returned as a result of the trait query method. If it is not inherited, default value is returned. Default values are also returned in the case when there is no parent to inherit from, for ex: when you create a new element, set a trait value to 'inherit', but there is no parent for inheritance. It is important to note that the value which is returned is always a base value (i.e. before animation is applied), and this is true for both static and animated content.

Setting a trait value has the same effect as changing a corresponding attribute, but trait setters can operate on typed values. The value which is modified is always a base value. For inheritable traits the trait value can always be set to "inherit" (but querying the value will always return the actual inherited value as explained above).

A.7.15 Traits supported in this specification, SVG Tiny 1.2 uDOM

The table below shows the list of attributes and properties that SVG Tiny DOM 1.2 implementations must support. Each attribute row lists the allowed getter and setter (s). The 3:rd column specifies the default values that must be used for each attribute or property. Unless explicitly stated in the 'Comments' column, a supported attribute is accessible on all elements it can belong to. See the attribute section for a list of attributes and which elements they belong to.

For 'REQUIRED' attributes, there are two cases:

Note: For some of the attributes and data types additional rules apply. These rules are defined below the table.

Attribute Trait Getter Trait Setter Default Values Comments
accumulate getTrait [none | sum] setTrait [none | sum] none
additive getTrait [replace | sum] setTrait [replace | sum] replace
attributeName getTrait setTrait
audio-level getFloatTrait [value >= 0 && value <= 1] setFloatTrait [value >= 0 && value <= 1] 1.0f
baseProfile getTrait Not available (readonly) "tiny"
begin N/A setTrait
calcMode getTrait [discrete | linear | paced | spline] setTrait [discrete | linear | paced | spline] linear (except for animateMotion)

paced (for animateMotion)
color getRGBColorTrait [SVGRGBColor]

getTrait [SVGRGBColor]
setRGBColorTrait [SVGRGBColor]

setTrait [inherit | SVGRGBColor]
rgb(0,0,0) -See RGB access rule.
cx getFloatTrait setFloatTrait 0.0f
cy getFloatTrait setFloatTrait 0.0f
d getPathTrait [SVGPath] setPathTrait [SVGPath] REQUIRED(Empty SVGPath)
display getTrait [inline | none ] setTrait [inline | none | inherit ] "inline"
dur N/A setTrait
editable getTrait [true | false] setTrait [true | false] "false"
fill getRGBColorTrait [SVGRGBColor]

getTrait [none | <Paint Server> | SVGRGBColor]
setRGBColorTrait [SVGRGBColor]

setTrait [none | currentColor | <Paint Server> | inherit | SVGRGBColor]
rgb(0,0,0) -See RGB access rule.

-Attribute defining the fill-color.
fill getTrait[freeze | remove] setTrait[freeze | remove] "remove" -Attribute defining the fill behavior of a smil animation element.
fill-opacity getFloatTrait [value >= 0 && value <= 1] setFloatTrait [value >= 0 && value <= 1]

setTrait[inherit]
1.0f
fill-rule getTrait [nonzero | evenodd] setTrait [nonzero | evenodd | inherit] "nonzero"
focusable getTrait [true | false] setTrait [true | false | auto]
focusNorth getTrait [null | IDREF] setTrait [IDREF | auto]
focusNorthEast getTrait [null | IDREF] setTrait [IDREF | auto]
focusEast getTrait [null | IDREF] setTrait [IDREF | auto]
focusSouthEast getTrait [null | IDREF] setTrait [IDREF | auto]
focusSouth getTrait [null | IDREF] setTrait [IDREF | auto]
focusSouthWest getTrait [null | IDREF] setTrait [IDREF | auto]
focusWest getTrait [null | IDREF] setTrait [IDREF | auto]
focusNorthWest getTrait [null | IDREF] setTrait [IDREF | auto]
focusNext getTrait [null | IDREF] setTrait [IDREF | auto]
focusPrev getTrait [null | IDREF] setTrait [IDREF | auto]
focusable getTrait [true | false] setTrait [true | false | auto]
font-family getTrait [single, computed font-family value] setTrait [same syntax as font-family attribute] User-Agent
font-size getFloatTrait [value >= 0] setFloatTrait [value >= 0]

setTrait [inherit]
User-Agent
font-style getTrait [normal | italic | oblique ] setTrait [normal | italic | oblique | inherit] "normal"
font-weight getTrait [100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 ] setTrait [normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit] "normal"
gradientUnits getTrait [userSpaceOnUse | objectBoundingBox] setTrait [userSpaceOnUse | objectBoundingBox] "objectBoundingBox"
height getFloatTrait [value >= 0] setFloatTrait [value >= 0] REQUIRED(0.0f)
id getTrait setTrait
keyPoints N/A setTrait
keySplines N/A setTrait
keyTimes N/A setTrait
max N/A setTrait
min N/A setTrait
offset getFloatTrait[value >= 0 && value <= 1] setFloatTrait[value >= 0 && value <= 1]
opacity getFloatTrait [value >= 0 && value <= 1] setFloatTrait [value >= 0 && value <= 1]

setTrait[inherit]
path getPathTrait [SVGPath] setPathTrait [SVGPath] REQUIRED(Empty SVGPath)
r getFloatTrait [ value >= 0] setFloatTrait [value >= 0] REQUIRED (0.0f)
repeatCount N/A setTrait
repeatDur N/A setTrait
restart getTrait [always | whenNotActive | never] setTrait [always | whenNotActive | never] always
rx getFloatTrait [value >= 0] setFloatTrait [value >= 0] 0.0f
ry getFloatTrait [value >= 0] setFloatTrait [value >= 0] 0.0f
snapShotTime getFloatTrait [value >= 0] setFloatTrait [value >= 0] 0.0f
solid-color getRGBColorTrait [SVGRGBColor]

getTrait [SVGRGBColor]
setRGBColorTrait [SVGRGBColor]

setTrait [SVGRGBColor | inherit]
rgb(0,0,0) -See RGB access rule.
solid-opacity getFloatTrait [value >= 0 && value <= 1] setFloatTrait [value >= 0 && value <= 1] 1.0f
stop-color getRGBColorTrait [SVGRGBColor]

getTrait [none | <Paint Server> | SVGRGBColor]
setRGBColorTrait [SVGRGBColor]

setTrait(none | currentColor | <Paint Server> | inherit | SVGRGBColor]
rgb(0,0,0) -See RGB access rule.
stop-opacity getFloatTrait [value >= 0 && value <= 1] setFloatTrait [value >= 0 && value <= 1]

setTrait[inherit]
1.0f
stroke getRGBColorTrait [SVGRGBColor]

getTrait [none | <Paint Server> | SVGRGBColor]
setRGBColorTrait [SVGRGBColor]

setTrait [none | currentColor | <Paint Server> | inherit | SVGRGBColor]
"none" -See RGB access rule.
stroke-dashoffset getFloatTrait setTrait [inherit]

setFloatTrait
0.0f
stroke-linecap getTrait [butt | round | square] setTrait [butt | round | square | inherit] "butt"
stroke-linejoin getTrait [miter | round | bevel ] setTrait [miter | round | bevel | inherit] "miter"
stroke-miterlimit getFloatTrait [ value >= 1] setTrait [inherit]

setFloatTrait [value >= 1]
4.0f
stroke-opacity getFloatTrait [value >= 0 && value <= 1] setFloatTrait [value >= 0 && value <= 1]

setTrait[inherit]
1.0f
stroke-width getFloatTrait [value >= 0] setTrait [inherit]

setFloatTrait [value >= 0]
1.0f
target getTrait setTrait ""
"text" getTrait("#text") ["text content"] setTrait("#text", "text content") -See Text Node Access for details.
text-anchor getTrait [start | middle | end] setTrait [start | middle | end | inherit ] "start"
transform getMatrixTrait [SVGMatrix]

getTrait
setMatrixTrait [SVGMatrix]

setTrait
Identity matrix (1,0,0,1,0,0) -See Transform access rule.
type For animateTransform: getTrait [translate | scale | rotate | skewX | skewY] For animateTransform: setTrait [translate | scale | rotate | skewX | skewY]
values N/A setTrait
vector-effect getTrait [default|non-scaling-stroke] setTrait [default|non-scaling-stroke] "default"
version getTrait Not available (readonly) "1.2"
viewBox getRectTrait [null, SVGRect] setRectTrait [SVGRect]

setTrait [none]
null If the actual trait value is not an SVGRect (i.e. "none"), the getRectTrait method will return null.
viewport-fill getRGBColorTrait [SVGRGBColor]

getTrait [none | <Paint Server> | SVGRGBColor]
setRGBColorTrait [SVGRGBColor]

setTrait [none | currentColor | <Paint Server> | SVGRGBColor]
"none" -See RGB access rule.
viewport-fill-opacity getFloatTrait [value >= 0 && value <= 1] setFloatTrait [value >= 0 && value <= 1] 1.0f
visibility getTrait [visible | hidden] setTrait [visible | hidden | inherit] "visible"
width getFloatTrait [ value >= 0] setFloatTrait [ value >= 0] REQUIRED (0.0f)
x getFloatTrait

(array of x-values not supported)
setFloatTrait

(array of x-values not supported)
0.0f
x1 getFloatTrait setFloatTrait 0.0f
x2 getFloatTrait setFloatTrait 0.0f
xlink:href getTrait [absolute URI] setTrait ""
y getFloatTrait

(array of y-values not supported)
setFloatTrait

(array of y-values not supported)
0.0f
y1 getFloatTrait setFloatTrait 0.0f
y2 getFloatTrait setFloatTrait 0.0f
zoomAndPan getTrait [disable | magnify] setTrait [disable | magnify] "magnify"

Additional accessing rules

Accessing rules for RGBColorTrait

The getRGBColorTrait is used to get the RGB color. If the actual trait value is not an RGBColor, i.e. "none" or a link to a paint server (e.g. to a gradient or a solid-color), this method will raise a DOMException with error code TYPE_MISMATCH_ERR and getTrait should be used instead. setTrait must be used to set a color type that is not an RGBColor.

Accessing rules for 'transform' attribute

The transform attribute in SVGT1.2 can have two types of values. The 'normal' transformation list (e.g. scale, translate, rotate, matrix etc) or the newly introduced ref(svg) type. getMatrixTrait returns the current evaluated matrix in both cases. If the user needs to know that the transform attribute value was a 'ref' he must call getTrait. By using setTrait he can set the transform attribute to ref(svg).

Accessing rules for animation and font related elements

The following rule applies to Smil-animation elements (<animate>, <animateTransform>, <animateColor>, <animateMotion>, <set>) and font element with its children (<font>, <font-face, <missing-glyph>, <glyph>, <hkern>, <font-face-src>, <font-face-uri>, <font-face-name>).

These elements can be inserted and removed from the tree but they cannot be modified once inserted into the tree. Manipulating animations while they are in the DOM tree and possiblely active would result in undefined behaviour. This may also have an effect on past resolved times. This restriction means that if the author wishes to add animations via script, the element must be modified when it is not attached to the tree. A similar reasoning applies to the different font elements, modifying them while attached to the tree might lead to unpredictable result. Following is an example of adding animation to the tree including setting the properties prior to insertion.

Example: Animating via the uDOM
<svg version="1.2" baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" id="svg-root"

width="100%" height="100%" viewBox="0 0 480 360">

<rect id="myRect" fill="green" x="10" y="10" width="200" height="100" stroke="black" stroke-width="2"/>

</svg>
A script (java) such as the following might be used to add an animation to the rectangle:
SVGElement newAnimate = (SVGElement)document.createElementNS(svgNS, "animate");

newAnimate.setTrait("attributeName", "fill");

newAnimate.setTrait("from", "red");

newAnimate.setTrait("to", "blue");

newAnimate.setTrait("dur", "5");

newAnimate.setTrait("repeatCount", "10");

Element myRect = document.getElementById("myRect");

myRect.appendChild(newAnimate);

IDL Definition
interface SVGElement : dom::Element, events::EventTarget, TraitAccess, ElementTraversal
{
	attribute DOMString id;
};
No defined constants
Attributes
id
On read : Returns the Element's id, null if no id specified. On write : Sets the Element's id attribute.

Raises:

  • DOMException with error code NO_MODIFICATION_ALLOWED_ERR is raised if an attempt is made to change an existing Id.
  • DOMException with error code INVALID_ACCESS_ERR is raised if the Id is not unique i.e. if this Id already exists in the document.
No defined methods

A.7.16 SVGAnimationElement

This interface represents an Animation element which is implemented by elements that suports timing control (smil-animation elements, media elements and time containers).

This interface is implemented by: <animate>, <animateTransform>, <animateColor>, <set>, <animateMotion>, <audio>, <video>, <animation> and <svg>
IDL Definition
interface SVGAnimationElement : SVGElement, smil::ElementTimeControl
{
};
No defined constants
No defined attributes
No defined methods

A.7.17 SVGVisualMediaElement

This interface represents a media element that is visual, i.e.have a physical location on the screen.

This interface is implemented by: <animation> and <video>.
IDL Definition
interface SVGVisualMediaElement : SVGLocatableElement, SVGAnimationElement
{
};
No defined constants
No defined attributes
No defined methods

A.7.18 EventListenerInitializer2

EventListenerInitializer2 allows event listeners to be initialized. In typical usage with Java, a <script> element references a JAR file which contains a manifest entry (SVG-Handler-Class) which identifies the class responsible for creating the event listeners. For ECMAScript, the script global object must implement the EventListenerInitializer2 interface, thus providing methods initializeEventListeners and createEventListener on the script global object. Further information about EventListenerInitializer2 can be found in the Scripting chapter.

Example #1: The usage of java together with the 'script' element

The example rely on the fact the 'myclasses.jar' jar file contains a MANIFEST file with the following entry:

SVG-Handler-Class: org.sample.SVGHandler

Given the following SVG file:
<svg xmlns:svg="http://www.w3.org/2000/svg" version="1.2" baseProfile="tiny"

xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 500 500">

<script type="application/java-archive" xlink:href="myclasses.jar"/>

<rect id="therect" x="0" y="0" width="100" height="100"/>

</svg>
Given that the SVGHandler implementation available in the 'myclasses.jar' jar file is the following:
package org.sample.SVGHandler



import org.w3c.dom.*;

import org.w3c.dom.svg.*;



public class SVGHandler implements EventListenerInitializer2 {

public void initializeEventListeners(Element scriptElement) {

Document document = scriptElement.ownerDocument;

Element rec = document.getElementById("therect");

rec.addEventListener("click", new MyListener(), true);

}



public EventListener createEventListener(Element handlerElement) {}

}

An instance of "MyListener" listener will be called when a 'click' event will occur on the rect element.

Example #2: The usage of java together with the 'handler' element

The example rely on the fact the 'myclasses.jar' jar file contains a MANIFEST file with the following entry:

SVG-Handler-Class: org.sample.SVGHandler

Given the following SVG file:
<svg xmlns:svg="http://www.w3.org/2000/svg" version="1.2" baseProfile="tiny"

xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 500 500">

xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:myns="http://sample.org/myNS">

<script id="init" type="application/java-archive" xlink:href="myclasses.jar"/>

<rect id="therect" x="0" y="0" width="100" height="100">

<handler type="application/java" ev:event="click"

xlink:href="#init" myns:listenerClass="MyListener">

</rect>

</svg>
Given that the SVGHandler implementation available in the 'myclasses.jar' jar file is the following:
package org.sample.SVGHandler



import org.w3c.dom.*;

import org.w3c.dom.svg.*;



public class SVGHandler implements EventListenerInitializer2 {

public void initializeEventListeners(Element scriptElement) {}



public EventListener createEventListener(Element handlerElement) {

EventListener listenerInstance = null;

try {

String listenerClass = ((TraitAccess)handlerElement).

getTraitNS("http://sample.org/myNS", "listenerClass");

listenerInstance = Class.forName(listenerClass).newInstance();

} catch (Exception e) {}



return listenerInstance;

}

}

An instance of "MyListener" listener will be called when a 'click' event will occur on the rect element. What createEventListener does is totally in the hand of the Java developer, the listener instance can be hardcoded or fully configured from information put on the handler element as shown here.

IDL Definition
interface EventListenerInitializer2
{
	void initializeEventListeners( in dom::Element scriptElement );
	events::EventListener createEventListener( in dom::Element handlerElement );
};
No defined constants
No defined attributes
Methods
initializeEventListeners
For each <script> element, at load time for that element, the user agent finds the appropriate object which implements the EventListenerInitializer2 interface. (For ECMAScript, it is the script global object. For Java, it is the class identified by the SVG-Handler-Class manifest entry). The user agent then invokes the initializeEventListeners method, which allows the scripting code to register event listeners.

Parameters:

  • scriptElement The <script> element which has been loaded.
createEventListener
For each <handler> element, at load time for that element, the user agent finds the appropriate object which implements the EventListenerInitializer2 interface. (For ECMAScript, it is the script global object. For Java, it is the class identified by the SVG-Handler-Class manifest entry). The user agent then invokes the createEventListener method, which allows the scripting code to register an appropriate event listener. For some scripting languages such as ECMAScript, the User Agent must define a default createEventListener method (see the Scripting chapter).

This method returns the event listener that will handle events. The user agent will register this event listener with the event target identified by the <handler> element.

Parameters:

  • handlerElement The <handler> element which has been loaded.

A.7.19 SVGGlobal

The majority of scripted SVG documents in existence make use of the browser specific Window interface. SVG 1.2 specifies an SVGGlobal interface, taking into account the de-facto standard that already exists, as well as adding the new features present in SVG 1.2. SVGGlobal inherits from the Global interface, which is currently defined to be empty. The Global interface is designed to be the parent interface for language specific window objects. In scripting implementations, the methods and attributes defined by the Global object are normally part of the global execution context.

Interface SVGGlobal provides a global object for scripts embedded in a SVG document.

IDL Definition
interface SVGGlobal : global::Global
{
	global::Connection createConnection();
	void gotoLocation(in DOMString newURI);
	readonly attribute Document document;
	readonly attribute global::Global parent;
};
No defined constants
Attributes
document
The Document that this SVGGlobal operates on.
parent
The Global context of this document's parent. If the document has no notion of parent (e.g. when the document is displayed in a stand-alone viewer) parent is null.
Methods
createConnection
Creates a Connection object.
gotoLocation
Request that the user agent navigates to the given URL.