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(" ", num)) 252 } 253 254 func BlankChinese(num int) kmgView.HtmlRenderer { 255 return kmgView.Html(strings.Repeat(" ", 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 }