Browse Source

bugfix of factory shortcut, demo for gopherjs

kpmy 10 năm trước cách đây
mục cha
commit
8908dd2bcb
7 tập tin đã thay đổi với 39 bổ sung23 xóa
  1. 6 0
      README.md
  2. 3 1
      demo3/README.md
  3. 12 9
      demo3/demo3.go
  4. 2 2
      demo3/web/index.html
  5. 10 7
      demo3/web/main.dart
  6. 6 0
      mappers/attr/base.go
  7. 0 4
      mappers/attr/text.go

+ 6 - 0
README.md

@@ -57,3 +57,9 @@ More examples in demo/report.go
     		defer output.Close()
     	}
     }
+
+## Moar
+
+It works in browser now. Got Demo3, GopherJS + Dart.
+
+[http://kpmy.github.io/odf/](http://kpmy.github.io/odf/)

+ 3 - 1
demo3/README.md

@@ -1,3 +1,5 @@
 # ODF in your browser DEMO
 
-golang gopherjs kpmy/odf dartlang html web worker
+golang gopherjs kpmy/odf dartlang html web worker 
+
+[http://kpmy.github.io/odf/](http://kpmy.github.io/odf/)

+ 12 - 9
demo3/demo3.go

@@ -3,10 +3,10 @@ package main
 import (
 	"bytes"
 	"encoding/base64"
+	"encoding/json"
 	"github.com/gopherjs/gopherjs/js"
 	"github.com/kpmy/ypk/assert"
 	"github.com/kpmy/ypk/halt"
-	"github.com/mitchellh/mapstructure"
 	"io"
 	"log"
 	_ "odf/model/stub" //don't forget pimpl
@@ -14,7 +14,7 @@ import (
 )
 
 type Msg struct {
-	Typ   string
+	Type  string
 	Param string
 	Data  string
 }
@@ -31,7 +31,7 @@ func busHandler(m *Msg) {
 
 //этот хэндлер обрабатывает сообщения в рамках главной горутины
 func handle(m *Msg) {
-	switch m.Typ {
+	switch m.Type {
 	case "init":
 		log.Println("message bus connected")
 	case "get":
@@ -43,24 +43,27 @@ func handle(m *Msg) {
 		}
 		buf := bytes.NewBuffer(nil)
 		io.Copy(buf, rd)
-		m := &Msg{Typ: "data"}
+		m := &Msg{Type: "data"}
 		m.Data = base64.StdEncoding.EncodeToString(buf.Bytes())
 		Process(m)
 	default:
-		halt.As(100, "not implemented", m.Typ)
+		halt.As(100, "not implemented", m.Type)
 	}
 }
 
 func Process(m *Msg) {
 	assert.For(m != nil, 20)
-	js.Global.Call("postMessage", m)
+	s, _ := json.Marshal(m)
+	js.Global.Call("postMessage", string(s))
 }
 
 func Init(handler Handler) {
 	js.Global.Set("onmessage", func(oEvent *js.Object) {
-		data := oEvent.Get("data").Interface()
+		_data := oEvent.Get("data").Interface().(string)
+		log.Println(_data)
 		m := &Msg{}
-		err := mapstructure.Decode(data, m)
+		err := json.Unmarshal([]byte(_data), m)
+		log.Println(m)
 		assert.For(err == nil, 40)
 		handler(m)
 	})
@@ -73,7 +76,7 @@ func main() {
 	wg.Add(1)
 	go func(wg *sync.WaitGroup, c chan *Msg) {
 		log.Println("done")
-		Process(&Msg{Typ: "init"})
+		Process(&Msg{Type: "init"})
 		for {
 			select {
 			case m := <-c:

+ 2 - 2
demo3/web/index.html

@@ -22,8 +22,8 @@
   In-browser ODF generator: <input id="do-demo" type="button" value="Do Demo"/>
   <input id="do-report" type="button" value="Do Report"/>
 
-<script type="application/javascript" src="js/blob.js"></script>
-<script type="application/javascript" src="js/filesaver.min.js"></script>
+<script type="application/javascript" src="js/Blob.js"></script>
+<script type="application/javascript" src="js/FileSaver.min.js"></script>
 <script type="application/dart" src="main.dart"></script>
 <script data-pub-inline src="packages/browser/dart.js"></script>
 </body>

+ 10 - 7
demo3/web/main.dart

@@ -2,6 +2,7 @@ import 'dart:html';
 import 'package:crypto/crypto.dart';
 import 'dart:typed_data';
 import 'dart:js';
+import 'dart:convert';
 
 class OdfWorker{
 
@@ -23,27 +24,29 @@ class OdfWorker{
 void main() {
   var w = new OdfWorker();
 
-  w.listen((m){
-    switch(m.data["Typ"]){
+  w.listen((_m){
+    print(_m.data);
+    var msg = JSON.decode(_m.data);
+    switch(msg["Type"]){
       case "init":
         print("worker initialized, sending responce...");
-        w.postMessage({'Typ': 'init'});
+        w.postMessage(JSON.encode({"Type": "init"}));
         break;
       case "data":
         print("data received");
-        Uint8List data = new Uint8List.fromList(CryptoUtils.base64StringToBytes(m.data["Data"]));
+        Uint8List data = new Uint8List.fromList(CryptoUtils.base64StringToBytes(msg["Data"]));
         context.callMethod("saveAs",  [new Blob([data], "application/octet-stream"), "report.odf"]);
         break;
-      default: throw new ArgumentError(m.data["Typ"]);
+      default: throw new ArgumentError(msg["Type"]);
     }
   });
 
   querySelector("#do-demo").onClick.listen((m){
-    w.postMessage({'Typ': 'get', 'Param': 'demo'});
+    w.postMessage(JSON.encode({"Type": "get", "Param": "demo"}));
   });
 
   querySelector("#do-report").onClick.listen((m){
-    w.postMessage({'Typ': 'get', 'Param': 'report'});
+    w.postMessage(JSON.encode({"Type": "get", "Param": "report"}));
   });
 
 }

+ 6 - 0
mappers/attr/base.go

@@ -86,3 +86,9 @@ func triggerBoolAttr(n model.AttrName) func(v value) {
 		}
 	}
 }
+
+func init() {
+	New = func(n model.LeafName) model.Leaf {
+		return model.LeafFactory(n)
+	}
+}

+ 0 - 4
mappers/attr/text.go

@@ -75,7 +75,3 @@ func (t *TextAttributes) Italic() *TextAttributes {
 	t.italic = true
 	return t
 }
-
-func init() {
-	New = model.LeafFactory
-}