@OnFunction can be in @Model classes model
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 02 Apr 2013 15:40:08 +0200
branchmodel
changeset 91481dcd71877d5
parent 911 fdf840690861
child 915 b219134a2782
@OnFunction can be in @Model classes
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java
javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/KnockoutTest.java
javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/PersonImpl.java
     1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java	Sun Mar 31 13:26:27 2013 +0200
     1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java	Tue Apr 02 15:40:08 2013 +0200
     1.3 @@ -115,6 +115,7 @@
     1.4          try {
     1.5              StringWriter body = new StringWriter();
     1.6              List<String> propsGetSet = new ArrayList<>();
     1.7 +            List<String> functions = new ArrayList<>();
     1.8              Map<String, Collection<String>> propsDeps = new HashMap<>();
     1.9              if (!generateComputedProperties(body, m.properties(), e.getEnclosedElements(), propsGetSet, propsDeps)) {
    1.10                  ok = false;
    1.11 @@ -122,6 +123,9 @@
    1.12              if (!generateProperties(e, body, m.properties(), propsGetSet, propsDeps)) {
    1.13                  ok = false;
    1.14              }
    1.15 +            if (!generateFunctions(e, body, className, e.getEnclosedElements(), functions)) {
    1.16 +                ok = false;
    1.17 +            }
    1.18              FileObject java = processingEnv.getFiler().createSourceFile(pkg + '.' + className, e);
    1.19              w = new OutputStreamWriter(java.openOutputStream());
    1.20              try {
    1.21 @@ -139,7 +143,7 @@
    1.22                  w.append("    ko = org.apidesign.bck2brwsr.htmlpage.Knockout.applyBindings(this, ");
    1.23                  writeStringArray(propsGetSet, w);
    1.24                  w.append(", ");
    1.25 -                writeStringArray(Collections.<String>emptyList(), w);
    1.26 +                writeStringArray(functions, w);
    1.27                  w.append("    );\n");
    1.28                  w.append("  };\n");
    1.29                  w.append("}\n");
     2.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/KnockoutTest.java	Sun Mar 31 13:26:27 2013 +0200
     2.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/KnockoutTest.java	Tue Apr 02 15:40:08 2013 +0200
     2.3 @@ -138,6 +138,31 @@
     2.4          txt = childText("ul", 0);
     2.5          assert "changed".equals(txt) : "Expecting 'changed': " + txt;
     2.6      }
     2.7 +    
     2.8 +    @HtmlFragment(
     2.9 +        "<ul id='ul' data-bind='foreach: people'>\n"
    2.10 +        + "  <li data-bind='text: $data.firstName, click: changeSex'></li>\n"
    2.11 +        + "</ul>\n"
    2.12 +    )
    2.13 +    @BrwsrTest public void onPersonFunction() {
    2.14 +        KnockoutModel m = new KnockoutModel();
    2.15 +        
    2.16 +        final Person first = new Person();
    2.17 +        first.setFirstName("first");
    2.18 +        first.setSex(Sex.MALE);
    2.19 +        m.getPeople().add(first);
    2.20 +        
    2.21 +        
    2.22 +        m.applyBindings();
    2.23 +        
    2.24 +        int cnt = countChildren("ul");
    2.25 +        assert cnt == 1 : "One child, but was " + cnt;
    2.26 +        
    2.27 +        
    2.28 +        triggerChildClick("ul", 0);
    2.29 +        
    2.30 +        assert first.getSex() == Sex.FEMALE : "Transverted to female: " + first.getSex();
    2.31 +    }
    2.32       
    2.33      @OnFunction
    2.34      static void call(KnockoutModel m, String data) {
     3.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/PersonImpl.java	Sun Mar 31 13:26:27 2013 +0200
     3.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/PersonImpl.java	Tue Apr 02 15:40:08 2013 +0200
     3.3 @@ -19,6 +19,7 @@
     3.4  
     3.5  import org.apidesign.bck2brwsr.htmlpage.api.ComputedProperty;
     3.6  import org.apidesign.bck2brwsr.htmlpage.api.Model;
     3.7 +import org.apidesign.bck2brwsr.htmlpage.api.OnFunction;
     3.8  import org.apidesign.bck2brwsr.htmlpage.api.Property;
     3.9  
    3.10  /**
    3.11 @@ -40,4 +41,13 @@
    3.12      public static String sexType(Sex sex) {
    3.13          return sex == null ? "unknown" : sex.toString();
    3.14      }
    3.15 +    
    3.16 +    @OnFunction
    3.17 +    static void changeSex(Person p) {
    3.18 +        if (p.getSex() == Sex.MALE) {
    3.19 +            p.setSex(Sex.FEMALE);
    3.20 +        } else {
    3.21 +            p.setSex(Sex.MALE);
    3.22 +        }
    3.23 +    }
    3.24  }