summaryrefslogtreecommitdiff
path: root/desk/web/search/router.hoon
diff options
context:
space:
mode:
Diffstat (limited to 'desk/web/search/router.hoon')
-rw-r--r--desk/web/search/router.hoon112
1 files changed, 112 insertions, 0 deletions
diff --git a/desk/web/search/router.hoon b/desk/web/search/router.hoon
new file mode 100644
index 0000000..7e43327
--- /dev/null
+++ b/desk/web/search/router.hoon
@@ -0,0 +1,112 @@
+/- boke, tp=trill-post, cnt=contact
+/+ kaji, fetch-lib=fetch, plib=trill-utils, const=constants, sr=sortug, lib=boke
+/= index /web/index
+/= search /web/search/search
+/= subscribe /web/subscribe
+|_ [rl=req-line:kaji s=state:boke =bowl:gall]
++* fetch ~(. fetch-lib [s bowl])
+ srch ~(. search [s bowl])
+++ eyre-bail (error-response:kaji 404)
+++ manx-bail (error-page:kaji 404)
+::
+++ $ ^- eyre-res:kaji
+ =/ p pat.rl ::?. mob.rl pat.rl [%m pat.rl]
+ ?. (is-subscribed:lib src.bowl) nudge
+ ~& serving-search=rl(pat p)
+ ?+ p eyre-bail
+ ~ main
+ [%f ~] (search-fragment par.rl)
+ ==
+++ nudge
+ :- %page
+ =/ sub ~(. subscribe src.bowl)
+ =/ nudgep (nudge:sub "Search")
+ (index ~[nudgep] bowl)
+++ main
+ :- %page
+ ~& >> params=~(tap by par.rl)
+ =/ args parse-params
+ ~& args=args
+ =/ page ?~ args init:srch
+ =/ res (search:fetch u.args)
+ (page:srch u.args res)
+ (index ~[page] bowl)
+++ search-fragment
+|= pmap=(map @t @t)
+ :- %html
+ =/ args parse-params
+ ~& args=args
+ ?~ args manx-bail
+ =/ res (search:fetch u.args)
+ (results:srch u.args res)
+:: ++ inline-search
+:: |= ssection=@t
+:: =/ sec ((soft section) ssection)
+:: ?~ sec bail
+:: =/ args (parse-params par.rl)
+:: ~& args=args
+:: ?~ args bail
+:: =/ res (search:fetch u.sec u.args)
+:: (results:srch [u.sec u.args] res)
+:: ++ dated-search
+:: |= [ssection=@t date=@t]
+:: =/ sec ((soft section) ssection)
+:: ?~ sec bail
+:: =/ interval=@dr
+:: ?: .=('day' date) ~d1
+:: ?: .=('week' date) ~d7
+:: ?: .=('month' date) ~d30
+:: ?: .=('year' date) ~d365 ~s1
+:: ?: .=(~s1 interval) bail
+:: =/ args (parse-params par.rl)
+:: ~& args=args
+:: ?~ args bail
+:: =/ req=page-req:tp [(some (sub now.bowl interval)) ~ search-page-size:const]
+:: =/ res (search:fetch u.sec query.u.args tags.u.args req)
+:: (results:srch [u.sec u.args] res)
+ :: =/ sec (section:srch section)
+ :: =/ args (parse-params:srch par.rl)
+ :: ?~ args inline-search-error
+ :: =/ res (fetch-results:srch sec query.u.args req.u.args)
+ :: ?~ res inline-search-error
+ :: =/ =marl (res-to-marl:srch sec query.u.args u.res)
+ :: ;div
+ :: ;* marl
+ :: ==
+ :: ++ inline-search-error
+ :: %- serve-html:kaji :_ .n %- add-error:kaji
+ :: %+ alert:kaji "An error ocurred" 3.000
+
++$ section $?(%blog %comments %chat %threads %replies)
++$ pars [=section query=@t tags=(list @t) req=page-req:tp]
+++ parse-params ^- (unit pars)
+ =/ pmap par.rl
+ =/ query (~(get by pmap) 'query') ?~ query ~
+ ?: .=(u.query '') ~
+ :: =/ ts (~(get by pmap) 'tags') ?~ ts ~
+ =/ =section
+ =/ ssec (~(get by pmap) 'section') ?~ ssec %blog
+ =/ tsec ((soft section) u.ssec) ?~ tsec %blog u.tsec
+ =/ sdr (~(get by pmap) 'interval')
+ =/ r=page-req:tp [~ ~ search-page-size:const]
+ =. r ?. ?=(^ sdr) r
+ =/ interval=@dr
+ ?: .=('day' u.sdr) ~d1
+ ?: .=('week' u.sdr) ~d7
+ ?: .=('month' u.sdr) ~d30
+ ?: .=('year' u.sdr) ~d365 ~s0
+ ?: .=(interval 0) r
+ r(newer (some (sub now.bowl interval)))
+
+ =/ o (~(get by pmap) 'after')
+ =/ n (~(get by pmap) 'before')
+ =/ c (~(get by pmap) 'count')
+ =? older.r ?=(^ o) (slaw:parsing:sr %uw u.o)
+ =? newer.r ?=(^ n) (slaw:parsing:sr %uw u.n)
+ =. count.r ?~ c count.r
+ =/ cc (slaw %ud u.c)
+ ?~ cc count.r u.cc
+
+ %- some
+ [section u.query ~ r]
+--