func createMap(o *overlay.Overlay) func(dom.Element) { return func(c dom.Element) { name := xform.InputText("name", "") name.Required = true gmOpts := make([]xform.Option, len(gameModes)) for i, m := range gameModes { gmOpts[i] = xform.Option{ Label: m, Value: strconv.Itoa(i), } } gameMode := xform.SelectBox("gamemode", gmOpts...) seed := xform.InputText("seed", "") structures := xform.InputCheckbox("structures", true) cheats := xform.InputCheckbox("cheats", false) fs := xdom.Fieldset() fs.AppendChild(xjs.SetInnerText(xdom.Legend(), "Create Map")) c.AppendChild(xjs.AppendChildren(xdom.Form(), fs)) dataParser := func(mode int) func() (data.DefaultMap, error) { return func() (data.DefaultMap, error) { data := data.DefaultMap{ Mode: mode, } var err error data.Name = name.Value si := gameMode.SelectedIndex if si < 0 || si >= len(gameModes) { return data, errors.New("invalid gamemode") } if seed.Value == "" { seed.Value = "0" } data.Seed, err = strconv.ParseInt(seed.Value, 10, 64) if err != nil { return data, err } data.Structures = structures.Checked data.Cheats = cheats.Checked return data, nil } } xjs.AppendChildren(fs, xform.Label("Name", "name"), name, xdom.Br(), xform.Label("Game Mode", "gamemode"), gameMode, xdom.Br(), xform.Label("Level Seed", "seed"), seed, xdom.Br(), xform.Label("Structures", "structures"), structures, xdom.Br(), xform.Label("Cheats", "cheats"), cheats, xdom.Br(), tabs.New([]tabs.Tab{ {"Default", createMapMode(0, o, dataParser(0))}, {"Super Flat", createSuperFlatMap(o, dataParser(1))}, {"Large Biomes", createMapMode(2, o, dataParser(2))}, {"Amplified", createMapMode(3, o, dataParser(3))}, {"Customised", createCustomisedMap(o, dataParser(4))}, }), ) } }