| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- package ultraviolet
- import (
- "fmt"
- "strings"
- )
- func ViewToString(view View) string {
- parts := []string{
- DisplayToString(view.Block.Display),
- PositionToString(view.Block.Position),
- FloatToString(view.Block.Float),
- WidthToString(view.Block.Width),
- HeightToString(view.Block.Height),
- BottomToString(view.Block.Bottom),
- LeftToString(view.Block.Left),
- TopToString(view.Block.Top),
- RightToString(view.Block.Right),
- MarginToString(view.Block.Margin),
- PaddingToString(view.Block.Padding),
- BorderThicknessToString(view.Block.Border),
- BorderRadiusToString(view.Block.Border),
- BorderRadiusToString(view.Block.Border),
- BackgroundToString(view.Background),
- FontToString(view.Font),
- view.Custom,
- }
- switch view.Cursor {
- case CURSOR_POINTER:
- parts = append(parts, "cursor: pointer;")
- parts = append(parts, "user-select: none;")
- }
- return strings.Join(parts, "")
- }
- func DisplayToString(display int) string {
- switch display {
- case DISPLAY_BLOCK:
- return "display: block;"
- case DISPLAY_INLINE:
- return "display: inline-block;"
- }
- return ""
- }
- func PositionToString(position int) string {
- switch position {
- case POSITION_FIXED:
- return "position: fixed;"
- case POSITION_RELATIVE:
- return "position: relative;"
- case POSITION_ABSOLUTE:
- return "position: absolute;"
- }
- return ""
- }
- func FloatToString(float int) string {
- switch float {
- case FLOAT_LEFT:
- return "float: left;"
- case FLOAT_RIGHT:
- return "float: right;"
- case FLOAT_CLEAR:
- return "clear: both;"
- }
- return ""
- }
- func WidthToString(width int) string {
- if width == 0 {
- return ""
- }
- return fmt.Sprintf("width: %dpx;", width)
- }
- func HeightToString(height int) string {
- if height == 0 {
- return ""
- }
- return fmt.Sprintf("height: %dpx;", height)
- }
- func BottomToString(bottom int) string {
- if bottom == 0 {
- return ""
- }
- return fmt.Sprintf("bottom: %dpx;", bottom)
- }
- func LeftToString(left int) string {
- if left == 0 {
- return ""
- }
- return fmt.Sprintf("left: %dpx;", left)
- }
- func TopToString(top int) string {
- if top == 0 {
- return ""
- }
- return fmt.Sprintf("top: %dpx;", top)
- }
- func RightToString(right int) string {
- if right == 0 {
- return ""
- }
- return fmt.Sprintf("right: %dpx;", right)
- }
- func MarginToString(margin Margin) string {
- if margin.Center {
- return "margin: 0 auto;"
- }
- if margin.Top == 0 && margin.Right == 0 && margin.Bottom == 0 && margin.Left == 0 {
- return ""
- }
- return fmt.Sprintf(
- "margin: %dpx %dpx %dpx %dpx;",
- margin.Top,
- margin.Right,
- margin.Bottom,
- margin.Left,
- )
- }
- func PaddingToString(padding Padding) string {
- if padding.Top == 0 && padding.Right == 0 && padding.Bottom == 0 && padding.Left == 0 {
- return ""
- }
- return fmt.Sprintf(
- "padding: %dpx %dpx %dpx %dpx;",
- padding.Top,
- padding.Right,
- padding.Bottom,
- padding.Left,
- )
- }
- func BorderThicknessToString(border Border) string {
- color := ColorToString(border.Color)
- parts := []string{}
- if border.ThicknessTop != 0 {
- parts = append(
- parts,
- fmt.Sprintf("border-top: %dpx solid %s;", border.ThicknessTop, color),
- )
- }
- if border.ThicknessRight != 0 {
- parts = append(
- parts,
- fmt.Sprintf("border-right: %dpx solid %s;", border.ThicknessRight, color),
- )
- }
- if border.ThicknessBottom != 0 {
- parts = append(
- parts,
- fmt.Sprintf("border-bottom: %dpx solid %s;", border.ThicknessBottom, color),
- )
- }
- if border.ThicknessLeft != 0 {
- parts = append(
- parts,
- fmt.Sprintf("border-left: %dpx solid %s;", border.ThicknessLeft, color),
- )
- }
- return strings.Join(parts, "")
- }
- func BorderRadiusToString(border Border) string {
- if border.RadiusTopLeft == 0 && border.RadiusTopRight == 0 && border.RadiusBottomRight == 0 && border.RadiusBottomLeft == 0 {
- return ""
- }
- return fmt.Sprintf(
- "border-radius: %dpx %dpx %dpx %dpx;",
- border.RadiusTopLeft,
- border.RadiusTopRight,
- border.RadiusBottomRight,
- border.RadiusBottomLeft,
- )
- }
- func BackgroundToString(background Background) string {
- if background.Color.Alpha == 0 {
- return ""
- }
- return fmt.Sprintf("background-color: %s;", ColorToString(background.Color))
- }
- func ColorToString(color Color) string {
- if color.Alpha == 0 {
- return ""
- }
- return fmt.Sprintf(
- "rgba(%d, %d, %d, %.2f)",
- color.Red,
- color.Green,
- color.Blue,
- float64(color.Alpha)/255,
- )
- }
- func FontToString(font Font) string {
- parts := []string{}
- if font.Family != "" {
- parts = append(
- parts,
- fmt.Sprintf("font-family: '%s';", font.Family),
- )
- }
- if font.Size != 0 {
- parts = append(
- parts,
- fmt.Sprintf("font-size: %dpx;", font.Size),
- )
- }
- if font.Uppercase {
- parts = append(
- parts,
- "text-transform: uppercase;",
- )
- }
- if font.Bold {
- parts = append(
- parts,
- "font-weight: bold;",
- )
- }
- if font.Italic {
- parts = append(
- parts,
- "font-view: italic;",
- )
- }
- switch font.Decoration {
- case DECORATION_UNDERLINE:
- parts = append(
- parts,
- "text-decoration: underline;",
- )
- }
- if font.LetterSpacing != 0 {
- parts = append(
- parts,
- fmt.Sprintf("letter-spacing: %dpx;", font.LetterSpacing),
- )
- }
- fontColor := ColorToString(font.Color)
- if fontColor != "" {
- parts = append(
- parts,
- fmt.Sprintf("color: %s;", ColorToString(font.Color)),
- )
- }
- return strings.Join(parts, "")
- }
|