Repository: incubator-wave
Updated Branches:
  refs/heads/master 803697606 -> c2784ad28


Adds support to Robot API and client for form buttons. 
https://reviews.apache.org/r/25034/


Project: http://git-wip-us.apache.org/repos/asf/incubator-wave/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-wave/commit/4499ce56
Tree: http://git-wip-us.apache.org/repos/asf/incubator-wave/tree/4499ce56
Diff: http://git-wip-us.apache.org/repos/asf/incubator-wave/diff/4499ce56

Branch: refs/heads/master
Commit: 4499ce56fbc512cdae68cac323aadde9cc57ab21
Parents: 8036976
Author: Antonio Tenorio-Fornés <[email protected]>
Authored: Sun Apr 12 22:34:07 2015 +0300
Committer: Yuri Zelikov <[email protected]>
Committed: Sun Apr 12 22:35:02 2015 +0300

----------------------------------------------------------------------
 .../operations/DocumentModifyService.java       |  4 +++
 .../server/robots/passive/EventGenerator.java   | 18 ++++++++++
 .../wave/client/doodad/form/button/Button.java  | 35 ++++++++++++++++++++
 .../wave/client/editor/Editors.java             |  3 ++
 4 files changed, 60 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/4499ce56/src/org/waveprotocol/box/server/robots/operations/DocumentModifyService.java
----------------------------------------------------------------------
diff --git 
a/src/org/waveprotocol/box/server/robots/operations/DocumentModifyService.java 
b/src/org/waveprotocol/box/server/robots/operations/DocumentModifyService.java
index 2a501c9..166c360 100644
--- 
a/src/org/waveprotocol/box/server/robots/operations/DocumentModifyService.java
+++ 
b/src/org/waveprotocol/box/server/robots/operations/DocumentModifyService.java
@@ -29,6 +29,7 @@ import com.google.wave.api.OperationRequest;
 import com.google.wave.api.Range;
 import com.google.wave.api.data.ApiView;
 import com.google.wave.api.data.DocumentHitIterator;
+import com.google.wave.api.data.ElementSerializer;
 import com.google.wave.api.impl.DocumentModifyAction;
 import com.google.wave.api.impl.DocumentModifyAction.BundledAnnotation;
 import com.google.wave.api.impl.DocumentModifyAction.ModifyHow;
@@ -418,6 +419,9 @@ public class DocumentModifyService implements 
OperationService {
           // TODO (Yuri Z.) Make it possible to specify a location to insert 
the
           // gadget and implement insertion at the specified location.
           LineContainers.appendLine(doc, xml);
+        } else if (element.isFormElement()) {
+          XmlStringBuilder xml = ElementSerializer.apiElementToXml(element);
+          LineContainers.appendLine(doc, xml);
         } else {
           // TODO(ljvderijk): Inserting other elements.
           throw new UnsupportedOperationException(

http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/4499ce56/src/org/waveprotocol/box/server/robots/passive/EventGenerator.java
----------------------------------------------------------------------
diff --git a/src/org/waveprotocol/box/server/robots/passive/EventGenerator.java 
b/src/org/waveprotocol/box/server/robots/passive/EventGenerator.java
index be70f0b..206a33b 100644
--- a/src/org/waveprotocol/box/server/robots/passive/EventGenerator.java
+++ b/src/org/waveprotocol/box/server/robots/passive/EventGenerator.java
@@ -30,6 +30,7 @@ import com.google.wave.api.event.AnnotatedTextChangedEvent;
 import com.google.wave.api.event.DocumentChangedEvent;
 import com.google.wave.api.event.Event;
 import com.google.wave.api.event.EventType;
+import com.google.wave.api.event.FormButtonClickedEvent;
 import com.google.wave.api.event.WaveletBlipCreatedEvent;
 import com.google.wave.api.event.WaveletBlipRemovedEvent;
 import com.google.wave.api.event.WaveletParticipantsChangedEvent;
@@ -54,6 +55,8 @@ import org.waveprotocol.wave.model.document.Doc.N;
 import org.waveprotocol.wave.model.document.Doc.T;
 import org.waveprotocol.wave.model.document.indexed.DocumentEvent;
 import 
org.waveprotocol.wave.model.document.indexed.DocumentEvent.AnnotationChanged;
+import 
org.waveprotocol.wave.model.document.indexed.DocumentEvent.ContentInserted;
+import org.waveprotocol.wave.model.document.raw.impl.Element;
 import org.waveprotocol.wave.model.operation.OperationException;
 import org.waveprotocol.wave.model.operation.SilentOperationSink;
 import 
org.waveprotocol.wave.model.operation.wave.BasicWaveletOperationContextFactory;
@@ -280,6 +283,21 @@ public class EventGenerator {
             addEvent(apiEvent, capabilities, blip.getId(), messages);
           }
         } else {
+          if (capabilities.containsKey(EventType.FORM_BUTTON_CLICKED)) {
+            if (eventComponent.getType() == 
DocumentEvent.Type.CONTENT_INSERTED) {
+              ContentInserted<N, E, T> contentInserted = (ContentInserted<N, 
E, T>) eventComponent;
+              Element elementInserted = ((Element) 
contentInserted.getSubtreeElement());
+              if (elementInserted.getTagName().equals("click")) {
+                FormButtonClickedEvent buttonClickedEvent =
+                    new FormButtonClickedEvent(null, null,
+                        elementInserted.getAttribute("clicker"), 
Long.decode(elementInserted
+                            .getAttribute("time")), blip.getId(), 
elementInserted
+                            .getParentElement().getAttribute("name"));
+                addEvent(buttonClickedEvent, capabilities, blip.getId(), 
messages);
+              }
+            }
+
+          } else
           if (capabilities.containsKey(EventType.DOCUMENT_CHANGED)
               && !documentChangedEventGenerated) {
             DocumentChangedEvent apiEvent = new DocumentChangedEvent(

http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/4499ce56/src/org/waveprotocol/wave/client/doodad/form/button/Button.java
----------------------------------------------------------------------
diff --git a/src/org/waveprotocol/wave/client/doodad/form/button/Button.java 
b/src/org/waveprotocol/wave/client/doodad/form/button/Button.java
index 7831cd9..e26216c 100644
--- a/src/org/waveprotocol/wave/client/doodad/form/button/Button.java
+++ b/src/org/waveprotocol/wave/client/doodad/form/button/Button.java
@@ -19,6 +19,12 @@
 
 package org.waveprotocol.wave.client.doodad.form.button;
 
+import com.google.gwt.user.client.Event;
+
+import org.waveprotocol.box.webclient.client.Session;
+import org.waveprotocol.wave.client.common.util.DomHelper;
+import org.waveprotocol.wave.client.common.util.DomHelper.HandlerReference;
+import 
org.waveprotocol.wave.client.common.util.DomHelper.JavaScriptEventListener;
 import org.waveprotocol.wave.client.doodad.form.events.ContentEvents;
 import org.waveprotocol.wave.client.editor.ElementHandlerRegistry;
 import org.waveprotocol.wave.client.editor.NodeEventHandler;
@@ -32,10 +38,14 @@ import 
org.waveprotocol.wave.client.widget.button.ClickButton;
 import org.waveprotocol.wave.model.document.util.Property;
 import org.waveprotocol.wave.model.document.util.XmlStringBuilder;
 
+import java.util.HashMap;
+
 public final class Button {
   private static final String TAGNAME = "button";
 
   static final Property<ClickButton> BUTTON_LOGIC_PROP = 
Property.immutable("button_logic");
+  private static final Property<HandlerReference> HANDLE = 
Property.mutable("handle");
+
 
   private static final ButtonRenderingMutationHandler 
RENDERING_MUTATION_HANDLER =
       new ButtonRenderingMutationHandler();
@@ -55,6 +65,31 @@ public final class Button {
         return false;
       }
     }
+
+    @Override
+    public void onActivated(final ContentElement element) {
+      element.setProperty(HANDLE, 
DomHelper.registerEventHandler(element.getImplNodelet(), "click",
+          new JavaScriptEventListener() {
+            @Override
+            public void onJavaScriptEvent(String name, Event event) {
+              ContentNode ev = element.getFirstChild();
+              while (ev.getNextSibling() != null && ev.asElement().getName() 
!= "events") {
+                ev = ev.getNextSibling();
+            }
+              HashMap<String, String> attr = new HashMap<String, String>();
+              attr.put("time", Long.toString(System.currentTimeMillis()));
+              attr.put("clicker", Session.get().getAddress());
+              ev.getMutableDoc().createChildElement(ev.asElement(), "click", 
attr);
+            }
+
+          }));
+    }
+
+    @Override
+    public void onDeactivated(ContentElement element) {
+      // Clean up
+      element.getProperty(HANDLE).unregister();
+    }
   };
 
 

http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/4499ce56/src/org/waveprotocol/wave/client/editor/Editors.java
----------------------------------------------------------------------
diff --git a/src/org/waveprotocol/wave/client/editor/Editors.java 
b/src/org/waveprotocol/wave/client/editor/Editors.java
index 0ff2538..0f235ae 100644
--- a/src/org/waveprotocol/wave/client/editor/Editors.java
+++ b/src/org/waveprotocol/wave/client/editor/Editors.java
@@ -26,6 +26,7 @@ import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Element;
 
 import org.waveprotocol.wave.client.common.util.UserAgent;
+import org.waveprotocol.wave.client.doodad.form.FormDoodads;
 import org.waveprotocol.wave.client.editor.content.ContentDocElement;
 import org.waveprotocol.wave.client.editor.content.ContentDocument;
 import org.waveprotocol.wave.client.editor.content.img.ImgDoodad;
@@ -111,6 +112,8 @@ public final class Editors {
     AnnotationPaint.register(ROOT_HANDLER_REGISTRY);
     ImgDoodad.register(ROOT_HANDLER_REGISTRY);
 
+    FormDoodads.register(ROOT_HANDLER_REGISTRY);
+
     // after registries, set selection information:
     ValidSelectionStrategy.registerTagForSelections(
         LineContainers.PARAGRAPH_FULL_TAGNAME, false, Skip.NONE);

Reply via email to