diff options
Diffstat (limited to 'desk/web/search/router.hoon')
-rw-r--r-- | desk/web/search/router.hoon | 112 |
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] +-- |