{#-
       Licensed to the Apache Software Foundation (ASF) under one
       or more contributor license agreements.  See the NOTICE file
       distributed with this work for additional information
       regarding copyright ownership.  The ASF licenses this file
       to you under the Apache License, Version 2.0 (the
       "License"); you may not use this file except in compliance
       with the License.  You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

       Unless required by applicable law or agreed to in writing,
       software distributed under the License is distributed on an
       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
       KIND, either express or implied.  See the License for the
       specific language governing permissions and limitations
       under the License.
-#}
{% set hide_left_bar = True %}
{% extends "allura:templates/user_account_base.html" %}

{% block title %}{{c.user.username}} / Preferences{% endblock %}

{% block header %}User Preferences for {{c.user.username}}{% endblock %}

{% block content %}
  {{ super() }}
  <h2>Subscriptions</h2>
  {% if subscriptions %}
    <p><em>Mark tools that you want to subscribe to. Unmark tools that you want to unsubscribe from. Press 'Save' button.</em></p>
        <div class="grid-24">
        {{c.form.display(action='update_subscriptions', value=dict(subscriptions=subscriptions, email_format=c.user.get_pref('email_format')))}}
        </div>
  {% else%}
    <p>No subscriptions.</p>
  {% endif %}

{% endblock %}
