]> git.openstreetmap.org Git - osqa.git/commitdiff
OSQA-266
authorqw3rty <qw3rty@0cfe37f9-358a-4d5e-be75-b63607b5c754>
Fri, 16 Jul 2010 14:42:51 +0000 (14:42 +0000)
committerqw3rty <qw3rty@0cfe37f9-358a-4d5e-be75-b63607b5c754>
Fri, 16 Jul 2010 14:42:51 +0000 (14:42 +0000)
Put focus on comment text area when clicking "Add new comment"

git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@535 0cfe37f9-358a-4d5e-be75-b63607b5c754

forum/skins/default/media/style/style.css
forum/skins/default/templates/question_list/subscription_item.html [new file with mode: 0644]
forum/skins/default/templates/users/subscriptions.html
forum/skins/default/templates/users/subscriptions_management.html [new file with mode: 0644]
forum/skins/default/templates/users/subscriptions_settings.html [new file with mode: 0644]
forum/templatetags/question_list_tags.py
forum/urls.py
forum/views/users.py

index 3d7ee23601ebc9655d893936c704faf16bf49880..409ce5abecbe7185cd72d5fd9760579c243bac4b 100644 (file)
@@ -1521,6 +1521,10 @@ a.comment-edit:hover {
     background: url("../images/comment-edit-hover.png") no-repeat scroll center center transparent;
 }
 
+img.subscription-remove {
+    float:right;
+}
+
 .comment-form-container {
     display: none;
     padding-top: 12px;
@@ -1748,3 +1752,63 @@ div.dialog.prompt .dialog-content select, div.dialog.prompt .dialog-content text
     height: 14px;
     display: inline-block;
 }
+
+div#subscription_list {
+    width: 500px;
+    float:left;
+}
+
+div.subscription_summary {
+    border-top: 2px dotted #CCCCCE;
+    overflow: hidden;
+    padding: 3px 0px 5px 0;
+    position: relative;
+    width:100%;
+    margin-bottom:30px;
+}
+
+div.subscription_title {
+    float:left;
+
+    width:350px;
+
+    line-height:30px;
+
+    font-size: 25px;
+    font-weight:bold;
+    font-family: Arial;
+}
+
+a.subscription_unsubscribe_button {
+    float:left;
+    font-size: 15px;
+    font-weight:bold;
+
+    margin-right:15px;
+    margin-top:5px;
+}
+
+div.subscription_userinfo {
+    float:right;
+}
+
+div.subscription_tags {
+    font-family: sans-serif;
+    float:left;
+}
+div.subscription_tags a, span.tag {
+    background-color: #EEEEEE;
+    border-bottom: 1px solid #CCCCCC;
+    border-right: 1px solid #CCCCCC;
+    color: #777777;
+    font-size: 11px;
+    font-weight: normal;
+    padding: 1px 8px;
+    text-decoration: none;
+    white-space: nowrap;
+}
+div.subscription_tags a:hover {
+    background-color: #356FCB;
+    color: #FFFFFF;
+}
+
diff --git a/forum/skins/default/templates/question_list/subscription_item.html b/forum/skins/default/templates/question_list/subscription_item.html
new file mode 100644 (file)
index 0000000..2aec8e6
--- /dev/null
@@ -0,0 +1,11 @@
+
+
+
+{% load i18n humanize extra_filters extra_tags user_tags %}
+<div class="subscription_summary">
+    <div style="height:100%"><a class="sidebar_button subscription_unsubscribe_button" href="{% url subscribe id=question.id %}">
+        {% trans "Unsubscribe" %}
+    </a></div>
+
+    <div class="subscription_title"><a title="{{ question.summary }}" href="{{ question.get_absolute_url }}">{{question.headline}}</a></div>
+</div>
\ No newline at end of file
index a6a93e3c5ea2cdd93f18ae6e618d4b7b94950dfd..6785cbd4b5a22b10501663d76dd05a5ce9ba135c 100644 (file)
-{% extends "user.html" %}\r
-<!-- user_subscriptions.html -->\r
-{% load i18n %}\r
-{% load extra_tags %}\r
-{% load humanize %}\r
-\r
-{% block usercontent %}\r
-    <h2>{% trans "Notifications and subscription settings" %}</h2>\r
-    <p class="message">\r
-        {% blocktrans %}\r
-        Here you can decide which types of notifications you wish to receive, and their frequency.<br />\r
-        {% endblocktrans %}\r
-        {% if notificatons_on %}\r
-        {% blocktrans %}\r
-        Currently you have notifications enabled. You can always stop all notifications without losing your settings and restart them afterwards.<br />\r
-        {% endblocktrans %}\r
-        {% else %}\r
-        {% blocktrans %}\r
-        Currently you have notifications disabled. You can enable them by clicking on the <strong>Start notifications</strong> button below.<br />\r
-        {% endblocktrans %}\r
-        {% endif %}\r
-    </p>\r
-    <div class='inline-block'>\r
-    <form method="POST">\r
-        {{ form.errors }}\r
-        <table class="form-as-table">\r
-            <tr>\r
-                <td colspan="2">\r
-                    <strong>{% trans "Notify me when:" %}</strong>\r
-                </td>\r
-            </tr>\r
-            <tr>\r
-                <td>{% trans "A new member joins" %}</td>\r
-                <td>{{ form.member_joins }}</td>\r
-            </tr>\r
-            <tr>\r
-                <td>{% trans "A new question is posted" %}</td>\r
-                <td>{{ form.new_question }}</td>\r
-            </tr>\r
-            <tr>\r
-                <td>{% trans "A new question matching my interesting tags is posted" %}</td>\r
-                <td>{{ form.new_question_watched_tags }}</td>\r
-            </tr>\r
-            <tr>\r
-                <td>{% trans "There's an update on one of my subscriptions" %}</td>\r
-                <td >{{ form.subscribed_questions }}</td>\r
-            </tr>\r
-        </table>\r
-        <p>&nbsp;</p>\r
-        <table class="form-as-table check-table">\r
-            <tr>\r
-                <td colspan="3">\r
-                    <strong>{% trans "Auto subscribe me to:" %}</strong>\r
-                </td>\r
-            </tr>\r
-            <tr>\r
-                <td>\r
-                    {{ form.questions_asked }}{% trans "Questions I ask" %}\r
-                </td>\r
-                <td>\r
-                    {{ form.questions_answered }}{% trans "Questions I answer" %}\r
-                </td>\r
-                <td>\r
-                    {{ form.questions_commented }}{% trans "Questions I comment" %}\r
-                </td>\r
-            </tr>\r
-            <tr>                \r
-                <td>\r
-                    {{ form.questions_viewed }}{% trans "Questions I view" %}\r
-                </td>\r
-                <td>\r
-                    {{ form.all_questions_watched_tags }}{% trans "All questions matching my interesting tags" %}\r
-                </td>\r
-                <td>\r
-                    {{ form.all_questions }}{% trans "All questions" %}\r
-                </td>\r
-            </tr>\r
-        </table>\r
-        <p>&nbsp;</p>\r
-        <table class="form-as-table check-table">\r
-            <tr>\r
-                <td colspan="2">\r
-                    <strong>{% trans "On my subscriptions, notify me when:" %}</strong>\r
-                </td>\r
-            </tr>\r
-            <tr>\r
-                <td>\r
-                    {{ form.notify_answers }}{% trans "An answer is posted" %}\r
-                </td>\r
-                <td>\r
-                    {{ form.notify_comments_own_post }}{% trans "A comment on one of my posts is posted" %}\r
-                </td>\r
-            </tr>\r
-            <tr>\r
-                <td>\r
-                    {{ form.notify_comments }}{% trans "A comment is posted" %}\r
-                </td>\r
-                <td>\r
-                    {{ form.notify_accepted }}{% trans "An answer is accepted" %}\r
-                </td>\r
-            </tr>\r
-        </table>\r
-        <p>&nbsp;</p>\r
-        <table class="form-as-table check-table">\r
-            <tr>\r
-                <td>\r
-                    <strong>{% trans "More:" %}</strong>\r
-                </td>\r
-            </tr>\r
-            <tr>\r
-                <td>\r
-                    {{ form.notify_reply_to_comments }}{% trans "Notify me when someone replies to one of my comments on any post using the <pre>@username</pre> notation" %}\r
-                </td>\r
-            </tr>\r
-            <tr>\r
-                <td>\r
-                    {{ form.send_digest }}{% trans "Send me the daily digest with information about the site activity" %}\r
-                </td>\r
-            </tr>\r
-        </table>\r
-        <div class="submit-row">\r
-            <input type="submit" class="submit" name="save" value="{% trans "Update" %}"/>\r
-            {% if notificatons_on %}\r
-            <input type="submit" class="submit" name="notswitch" value="{% trans "Stop notifications" %}"/>\r
-            {% else %}\r
-            <input type="submit" class="submit" name="notswitch" value="{% trans "Start notifications" %}"/>            \r
-            {% endif %}\r
-        </div>\r
-    </form>\r
-    </div>\r
-{% endblock %}\r
-<!-- end user_subscriptions.html -->\r
+{% extends "user.html" %}
+<!-- user_subscriptions.html -->
+{% load i18n %}
+{% load extra_tags %}
+{% load humanize %}
+
+{% block userjs %}
+    <script type="text/javascript">
+        function enableSettings() {
+            $("div#subscriptions_settings").show();
+            $("div#subscriptions_management").hide();
+
+            $("div#subscriptions_settings_button").context.activeElement.className = 'on';
+            $("div#subscriptions_management_button").context.activeElement.className = '';
+
+            //location.reload(true);
+        }
+
+        function enableManagement() {
+            $("div#subscriptions_settings").hide();
+            $("div#subscriptions_management").show();
+
+            $("div#subscriptions_settings_button").context.activeElement.className = '';
+            $("div#subscriptions_management_button").context.activeElement.className = 'on';
+
+            //location.reload(true);
+        }
+    </script>
+{% endblock %}
+
+{% block usercontent %}
+    <br/>
+
+    <div id="navBar"><div class="tabsA">
+        <a HREF="javascript:enableSettings()" id="subscriptions_settings_button">Settings</a>
+        <a HREF="javascript:enableManagement()" id="subscriptions_management_button">Remove</a>
+    </div></div>
+
+    <br/>
+    <div id="subscriptions_settings" {% if manage_open %} style="display:none" {% endif %}>
+        {% include "users/subscriptions_settings.html" %}
+    </div>
+    <div id="subscriptions_management" {% if not manage_open %} style="display:none" {% endif %}>
+        {% include "users/subscriptions_management.html" %}
+    </div>
+{% endblock %}
+<!-- end user_subscriptions.html -->
diff --git a/forum/skins/default/templates/users/subscriptions_management.html b/forum/skins/default/templates/users/subscriptions_management.html
new file mode 100644 (file)
index 0000000..f0f7e9b
--- /dev/null
@@ -0,0 +1,29 @@
+{% load i18n %}
+{% load question_list_tags %}
+
+<br />
+<br />
+
+<div id="subscription_list" align="left">
+    <h2>
+        {% trans "Notifications and subscription settings" %}
+        <span style="font-size:11px">
+            {% if auto %}
+                <a href='{% url user_subscriptions id=view_user.id slug=view_user.username|slugify %}?auto=False'>{% trans "don't show auto-subscribe" %}</a>
+            {% else %}
+                <a href='{% url user_subscriptions id=view_user.id slug=view_user.username|slugify %}?auto=True'>{% trans "show auto-subscribe" %}</a>
+            {% endif %}
+        </span>
+    </h2>
+
+    {% for subscription in subscriptions.paginator.page %}
+        {% subscription_list_item subscription %}
+    {% endfor %}
+
+    <div class="pager">{{ subscriptions.paginator.page_numbers }}</div>
+</div>
+
+<br />
+<br />
+
+<!-- end user_subscriptions.html -->
diff --git a/forum/skins/default/templates/users/subscriptions_settings.html b/forum/skins/default/templates/users/subscriptions_settings.html
new file mode 100644 (file)
index 0000000..9c88602
--- /dev/null
@@ -0,0 +1,127 @@
+{% load i18n %}\r
+{% load extra_tags %}\r
+{% load humanize %}\r
+\r
+<h2>{% trans "Notifications and subscription settings" %}</h2>\r
+<p class="message">\r
+    {% blocktrans %}\r
+    Here you can decide which types of notifications you wish to receive, and their frequency.<br />\r
+    {% endblocktrans %}\r
+    {% if notificatons_on %}\r
+    {% blocktrans %}\r
+    Currently you have notifications enabled. You can always stop all notifications without losing your settings and restart them afterwards.<br />\r
+    {% endblocktrans %}\r
+    {% else %}\r
+    {% blocktrans %}\r
+    Currently you have notifications disabled. You can enable them by clicking on the <strong>Start notifications</strong> button below.<br />\r
+    {% endblocktrans %}\r
+    {% endif %}\r
+</p>\r
+<div class='inline-block'>\r
+<form method="POST">\r
+    {{ form.errors }}\r
+    <table class="form-as-table">\r
+        <tr>\r
+            <td colspan="2">\r
+                <strong>{% trans "Notify me when:" %}</strong>\r
+            </td>\r
+        </tr>\r
+        <tr>\r
+            <td>{% trans "A new member joins" %}</td>\r
+            <td>{{ form.member_joins }}</td>\r
+        </tr>\r
+        <tr>\r
+            <td>{% trans "A new question is posted" %}</td>\r
+            <td>{{ form.new_question }}</td>\r
+        </tr>\r
+        <tr>\r
+            <td>{% trans "A new question matching my interesting tags is posted" %}</td>\r
+            <td>{{ form.new_question_watched_tags }}</td>\r
+        </tr>\r
+        <tr>\r
+            <td>{% trans "There's an update on one of my subscriptions" %}</td>\r
+            <td >{{ form.subscribed_questions }}</td>\r
+        </tr>\r
+    </table>\r
+    <p>&nbsp;</p>\r
+    <table class="form-as-table check-table">\r
+        <tr>\r
+            <td colspan="3">\r
+                <strong>{% trans "Auto subscribe me to:" %}</strong>\r
+            </td>\r
+        </tr>\r
+        <tr>\r
+            <td>\r
+                {{ form.questions_asked }}{% trans "Questions I ask" %}\r
+            </td>\r
+            <td>\r
+                {{ form.questions_answered }}{% trans "Questions I answer" %}\r
+            </td>\r
+            <td>\r
+                {{ form.questions_commented }}{% trans "Questions I comment" %}\r
+            </td>\r
+        </tr>\r
+        <tr>\r
+            <td>\r
+                {{ form.questions_viewed }}{% trans "Questions I view" %}\r
+            </td>\r
+            <td>\r
+                {{ form.all_questions_watched_tags }}{% trans "All questions matching my interesting tags" %}\r
+            </td>\r
+            <td>\r
+                {{ form.all_questions }}{% trans "All questions" %}\r
+            </td>\r
+        </tr>\r
+    </table>\r
+    <p>&nbsp;</p>\r
+    <table class="form-as-table check-table">\r
+        <tr>\r
+            <td colspan="2">\r
+                <strong>{% trans "On my subscriptions, notify me when:" %}</strong>\r
+            </td>\r
+        </tr>\r
+        <tr>\r
+            <td>\r
+                {{ form.notify_answers }}{% trans "An answer is posted" %}\r
+            </td>\r
+            <td>\r
+                {{ form.notify_comments_own_post }}{% trans "A comment on one of my posts is posted" %}\r
+            </td>\r
+        </tr>\r
+        <tr>\r
+            <td>\r
+                {{ form.notify_comments }}{% trans "A comment is posted" %}\r
+            </td>\r
+            <td>\r
+                {{ form.notify_accepted }}{% trans "An answer is accepted" %}\r
+            </td>\r
+        </tr>\r
+    </table>\r
+    <p>&nbsp;</p>\r
+    <table class="form-as-table check-table">\r
+        <tr>\r
+            <td>\r
+                <strong>{% trans "More:" %}</strong>\r
+            </td>\r
+        </tr>\r
+        <tr>\r
+            <td>\r
+                {{ form.notify_reply_to_comments }}{% trans "Notify me when someone replies to one of my comments on any post using the <pre>@username</pre> notation" %}\r
+            </td>\r
+        </tr>\r
+        <tr>\r
+            <td>\r
+                {{ form.send_digest }}{% trans "Send me the daily digest with information about the site activity" %}\r
+            </td>\r
+        </tr>\r
+    </table>\r
+    <div class="submit-row">\r
+        <input type="submit" class="submit" name="save" value="{% trans "Update" %}"/>\r
+        {% if notificatons_on %}\r
+        <input type="submit" class="submit" name="notswitch" value="{% trans "Stop notifications" %}"/>\r
+        {% else %}\r
+        <input type="submit" class="submit" name="notswitch" value="{% trans "Start notifications" %}"/>\r
+        {% endif %}\r
+    </div>\r
+</form>\r
+</div>\r
index 60cbd7f25649c575c789028f2514cb6103840a58..41c2539b9007a09615bcc8cb134ca1fb2545c90f 100644 (file)
@@ -21,11 +21,28 @@ class QuestionItemNode(template.Node):
             'signature_type': self.options.get('signature_type', 'lite'),\r
         }))\r
 \r
+class SubscriptionItemNode(template.Node):\r
+    template = template.loader.get_template('question_list/subscription_item.html')\r
+\r
+    def __init__(self, question, options):\r
+        self.question = template.Variable(question)\r
+        self.options = options\r
+\r
+    def render(self, context):\r
+        return self.template.render(template.Context({\r
+            'question': self.question.resolve(context),\r
+            'signature_type': self.options.get('signature_type', 'lite'),\r
+        }))\r
+\r
 @register.tag\r
 def question_list_item(parser, token):\r
     tokens = token.split_contents()[1:]\r
     return QuestionItemNode(tokens[0], argument_parser(tokens[1:]))\r
-    \r
+\r
+@register.tag\r
+def subscription_list_item(parser, token):\r
+    tokens = token.split_contents()[1:]\r
+    return SubscriptionItemNode(tokens[0], argument_parser(tokens[1:]))\r
 \r
 @register.inclusion_tag('question_list/sort_tabs.html')\r
 def question_sort_tabs(sort_context):\r
index c7421e94c8a740c84e0e1d670403aeb831eb4869..5cb6594d859024e0c3493c8bced8a4788b059562 100644 (file)
@@ -69,7 +69,7 @@ urlpatterns += patterns('',
                             kwargs=dict(close=True), name='close'),
                         url(r'^%s(?P<id>\d+)/%s$' % (_('questions/'), _('reopen/')), app.commands.close,
                             kwargs=dict(close=False), name='reopen'),
-                        url(r'^%s(?P<id>\d+)/%s$' % (_('questions/'), _('answer/')), app.writers.answer, name='answer'),                        
+                        url(r'^%s(?P<id>\d+)/%s$' % (_('questions/'), _('answer/')), app.writers.answer, name='answer'),
                         url(r'^%s(?P<action>\w+)/$' % _('pending-data/'), app.writers.manage_pending_data, name='manage_pending_data'),
 
                         url(r'^%s(?P<id>\d+)/(?P<vote_type>[a-z]+)/' % _('vote/'), app.commands.vote_post,
@@ -115,6 +115,9 @@ urlpatterns += patterns('',
 
 
                         url(r'^%s$' % _('users/'), app.users.users, name='users'),
+                        url(r'^%s$' % _('online_users/'), app.users.online_users, name='online_users'),
+
+
                         url(r'^%s(?P<id>\d+)/%s$' % (_('users/'), _('edit/')), app.users.edit_user, name='edit_user'),
                         url(r'^%s(?P<id>\d+)/%s$' % (_('users/'), _('award/')), app.users.award_points,
                             name='user_award_points'),
@@ -135,7 +138,6 @@ urlpatterns += patterns('',
                         url(r'^%s(?P<id>\d+)/(?P<slug>.+)/%s$' % (_('users/'), _('recent/')), app.users.user_recent,
                             name='user_recent'),
                         url(r'^%s(?P<id>\d+)/(?P<slug>.+)/$' % _('users/'), app.users.user_profile, name='user_profile'),
-
                         url(r'^%s$' % _('badges/'), app.meta.badges, name='badges'),
                         url(r'^%s(?P<id>\d+)/(?P<slug>.+)$' % _('badges/'), app.meta.badge, name='badge'),
                         # (r'^admin/doc/' % _('admin/doc'), include('django.contrib.admindocs.urls')),
@@ -199,5 +201,5 @@ urlpatterns += patterns('',
 
                         url(r'^feeds/rss[/]?$', app.readers.feed, name="latest_questions_feed"),
 
-                        url(r'^(?P<path>.+)$', app.meta.page, name="static_page")
+                        url(r'^(?P<path>.+)$', app.meta.page, name="static_page"),
                         )
index 306747a6d746570ccaa117d45fbc8f8c20b4cb84..b736e03b17122758a2e155e9998dacbe4e2a49fc 100644 (file)
@@ -18,13 +18,13 @@ from forum.forms import *
 from forum.utils.html import sanitize_html\r
 from forum.modules import decorate\r
 from datetime import datetime, date\r
-import decorators\r
 from forum.actions import EditProfileAction, FavoriteAction, BonusRepAction, SuspendAction\r
 from forum.modules import ui\r
 from forum.utils import pagination\r
 from forum.views.readers import QuestionListPaginatorContext, AnswerPaginatorContext\r
 \r
 import time\r
+import datetime\r
 import decorators\r
 \r
 class UserReputationSort(pagination.SimpleSort):\r
@@ -40,6 +40,10 @@ class UserListPaginatorContext(pagination.PaginatorContext):
             (_('name'), pagination.SimpleSort(_('by username'), 'username', _("sorted by username"))),\r
         ), pagesizes=(20, 35, 60))\r
 \r
+class SubscriptionListPaginatorContext(pagination.PaginatorContext):\r
+    def __init__(self):\r
+        super (SubscriptionListPaginatorContext, self).__init__('SUBSCRIPTION_LIST', pagesizes=(5, 10, 20), default_pagesize=20)\r
+\r
 class UserAnswersPaginatorContext(pagination.PaginatorContext):\r
     def __init__(self):\r
         super (UserAnswersPaginatorContext, self).__init__('USER_ANSWER_LIST', sort_methods=(\r
@@ -64,6 +68,20 @@ def users(request):
     })\r
 \r
 \r
+@decorators.render('users/online_users.html', 'online_users', _('Online Users'), weight=200)\r
+def online_users(request):\r
+    suser = request.REQUEST.get('q', "")\r
+\r
+    one_hour_ago = datetime.datetime.now() - datetime.timedelta(hours=1)\r
+    sql_datetime = datetime.datetime.strftime(one_hour_ago, '%Y-%m-%d %H:%M:%S')\r
+    users = User.objects.order_by('-last_seen')\r
+\r
+    return pagination.paginated(request, ('users', UserListPaginatorContext()), {\r
+        "users" : users,\r
+        "suser" : suser,\r
+    })\r
+\r
+\r
 @login_required\r
 def edit_user(request, id):\r
     user = get_object_or_404(User, id=id)\r
@@ -299,11 +317,25 @@ def user_favorites(request, user):
 \r
     return {"favorites" : favorites, "view_user" : user}\r
 \r
-@user_view('users/subscriptions.html', 'subscriptions', _('subscription settings'), _('subscriptions'), True, tabbed=False)\r
+@user_view('users/subscriptions.html', 'subscriptions', _('subscription'), _('subscriptions'), True, tabbed=False)\r
 def user_subscriptions(request, user):\r
     enabled = user.subscription_settings.enable_notifications\r
+    auto = request.GET.get('auto', 'True')\r
+    show_auto = True\r
+    manage_open = False\r
+    \r
+    if len(request.GET) > 0:\r
+        manage_open = True\r
+        \r
+    if auto == 'True':\r
+        show_auto = True\r
+        subscriptions = user.subscriptions.all().order_by('-questionsubscription__last_view')\r
+    else:\r
+        show_auto = False\r
+        subscriptions = user.subscriptions.filter(questionsubscription__auto_subscription=False).order_by('-questionsubscription__last_view')\r
 \r
-    if request.method == 'POST':        \r
+    if request.method == 'POST':\r
+        manage_open = False\r
         form = SubscriptionSettingsForm(data=request.POST, instance=user.subscription_settings)\r
 \r
         if form.is_valid():\r
@@ -325,7 +357,14 @@ def user_subscriptions(request, user):
     else:\r
         form = SubscriptionSettingsForm(instance=user.subscription_settings)\r
 \r
-    return {'view_user':user, 'notificatons_on': enabled, 'form':form}\r
+    return pagination.paginated(request, ('subscriptions', SubscriptionListPaginatorContext()), {\r
+        'subscriptions':subscriptions,\r
+        'view_user':user,\r
+        'notificatons_on': enabled,\r
+        'form':form,\r
+        "auto":show_auto,\r
+        "manage_open":manage_open\r
+    })\r
 \r
 @user_view('users/preferences.html', 'preferences', _('preferences'), _('preferences'), True, tabbed=False)\r
 def user_preferences(request, user):\r
@@ -356,4 +395,3 @@ def account_settings(request):
     'msg': msg,\r
     'is_openid': is_openid\r
     }, context_instance=RequestContext(request))\r
-\r