mirror of
https://github.com/daylinmorgan/nimpkgs.git
synced 2024-12-21 18:50:43 -06:00
encode search sort style in url
This commit is contained in:
parent
3509478921
commit
520b3b0461
10 changed files with 55 additions and 25 deletions
|
@ -2,7 +2,7 @@ import std/strutils
|
|||
import karax/[karax, karaxdsl, vdom]
|
||||
import components/[header, button, footer]
|
||||
import pages/pages
|
||||
import context, utils
|
||||
import context, lib
|
||||
|
||||
proc render(data: RouterData): VNode =
|
||||
when defined(debug): console.log ctx
|
||||
|
|
|
@ -4,7 +4,7 @@ import karax/[kbase, karax, karaxdsl, vdom, jstrutils, ]
|
|||
|
||||
import ../[packages, style, context]
|
||||
import ../components/tag
|
||||
import ../utils
|
||||
import ../lib
|
||||
|
||||
randomize()
|
||||
|
||||
|
|
|
@ -3,8 +3,7 @@ import std/[strutils, uri]
|
|||
import karax/[kbase, karax, karaxdsl, vdom, jstrutils]
|
||||
|
||||
import ../[packages, style, context]
|
||||
# import ../components/package
|
||||
import ../utils
|
||||
import ../lib
|
||||
|
||||
type
|
||||
Query* = object
|
||||
|
@ -55,15 +54,21 @@ proc searchPackages*(q: Query): seq[NimPackage] =
|
|||
if q ~= pkg: pkg
|
||||
|
||||
proc getSearchFromUri*(): kstring =
|
||||
result = ""
|
||||
var url = currentUri()
|
||||
if url.query == "": return ""
|
||||
if url.query == "": return
|
||||
for k, v in decodeQuery(url.query):
|
||||
if k == "query":
|
||||
return v.kstring
|
||||
|
||||
proc getSearchInput*() =
|
||||
let searchInput = getVNodeById("search").getInputText
|
||||
setSearchUrl(searchInput)()
|
||||
let sortNode = getVNodeById("sort-select")
|
||||
let sortMethod = SortMethod(
|
||||
if sortNode != nil: parseInt(sortNode.getInputText)
|
||||
else: 0
|
||||
)
|
||||
setSearchUrl(searchInput, sortMethod)()
|
||||
|
||||
proc searchBar*(value = jss""): Vnode =
|
||||
buildHtml(tdiv(class = "flex flex-row my-2 grow")):
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import std/[uri, tables, random]
|
||||
import karax/[kbase, karaxdsl, vdom, jstrutils]
|
||||
|
||||
import ../[packages, style, context, utils]
|
||||
import ../[packages, style, context, lib]
|
||||
|
||||
randomize()
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ import std/[
|
|||
asyncjs, jsconsole, jsfetch, sequtils, sugar, tables
|
||||
]
|
||||
import karax/[kbase, karax], jsony
|
||||
import packages, utils
|
||||
import packages, lib
|
||||
|
||||
export tables
|
||||
|
||||
|
|
|
@ -20,11 +20,21 @@ proc currentUri*(): Uri {.inline.} =
|
|||
func replace*(c: kstring, sub: string, by = " "): kstring =
|
||||
($c).replace(sub, by).jss
|
||||
|
||||
proc setSearchUrl*(searchQuery: kstring): proc() =
|
||||
type
|
||||
SortMethod* = enum
|
||||
smAlphabetical = "smAlphabetical", smCommitAge = "commit", smVersionAge = "version"
|
||||
|
||||
proc setSearchUrl*(searchQuery: kstring, sortMethod = smAlphabetical): proc() =
|
||||
proc() =
|
||||
var url = currentUri()
|
||||
var
|
||||
url = currentUri()
|
||||
params: seq[(string, string)]
|
||||
if searchQuery != "":
|
||||
params.add ("query", $searchQuery)
|
||||
if sortMethod != smAlphabetical:
|
||||
params.add ("sort", $sortMethod)
|
||||
url.anchor = "/search"
|
||||
url = url ? {"query": $searchQuery}
|
||||
url = url ? params
|
||||
window.history.pushState(js{}, "".jss, url.jss)
|
||||
let d = getVNodeById("search")
|
||||
let node = d.dom
|
|
@ -5,7 +5,7 @@ import std/[
|
|||
import karax/[kbase]
|
||||
import jsony
|
||||
|
||||
import ./utils
|
||||
import ./lib
|
||||
export algorithm, tables, times, asyncjs, sugar
|
||||
|
||||
proc parseHook*(s: string, i: var int, v: var kstring) =
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import std/[algorithm, sequtils, tables, uri, strutils, times]
|
||||
import karax/[kbase, karaxdsl, vdom, jstrutils]
|
||||
|
||||
import ../[context, packages, style, utils]
|
||||
import ../[context, packages, style, lib]
|
||||
|
||||
type
|
||||
Metrics = object
|
||||
|
|
|
@ -3,7 +3,7 @@ import karax/[kbase, karax, karaxdsl, kdom, vdom, jstrutils, ]
|
|||
|
||||
import ../[context, packages, style]
|
||||
import ../components/[tag, package]
|
||||
import ../utils
|
||||
import ../lib
|
||||
import notfound
|
||||
|
||||
proc openLink(link: kstring): proc() =
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
import std/[algorithm, strutils, sequtils, dom]
|
||||
import std/[algorithm, strutils, sequtils, dom, uri]
|
||||
|
||||
import karax/[kbase, karax, karaxdsl, vdom, jstrutils, kdom]
|
||||
|
||||
import ../[packages, context]
|
||||
import ../components/[package, search]
|
||||
import ../utils
|
||||
import ../lib
|
||||
|
||||
type
|
||||
SortMethod = enum
|
||||
smAlphabetical, smCommitAge, smVersionAge
|
||||
# SortMethod = enum
|
||||
# smAlphabetical, smCommitAge, smVersionAge
|
||||
#
|
||||
PageContext = object
|
||||
sortMethod: SortMethod = smAlphabetical
|
||||
filteredPackages: seq[NimPackage]
|
||||
|
@ -52,15 +53,15 @@ proc alphabeticalPackageList(pkgs: seq[NimPackage]): VNode =
|
|||
for pkg in packages:
|
||||
pkg.card
|
||||
|
||||
proc selectSortMethod() =
|
||||
let v = getVNodeById("sort-select").getInputText
|
||||
pgCtx.sortMethod = SortMethod(parseInt(v))
|
||||
|
||||
proc sortSelector(): VNode =
|
||||
buildHtml(tdiv(class = "flex items-center")):
|
||||
label(`for` = "sort-select"): text "sort:"
|
||||
select(class = "bg-ctp-crust rounded p-3", name = "sort",
|
||||
`id` = "sort-select", onChange = selectSortMethod):
|
||||
select(
|
||||
class = "bg-ctp-crust rounded p-3",
|
||||
name = "sort",
|
||||
`id` = "sort-select",
|
||||
onChange = getSearchInput
|
||||
):
|
||||
for i, msg in ["alphabetical", "recent commit", "recent version"]:
|
||||
if i == ord(pgCtx.sortMethod):
|
||||
option(value = ($i).cstring, selected = ""): text msg
|
||||
|
@ -89,8 +90,22 @@ proc filteredPackagesDom(): VNode =
|
|||
for pkg in pgCtx.filteredPackages:
|
||||
pkg.card
|
||||
|
||||
# TODO: combine with 'getSearchFromUri'
|
||||
proc getSortMethodFromUri*(): SortMethod =
|
||||
result = smAlphabetical
|
||||
var url = currentUri()
|
||||
for k, v in decodeQuery(url.query):
|
||||
if k == "sort":
|
||||
case v
|
||||
of "commit":
|
||||
result = smCommitAge
|
||||
of "version":
|
||||
result = smVersionAge
|
||||
else: discard
|
||||
|
||||
proc update(pgCtx: var PageContext) =
|
||||
pgCtx.filteredPackages = nimpkgsList()
|
||||
pgCtx.filteredPackages = nimpkgsList()
|
||||
pgCtx.sortMethod = getSortMethodFromUri()
|
||||
pgCtx.search = getSearchFromUri()
|
||||
pgCtx.filteredPackages = searchPackages(parseQuery(pgCtx.search))
|
||||
|
||||
|
|
Loading…
Reference in a new issue