Skip to content
This repository has been archived by the owner on Apr 20, 2024. It is now read-only.

Added Breadcrumb tag #10

Merged
merged 5 commits into from
Jun 21, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ public func configure(_ config: inout Config, _ env: inout Environment, _ servic
tags.use(AlertTag(), as: "bs:alert")
tags.use(InputTag(), as: "bs:input")
tags.use(BadgeTag(), as: "bs:badge")
tags.use(BreadCrumbTag(), as: "bs:breadCrumb")
tags.use(BreadCrumbItemTag(), as: "bs:breadCrumbItem")

return tags
}
Expand All @@ -65,6 +67,7 @@ public func configure(_ config: inout Config, _ env: inout Environment, _ servic
- [Button Group](#button-group)
- [Button Toolbar](#button-toolbar)
- [Input](#input)
- [Breadcrumb](#breadcrumb)

### Alert

Expand Down Expand Up @@ -119,6 +122,15 @@ public func configure(_ config: inout Config, _ env: inout Environment, _ servic
#bs:input(type?, classExtras?, attributes?)
```

### Breadcrumb

```
#bs:breadcrumb(classExtras?, attributes?) {
#bs:breadcrumbItem(classExtras?, attributes?) { <a href="/"> Home </a> }
#bs:breadcrumbItem(classExtras?, attributes?) { Profile }
}
```

## 馃弳 Credits

This package is developed and maintained by the Vapor team at [Nodes](https://www.nodesagency.com). The package owner for this project is [Martin](http://github.com/martinlasek).
Expand Down
4 changes: 3 additions & 1 deletion Sources/Bootstrap/Bootstrap.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ public final class BootstrapProvider: Provider {
"bs:buttonToolbar": ButtonToolbarTag(),
"bs:alert": AlertTag(),
"bs:input": InputTag(),
"bs:badge": BadgeTag()
"bs:badge": BadgeTag(),
"bs:breadCrumb": BreadCrumbTag(),
"bs:breadCrumbItem": BreadCrumbItemTag()
])

return .done(on: container)
Expand Down
64 changes: 64 additions & 0 deletions Sources/Bootstrap/Tags/Breadcrumb.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import Leaf
import TemplateKit

public final class BreadCrumbTag: TagRenderer {
public func render(tag: TagContext) throws -> Future<TemplateData> {
let body = try tag.requireBody()
var classes = ""
var attributes = ""

for index in 0...1 {
if
let param = tag.parameters[safe: index]?.string,
!param.isEmpty
{
switch index {
case 0: classes = param
case 1: attributes = param
default: ()
}
}
}

return tag.serializer.serialize(ast: body).map { body in
let b = String(data: body.data, encoding: .utf8) ?? ""

let breadcrumb = """
<div class='\(classes)' \(attributes) aria-label="breadcrumb">
<ol class="breadcrumb">
\(b)
</ol>
</div>
"""
return .string(breadcrumb)
}
}
}

public final class BreadCrumbItemTag: TagRenderer {
public func render(tag: TagContext) throws -> Future<TemplateData> {
let body = try tag.requireBody()
var classes = ""
var attributes = ""

for index in 0...2 {
if
let param = tag.parameters[safe: index]?.string,
!param.isEmpty
{
switch index {
case 0: classes = param
case 1: attributes = param
default: ()
}
}
}

return tag.serializer.serialize(ast: body).map { body in
let c = "breadcrumb-item \(classes)"
let b = String(data: body.data, encoding: .utf8) ?? ""
let breadcrumbItem = "<li class='\(c)' \(attributes)>\(b)</li>"
return .string(breadcrumbItem)
}
}
}