Changeset 2365
- Timestamp:
- 07/02/07 14:46:31 (1 year ago)
- Files:
-
- discussionplugin/0.11/tracdiscussion/api.py (modified) (33 diffs)
- discussionplugin/0.11/tracdiscussion/notification.py (modified) (1 diff)
- discussionplugin/0.11/tracdiscussion/templates/admin-forum-list.html (modified) (1 diff)
- discussionplugin/0.11/tracdiscussion/templates/admin-group-list.html (modified) (2 diffs)
- discussionplugin/0.11/tracdiscussion/templates/discussion-footer.html (modified) (1 diff)
- discussionplugin/0.11/tracdiscussion/templates/discussion-header.html (modified) (2 diffs)
- discussionplugin/0.11/tracdiscussion/templates/discussion-macros.html (modified) (6 diffs)
- discussionplugin/0.11/tracdiscussion/templates/forum-list.html (modified) (2 diffs)
- discussionplugin/0.11/tracdiscussion/templates/topic-add.html (modified) (2 diffs)
- discussionplugin/0.11/tracdiscussion/templates/topic-list.html (modified) (2 diffs)
- discussionplugin/0.11/tracdiscussion/templates/wiki-discussion-denied.html (modified) (1 diff)
- discussionplugin/0.11/tracdiscussion/templates/wiki-discussion-footer.html (modified) (1 diff)
- discussionplugin/0.11/tracdiscussion/templates/wiki-discussion-header.html (modified) (1 diff)
- discussionplugin/0.11/tracdiscussion/templates/wiki-discussion-missing.html (modified) (1 diff)
- discussionplugin/0.11/tracdiscussion/templates/wiki-message-list.html (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
discussionplugin/0.11/tracdiscussion/api.py
r2352 r2365 1 1 # -*- coding: utf8 -*- 2 2 3 import time, datetime 3 from datetime import * 4 4 5 5 from trac.core import * … … 7 7 from trac.wiki.formatter import format_to_html, format_to_oneliner 8 8 from trac.perm import PermissionError 9 from trac.util.datefmt import format_datetime, pretty_timedelta, FixedOffset 9 from trac.util.datefmt import to_timestamp, to_datetime, utc, \ 10 format_datetime, pretty_timedelta 10 11 11 12 from genshi.template import TemplateLoader 12 13 13 14 from tracdiscussion.notification import * 14 15 utc = FixedOffset(0, 'UTC')16 15 17 16 class DiscussionApi(object): … … 26 25 group, forum, topic, message = self._get_items(context) 27 26 modes = self._get_modes(context, group, forum, topic, message) 28 29 # Debug30 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)35 27 36 28 # Determine moderator rights. … … 59 51 self.data['message'] = message 60 52 self.data['mode'] = modes[-1] 61 self.data['time'] = format_datetime(datetime. datetime.now(utc))53 self.data['time'] = format_datetime(datetime.now(utc)) 62 54 self.data['realm'] = context.realm 63 55 … … 84 76 85 77 # Return template and data. 78 context.env.log.debug(self.data) 86 79 return modes[-1] + '.html', {'discussion' : self.data} 87 80 … … 492 485 new_author = context.req.args.get('author') 493 486 new_body = context.req.args.get('body') 494 new_time = int(time.time())487 new_time = to_timestamp(datetime.now(utc)) 495 488 496 489 # Add topic. … … 587 580 new_author = context.req.args.get('author') 588 581 new_body = context.req.args.get('body') 589 new_time = int(time.time())582 new_time = to_timestamp(datetime.now(utc)) 590 583 591 584 # Add message. … … 654 647 655 648 # 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)) 657 650 context.req.session['visited-topics'] = unicode(visited) 658 651 … … 685 678 686 679 def get_message(self, context, id): 680 id = unicode(id) 687 681 columns = ('id', 'forum', 'topic', 'replyto', 'time', 'author', 'body') 688 682 sql = "SELECT id, forum, topic, replyto, time, author, body FROM" \ 689 683 " message WHERE id = %s" 690 context.cursor.execute(sql, (id,)) 684 context.env.log.debug(sql % (id)) 685 context.cursor.execute(sql, (id)) 691 686 for row in context.cursor: 692 687 row = dict(zip(columns, row)) … … 698 693 sql = "SELECT id, forum, topic, replyto, time, author, body FROM" \ 699 694 " message WHERE time = %s" 700 context.cursor.execute(sql, (time,)) 695 context.env.log.debug(sql % (time)) 696 context.cursor.execute(sql, (time)) 701 697 for row in context.cursor: 702 698 row = dict(zip(columns, row)) … … 705 701 706 702 def get_topic(self, context, id): 703 id = unicode(id) 707 704 columns = ('id', 'forum', 'subject', 'time', 'author', 'body') 708 705 sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 709 706 " id = %s" 710 context.cursor.execute(sql, (id,)) 707 context.env.log.debug(sql % (id)) 708 context.cursor.execute(sql, (id)) 711 709 for row in context.cursor: 712 710 row = dict(zip(columns, row)) … … 718 716 sql = "SELECT id, forum, subject, time, author, body FROM topic WHERE" \ 719 717 " time = %s" 720 721 context.cursor.execute(sql, (time ,))718 context.env.log.debug(sql % (time)) 719 context.cursor.execute(sql, (time)) 722 720 for row in context.cursor: 723 721 row = dict(zip(columns, row)) … … 728 726 columns = ('id', 'forum', 'subject', 'time', 'author', 'body') 729 727 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)) 732 731 for row in context.cursor: 733 732 row = dict(zip(columns, row)) … … 736 735 737 736 def get_topic_to_recipients(self, context, id): 737 id = unicode(id) 738 738 sql = "SELECT t.author FROM topic t WHERE t.id = %s UNION SELECT" \ 739 739 " m.author FROM message m WHERE m.topic = %s" 740 context.env.log.debug(sql % (id, id)) 740 741 context.cursor.execute(sql, (id, id)) 741 742 to_recipients = [] … … 748 749 749 750 def get_forum(self, context, id): 751 id = unicode(id) 750 752 columns = ('id', 'group', 'name', 'subject', 'time', 'moderators', 751 753 'description') 752 754 sql = "SELECT id, forum_group, name, subject, time, moderators," \ 753 755 " 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)) 755 758 for row in context.cursor: 756 759 row = dict(zip(columns, row)) … … 760 763 761 764 def get_group(self, context, id): 765 id = unicode(id) 762 766 columns = ('id', 'name', 'description') 763 767 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)) 766 770 for row in context.cursor: 767 771 row = dict(zip(columns, row)) … … 775 779 group = '0' 776 780 sql = "UPDATE forum SET forum_group = %s WHERE id = %s" 781 context.env.log.debug(sql % (group, forum)) 777 782 context.cursor.execute(sql, (group, forum)) 778 783 779 784 def set_forum(self, context, topic, forum): 780 785 sql = "UPDATE topic SET forum = %s WHERE id = %s" 786 context.env.log.debug(sql % (forum, topic)) 781 787 context.cursor.execute(sql, (forum, topic)) 782 788 sql = "UPDATE message SET forum = %s WHERE topic = %s" 789 context.env.log.debug(sql % (forum, topic)) 783 790 context.cursor.execute(sql, (forum, topic)) 784 791 … … 787 794 def edit_group(self, context, group, name, description): 788 795 sql = "UPDATE forum_group SET name = %s, description = %s WHERE id = %s" 796 context.env.log.debug(sql % (name, description, group)) 789 797 context.cursor.execute(sql, (name, description, group)) 790 798 … … 796 804 sql = "UPDATE forum SET name = %s, subject = %s, description = %s," \ 797 805 " moderators = %s, forum_group = %s WHERE id = %s" 806 context.env.log.debug(sql % (name, subject, description, moderators, 807 group, forum)) 798 808 context.cursor.execute(sql, (name, subject, description, moderators, 799 809 group, forum)) … … 802 812 sql = "UPDATE topic SET forum = %s, subject = %s, body = %s WHERE id" \ 803 813 " = %s" 814 context.env.log.debug(sql % (forum, subject, body, topic)) 804 815 context.cursor.execute(sql, (forum, subject, body, topic)) 805 816 … … 807 818 sql = "UPDATE message SET forum = %s, topic = %s, replyto = %s, body" \ 808 819 " = %s WHERE id = %s" 820 context.env.log.debug(sql % (forum, topic, replyto, body, message)) 809 821 context.cursor.execute(sql, (forum, topic, replyto, body, message)) 810 822 … … 814 826 # Get count of forums without group 815 827 sql = "SELECT COUNT(f.id) FROM forum f WHERE f.forum_group = 0" 828 context.env.log.debug(sql) 816 829 context.cursor.execute(sql) 817 830 no_group_forums = 0 … … 830 843 " f.forum_group ORDER BY " + order_by + (" ASC", 831 844 " DESC")[bool(desc)] 845 context.env.log.debug(sql) 832 846 context.cursor.execute(sql) 833 847 for row in context.cursor: … … 853 867 "t.id = ma.topic GROUP BY forum) ta ON f.id = ta.forum ORDER BY " + \ 854 868 order_by + (" ASC", " DESC")[bool(desc)] 869 context.env.log.debug(sql) 855 870 context.cursor.execute(sql) 856 871 forums = [] … … 860 875 row['subject'] = format_to_oneliner(context, row['subject']) 861 876 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' 866 881 row['topics'] = row['topics'] or 0 867 882 row['replies'] = row['replies'] and int(row['replies']) or 0 … … 880 895 " topic) m ON t.id = m.topic WHERE t.forum = %s ORDER BY " \ 881 896 + 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)) 884 899 topics = [] 885 900 for row in context.cursor: 886 901 row = dict(zip(columns, row)) 887 902 row['author'] = format_to_oneliner(context, row['author']) 903 row['subject'] = format_to_oneliner(context, row['subject']) 888 904 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' 891 907 row['replies'] = row['replies'] or 0 892 908 row['time'] = format_datetime(row['time']) … … 899 915 sql = "SELECT m.id, m.replyto, m.time, m.author, m.body FROM message m WHERE" \ 900 916 " 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)) 902 919 messagemap = {} 903 920 messages = [] … … 930 947 sql = "SELECT m.id, m.replyto, m.time, m.author, m.body FROM message m" \ 931 948 " 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)) 933 951 messages = [] 934 952 for row in context.cursor: … … 952 970 def add_group(self, context, name, description): 953 971 sql = "INSERT INTO forum_group (name, description) VALUES (%s, %s)" 972 context.env.log.debug(sql % (name, description)) 954 973 context.cursor.execute(sql, (name, description)) 955 974 … … 959 978 sql = "INSERT INTO forum (name, author, time, moderators, subject," \ 960 979 " 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)) 963 984 964 985 def add_topic(self, context, forum, subject, time, author, body): 965 986 sql = "INSERT INTO topic (forum, subject, time, author, body) VALUES" \ 966 987 " (%s, %s, %s, %s, %s)" 988 context.env.log.debug(sql % (forum, subject, time, author, body)) 967 989 context.cursor.execute(sql, (forum, subject, time, author, body)) 968 990 … … 970 992 sql = "INSERT INTO message (forum, topic, replyto, time, author," \ 971 993 " body) VALUES (%s, %s, %s, %s, %s, %s)" 994 context.env.log.debug(sql % (forum, topic, replyto, time, author, body)) 972 995 context.cursor.execute(sql, (forum, topic, replyto, time, author, body)) 973 996 … … 976 999 def delete_group(self, context, group): 977 1000 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)) 979 1003 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)) 981 1006 982 1007 def delete_forum(self, context, forum): 983 1008 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)) 985 1011 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)) 987 1014 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)) 989 1017 990 1018 def delete_topic(self, context, topic): 991 1019 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)) 993 1022 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)) 995 1025 996 1026 def delete_message(self, context, message): 997 1027 # Get message replies 998 1028 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)) 1000 1031 replies = [] 1001 1032 … … 1010 1041 # Delete message itself 1011 1042 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 13 13 class DiscussionNotifyEmail(NotifyEmail): 14 14 15 template_name = "discussion-notify-body.txt"15 template_name = 'discussion-notify-body.txt' 16 16 forum = None 17 17 topic = None discussionplugin/0.11/tracdiscussion/templates/admin-forum-list.html
r2353 r2365 94 94 </td> 95 95 <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> 99 101 </td> 100 102 <td class="name"> 101 <a href="${panel_href(forum.id)}"> 102 <div class="name">${forum.name or ' '}</div> 103 </a> 103 <div class="name"> 104 <a href="${panel_href(forum.id)}"> 105 <span>${forum.name or ' '}</span> 106 </a> 107 </div> 104 108 </td> 105 109 <td class="subject"> 106 <a href="${panel_href(forum.id)}"> 107 <div class="subject">${forum.subject or ' '}</div> 108 </a> 110 <div class="subject"> 111 <a href="${panel_href(forum.id)}"> 112 <span>${forum.subject or ' '}</span> 113 </a> 114 </div> 109 115 </td> 110 116 <td class="description"> 111 <a href="${panel_href(forum.id)}"> 112 <div class="description">${forum.description or ' '}</div> 113 </a> 117 <div class="description"> 118 <a href="${panel_href(forum.id)}"> 119 <span>${forum.description or ' '}</span> 120 </a> 121 </div> 114 122 </td> 115 123 <td class="moderators"> 116 <a href="${panel_href(forum.id)}"> 117 <div class="moderators">${forum.moderators or ' '}</div> 118 </a> 124 <div class="moderators"> 125 <a href="${panel_href(forum.id)}"> 126 <span>${forum.moderators or ' '}</span> 127 </a> 128 </div> 119 129 </td> 120 130 <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> 124 136 </td> 125 137 </tr> discussionplugin/0.11/tracdiscussion/templates/admin-group-list.html
r2353 r2365 19 19 <div class="field"> 20 20 <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/> 22 22 </div> 23 23 24 24 <div class="field"> 25 25 <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/> 27 27 </div> 28 28 … … 54 54 </td> 55 55 <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> 59 61 </td> 60 62 <td class="name"> 61 <a href="${panel_href(group.id)}"> 62 <div class="name">${group.name or ' '}</div> 63 </a> 63 <div class="name"> 64 <a href="${panel_href(group.id)}"> 65 <span>${group.name or ' '}</span> 66 </a> 67 </div> 64 68 </td> 65 69 <td class="description"> 66 <a href="${panel_href(group.id)}"> 67 <div class="description">${group.description or ' '}</div> 68 </a> 70 <div class="description"> 71 <a href="${panel_href(group.id)}"> 72 <span>${group.description or ' '}</span> 73 </a> 74 </div> 69 75 </td> 70 76 </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=""> 3 2 </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=""> 3 2 <div id="ctxtnav" class="nav"> 4 3 <h2>Discussion Navigation</h2> 5 <ul >4 <ul py:if="discussion.forum"> 6 5 <li py:if="discussion.forum" class="${discussion.topic and None or 'last'}"> 7 6 <a href="${href.discussion()}"> … … 11 10 <li py:if="discussion.topic" class="${discussion.message and None or 'last'}"> 12 11 <a href="${href.discussion(discussion.forum.id)}"> 13 ${discussion.forum.subject}12 <span>${discussion.forum.subject}</span> 14 13 </a> 15 14 </li> 16 15 <li py:if="discussion.message" class="last"> 17 16 <a href="${href.discussion(discussion.forum.id, discussion.topic.id)}"> 18 ${discussion.topic.subject}17 <span>${discussion.topic.subject}</span> 19 18 </a> 20 19 </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=""> 3 2 4 3 <py:def function="sortable_th(order, desc, Class, title, href)"> … … 57 56 <py:if test="(str(req.args.message) == '-1') and (req.args.discussion_action in ('add', 'quote', 'post-add')) and (not req.args.submit)"> 58 57 ${display_preview()} 59 ${display_form(href, 'Reply:', 'add_form', 'post-add')} 58 <li> 59 ${display_form(href, 'Reply:', 'add_form', 'post-add')} 60 </li> 60 61 </py:if> 62 <li></li> 61 63 </ul> 64 62 65 63 66 ${display_set_display(href)} … … 78 81 <label for="author">Author:</label><br/> 79 82 <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"/> 82 85 </py:choose><br/> 83 86 </div> … … 86 89 <label for="subject">Subject:</label><br/> 87 90 <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"/> 89 92 <input py:otherwise="" type="text" id="subject" name="subject" value="${req.args.subject}"/> 90 93 </py:choose><br/> … … 172 175 <py:if test="req.args.discussion_action in ('add', 'quote', 'post-add')"> 173 176 ${display_preview()} 174 ${display_form(href, 'Reply:', 'add_form', 'post-add')} 177 <li> 178 ${display_form(href, 'Reply:', 'add_form', 'post-add')} 179 </li> 175 180 </py:if> 181 176 182 <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> 178 186 </py:if> 179 187 </py:if> … … 182 190 ${display_messages(href, message.replies)} 183 191 </py:if> 192 <li></li> 184 193 </ul> 185 194 discussionplugin/0.11/tracdiscussion/templates/forum-list.html
r2353 r2365 31 31 <tr py:if="forum.group == group.id" class="${line % 2 and 'even' or 'odd'}"> 32 32 <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> 36 38 </td> 37 39 <td class="title"> 38 <a href="${href.discussion(forum.id)}"> 39 <div class="subject">${forum.subject or ' '}</div> 40 <div class="description">${forum.description or ' '}</div> 41 </a> 40 <div class="subject"> 41 <a href="${href.discussion(forum.id)}"> 42 <span>${forum.subject or ' '}</span> 43 </a> 44 </div> 45 <div class="description"> 46 <a href="${href.discussion(forum.id)}"> 47 <span>${forum.description or ' '}</span> 48 </a> 49 </div> 42 50 </td> 43 51 <td class="moderators"> 44 <a href="${href.discussion(forum.id)}"> 45 <div class="moderators">${forum.moderators or ' '}</div> 46 </a> 52 <div class="moderators"> 53 <a href="${href.discussion(forum.id)}"> 54 <span>${forum.moderators or ' '}</span> 55 </a> 56 </div> 47 57 </td> 48 58 <td class="lasttopic"> 49 <a href="${href.discussion(forum.id)}"> 50 <div class="lasttopic">${forum.lasttopic or ' '}</div> 51 </a> 59 <div class="lasttopic"> 60 <a href="${href.discussion(forum.id)}"> 61 <span>${forum.lasttopic or ' '}</span> 62 </a> 63 </div> 52 64 </td> 53 65 <td class="lastreply"> 54 <a href="${href.discussion(forum.id)}"> 55 <div class="lastreply">${forum.lastreply or ' '}</div> 56 </a> 66 <div class="lastreply"> 67 <a href="${href.discussion(forum.id)}"> 68 <span>${forum.lastreply or ' '}</span> 69 </a> 70 </div> 57 71 </td> 58 72 <td class="founded"> 59 <a href="${href.discussion(forum.id)}"> 60 <div class="founded">${forum.time or ' '}</div> 61 </a> 73 <div class="founded"> 74 <a href="${href.discussion(forum.id)}"> 75 <span>${forum.time or ' '}</span> 76 </a> 77 </div> 62 78 </td> 63 79 <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> 67 85 </td> 68 86 <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> 72 92 </td> 73 93 </tr> … … 96 116 <div py:if="'DISCUSSION_ADMIN' in perm(context)" class="buttons"> 97 117 <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> 100 122 </form> 101 123 </div> discussionplugin/0.11/tracdiscussion/templates/topic-add.html
r2353 r2365 46 46 <label for="author">Author:</label><br/> 47 47 <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"/> 50 50 </py:choose><br/> 51 51 </div> … … 53 53 <div class="field"> 54 54 <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/> 56 56 </div> 57 57 discussionplugin/0.11/tracdiscussion/templates/topic-list.html
r2353 r2365 32 32 <tr py:for="line, topic in enumerate(discussion.topics)" class="${line % 2 and 'even' or 'odd'}"> 33 33 <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> 37 39 </td> 38 40 <td class="subject"> 39 <a href="${href.discussion(discussion.forum.id, topic.id)}"> 40 <div class="subject">${topic.subject or ' '}</div> 41 </a> 41 <div class="subject"> 42 <a href="${href.discussion(discussion.forum.id, topic.id)}"> 43 <span>${topic.subject or ' '}</span> 44 </a> 45 </div> 42 46 </td> 43 47 <td class="author"> 44 <a href="${href.discussion(discussion.forum.id, topic.id)}"> 45 <div class="author">${topic.author or ' '}</div> 46 </a> 48 <div class="author"> 49 <a href="${href.discussion(discussion.forum.id, topic.id)}"> 50 <span>${topic.author or ' '}</span> 51 </a> 52 </div> 47 53 </td> 48 54 <td class="lastreply"> 49 <a href="${href.discussion(discussion.forum.id, topic.id)}"> 50 <div class="lastreply">${topic.lastreply or ' '}</div> 51 </a> 55 <div class="lastreply"> 56 <a href="${href.discussion(discussion.forum.id, topic.id)}"> 57 <span>${topic.lastreply or ' '}</span> 58 </a> 59 </div> 52 60 </td> 53 61 <td class="founded"> 54 <a href="${href.discussion(discussion.forum.id, topic.id)}"> 55 <div class="founded">${topic.time or ' '}</div> 56 </a> 62 <div class="founded"> 63 <a href="${href.discussion(discussion.forum.id, topic.id)}"> 64 <span>${topic.time or ' '}</span> 65 </a> 66 </div> 57 67 </td> 58 68 <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> 62 74 </td> 63 75 </tr> … … 69 81 <div class="buttons"> 70 82 <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> 74 88 </form> 75 89 <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>
