Edgewall Software

Ticket #1269: quickjump+missing-r3431.diff

File quickjump+missing-r3431.diff, 5.7 KB (added by cboos, 2 years ago)

Same as above, but the style is different: the quickjump results are more integrated with the other results, but still stand out on top of them.

  • htdocs/css/search.css

     
    99#results dd { font-size: 80%; margin: 0; padding: 0 } 
    1010#results .author, #results .date, #results .keywords { color: #090 } 
    1111 
     12#quickjump { font-style: italic; font-weight: bold; } 
     13 
    1214#paging { margin: 0 0 2em; text-align: center } 
  • trac/ticket/report.py

     
    490490        if intertrac: 
    491491            return intertrac 
    492492        report, args, fragment = formatter.split_link(target) 
     493        db = self.env.get_db_cnx() 
     494        cursor = db.cursor() 
     495        cursor.execute('SELECT id FROM report WHERE id=%s', (report,)) 
     496        exists = bool(cursor.fetchone()) 
     497        class_ = 'report' 
     498        if not exists: 
     499            class_ += ' missing' 
     500            label += '?' 
    493501        return html.A(href=formatter.href.report(report) + args, 
    494                       class_='report')[label] 
     502                      class_=class_)[label] 
  • trac/ticket/roadmap.py

     
    518518        yield ('milestone', self._format_link) 
    519519 
    520520    def _format_link(self, formatter, ns, name, label): 
     521        class_ = 'milestone' 
     522        try: 
     523            Milestone(self.env, name) 
     524        except TracError: 
     525            class_ += ' missing' 
     526            label += '?' 
    521527        return html.A(href=formatter.href.milestone(name), 
    522                       class_='milestone')[label] 
     528                      class_=class_)[label] 
  • trac/Search.py

     
    167167        query = req.args.get('q') 
    168168        if query: 
    169169            page = int(req.args.get('page', '1')) 
    170             redir = self.quickjump(req, query) 
    171             if redir: 
    172                 req.redirect(redir) 
     170            do_quickjump = int(req.args.get('quickjump', '0')) 
     171            quickjump_elt = self.quickjump(req, query) 
     172            if quickjump_elt is not None: 
     173                quickjump_href = quickjump_elt.attr['href'] 
     174                if do_quickjump: 
     175                    req.redirect(quickjump_href) 
     176                else: 
     177                    req.hdf['search.quickjump'] = { 
     178                        'href': quickjump_href, 
     179                        'name': html.EM(quickjump_elt.children), 
     180                        'description': quickjump_elt.attr.get('title', '') 
     181                        } 
    173182            elif query.startswith('!'): 
    174183                query = query[1:] 
    175184            terms = search_terms(query) 
     
    215224        return 'search.cs', None 
    216225 
    217226    def quickjump(self, req, kwd): 
    218         if len(kwd.split()) != 1: 
    219             return None 
    220227        # Source quickjump 
    221228        if kwd[0] == '/': 
    222229            return req.href.browser(kwd) 
    223230        link = wiki_to_link(kwd, self.env, req) 
    224231        if isinstance(link, Element): 
    225             return link.attr['href'] 
     232            return link 
    226233 
    227234    # IWikiSyntaxProvider methods 
    228235     
  • templates/header.cs

     
    4545  <input type="hidden" name="wiki" value="on" /> 
    4646  <input type="hidden" name="changeset" value="on" /> 
    4747  <input type="hidden" name="ticket" value="on" /> 
     48  <input type="hidden" name="quickjump" value="1" /> 
    4849 </div><?cs /if ?> 
    4950</form> 
    5051 
  • templates/search.cs

     
    3737   <label for="<?cs var:filter.name ?>"><?cs var:filter.label?></label><?cs 
    3838  /each ?> 
    3939 </p> 
    40 </form> 
    41 <?cs if:len(search.result) ?> 
    42  <hr /> 
     40</form><?cs  
     41 
     42if:len(search.result) || len(search.quickjump) ?> 
     43 <hr /><?cs 
     44 if:len(search.result) ?> 
    4345 <h2>Search results <?cs 
    4446  if:search.n_pages > 1 ?>(<?cs 
    4547   var:(search.page-1) * search.page_size + 1 ?> - <?cs 
    4648   var:(search.page-1) * search.page_size + len(search.result) ?>  
    4749   of <?cs var:search.n_hits?>)<?cs 
    48   /if ?></h2> 
     50  /if ?></h2><?cs 
     51 /if ?> 
    4952 <div id="searchable"> 
    5053  <dl id="results"><?cs 
     54   if:len(search.quickjump) ?> 
     55    <dt id=quickjump><a href="<?cs var:search.quickjump.href ?>">Quickjump to <?cs var:search.quickjump.name ?></a></dt> 
     56    <dd><?cs var:search.quickjump.description ?></dd><?cs  
     57   /if ?><?cs  
    5158   each item=search.result ?> 
    52  <dt><a href="<?cs var:item.href ?>"><?cs var:item.title ?></a></dt> 
    53  <dd><?cs var:item.excerpt ?></dd> 
    54  <dd> 
    55   <span class="author">By <?cs var:item.author ?></span> &mdash; 
    56   <span class="date"><?cs var:item.date ?></span><?cs 
    57   if:item.keywords ?> &mdash 
    58    <span class="keywords">Keywords: <em><?cs var:item.keywords ?></em></span><?cs 
    59   /if ?> 
    60  </dd><?cs 
     59    <dt><a href="<?cs var:item.href ?>"><?cs var:item.title ?></a></dt> 
     60    <dd><?cs var:item.excerpt ?></dd> 
     61    <dd> 
     62     <span class="author">By <?cs var:item.author ?></span> &mdash; 
     63     <span class="date"><?cs var:item.date ?></span><?cs 
     64     if:item.keywords ?> &mdash 
     65      <span class="keywords">Keywords: <em><?cs var:item.keywords ?></em></span><?cs 
     66     /if ?> 
     67    </dd><?cs 
    6168   /each ?> 
    6269  </dl> 
    6370  <hr /> 
     
    8188  </div><?cs 
    8289 /if ?><?cs 
    8390 
    84 elif:search.q ?> 
     91elif:search.q && !search.quickjump ?> 
    8592 <div id="notfound">No matches found.</div><?cs 
    8693/if ?> 
    8794