Changeset 2365

Show
Ignore:
Timestamp:
07/02/07 14:46:31 (2 years ago)
Author:
Blackhex
Message:

DiscussionPlugin:

  • Fixed XHTML validation errors.
  • Added some debug outputs.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • discussionplugin/0.11/tracdiscussion/api.py

    r2352 r2365  
    11# -*- coding: utf8 -*- 
    22 
    3 import time, datetime 
     3from datetime import * 
    44 
    55from trac.core import * 
     
    77from trac.wiki.formatter import format_to_html, format_to_oneliner 
    88from trac.perm import PermissionError 
    9 from trac.util.datefmt import format_datetime, pretty_timedelta, FixedOffset 
     9from trac.util.datefmt import to_timestamp, to_datetime, utc, \ 
     10  format_datetime, pretty_timedelta 
    1011 
    1112from genshi.template import TemplateLoader 
    1213 
    1314from tracdiscussion.notification import * 
    14  
    15 utc = FixedOffset(0, 'UTC') 
    1615 
    1716class DiscussionApi(object): 
     
    2625        group, forum, topic, message = self._get_items(context) 
    2726        modes = self._get_modes(context, group, forum, topic, message) 
    28  
    29         # Debug 
    30         context.env.log.debug(group) 
    31         context.env.log.debug(forum) 
    32         context.env.log.debug(topic) 
    33         context.env.log.debug(message) 
    34         context.env.log.debug(modes) 
    3527 
    3628        # Determine moderator rights. 
     
    5951        self.data['message'] = message 
    6052        self.data['mode'] = modes[-1] 
    61         self.data['time'] = format_datetime(datetime.datetime.now(utc)) 
     53        self.data['time'] = format_datetime(datetime.now(utc)) 
    6254        self.data['realm'] = context.realm 
    6355 
     
    8476 
    8577        # Return template and data. 
     78        context.env.log.debug(self.data) 
    8679        return modes[-1] + '.html', {'discussion' : self.data} 
    8780 
     
    492485                new_author = context.req.args.get('author') 
    493486                new_body = context.req.args.get('body') 
    494                 new_time = int(time.time()) 
     487                new_time = to_timestamp(datetime.now(utc)) 
    495488 
    496489                # Add topic. 
     
    587580                new_author = context.req.args.get('author') 
    588581                new_body = context.req.args.get('body') 
    589                 new_time = int(time.time()) 
     582                new_time = to_timestamp(datetime.now(utc)) 
    590583 
    591584                # Add message. 
     
    654647 
    655648        # Update this topic visit time and save to session. 
    656         visited[topic['id']] = int(time.time()) 
     649        visited[topic['id']] = to_timestamp(datetime.now(utc)) 
    657650        context.req.session['visited-topics'] = unicode(visited) 
    658651 
     
    685678 
    686679    def get_message(self, context, id): 
     680        id = unicode(id) 
    687681        columns = ('id', 'forum', 'topic', 'replyto', 'time', 'author', 'body') 
    688682        sql = "SELECT id, forum, topic, replyto, time, author, body FROM" \ 
    689683          " message WHERE id = %s" 
    690         context.cursor.execute(sql, (id,)) 
     684        context.env.log.debug(sql % (id)) 
     685        context.cursor.execute(sql, (id)) 
    691686        for row in context.cursor: 
    692687            row = dict(zip(columns, row)) 
     
    698693        sql = "SELECT id, forum, topic, replyto, time, author, body FROM" \ 
    699694          " message WHERE time = %s" 
    700         context.cursor.execute(sql, (time,)) 
     695        context.env.log.debug(sql % (time)) 
     696        context.cursor.execute(sql, (time)) 
    701697        for row in context.cursor: 
    702698            row = dict(zip(columns, row)) 
     
    705701 
    706702    def get_topic(self, context, id): 
     703        id = unicode(id) 
    707704        columns = ('id', 'forum', 'subject', 'time', 'author', 'body') 
    708705        sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 
    709706          " id = %s" 
    710         context.cursor.execute(sql, (id,)) 
     707        context.env.log.debug(sql % (id)) 
     708        context.cursor.execute(sql, (id)) 
    711709        for row in context.cursor: 
    712710            row = dict(zip(columns, row)) 
     
    718716        sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 
    719717          " time = %s" 
    720  
    721         context.cursor.execute(sql, (time,)) 
     718        context.env.log.debug(sql % (time)) 
     719        context.cursor.execute(sql, (time)) 
    722720        for row in context.cursor: 
    723721            row = dict(zip(columns, row)) 
     
    728726        columns = ('id', 'forum', 'subject', 'time', 'author', 'body') 
    729727        sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 
    730           " subject = '%s'" % (subject) 
    731         context.cursor.execute(sql) 
     728          " subject = %s" 
     729        context.env.log.debug(sql % (subject)) 
     730        context.cursor.execute(sql, (subject)) 
    732731        for row in context.cursor: 
    733732            row = dict(zip(columns, row)) 
     
    736735 
    737736    def get_topic_to_recipients(self, context, id): 
     737        id = unicode(id) 
    738738        sql = "SELECT t.author FROM topic t WHERE t.id = %s UNION SELECT" \ 
    739739          " m.author FROM message m WHERE m.topic = %s" 
     740        context.env.log.debug(sql % (id, id)) 
    740741        context.cursor.execute(sql, (id, id)) 
    741742        to_recipients = [] 
     
    748749 
    749750    def get_forum(self, context, id): 
     751        id = unicode(id) 
    750752        columns = ('id', 'group', 'name', 'subject', 'time', 'moderators', 
    751753          'description') 
    752754        sql = "SELECT id, forum_group, name, subject, time, moderators," \ 
    753755           " description FROM forum WHERE id = %s" 
    754         context.cursor.execute(sql, (id,)) 
     756        context.env.log.debug(sql % (id)) 
     757        context.cursor.execute(sql, (id)) 
    755758        for row in context.cursor: 
    756759            row = dict(zip(columns, row)) 
     
    760763 
    761764    def get_group(self, context, id): 
     765        id = unicode(id) 
    762766        columns = ('id', 'name', 'description') 
    763767        sql = "SELECT id, name, description FROM forum_group WHERE id = %s" 
    764  
    765         context.cursor.execute(sql, (id,)) 
     768        context.env.log.debug(sql % (id)) 
     769        context.cursor.execute(sql, (id)) 
    766770        for row in context.cursor: 
    767771            row = dict(zip(columns, row)) 
     
    775779            group = '0' 
    776780        sql = "UPDATE forum SET forum_group = %s WHERE id = %s" 
     781        context.env.log.debug(sql % (group, forum)) 
    777782        context.cursor.execute(sql, (group, forum)) 
    778783 
    779784    def set_forum(self, context, topic, forum): 
    780785        sql = "UPDATE topic SET forum = %s WHERE id = %s" 
     786        context.env.log.debug(sql % (forum, topic)) 
    781787        context.cursor.execute(sql, (forum, topic)) 
    782788        sql = "UPDATE message SET forum = %s WHERE topic = %s" 
     789        context.env.log.debug(sql % (forum, topic)) 
    783790        context.cursor.execute(sql, (forum, topic)) 
    784791 
     
    787794    def edit_group(self, context, group, name, description): 
    788795        sql = "UPDATE forum_group SET name = %s, description = %s WHERE id = %s" 
     796        context.env.log.debug(sql % (name, description, group)) 
    789797        context.cursor.execute(sql, (name, description, group)) 
    790798 
     
    796804        sql = "UPDATE forum SET name = %s, subject = %s, description = %s," \ 
    797805          " moderators = %s, forum_group = %s WHERE id = %s" 
     806        context.env.log.debug(sql % (name, subject, description, moderators, 
     807          group, forum)) 
    798808        context.cursor.execute(sql, (name, subject, description, moderators, 
    799809          group, forum)) 
     
    802812        sql = "UPDATE topic SET forum = %s, subject = %s, body = %s WHERE id" \ 
    803813          " = %s" 
     814        context.env.log.debug(sql % (forum, subject, body, topic)) 
    804815        context.cursor.execute(sql, (forum, subject, body, topic)) 
    805816 
     
    807818        sql = "UPDATE message SET forum = %s, topic = %s, replyto = %s, body" \ 
    808819          " = %s WHERE id = %s" 
     820        context.env.log.debug(sql % (forum, topic, replyto, body, message)) 
    809821        context.cursor.execute(sql, (forum, topic, replyto, body, message)) 
    810822 
     
    814826        # Get count of forums without group 
    815827        sql = "SELECT COUNT(f.id) FROM forum f WHERE f.forum_group = 0" 
     828        context.env.log.debug(sql) 
    816829        context.cursor.execute(sql) 
    817830        no_group_forums = 0 
     
    830843          " f.forum_group ORDER BY " + order_by + (" ASC", 
    831844          " DESC")[bool(desc)] 
     845        context.env.log.debug(sql) 
    832846        context.cursor.execute(sql) 
    833847        for row in context.cursor: 
     
    853867          "t.id = ma.topic GROUP BY forum) ta ON f.id = ta.forum ORDER BY " + \ 
    854868          order_by + (" ASC", " DESC")[bool(desc)] 
     869        context.env.log.debug(sql) 
    855870        context.cursor.execute(sql) 
    856871        forums = [] 
     
    860875            row['subject'] = format_to_oneliner(context, row['subject']) 
    861876            row['description'] = format_to_oneliner(context, row['description']) 
    862             row['lastreply'] = row['lastreply'] and pretty_timedelta(datetime. 
    863               datetime.fromtimestamp(row['lastreply'], utc)) or 'No replies' 
    864             row['lasttopic'] = row['lasttopic'] and  pretty_timedelta(datetime. 
    865               datetime.fromtimestamp(row['lasttopic'], utc)) or 'No topics' 
     877            row['lastreply'] = row['lastreply'] and pretty_timedelta( 
     878              to_datetime(row['lastreply'], utc)) or 'No replies' 
     879            row['lasttopic'] = row['lasttopic'] and  pretty_timedelta( 
     880              to_datetime(row['lasttopic'], utc)) or 'No topics' 
    866881            row['topics'] = row['topics'] or 0 
    867882            row['replies'] = row['replies'] and int(row['replies']) or 0 
     
    880895          " topic) m ON t.id = m.topic WHERE t.forum = %s ORDER BY " \ 
    881896          + order_by + (" ASC", " DESC")[bool(desc)] 
    882  
    883         context.cursor.execute(sql, (forum_id,)) 
     897        context.env.log.debug(sql % (forum_id)) 
     898        context.cursor.execute(sql, (forum_id)) 
    884899        topics = [] 
    885900        for row in context.cursor: 
    886901            row = dict(zip(columns, row)) 
    887902            row['author'] = format_to_oneliner(context, row['author']) 
     903            row['subject'] = format_to_oneliner(context, row['subject']) 
    888904            row['body'] = format_to_html(context, row['body']) 
    889             row['lastreply'] = row['lastreply'] and pretty_timedelta(datetime. 
    890               datetime.fromtimestamp(row['lastreply'], utc)) or 'No replies' 
     905            row['lastreply'] = row['lastreply'] and pretty_timedelta( 
     906              to_datetime(row['lastreply'], utc)) or 'No replies' 
    891907            row['replies'] = row['replies'] or 0 
    892908            row['time'] = format_datetime(row['time']) 
     
    899915        sql = "SELECT m.id, m.replyto, m.time, m.author, m.body FROM message m WHERE" \ 
    900916          " m.topic = %s ORDER BY " + order_by + (" ASC", " DESC")[bool(desc)] 
    901         context.cursor.execute(sql, (topic_id,)) 
     917        context.env.log.debug(sql % (topic_id)) 
     918        context.cursor.execute(sql, (topic_id)) 
    902919        messagemap = {} 
    903920        messages = [] 
     
    930947        sql = "SELECT m.id, m.replyto, m.time, m.author, m.body FROM message m" \ 
    931948          " WHERE m.topic = %s " + order_by 
    932         context.cursor.execute(sql, (topic_id,)) 
     949        context.env.log.debug(sql % (topic_id)) 
     950        context.cursor.execute(sql, (topic_id)) 
    933951        messages = [] 
    934952        for row in context.cursor: 
     
    952970    def add_group(self, context, name, description): 
    953971        sql = "INSERT INTO forum_group (name, description) VALUES (%s, %s)" 
     972        context.env.log.debug(sql % (name, description)) 
    954973        context.cursor.execute(sql, (name, description)) 
    955974 
     
    959978        sql = "INSERT INTO forum (name, author, time, moderators, subject," \ 
    960979          " description, forum_group) VALUES (%s, %s, %s, %s, %s, %s, %s)" 
    961         context.cursor.execute(sql, (name, author, int(time.time()), moderators, 
    962           subject, description, group)) 
     980        context.env.log.debug(sql % (name, author, to_timestamp(datetime.now(utc)), 
     981          moderators, subject, description, group)) 
     982        context.cursor.execute(sql, (name, author, to_timestamp(datetime.now(utc)), 
     983          moderators, subject, description, group)) 
    963984 
    964985    def add_topic(self, context, forum, subject, time, author, body): 
    965986        sql = "INSERT INTO topic (forum, subject, time, author, body) VALUES" \ 
    966987          " (%s, %s, %s, %s, %s)" 
     988        context.env.log.debug(sql % (forum, subject, time, author, body)) 
    967989        context.cursor.execute(sql, (forum, subject, time, author, body)) 
    968990 
     
    970992        sql = "INSERT INTO message (forum, topic, replyto, time, author," \ 
    971993          " body) VALUES (%s, %s, %s, %s, %s, %s)" 
     994        context.env.log.debug(sql % (forum, topic, replyto, time, author, body)) 
    972995        context.cursor.execute(sql, (forum, topic, replyto, time, author, body)) 
    973996 
     
    976999    def delete_group(self, context, group): 
    9771000        sql = "DELETE FROM forum_group WHERE id = %s" 
    978         context.cursor.execute(sql, (group,)) 
     1001        context.env.log.debug(sql % (group)) 
     1002        context.cursor.execute(sql, (group)) 
    9791003        sql = "UPDATE forum SET forum_group = 0 WHERE forum_group = %s" 
    980         context.cursor.execute(sql, (group,)) 
     1004        context.env.log.debug(sql % (group)) 
     1005        context.cursor.execute(sql, (group)) 
    9811006 
    9821007    def delete_forum(self, context, forum): 
    9831008        sql = "DELETE FROM message WHERE forum = %s" 
    984         context.cursor.execute(sql, (forum,)) 
     1009        context.env.log.debug(sql % (forum)) 
     1010        context.cursor.execute(sql, (forum)) 
    9851011        sql = "DELETE FROM topic WHERE forum = %s" 
    986         context.cursor.execute(sql, (forum,)) 
     1012        context.env.log.debug(sql % (forum)) 
     1013        context.cursor.execute(sql, (forum)) 
    9871014        sql = "DELETE FROM forum WHERE id = %s" 
    988         context.cursor.execute(sql, (forum,)) 
     1015        context.env.log.debug(sql % (forum)) 
     1016        context.cursor.execute(sql, (forum)) 
    9891017 
    9901018    def delete_topic(self, context, topic): 
    9911019        sql = "DELETE FROM message WHERE topic = %s" 
    992         context.cursor.execute(sql, (topic,)) 
     1020        context.env.log.debug(sql % (topic)) 
     1021        context.cursor.execute(sql, (topic)) 
    9931022        sql = "DELETE FROM topic WHERE id = %s" 
    994         context.cursor.execute(sql, (topic,)) 
     1023        context.env.log.debug(sql % (topic)) 
     1024        context.cursor.execute(sql, (topic)) 
    9951025 
    9961026    def delete_message(self, context, message): 
    9971027        # Get message replies 
    9981028        sql = "SELECT m.id FROM message m WHERE m.replyto = %s" 
    999         context.cursor.execute(sql, (message,)) 
     1029        context.env.log.debug(sql % (message)) 
     1030        context.cursor.execute(sql, (message)) 
    10001031        replies = [] 
    10011032 
     
    10101041        # Delete message itself 
    10111042        sql = "DELETE FROM message WHERE id = %s" 
    1012         context.cursor.execute(sql, (message,)) 
     1043        context.env.log.debug(sql % (message)) 
     1044        context.cursor.execute(sql, (message)) 
  • discussionplugin/0.11/tracdiscussion/notification.py

    r2352 r2365  
    1313class DiscussionNotifyEmail(NotifyEmail): 
    1414 
    15     template_name = "discussion-notify-body.txt" 
     15    template_name = 'discussion-notify-body.txt' 
    1616    forum = None 
    1717    topic = None 
  • discussionplugin/0.11/tracdiscussion/templates/admin-forum-list.html

    r2353 r2365  
    9494                  </td> 
    9595                  <td class="id"> 
    96                     <a href="${panel_href(forum.id)}"> 
    97                       <div class="id">${forum.id}</div> 
    98                     </a> 
     96                    <div class="id"> 
     97                      <a href="${panel_href(forum.id)}"> 
     98                        <span>${forum.id}</span> 
     99                      </a> 
     100                    </div> 
    99101                  </td> 
    100102                  <td class="name"> 
    101                     <a href="${panel_href(forum.id)}"> 
    102                       <div class="name">${forum.name or '&nbsp;'}</div> 
    103                     </a> 
     103                    <div class="name"> 
     104                      <a href="${panel_href(forum.id)}"> 
     105                        <span>${forum.name or '&nbsp;'}</span> 
     106                      </a> 
     107                    </div> 
    104108                  </td> 
    105109                  <td class="subject"> 
    106                     <a href="${panel_href(forum.id)}"> 
    107                       <div class="subject">${forum.subject or '&nbsp;'}</div> 
    108                     </a> 
     110                    <div class="subject"> 
     111                      <a href="${panel_href(forum.id)}"> 
     112                        <span>${forum.subject or '&nbsp;'}</span> 
     113                      </a> 
     114                    </div> 
    109115                  </td> 
    110116                  <td class="description"> 
    111                     <a href="${panel_href(forum.id)}"> 
    112                       <div class="description">${forum.description or '&nbsp;'}</div> 
    113                     </a> 
     117                    <div class="description"> 
     118                      <a href="${panel_href(forum.id)}"> 
     119                        <span>${forum.description or '&nbsp;'}</span> 
     120                      </a> 
     121                    </div> 
    114122                  </td> 
    115123                  <td class="moderators"> 
    116                     <a href="${panel_href(forum.id)}"> 
    117                       <div class="moderators">${forum.moderators or '&nbsp;'}</div> 
    118                     </a> 
     124                    <div class="moderators"> 
     125                      <a href="${panel_href(forum.id)}"> 
     126                        <span>${forum.moderators or '&nbsp;'}</span> 
     127                      </a> 
     128                    </div> 
    119129                  </td> 
    120130                  <td py:if="len(discussion.groups) > 1" class="group"> 
    121                     <a href="${panel_href(forum.id)}"> 
    122                       <div py:for="group in discussion.groups" py:if="group.id == forum.group" class="group">${group.name}</div> 
    123                     </a> 
     131                    <div py:for="group in discussion.groups" py:if="group.id == forum.group" class="group"> 
     132                      <a href="${panel_href(forum.id)}"> 
     133                        <span>${group.name}</span> 
     134                      </a> 
     135                    </div> 
    124136                  </td> 
    125137                </tr> 
  • discussionplugin/0.11/tracdiscussion/templates/admin-group-list.html

    r2353 r2365  
    1919          <div class="field"> 
    2020            <label for="name">Name:</label><br/> 
    21             <input type="text" name="name" value="${is_edit and discussion.name or None}"/><br/> 
     21            <input type="text" id="name" name="name" value="${is_edit and discussion.name or None}"/><br/> 
    2222          </div> 
    2323 
    2424          <div class="field"> 
    2525            <label for="description">Description:</label><br/> 
    26             <input type="text" name="description" value="${is_edit and discussion.description or None}"/><br/> 
     26            <input type="text" id="description" name="description" value="${is_edit and discussion.description or None}"/><br/> 
    2727          </div> 
    2828 
     
    5454                  </td> 
    5555                  <td class="id"> 
    56                     <a href="${panel_href(group.id)}"> 
    57                       <div class="id">${group.id}</div> 
    58                     </a> 
     56                    <div class="id"> 
     57                      <a href="${panel_href(group.id)}"> 
     58                        <span>${group.id}</span> 
     59                      </a> 
     60                    </div> 
    5961                  </td> 
    6062                  <td class="name"> 
    61                     <a href="${panel_href(group.id)}"> 
    62                       <div class="name">${group.name or '&nbsp;'}</div> 
    63                     </a> 
     63                    <div class="name"> 
     64                      <a href="${panel_href(group.id)}"> 
     65                        <span>${group.name or '&nbsp;'}</span> 
     66                      </a> 
     67                    </div> 
    6468                  </td> 
    6569                  <td class="description"> 
    66                     <a href="${panel_href(group.id)}"> 
    67                       <div class="description">${group.description or '&nbsp;'}</div> 
    68                     </a> 
     70                    <div class="description"> 
     71                      <a href="${panel_href(group.id)}"> 
     72                        <span>${group.description or '&nbsp;'}</span> 
     73                      </a> 
     74                    </div> 
    6975                  </td> 
    7076                </tr> 
  • discussionplugin/0.11/tracdiscussion/templates/discussion-footer.html

    r2353 r2365  
    1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    2 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://genshi.edgewall.org/" py:strip=""> 
     1<html xmlns:py="http://genshi.edgewall.org/" py:strip=""> 
    32</html> 
  • discussionplugin/0.11/tracdiscussion/templates/discussion-header.html

    r2353 r2365  
    1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    2 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://genshi.edgewall.org/" py:strip=""> 
     1<html xmlns:py="http://genshi.edgewall.org/" py:strip=""> 
    32  <div id="ctxtnav" class="nav"> 
    43    <h2>Discussion Navigation</h2> 
    5     <ul
     4    <ul py:if="discussion.forum"
    65      <li py:if="discussion.forum" class="${discussion.topic and None or 'last'}"> 
    76        <a href="${href.discussion()}"> 
     
    1110      <li py:if="discussion.topic" class="${discussion.message and None or 'last'}"> 
    1211        <a href="${href.discussion(discussion.forum.id)}"> 
    13           ${discussion.forum.subject} 
     12          <span>${discussion.forum.subject}</span> 
    1413        </a> 
    1514      </li> 
    1615      <li py:if="discussion.message" class="last"> 
    1716        <a href="${href.discussion(discussion.forum.id, discussion.topic.id)}"> 
    18           ${discussion.topic.subject} 
     17          <span>${discussion.topic.subject}</span> 
    1918        </a> 
    2019      </li> 
  • discussionplugin/0.11/tracdiscussion/templates/discussion-macros.html

    r2353 r2365  
    1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    2 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://genshi.edgewall.org/" py:strip=""> 
     1<html xmlns:py="http://genshi.edgewall.org/" py:strip=""> 
    32 
    43  <py:def function="sortable_th(order, desc, Class, title, href)"> 
     
    5756          <py:if test="(str(req.args.message) == '-1') and (req.args.discussion_action in ('add', 'quote', 'post-add')) and (not req.args.submit)"> 
    5857            ${display_preview()} 
    59             ${display_form(href, 'Reply:', 'add_form', 'post-add')} 
     58            <li> 
     59              ${display_form(href, 'Reply:', 'add_form', 'post-add')} 
     60            </li> 
    6061          </py:if> 
     62          <li></li> 
    6163        </ul> 
     64 
    6265 
    6366        ${display_set_display(href)} 
     
    7881          <label for="author">Author:</label><br/> 
    7982          <py:choose> 
    80             <input py:when="discussion.authname == 'anonymous'" type="text" name="author" value="${req.args.author or 'anonymous'}"/> 
    81             <input py:otherwise="" type="text" name="author" value="${discussion.authname}" readonly="true"/> 
     83            <input py:when="discussion.authname == 'anonymous'" type="text" id="author" name="author" value="${req.args.author or 'anonymous'}"/> 
     84            <input py:otherwise="" type="text" id="author" name="author" value="${discussion.authname}" readonly="readonly"/> 
    8285          </py:choose><br/> 
    8386        </div> 
     
    8689          <label for="subject">Subject:</label><br/> 
    8790          <py:choose> 
    88             <input py:when="discussion.realm == 'discussion-wiki'" type="text" id="subject" name="subject" value="${req.args.subject}" readonly="true"/> 
     91            <input py:when="discussion.realm == 'discussion-wiki'" type="text" id="subject" name="subject" value="${req.args.subject}" readonly="readonly"/> 
    8992            <input py:otherwise="" type="text" id="subject" name="subject" value="${req.args.subject}"/> 
    9093          </py:choose><br/> 
     
    172175          <py:if test="req.args.discussion_action in ('add', 'quote', 'post-add')"> 
    173176            ${display_preview()} 
    174             ${display_form(href, 'Reply:', 'add_form', 'post-add')} 
     177            <li> 
     178              ${display_form(href, 'Reply:', 'add_form', 'post-add')} 
     179            </li> 
    175180          </py:if> 
     181 
    176182          <py:if test="req.args.discussion_action in ('edit', 'post-edit')"> 
    177             ${display_form(href, 'Edit:', 'edit_form', 'post-edit')} 
     183            <li> 
     184              ${display_form(href, 'Edit:', 'edit_form', 'post-edit')} 
     185            </li> 
    178186          </py:if> 
    179187        </py:if> 
     
    182190          ${display_messages(href, message.replies)} 
    183191        </py:if> 
     192        <li></li> 
    184193      </ul> 
    185194 
  • discussionplugin/0.11/tracdiscussion/templates/forum-list.html

    r2353 r2365  
    3131          <tr py:if="forum.group == group.id" class="${line % 2 and 'even' or 'odd'}"> 
    3232            <td class="id"> 
    33               <a href="${href.discussion(forum.id)}"> 
    34                 <div class="id">${forum.id}</div> 
    35               </a> 
     33              <div class="id"> 
     34                 <a href="${href.discussion(forum.id)}"> 
     35                   <span>${forum.id}</span> 
     36                 </a> 
     37              </div> 
    3638            </td> 
    3739            <td class="title"> 
    38               <a href="${href.discussion(forum.id)}"> 
    39                 <div class="subject">${forum.subject or '&nbsp;'}</div> 
    40                 <div class="description">${forum.description or '&nbsp;'}</div> 
    41               </a> 
     40              <div class="subject"> 
     41                <a href="${href.discussion(forum.id)}"> 
     42                  <span>${forum.subject or '&nbsp;'}</span> 
     43                </a> 
     44              </div> 
     45              <div class="description"> 
     46                <a href="${href.discussion(forum.id)}"> 
     47                  <span>${forum.description or '&nbsp;'}</span> 
     48                </a> 
     49              </div> 
    4250            </td> 
    4351            <td class="moderators"> 
    44               <a href="${href.discussion(forum.id)}"> 
    45                 <div class="moderators">${forum.moderators or '&nbsp;'}</div> 
    46               </a> 
     52              <div class="moderators"> 
     53                <a href="${href.discussion(forum.id)}"> 
     54                  <span>${forum.moderators or '&nbsp;'}</span> 
     55                </a> 
     56              </div> 
    4757            </td> 
    4858            <td class="lasttopic"> 
    49               <a href="${href.discussion(forum.id)}"> 
    50                 <div class="lasttopic">${forum.lasttopic or '&nbsp;'}</div> 
    51               </a> 
     59              <div class="lasttopic"> 
     60                <a href="${href.discussion(forum.id)}"> 
     61                  <span>${forum.lasttopic or '&nbsp;'}</span> 
     62                </a> 
     63              </div> 
    5264            </td> 
    5365            <td class="lastreply"> 
    54               <a href="${href.discussion(forum.id)}"> 
    55                 <div class="lastreply">${forum.lastreply or '&nbsp;'}</div> 
    56               </a> 
     66              <div class="lastreply"> 
     67                <a href="${href.discussion(forum.id)}"> 
     68                  <span>${forum.lastreply or '&nbsp;'}</span> 
     69                </a> 
     70              </div> 
    5771            </td> 
    5872            <td class="founded"> 
    59               <a href="${href.discussion(forum.id)}"> 
    60               <div class="founded">${forum.time or '&nbsp;'}</div> 
    61               </a> 
     73              <div class="founded"> 
     74                <a href="${href.discussion(forum.id)}"> 
     75                  <span>${forum.time or '&nbsp;'}</span> 
     76                </a> 
     77              </div> 
    6278            </td> 
    6379            <td class="topics"> 
    64               <a href="${href.discussion(forum.id)}"> 
    65                 <div class="topics">${forum.topics or '0'}</div> 
    66               </a> 
     80              <div class="topics"> 
     81                <a href="${href.discussion(forum.id)}"> 
     82                  <span>${forum.topics or '0'}</span> 
     83                </a> 
     84              </div> 
    6785            </td> 
    6886            <td class="replies"> 
    69               <a href="${href.discussion(forum.id)}"> 
    70                 <div class="replies">${forum.replies or '0'}</div> 
    71               </a> 
     87              <div class="replies"> 
     88                <a href="${href.discussion(forum.id)}"> 
     89                  <span>${forum.replies or '0'}</span> 
     90                </a> 
     91              </div> 
    7292            </td> 
    7393          </tr> 
     
    96116        <div py:if="'DISCUSSION_ADMIN' in perm(context)" class="buttons"> 
    97117          <form method="post" action="${href.discussion()}"> 
    98             <input type="submit" name="newforum" value="New Forum"/> 
    99             <input type="hidden" name="discussion_action" value="add"/> 
     118            <div> 
     119              <input type="submit" name="newforum" value="New Forum"/> 
     120              <input type="hidden" name="discussion_action" value="add"/> 
     121            </div> 
    100122          </form> 
    101123        </div> 
  • discussionplugin/0.11/tracdiscussion/templates/topic-add.html

    r2353 r2365  
    4646              <label for="author">Author:</label><br/> 
    4747              <py:choose> 
    48                 <input py:when="discussion.authname == 'anonymous'" type="text" name="author" value="${req.args.author or 'anonymous'}"/> 
    49                 <input py:otherwise="" type="text" name="author" value="${discussion.authname}" readonly="true"/> 
     48                <input py:when="discussion.authname == 'anonymous'" type="text" id="author" name="author" value="${req.args.author or 'anonymous'}"/> 
     49                <input py:otherwise="" type="text" id="author" name="author" value="${discussion.authname}" readonly="readonly"/> 
    5050              </py:choose><br/> 
    5151            </div> 
     
    5353            <div class="field"> 
    5454              <label for="subject">Subject:</label><br/> 
    55               <input type="text" name="subject" value="${req.args.subject}"/><br/> 
     55              <input type="text" id="subject" name="subject" value="${req.args.subject}"/><br/> 
    5656            </div> 
    5757 
  • discussionplugin/0.11/tracdiscussion/templates/topic-list.html

    r2353 r2365  
    3232              <tr py:for="line, topic in enumerate(discussion.topics)" class="${line % 2 and 'even' or 'odd'}"> 
    3333                <td class="id"> 
    34                   <a href="${href.discussion(discussion.forum.id, topic.id)}"> 
    35                     <div class="id">${topic.id}</div> 
    36                   </a> 
     34                  <div class="id"> 
     35                    <a href="${href.discussion(discussion.forum.id, topic.id)}"> 
     36                      <span>${topic.id}</span> 
     37                    </a> 
     38                  </div> 
    3739                </td> 
    3840                <td class="subject"> 
    39                   <a href="${href.discussion(discussion.forum.id, topic.id)}"> 
    40                     <div class="subject">${topic.subject or '&nbsp;'}</div> 
    41                   </a> 
     41                  <div class="subject"> 
     42                    <a href="${href.discussion(discussion.forum.id, topic.id)}"> 
     43                      <span>${topic.subject or '&nbsp;'}</span> 
     44                    </a> 
     45                  </div> 
    4246                </td> 
    4347                <td class="author"> 
    44                   <a href="${href.discussion(discussion.forum.id, topic.id)}"> 
    45                     <div class="author">${topic.author or '&nbsp;'}</div> 
    46                   </a> 
     48                  <div class="author"> 
     49                    <a href="${href.discussion(discussion.forum.id, topic.id)}"> 
     50                      <span>${topic.author or '&nbsp;'}</span> 
     51                    </a> 
     52                  </div> 
    4753                </td> 
    4854                <td class="lastreply"> 
    49                   <a href="${href.discussion(discussion.forum.id, topic.id)}"> 
    50                     <div class="lastreply">${topic.lastreply or '&nbsp;'}</div> 
    51                   </a> 
     55                  <div class="lastreply"> 
     56                    <a href="${href.discussion(discussion.forum.id, topic.id)}"> 
     57                      <span>${topic.lastreply or '&nbsp;'}</span> 
     58                    </a> 
     59                  </div> 
    5260                </td> 
    5361                <td class="founded"> 
    54                   <a href="${href.discussion(discussion.forum.id, topic.id)}"> 
    55                     <div class="founded">${topic.time or '&nbsp;'}</div> 
    56                   </a> 
     62                  <div class="founded"> 
     63                    <a href="${href.discussion(discussion.forum.id, topic.id)}"> 
     64                      <span>${topic.time or '&nbsp;'}</span> 
     65                    </a> 
     66                  </div> 
    5767                </td> 
    5868                <td class="replies"> 
    59                   <a href="${href.discussion(discussion.forum.id, topic.id)}"> 
    60                     <div class="replies">${topic.replies or '0'}</div> 
    61                   </a> 
     69                  <div class="replies"> 
     70                    <a href="${href.discussion(discussion.forum.id, topic.id)}"> 
     71                      <span>${topic.replies or '0'}</span> 
     72                    </a> 
     73                  </div> 
    6274                </td> 
    6375              </tr> 
     
    6981        <div class="buttons"> 
    7082          <form py:if="'DISCUSSION_APPEND' in perm(context)" method="post" action="${href.discussion(discussion.forum.id)}"> 
    71             <input type="submit" name="newtopic" value="New Topic"/> 
    72             <input type="hidden" name="forum" value="${discussion.forum.id}"/> 
    73             <input type="hidden" name="discussion_action" value="add"/> 
     83            <div> 
     84              <input type="submit" name="newtopic" value="New Topic"/> 
     85              <input type="hidden" name="forum" value="${discussion.forum.id}"/> 
     86              <input type="hidden" name="discussion_action" value="add"/> 
     87            </div> 
    7488          </form> 
    7589          <form py:if="'DISCUSSION_ADMIN' in perm(context)" method="post" action="${href.discussion()}"> 
    76             <input type="submit" name="deleteforum" value="Delete Forum" onclick="return confirm('Do you realy want to delete this forum?')"/> 
    77             <input type="hidden" name="forum" value="${discussion.forum.id}"/> 
    78             <input type="hidden" name="discussion_action" value="delete"/> 
     90            <div> 
     <