hillion     02/04/12 02:17:53

  Modified:    sources/org/apache/batik/bridge ScriptingEnvironment.java
               sources/org/apache/batik/css/engine CSSEngine.java
                        SVGCSSEngine.java
  Log:
  Added support for dynamic update of the 'class' attribute.
  
  Revision  Changes    Path
  1.20      +72 -49    
xml-batik/sources/org/apache/batik/bridge/ScriptingEnvironment.java
  
  Index: ScriptingEnvironment.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/ScriptingEnvironment.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- ScriptingEnvironment.java 10 Apr 2002 16:19:02 -0000      1.19
  +++ ScriptingEnvironment.java 12 Apr 2002 09:17:52 -0000      1.20
  @@ -46,7 +46,7 @@
    * This class contains the informations needed by the SVG scripting.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: ScriptingEnvironment.java,v 1.19 2002/04/10 16:19:02 hillion Exp $
  + * @version $Id: ScriptingEnvironment.java,v 1.20 2002/04/12 09:17:52 hillion Exp $
    */
   public class ScriptingEnvironment extends BaseScriptingEnvironment {
   
  @@ -56,11 +56,6 @@
       protected Timer timer = new Timer(true);
   
       /**
  -     * The bridge context.
  -     */
  -    protected BridgeContext context;
  -
  -    /**
        * The update manager.
        */
       protected UpdateManager updateManager;
  @@ -71,11 +66,6 @@
       protected RunnableQueue updateRunnableQueue;
   
       /**
  -     * The DOMAttrModified event listener.
  -     */
  -    protected EventListener domAttrModifiedListener;
  -
  -    /**
        * The DOMNodeInserted event listener.
        */
       protected EventListener domNodeInsertedListener;
  @@ -199,21 +189,14 @@
        */
       public ScriptingEnvironment(BridgeContext ctx) {
           super(ctx);
  -        context = ctx;
           updateManager = ctx.getUpdateManager();
           updateRunnableQueue = updateManager.getUpdateRunnableQueue();
           
  -        Document doc = ctx.getDocument();
  -
           // Add the scripting listeners.
  -        addScriptingListeners(doc.getDocumentElement());
  +        addScriptingListeners(document.getDocumentElement());
   
           // Add the listeners responsible of updating the event attributes
  -        EventTarget et = (EventTarget)doc;
  -        domAttrModifiedListener = new DOMAttrModifiedListener();
  -        et.addEventListener("DOMAttrModified",
  -                            domAttrModifiedListener,
  -                            false);
  +        EventTarget et = (EventTarget)document;
           domNodeInsertedListener = new DOMNodeInsertedListener();
           et.addEventListener("DOMNodeInserted",
                               domNodeInsertedListener,
  @@ -260,7 +243,17 @@
        */
       public void interrupt() {
           timer.cancel();
  -        // !!! remove the DOM listeners.
  +        // Remove the scripting listeners.
  +        removeScriptingListeners(document.getDocumentElement());
  +
  +        // Remove the listeners responsible of updating the event attributes
  +        EventTarget et = (EventTarget)document;
  +        et.removeEventListener("DOMNodeInserted",
  +                               domNodeInsertedListener,
  +                               false);
  +        et.removeEventListener("DOMAttrRemoved",
  +                               domNodeRemovedListener,
  +                               false);
       }
   
       /**
  @@ -312,7 +305,7 @@
                               target.addEventListener("endEvent",
                                                       endListener,
                                                       false);
  -                    }
  +                        }
                           if (elt.hasAttributeNS(null, "onrepeat")) {
                               target.addEventListener("repeatEvent",
                                                       repeatListener ,
  @@ -362,24 +355,64 @@
       }
   
       /**
  -     * To wrap an event listener.
  +     * Removes the scripting listeners from the given element.
        */
  -    protected class EventListenerWrapper implements EventListener {
  -
  -        /**
  -         * The wrapped event listener.
  -         */
  -        protected EventListener eventListener;
  +    protected void removeScriptingListeners(Node node) {
  +        if (node.getNodeType() == Node.ELEMENT_NODE) {
  +            // Detach the listeners
  +            Element elt = (Element)node;
  +            EventTarget target = (EventTarget)elt;
  +            if (SVGConstants.SVG_NAMESPACE_URI.equals(elt.getNamespaceURI())) {
  +                if (SVGConstants.SVG_SVG_TAG.equals(elt.getLocalName())) {
  +                    // <svg> listeners
  +                    target.removeEventListener("SVGAbort",
  +                                                   svgAbortListener, false);
  +                    target.removeEventListener("SVGError",
  +                                               svgErrorListener, false);
  +                    target.removeEventListener("SVGResize",
  +                                               svgResizeListener, false);
  +                    target.removeEventListener("SVGScroll",
  +                                               svgScrollListener, false);
  +                    target.removeEventListener("SVGUnload",
  +                                               svgUnloadListener, false);
  +                    target.removeEventListener("SVGZoom",
  +                                               svgZoomListener, false);
  +                } else {
  +                    String name = elt.getLocalName();
  +                    if (name.equals(SVGConstants.SVG_SET_TAG) ||
  +                        name.startsWith("animate")) {
  +                        // animation listeners
  +                        target.removeEventListener("beginEvent",
  +                                                   beginListener ,
  +                                                   false);
  +                        target.removeEventListener("endEvent",
  +                                                   endListener,
  +                                                   false);
  +                        target.removeEventListener("repeatEvent",
  +                                                   repeatListener ,
  +                                                   false);
  +                        return;
  +                    }
  +                }
  +            }
   
  -        /**
  -         * Creates a new EventListenerWrapper.
  -         */
  -        public EventListenerWrapper(EventListener el) {
  -            eventListener = el;
  +            // UI listeners
  +            target.removeEventListener("focusin", focusinListener, false);
  +            target.removeEventListener("focusout", focusoutListener, false);
  +            target.removeEventListener("activate", activateListener, false);
  +            target.removeEventListener("click", clickListener, false);
  +            target.removeEventListener("mousedown", mousedownListener, false);
  +            target.removeEventListener("mouseup", mouseupListener, false);
  +            target.removeEventListener("mouseover", mouseoverListener, false);
  +            target.removeEventListener("mouseout", mouseoutListener, false);
  +            target.removeEventListener("mousemove", mousemoveListener, false);
           }
   
  -        public void handleEvent(final Event evt) {
  -            eventListener.handleEvent(evt);
  +        // Removes the listeners from the children
  +        for (Node n = node.getFirstChild();
  +             n != null;
  +             n = n.getNextSibling()) {
  +            removeScriptingListeners(n);
           }
       }
   
  @@ -605,7 +638,7 @@
               text = "<svg>" + text + "</svg>";
               SAXSVGDocumentFactory df = new SAXSVGDocumentFactory
                   (XMLResourceDescriptor.getXMLParserClassName());
  -            String uri = ((SVGOMDocument)context.getDocument()).
  +            String uri = ((SVGOMDocument)bridgeContext.getDocument()).
                   getURLObject().toString();
               DocumentFragment result = null;
               try {
  @@ -669,7 +702,7 @@
                           } catch (Exception e) {
                               updateRunnableQueue.invokeLater(new Runnable() {
                                       public void run() {
  -                                        h.getURLDone(false, "", "");
  +                                        h.getURLDone(false, null, null);
                                       }
                                   });
                           }
  @@ -735,16 +768,6 @@
       }
   
       /**
  -     * To handle the element attributes modification in the associated
  -     * document.
  -     */
  -    protected class DOMAttrModifiedListener implements EventListener {
  -        public void handleEvent(Event evt) {
  -            // !!! Updates the listeners.
  -        }
  -    }
  -
  -    /**
        * The listener class for 'DOMNodeInserted' event.
        */
       protected class DOMNodeInsertedListener implements EventListener {
  @@ -758,7 +781,7 @@
        */
       protected class DOMNodeRemovedListener implements EventListener {
           public void handleEvent(Event evt) {
  -            // !!! Updates the listeners.
  +            removeScriptingListeners((Node)evt.getTarget());
           }
       }
   
  
  
  
  1.8       +43 -4     xml-batik/sources/org/apache/batik/css/engine/CSSEngine.java
  
  Index: CSSEngine.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/css/engine/CSSEngine.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- CSSEngine.java    9 Apr 2002 16:27:18 -0000       1.7
  +++ CSSEngine.java    12 Apr 2002 09:17:52 -0000      1.8
  @@ -58,7 +58,7 @@
    * This is the base class for all the CSS engines.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: CSSEngine.java,v 1.7 2002/04/09 16:27:18 hillion Exp $
  + * @version $Id: CSSEngine.java,v 1.8 2002/04/12 09:17:52 hillion Exp $
    */
   public abstract class CSSEngine {
   
  @@ -213,6 +213,16 @@
       protected String styleLocalName;
       
       /**
  +     * The class attribute namespace URI.
  +     */
  +    protected String classNamespaceURI;
  +
  +    /**
  +     * The class attribute local name.
  +     */
  +    protected String classLocalName;
  +    
  +    /**
        * The non CSS presentational hints.
        */
       protected Set nonCSSPresentationalHints;
  @@ -288,6 +298,8 @@
        *           elements is required.
        * @param sns The namespace URI of the style attribute.
        * @param sln The local name of the style attribute.
  +     * @param cns The namespace URI of the class attribute.
  +     * @param cln The local name of the class attribute.
        * @param hints Whether the CSS engine should support non CSS
        *              presentational hints.
        * @param hintsNS The hints namespace URI.
  @@ -301,6 +313,8 @@
                           String[] pe,
                           String sns,
                           String sln,
  +                        String cns,
  +                        String cln,
                           boolean hints,
                           String hintsNS,
                           CSSContext ctx) {
  @@ -310,6 +324,8 @@
           pseudoElementNames = pe;
           styleNamespaceURI = sns;
           styleLocalName = sln;
  +        classNamespaceURI = cns;
  +        classLocalName = cln;
           cssContext = ctx;
   
           int len = vm.length;
  @@ -1840,9 +1856,6 @@
                   return;
               }
   
  -            // !!! TODO: class mutation
  -            // !!! TODO: id mutation
  -
               MutationEvent mevt = (MutationEvent)evt;
               Node attr = mevt.getRelatedNode();
               String attrNS = attr.getNamespaceURI();
  @@ -1855,6 +1868,32 @@
                       // The style declaration attribute has been modified.
   
                       inlineStyleAttributeUpdated(elt, style, mevt);
  +
  +                    return;
  +                }
  +            }
  +            if ((attrNS == null && classNamespaceURI == null) ||
  +                (attrNS != null && attrNS.equals(classNamespaceURI))) {
  +                String name = (attrNS == null)
  +                    ? attr.getNodeName()
  +                    : attr.getLocalName();
  +                if (name.equals(classLocalName)) {
  +                    // The class attribute has been modified...
  +                    // ...invalidate all the properties.
  +
  +                    elt.setComputedStyleMap(null, null);
  +
  +                    firePropertiesChangedEvent(elt, ALL_PROPERTIES);
  +                    
  +                    for (Node n = elt.getFirstChild();
  +                         n != null;
  +                         n = n.getNextSibling()) {
  +                        propagateChanges(n, ALL_PROPERTIES);
  +                        Node c = getImportedChild(n);
  +                        if (c != null) {
  +                            propagateChanges(c, ALL_PROPERTIES);
  +                        }
  +                    }
   
                       return;
                   }
  
  
  
  1.2       +5 -1      xml-batik/sources/org/apache/batik/css/engine/SVGCSSEngine.java
  
  Index: SVGCSSEngine.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/css/engine/SVGCSSEngine.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SVGCSSEngine.java 18 Mar 2002 10:28:21 -0000      1.1
  +++ SVGCSSEngine.java 12 Apr 2002 09:17:52 -0000      1.2
  @@ -28,7 +28,7 @@
    * This class provides a CSS engine initialized for SVG.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: SVGCSSEngine.java,v 1.1 2002/03/18 10:28:21 hillion Exp $
  + * @version $Id: SVGCSSEngine.java,v 1.2 2002/04/12 09:17:52 hillion Exp $
    */
   public class SVGCSSEngine extends CSSEngine {
       
  @@ -49,6 +49,8 @@
                 null,
                 null,
                 "style",
  +              null,
  +              "class",
                 true,
                 null,
                 ctx);
  @@ -77,6 +79,8 @@
                 null,
                 null,
                 "style",
  +              null,
  +              "class",
                 true,
                 null,
                 ctx);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to