This adds several helper functions for serializing to XML:
* ol.xml.serialize: Counterpart to ol.xml.parse. By splitting
the serialization process up into a node factory and a node
writer, note writers can easily be used for different
namespaces.
* ol.xml.pushSerializeAndPop: Counterpart to
ol.xml.pushParseAndPop.
* ol.xml.makeStructureNS: Works like ol.xml.createParsersNS,
but works for arbitrary structures.
* ol.xml.makeChildAppender: If the top item of the stack has
the new ol.xml.NodeStackItem type, this helper function
can be used to create a serializer that appends the current
node to its designated parent.
* ol.xml.makeChildNodeFactory: Creates a node factory which
produces child nodes from an array of node names which are
passed to ol.xml.serialize.
* ol.xml.makeSequence: A convenience function for creating
xsd:sequence structures. Takes an object literal and an
ordered list of the keys, and returns an array that can be
passed as values to ol.xml.serialize.
* ol.xml.makeSimpleTypeWriter: Using e.g. the new write*TextNode
functions from ol.format.XSD, this function creates a node
writer that writes simple type nodes for values like strings
or numbers.
The following commits will be using this new framework for
implementing ol.format.GPX.writeFeatures, and prose
documentation with instructions based on what was said above
will be added.
The code to detect CSS transforms requires a DOM to append an
element to. By performing this action when first called instead
of unconditionally upon library load, we can load OpenLayers in
the document's head again.
Especially on mobile devices, loading just a single tile can
cause major janks. During animations, it is fine to just skip
frames. But during user interaction (e.g. dragging), a more
instant visual feedback is desirable.
As with vector layers and feature overlays, feature style can be set by calling
setStyle. Calling getStyle returns what was passed to setStyle. Internally, we call getStyleFunction.
The setStyle method accepts a single style, an array of styles, or a style function. The getStyle method returns what was set. Internally, we use the getStyleFunction method which always returns a function. When calling setStyle, a change event is dispatched (fixes#1671).
Features are records with any number of user set values. Separate from this, we rely on feature properties like the feature identifier and feature style. The two (user properties and our internal properties) should not be mixed.