Skip to content

Commit

Permalink
fix for issue ml-archive#40, option to set visiblePages in config pag…
Browse files Browse the repository at this point in the history
…inator.json
  • Loading branch information
Leonid Orsulic authored and Leonid Orsulic committed Jul 17, 2017
1 parent 29a87d9 commit 2602101
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 22 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

*.xcodeproj
Packages/
.DS_Store

## Build generated
build/
Expand Down
63 changes: 44 additions & 19 deletions Sources/Paginator+Leaf.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@ public final class PaginatorTag: Tag {

fileprivate let useBootstrap4: Bool
fileprivate let paginationLabel: String?
fileprivate let visiblePages: Int?

public init(useBootstrap4: Bool = false, paginationLabel: String? = nil) {
public init(useBootstrap4: Bool = false, paginationLabel: String? = nil, visiblePages: Int? = nil) {
self.useBootstrap4 = useBootstrap4
self.paginationLabel = paginationLabel
self.visiblePages = visiblePages
}

public let name = "paginator"
Expand Down Expand Up @@ -96,27 +98,50 @@ extension PaginatorTag {
return bytes
}

for i in 1...count {
let path = PaginatorHelper.buildPath(
page: i,
count: count,
uriQueries: queries
)
let visible = visiblePages ?? 8
var pageOrder: [Int] = []

pageOrder.append(currentPage)
for i in 1...(visible/2) {

if (currentPage + i) <= count {
pageOrder.append(currentPage + i)
}
if (currentPage - i) > 0 {
pageOrder.append(currentPage - i)
}

}
pageOrder.sort()

if pageOrder.count < visible {

let missing = visible - pageOrder.count
for _ in 1...missing {

if pageOrder.first! == 1 {
// append element
pageOrder.append(pageOrder.last! + 1)
} else {
// prepend element
pageOrder.insert(pageOrder.first! - 1, at: 0)
}
}

} else if pageOrder.count > visible {
if visible % 2 == 0 {
pageOrder.removeFirst()
}
}


for i in pageOrder {
let path = PaginatorHelper.buildPath(page: i, count: count, uriQueries: queries)

if i == currentPage {
bytes += buildLink(
title: "\(i)",
active: true,
link: nil,
disabled: false
).bytes
bytes += buildLink(title: "\(i)", active: true, link: nil, disabled: false).bytes
} else {
bytes += buildLink(
title: "\(i)",
active: false,
link: path,
disabled: false
).bytes
bytes += buildLink(title: "\(i)", active: false, link: path, disabled: false).bytes
}
}

Expand Down
13 changes: 10 additions & 3 deletions Sources/Provider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,17 @@ public final class PaginatorProvider: Vapor.Provider {
return
}

renderer.stem.register(PaginatorTag(useBootstrap4: useBootstrap4, paginationLabel: paginationLabel))
renderer.stem.register(PaginatorTag(useBootstrap4: useBootstrap4, paginationLabel: paginationLabel, visiblePages: visiblePages))
}

fileprivate let useBootstrap4: Bool
fileprivate let paginationLabel: String?
fileprivate let visiblePages: Int?

public init(useBootstrap4: Bool = false, paginationLabel: String? = nil) {
public init(useBootstrap4: Bool = false, paginationLabel: String? = nil, visiblePages: Int?) {
self.useBootstrap4 = useBootstrap4
self.paginationLabel = paginationLabel
self.visiblePages = visiblePages
}

/**
Expand All @@ -32,24 +34,29 @@ public final class PaginatorProvider: Vapor.Provider {
{
"useBootstrap4": true,
"paginatorLabel": "Blog Post Pages"
"paginatorLabel": "Blog Post Pages",
"visiblePages": 8
}
*/
public init(config: Config) throws {

var useBootstrap4Value = false
var paginatorLabelValue: String? = nil
var visiblePagesValue: Int? = nil



if let paginatorConfig = config["paginator"]?.object {
paginatorLabelValue = paginatorConfig["paginatorLabel"]?.string
visiblePagesValue = paginatorConfig["visiblePages"]?.int
if let bootstrap4 = paginatorConfig["useBootstrap4"]?.bool {
useBootstrap4Value = bootstrap4
}
}

useBootstrap4 = useBootstrap4Value
paginationLabel = paginatorLabelValue
visiblePages = visiblePagesValue
}
public func afterInit(_ drop: Droplet) {}
public func beforeRun(_: Droplet) {}
Expand Down

0 comments on commit 2602101

Please sign in to comment.