Edgewall Software

Ticket #9282: t9282_timeline-highlight-new-events-r9615.patch

File t9282_timeline-highlight-new-events-r9615.patch, 3.9 KB (added by mrelbe, 2 years ago)

#9282 — replaces all former patches, works with Trac 0.12b1 (r9615)

  • trac/htdocs/css/timeline.css

    diff --git a/trac/htdocs/css/timeline.css b/trac/htdocs/css/timeline.css
    a b  
    1010 font-size: 105%; 
    1111 margin: 2em 0 .5em; 
    1212} 
    13 dl { line-height: 1.3em; margin-left: 1em } 
     13dl { 
     14 line-height: 1.3em; 
     15 margin-left: 1em; 
     16} 
     17dl.unread {  
     18 margin-left: 0.38em; 
     19 border-left: 0.31em solid #c0f0c0; 
     20 padding-left: 0.31em; 
     21} 
     22 
    1423dt { background: 3px 4px no-repeat; padding: 0 } 
    1524dt :link, dt :visited { 
    1625 background: 3px 3px no-repeat; 
     
    3443dt.highlight { background-color: #ffa; }  
    3544dd {  
    3645 font-size: 80%; 
    37  margin: 0 0 .75em 5.5em; 
     46 margin: 0 0 .75em 5.8em; 
    3847 padding: 0; 
    3948 color: #776; 
    4049} 
  • trac/timeline/templates/timeline.html

    diff --git a/trac/timeline/templates/timeline.html b/trac/timeline/templates/timeline.html
    a b  
    3434 
    3535      <py:for each="day, events in groupby(events, key=lambda e: format_date(e.date))"> 
    3636        <h2>${day}: ${day == today and _("Today") or day == yesterday and _("Yesterday") or None}</h2> 
    37         <dl> 
     37        <dl py:for="unread, events in groupby(events, key=lambda e: lastvisit and lastvisit &lt; e.dateuid)" 
     38            class="${unread and 'unread' or None}"> 
    3839          <py:for each="event in events" 
    3940            py:with="highlight = precision and precisedate and timedelta(0) &lt;= (event.date - precisedate) &lt; precision"> 
     
    3839          <py:for each="event in events" 
    3940            py:with="highlight = precision and precisedate and timedelta(0) &lt;= (event.date - precisedate) &lt; precision"> 
    40             <dt class="${classes(event.kind, highlight=highlight)}"> 
     41            <dt class="${classes(event.kind, highlight=highlight, unread=unread)}"> 
    4142              <a href="${event.render('url', context)}" py:choose=""> 
    4243                <py:when test="event.author"><i18n:msg params="time, title, author"> 
    4344                  <span class="time">${format_time(event.date, str('%H:%M'))}</span> ${event.render('title', context)} 
  • trac/timeline/web_ui.py

    diff --git a/trac/timeline/web_ui.py b/trac/timeline/web_ui.py
    a b  
    8989 
    9090        format = req.args.get('format') 
    9191        maxrows = int(req.args.get('max', 0)) 
     92        lastvisit = int(req.session.get('timeline.lastvisit', '0')) 
     93 
     94        # indication of new events is unchanged when form is updated by user 
     95        revisit = any([a in req.args for a in ['update', 'from', 'daysback', 
     96                                               'author']]) 
     97        if revisit: 
     98            lastvisit = int(req.session.get('timeline.nextlastvisit', 
     99                                            lastvisit)) 
    92100 
    93101        # Parse the from date and adjust the timestamp to the last second of 
    94102        # the day 
     
    128136                'yesterday': format_date(today - timedelta(days=1)), 
    129137                'precisedate': precisedate, 'precision': precision, 
    130138                'events': [], 'filters': [], 
    131                 'abbreviated_messages': self.abbreviated_messages} 
     139                'abbreviated_messages': self.abbreviated_messages, 
     140                'lastvisit': lastvisit} 
    132141 
    133142        available_filters = [] 
    134143        for event_provider in self.event_providers: 
     
    204213        else: 
    205214            req.session['timeline.daysback'] = daysback 
    206215            req.session['timeline.authors'] = authors 
     216            # store lastvisit 
     217            if events and not revisit: 
     218                lastviewed = to_utimestamp(events[0]['date']) 
     219                req.session['timeline.lastvisit'] = max(lastvisit, lastviewed) 
     220                req.session['timeline.nextlastvisit'] = lastvisit 
    207221            html_context = Context.from_request(req) 
    208222            html_context.set_hints(wiki_flavor='oneliner',  
    209223                                   shorten_lines=self.abbreviated_messages)