Skip to content
This repository was archived by the owner on Aug 27, 2018. It is now read-only.

Commit da97023

Browse files
authored
Merge pull request #111 from myitcv/various_changes
data-* and aria-* attributes; Ref support; ForceUpdate component method
2 parents bab1f1e + 1bffe85 commit da97023

33 files changed

+701
-81
lines changed

cmd/reactGen/props_gen.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,23 @@ func (g *gen) genProps(defName string, t typeFile) {
102102
103103
func ({{$recv}} *{{.Name}}) assign(v *_{{.Name}}) {
104104
{{- range .Fields}}
105+
{{ if eq .TName "Ref" }}
106+
if {{$recv}}.Ref != nil {
107+
v.o.Set("ref", {{$recv}}.Ref.Ref)
108+
}
109+
{{ else if eq .TName "DataSet" }}
110+
if {{$recv}}.DataSet != nil {
111+
for dk, dv := range {{$recv}}.DataSet {
112+
v.o.Set("data-"+dk, dv)
113+
}
114+
}
115+
{{ else if eq .TName "AriaSet" }}
116+
if {{$recv}}.AriaSet != nil {
117+
for dk, dv := range {{$recv}}.AriaSet {
118+
v.o.Set("aria-"+dk, dv)
119+
}
120+
}
121+
{{else}}
105122
{{ if .Omit }}
106123
if {{$recv}}.{{.TName}} != "" {
107124
v.{{.TName}} = {{$recv}}.{{.TName}}
@@ -119,6 +136,7 @@ func (g *gen) genProps(defName string, t typeFile) {
119136
v.{{.TName}} = {{$recv}}.{{.TName}}
120137
{{end}}
121138
{{end}}
139+
{{end}}
122140
{{- end}}
123141
}
124142
`, pg)

core.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ func newBasicElement() *BasicElement {
2222
}
2323
}
2424

25+
type DataSet map[string]string
26+
type AriaSet map[string]string
27+
2528
type BasicHTMLElement struct {
2629
*BasicElement
2730

@@ -31,9 +34,14 @@ type BasicHTMLElement struct {
3134
Role string `js:"role"`
3235
Style *CSS `js:"style"`
3336

37+
DataSet
38+
AriaSet
39+
3440
OnChange `js:"onChange"`
3541
OnClick `js:"onClick"`
3642

43+
Ref `js:"ref"`
44+
3745
DangerouslySetInnerHTML *DangerousInnerHTML `js:"dangerouslySetInnerHTML"`
3846
}
3947

events.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
package react
22

3+
import "github.com/gopherjs/gopherjs/js"
4+
35
type Event interface{}
46

7+
type Ref interface {
8+
Ref(h *js.Object)
9+
}
10+
511
type OnChange interface {
612
Event
713

examples/markdowneditor/markdown_editor.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package markdowneditor // import "myitcv.io/react/examples/markdowneditor"
22

33
import (
4+
"github.com/gopherjs/gopherjs/js"
45
"honnef.co/go/js/dom"
56
"myitcv.io/react"
67
"myitcv.io/remarkable"
@@ -17,6 +18,11 @@ type MarkdownEditorDef struct {
1718
type MarkdownEditorState struct {
1819
value string
1920
remark *remarkable.Remarkable
21+
22+
// We don't actually use the DOM element for the containing div in the
23+
// logic of the MarkdownEditor example, rather it's just a demonstration
24+
// of React Refs at work.
25+
div *divRef
2026
}
2127

2228
// MarkdownEditor creates instances of the MarkdownEditor component
@@ -30,14 +36,15 @@ func (m MarkdownEditorDef) GetInitialState() MarkdownEditorState {
3036
return MarkdownEditorState{
3137
value: "Type some *markdown* here!",
3238
remark: remark,
39+
div: &divRef{m: m},
3340
}
3441
}
3542

3643
// Render renders the MarkdownEditor component
3744
func (m MarkdownEditorDef) Render() react.Element {
3845
val := m.State().value
3946

40-
return react.Div(nil,
47+
return react.Div(&react.DivProps{Ref: m.State().div},
4148
react.H3(nil, react.S("Input")),
4249
react.TextArea(
4350
&react.TextAreaProps{
@@ -72,3 +79,22 @@ func (i inputChange) OnChange(se *react.SyntheticEvent) {
7279

7380
i.m.SetState(st)
7481
}
82+
83+
type divRef struct {
84+
m MarkdownEditorDef
85+
div *dom.HTMLDivElement
86+
}
87+
88+
func (d *divRef) Ref(h *js.Object) {
89+
var div *dom.HTMLDivElement
90+
if e := dom.WrapHTMLElement(h); e != nil {
91+
div = e.(*dom.HTMLDivElement)
92+
}
93+
94+
d.div = div
95+
96+
print("Here is the containing div for the rendered MarkdownEditor", div.Object)
97+
98+
// in case we need to re-render at this point we could call
99+
d.m.ForceUpdate()
100+
}

gen_AProps_reactGen.go

Lines changed: 22 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gen_BrProps_reactGen.go

Lines changed: 21 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gen_ButtonProps_reactGen.go

Lines changed: 21 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gen_CodeProps_reactGen.go

Lines changed: 21 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gen_DivProps_reactGen.go

Lines changed: 21 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)