github.com/keysonZZZ/kmg@v0.0.0-20151121023212-05317bfd7d39/kmgView/kmgBootstrap/kmgBootstrap.go (about)

     1  package kmgBootstrap
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/bronze1man/kmg/kmgView"
     7  	"github.com/bronze1man/kmg/kmgXss"
     8  	"strconv"
     9  	"strings"
    10  )
    11  
    12  type Panel struct {
    13  	Title string
    14  	Body  kmgView.HtmlRenderer
    15  }
    16  
    17  func (p Panel) HtmlRender() string {
    18  	return tplPanel(p)
    19  }
    20  
    21  type HorizontalDescription struct {
    22  	Key   string
    23  	Value string
    24  }
    25  
    26  func (p HorizontalDescription) HtmlRender() string {
    27  	return tplHorizontalDescription(p)
    28  }
    29  
    30  type Table struct {
    31  	Caption   kmgView.HtmlRenderer
    32  	TitleList []kmgView.HtmlRenderer
    33  	DataList  [][]kmgView.HtmlRenderer
    34  }
    35  
    36  func (p *Table) SetTitleListString(TitleList []string){
    37  	p.TitleList = make([]kmgView.HtmlRenderer,len(TitleList))
    38  	for i, title := range TitleList {
    39  		p.TitleList[i] = kmgView.String(title)
    40  	}
    41  }
    42  func (p *Table) SetDataListString(DataList [][]string){
    43  	for _, row := range DataList {
    44  		renderRow := []kmgView.HtmlRenderer{}
    45  		for _, value := range row {
    46  			renderRow = append(renderRow, kmgView.String(value))
    47  		}
    48  		p.DataList = append(p.DataList, renderRow)
    49  	}
    50  }
    51  
    52  func (p Table) HtmlRender() string {
    53  	return tplTable(p)
    54  }
    55  
    56  func NewTable(TitleList []string, DataList [][]string) Table {
    57  	t := Table{}
    58  	t.SetTitleListString(TitleList)
    59  	t.SetDataListString(DataList)
    60  	return t
    61  }
    62  
    63  // 显示键值对显示信息的 表格
    64  func NewNoTitleTable(DataList [][]kmgView.HtmlRenderer) Table {
    65  	return Table{
    66  		DataList: DataList,
    67  	}
    68  }
    69  
    70  // 1.这个函数顺序会变,基本不靠谱.
    71  // 2.直接从数据库取的数据,字段信息没有翻译.
    72  func NewTableFromMapList(m []map[string]string) Table {
    73  	t := Table{}
    74  	if len(m) == 0 {
    75  		return t
    76  	}
    77  	i := 0
    78  	for k := range m[0] {
    79  		// TODO 排序
    80  		t.TitleList = append(t.TitleList, kmgView.String(k))
    81  		i++
    82  	}
    83  	for _, row := range m {
    84  		viewRow := []kmgView.HtmlRenderer{}
    85  		for _, k := range t.TitleList {
    86  			viewRow = append(viewRow, kmgView.String(row[string(k.(kmgView.String))]))
    87  		}
    88  		t.DataList = append(t.DataList, viewRow)
    89  	}
    90  	return t
    91  }
    92  
    93  type HorizontalHtmlRenderList []kmgView.HtmlRenderer
    94  
    95  func (p HorizontalHtmlRenderList) HtmlRender() string {
    96  	return tplHorizontalHtmlRenderList(p)
    97  }
    98  
    99  type NavTabList struct {
   100  	ActiveName  string //选中的名称
   101  	OptionList  []NavTabOption
   102  	CustomClass string // 两种样式 nav-pills / nav-tabs,不填将使用 nav-pills
   103  }
   104  
   105  type NavTabOption struct {
   106  	Name string
   107  	Url  string
   108  }
   109  
   110  func (p NavTabList) HtmlRender() string {
   111  	return tplNavTabList(p)
   112  }
   113  
   114  type Image struct {
   115  	Src       string
   116  	MaxHeight int
   117  	MaxWidth  int
   118  }
   119  
   120  func (p Image) HtmlRender() string {
   121  	return tplImage(p)
   122  }
   123  
   124  func (p Image) getStyle() string {
   125  	if p.MaxHeight == 0 {
   126  		p.MaxHeight = 100
   127  	}
   128  	if p.MaxWidth == 0 {
   129  		p.MaxWidth = 100
   130  	}
   131  	return fmt.Sprintf("max-height: %dpx;max-width: %dpx;", p.MaxHeight, p.MaxWidth)
   132  }
   133  
   134  type A struct {
   135  	Href        string
   136  	Title       string
   137  	IsNewWindow bool
   138  	Id          string
   139  	ClassName   string
   140  }
   141  
   142  func (a A) HtmlRender() string {
   143  	s := `<a href="` + kmgXss.H(a.Href) + `" class="` + kmgXss.H(a.ClassName) + `"`
   144  	if a.IsNewWindow {
   145  		s += ` target="_blank" `
   146  	}
   147  	if a.Id != "" {
   148  		s += ` id="` + kmgXss.H(a.Id) + `" `
   149  	}
   150  	return s + `>` + kmgXss.H(a.Title) + `</a>`
   151  }
   152  
   153  type TextColor string
   154  
   155  const (
   156  	TextMuted   TextColor = "text-muted"
   157  	TextPrimary TextColor = "text-primary"
   158  	TextSuccess TextColor = "text-success" // 绿色
   159  	TextInfo    TextColor = "text-info"
   160  	TextWarning TextColor = "text-warning"
   161  	TextDanger  TextColor = "text-danger"
   162  )
   163  
   164  type BgColor string
   165  
   166  const (
   167  	BgPrimary TextColor = "bg-primary"
   168  	BgSuccess TextColor = "bg-success"
   169  	BgInfo    TextColor = "bg-info"
   170  	BgWarning TextColor = "bg-warning"
   171  	BgDanger  TextColor = "bg-danger"
   172  )
   173  
   174  func IconGreenCircle() kmgView.HtmlRenderer {
   175  	return Icon{IconColor: TextSuccess, IconName: "circle"}
   176  }
   177  
   178  type Icon struct {
   179  	IconName      string
   180  	IconColor     TextColor
   181  	AttributeNode kmgView.HtmlRenderer
   182  }
   183  
   184  func (icon Icon) HtmlRender() string {
   185  	return tplIcon(icon)
   186  }
   187  
   188  type PlacementType string
   189  
   190  const (
   191  	PlacementTypeLeft   PlacementType = "left"
   192  	PlacementTypeRight  PlacementType = "right"
   193  	PlacementTypeTop    PlacementType = "top"
   194  	PlacementTypeBottom PlacementType = "bottom"
   195  	PlacementTypeAuto   PlacementType = "auto"
   196  )
   197  
   198  type PopoverType string
   199  
   200  const (
   201  	PopoverTypePopover PopoverType = "popover"
   202  	PopoverTypeTooltip PopoverType = "tooltip"
   203  )
   204  
   205  //注意
   206  //Bootstrap 有两种提示小窗口,一种叫 Tooltip,一种叫 Popover,两者数据结构基本一致,这里为了简单,直接合并为一种 kmgBootstrap 的结构 Popover
   207  type Popover struct {
   208  	Type      PopoverType
   209  	Title     string
   210  	Content   string
   211  	Placement PlacementType
   212  }
   213  
   214  func (p Popover) HtmlRender() string {
   215  	if p.Type == "" {
   216  		p.Type = PopoverTypeTooltip
   217  	}
   218  	if p.Placement == "" {
   219  		p.Placement = PlacementTypeAuto
   220  	}
   221  	return tplPopover(p)
   222  }
   223  
   224  type LabelColor string
   225  
   226  const (
   227  	LabelColorDefault LabelColor = "label-default"
   228  	LabelColorPrimary LabelColor = "label-primary"
   229  	LabelColorSuccess LabelColor = "label-success"
   230  	LabelColorInfo    LabelColor = "label-info"
   231  	LabelColorWarning LabelColor = "label-warning"
   232  	LabelColorDanger  LabelColor = "label-danger"
   233  )
   234  
   235  type Label struct {
   236  	Color   LabelColor
   237  	Content kmgView.HtmlRenderer
   238  }
   239  
   240  func (l Label) HtmlRender() string {
   241  	if l.Color == "" {
   242  		l.Color = LabelColorDefault
   243  	}
   244  	if l.Content == nil {
   245  		return ""
   246  	}
   247  	return `<span class="label ` + kmgXss.H(string(l.Color)) + `">` + l.Content.HtmlRender() + `</span>`
   248  }
   249  
   250  func Blank(num int) kmgView.HtmlRenderer {
   251  	return kmgView.Html(strings.Repeat("&nbsp;", num))
   252  }
   253  
   254  func BlankChinese(num int) kmgView.HtmlRenderer {
   255  	return kmgView.Html(strings.Repeat("&#12288;", num))
   256  }
   257  
   258  func H(index int, content kmgView.HtmlRenderer) kmgView.HtmlRenderer {
   259  	if content == nil {
   260  		return kmgView.String("")
   261  	}
   262  	if index == 0 {
   263  		index = 1
   264  	}
   265  	iStr := strconv.Itoa(index)
   266  	return kmgView.Html(`<h` + iStr + `>` + content.HtmlRender() + `</h` + iStr + `>`)
   267  }
   268  
   269  func HString(index int,content string) kmgView.HtmlRenderer{
   270  	if index==0{
   271  		index=1
   272  	}
   273  	return kmgView.Html(`<h` + strconv.Itoa(index) + `>` + kmgXss.H(content) + `</h` + strconv.Itoa(index) + `>`)
   274  }
   275  
   276  func Pre(content string) kmgView.HtmlRenderer {
   277  	return kmgView.Html(`<pre>` + kmgXss.H(content) + `</pre>`)
   278  }
   279  
   280  func Br(num int) kmgView.HtmlRenderer {
   281  	return kmgView.Html(strings.Repeat("<br />", num))
   282  }
   283  
   284  func Hr(num int) kmgView.HtmlRenderer {
   285  	return kmgView.Html(strings.Repeat("<hr />", num))
   286  }
   287  
   288  type NavBarNode struct {
   289  	Name      string
   290  	Url       string
   291  	ChildList []NavBarNode
   292  }
   293  
   294  type NavBar struct {
   295  	Title           kmgView.HtmlRenderer //可以是 Log 或者文字
   296  	OptionList      []NavBarNode
   297  	RightOptionList []NavBarNode
   298  }
   299  
   300  func (navBar NavBar) HtmlRender() string {
   301  	return tplNavBar(navBar)
   302  }