/- 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] --