func makeCol(in common.TagNode) common.TagNode { if in.Tag != "col" { panic("attempt to make a bootstrap col out of a non-col") } in.Tag = "div" var attrs []common.Attribute for _, attr := range in.Attributes { include := true for _, size := range bsSizes { if attr.Name == size { in.Classes = append(in.Classes, "col-"+attr.Name+"-"+attr.Value) include = false } } if include { attrs = append(attrs, attr) } } in.Attributes = attrs return in }
func makeFormControl(in common.TagNode) (out common.TagNode) { if in.Tag != "input" && in.Tag != "select" { panic("attempt to make a bootstrap from control out of a non-input") } out.Tag = "div" out.Classes = []string{"form-group"} in.Classes = append(in.Classes, "form-control") var attrs []common.Attribute for _, attr := range in.Attributes { include := true if attr.Name == "label" { labelNode := common.TagNode{ Tag: "label", Classes: []string{"control-label"}, Content: []common.Node{ common.TextNode{attr.Value}, }, } if in.Id != "" { labelNode.Attributes = []common.Attribute{ {"for", in.Id}, } } out.Content = append(out.Content, labelNode) include = false } if include { attrs = append(attrs, attr) } } in.Attributes = attrs if len(in.Content) == 1 { if textNode, ok := in.Content[0].(common.TextNode); ok { in.Attributes = append(in.Attributes, common.Attribute{"placeholder", textNode.Content}) in.Content = nil } } out.Content = append(out.Content, in) return }
func makeRow(in common.TagNode) common.TagNode { if in.Tag != "row" { panic("attempt to make a bootstrap row out of a non-row") } in.Tag = "div" in.Classes = append(in.Classes, "row") return in }
func newElement(input string) (common.TagNode, error) { var el common.TagNode match := elementRe.FindStringSubmatch(input) if match == nil { return el, fmt.Errorf("Badly-formatted wossname") } for i, name := range elementNames { switch name { case "tag": el.Tag = match[i] case "id": el.Id = match[i] case "classes": if match[i] == "" { continue } el.Classes = strings.Fields(match[i]) case "attributes": if match[i] == "" { continue } var err error el.Attributes, err = parseAttributes(match[i]) if err != nil { return el, err } } } return el, nil }
func makeIcon(in common.TagNode) common.TagNode { if in.Tag != "icon" { panic("attempt to make a bootstrap icon out of a non-icon") } if len(in.Content) != 1 { panic("bootstrap icon requires an icon name") } textNode, ok := in.Content[0].(common.TextNode) if !ok { panic("bootstrap icon requires an icon name") } in.Tag = "span" in.Classes = append(in.Classes, "glyphicon", "glyphicon-"+textNode.Content) in.Content = nil return in }