| 1 | {# |
| 2 | # GNU MediaGoblin -- federated, autonomous media hosting |
| 3 | # Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. |
| 4 | # |
| 5 | # This program is free software: you can redistribute it and/or modify |
| 6 | # it under the terms of the GNU Affero General Public License as published by |
| 7 | # the Free Software Foundation, either version 3 of the License, or |
| 8 | # (at your option) any later version. |
| 9 | # |
| 10 | # This program is distributed in the hope that it will be useful, |
| 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 13 | # GNU Affero General Public License for more details. |
| 14 | # |
| 15 | # You should have received a copy of the GNU Affero General Public License |
| 16 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 17 | -#} |
| 18 | <!doctype html> |
| 19 | |
| 20 | <html |
| 21 | {% block mediagoblin_html_tag %} |
| 22 | {% endblock mediagoblin_html_tag %} |
| 23 | {% if is_rtl -%} |
| 24 | dir="rtl" |
| 25 | {%- endif -%} |
| 26 | > |
| 27 | <head> |
| 28 | <meta charset="utf-8"> |
| 29 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| 30 | {% if app_config['no_referrer'] -%} |
| 31 | <meta name="referrer" content="no-referrer"> |
| 32 | {%- endif %} |
| 33 | <meta http-equiv="X-UA-Compatible" content="IE=Edge"> |
| 34 | <title>{% block title %}{{ app_config['html_title'] }}{% endblock %}</title> |
| 35 | <link rel="stylesheet" type="text/css" |
| 36 | href="{{ request.staticdirect('/css/extlib/reset.css') }}"/> |
| 37 | <link rel="stylesheet" type="text/css" |
| 38 | href="{{ request.staticdirect('/css/extlib/skeleton.css') }}"/> |
| 39 | <link rel="stylesheet" type="text/css" |
| 40 | href="{{ request.staticdirect('/css/base.css') }}"/> |
| 41 | <link rel="shortcut icon" |
| 42 | href="{{ request.staticdirect('/images/goblin.ico') }}" /> |
| 43 | <script type="text/javascript" |
| 44 | src="{{ request.staticdirect('/js/extlib/jquery.js') }}"></script> |
| 45 | <script type="text/javascript" |
| 46 | src="{{ request.staticdirect('/js/header_dropdown.js') }}"></script> |
| 47 | <script type="text/javascript" |
| 48 | src="{{ request.staticdirect('/js/notifications.js') }}"></script> |
| 49 | <script> |
| 50 | var mark_all_comments_seen_url = "{{ request.urlgen('mediagoblin.notifications.mark_all_comment_notifications_seen') }}" |
| 51 | </script> |
| 52 | |
| 53 | {# For clarification, the difference between the extra_head.html template |
| 54 | # and the head template hook is that the former should be used by |
| 55 | # themes and the latter should be used by plugins. |
| 56 | # The reason is that only one thing can override extra_head.html... |
| 57 | # but multiple plugins can hook into the template hook. |
| 58 | #} |
| 59 | {% include "mediagoblin/extra_head.html" %} |
| 60 | {% template_hook("head") %} |
| 61 | |
| 62 | {% block mediagoblin_head %} |
| 63 | {% endblock mediagoblin_head %} |
| 64 | </head> |
| 65 | <body> |
| 66 | {% include 'mediagoblin/bits/body_start.html' %} |
| 67 | {% block mediagoblin_body %} |
| 68 | <div id="wrap"> |
| 69 | {% block mediagoblin_header %} |
| 70 | <div class="container"> |
| 71 | <header> |
| 72 | <div class="row foot"> |
| 73 | <div class="header_left"> |
| 74 | {%- include "mediagoblin/bits/logo.html" -%} |
| 75 | {% template_hook("header_left") %} |
| 76 | {% block mediagoblin_header_title %}{% endblock %} |
| 77 | </div> |
| 78 | <div class="header_right"> |
| 79 | {% template_hook("header_extra") %} |
| 80 | {%- if request.user %} |
| 81 | {% if request.user and |
| 82 | request.user.has_privilege('active') and |
| 83 | not request.user.is_banned() %} |
| 84 | |
| 85 | {% set notification_count = get_notification_count(request.user.id) %} |
| 86 | {% if notification_count %} |
| 87 | <a href="javascript:;" |
| 88 | class="notification-gem button_action button_info" |
| 89 | title="Notifications"> |
| 90 | {{ notification_count }}</a> |
| 91 | {% endif %} |
| 92 | <a href="javascript:;" |
| 93 | class="button_action header_dropdown_down" |
| 94 | aria-controls="header_dropdown">▼</a> |
| 95 | <a href="javascript:;" |
| 96 | class="button_action header_dropdown_up" |
| 97 | aria-controls="header_dropdown">▲</a> |
| 98 | {% elif request.user and not request.user.has_privilege('active') %} |
| 99 | {# the following link should only appear when verification is needed #} |
| 100 | <a href="{{ request.urlgen('mediagoblin.user_pages.user_home', |
| 101 | user=request.user.username) }}" |
| 102 | class="button_action_highlight"> |
| 103 | {% trans %}Verify your email!{% endtrans %}</a> |
| 104 | or <a id="logout" href= |
| 105 | {% if persona is not defined %} |
| 106 | "{{ request.urlgen('mediagoblin.auth.logout') }}" |
| 107 | {% else %} |
| 108 | "javascript:;" |
| 109 | {% endif %} |
| 110 | >{% trans %}log out{% endtrans %}</a> |
| 111 | {% elif request.user and request.user.is_banned() %} |
| 112 | <a id="logout" href= |
| 113 | {% if persona is not defined %} |
| 114 | "{{ request.urlgen('mediagoblin.auth.logout') }}" |
| 115 | {% else %} |
| 116 | "javascript:;" |
| 117 | {% endif %} |
| 118 | >{% trans %}log out{% endtrans %}</a> |
| 119 | {% endif %} |
| 120 | {%- elif auth %} |
| 121 | <a href= |
| 122 | {% if persona_auth is defined %} |
| 123 | "javascript:;" id="persona_login" |
| 124 | {% else %} |
| 125 | "{{ request.urlgen('mediagoblin.auth.login') }}" |
| 126 | {% endif %} |
| 127 | > |
| 128 | {%- trans %}Log in{% endtrans -%} |
| 129 | </a> |
| 130 | {%- endif %} |
| 131 | </div> |
| 132 | <div class="clear"></div> |
| 133 | {% if request.user and request.user.has_privilege('active') %} |
| 134 | <div id="header_dropdown"> |
| 135 | <p> |
| 136 | <span class="dropdown_title"> |
| 137 | {% trans user_url=request.urlgen('mediagoblin.user_pages.user_home', |
| 138 | user=request.user.username), |
| 139 | user_name=request.user.username -%} |
| 140 | <a href="{{ user_url }}">{{ user_name }}</a>'s account |
| 141 | {%- endtrans %} |
| 142 | </span> |
| 143 | · |
| 144 | <a href="{{ request.urlgen('mediagoblin.edit.account') }}">{%- trans %}Change account settings{% endtrans -%}</a> |
| 145 | · |
| 146 | <a href="{{ request.urlgen('mediagoblin.user_pages.processing_panel', |
| 147 | user=request.user.username) }}"> |
| 148 | {%- trans %}Media processing panel{% endtrans -%} |
| 149 | </a> |
| 150 | · |
| 151 | {% template_hook("blog_dashboard_home") %} |
| 152 | <a id="logout" href= |
| 153 | {% if persona is not defined %} |
| 154 | "{{ request.urlgen('mediagoblin.auth.logout') }}" |
| 155 | {% else %} |
| 156 | "javascript:;" |
| 157 | {% endif %} |
| 158 | >{% trans %}Log out{% endtrans %}</a> |
| 159 | </p> |
| 160 | <a class="button_action" href="{{ request.urlgen('mediagoblin.submit.start') }}"> |
| 161 | {%- trans %}Add media{% endtrans -%} |
| 162 | </a> |
| 163 | <a class="button_action" href="{{ request.urlgen('mediagoblin.submit.collection') }}"> |
| 164 | {%- trans %}Create new collection{% endtrans -%} |
| 165 | </a> |
| 166 | {% template_hook("header_dropdown_buttons") %} |
| 167 | {% if request.user.has_privilege('moderator') %} |
| 168 | <p> |
| 169 | <span class="dropdown_title">{% trans %}Moderation powers:{% endtrans %}</span> |
| 170 | <a href="{{ request.urlgen('mediagoblin.moderation.media_panel') }}"> |
| 171 | {%- trans %}Media processing panel{% endtrans -%} |
| 172 | </a> |
| 173 | · |
| 174 | <a href="{{ request.urlgen('mediagoblin.moderation.users') }}"> |
| 175 | {%- trans %}User management panel{% endtrans -%} |
| 176 | </a> |
| 177 | · |
| 178 | <a href="{{ request.urlgen('mediagoblin.moderation.reports') }}"> |
| 179 | {%- trans %}Report management panel{% endtrans -%} |
| 180 | </a> |
| 181 | {% template_hook("moderation_powers") %} |
| 182 | </p> |
| 183 | {% endif %} |
| 184 | {% include 'mediagoblin/fragments/header_notifications.html' %} |
| 185 | </div> |
| 186 | {% endif %} |
| 187 | </div><!-- end row --> |
| 188 | </header> |
| 189 | </div> |
| 190 | {% endblock %} |
| 191 | <div class="container"> |
| 192 | {% include 'mediagoblin/bits/above_content.html' %} |
| 193 | <div class="mediagoblin_content"> |
| 194 | {% include "mediagoblin/utils/messages.html" %} |
| 195 | {% block mediagoblin_content %} |
| 196 | {% endblock mediagoblin_content %} |
| 197 | {% if csrf_token is defined %} |
| 198 | {% template_hook("persona_form") %} |
| 199 | {% endif %} |
| 200 | </div> |
| 201 | </div> |
| 202 | </div> |
| 203 | <div class="container"> |
| 204 | {%- include "mediagoblin/bits/base_footer.html" %} |
| 205 | </div> |
| 206 | {%- endblock mediagoblin_body %} |
| 207 | {% include 'mediagoblin/bits/body_end.html' %} |
| 208 | </body> |
| 209 | </html> |