summaryrefslogtreecommitdiff
path: root/desk/web/search/router.hoon
blob: 7e4332738c43d8fa2ca4a54d3636f2b8be778644 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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]
--